From 16a0f0affa7a5538e0e1c96059298a60463dc3d6 Mon Sep 17 00:00:00 2001 From: minhn4 Date: Thu, 9 Jul 2026 10:10:04 +0700 Subject: [PATCH] feat: ship English and Spanish locales only Delete all locale dictionaries, docs translations, and the i18n parity test except en/es; trim every locale registry (app, desktop, console, stats, web, enterprise, ui consumers) to the two locales. Recorded in DIVERGENCES.md. Co-Authored-By: Claude Fable 5 --- DIVERGENCES.md | 6 +- packages/app/src/context/language.tsx | 108 +- packages/app/src/entry.tsx | 6 +- packages/app/src/i18n/ar.ts | 850 ------ packages/app/src/i18n/br.ts | 862 ------ packages/app/src/i18n/bs.ts | 938 ------ packages/app/src/i18n/da.ts | 932 ------ packages/app/src/i18n/de.ts | 874 ------ packages/app/src/i18n/fr.ts | 873 ------ packages/app/src/i18n/ja.ts | 856 ------ packages/app/src/i18n/ko.ts | 851 ------ packages/app/src/i18n/no.ts | 939 ------ packages/app/src/i18n/parity.test.ts | 33 - packages/app/src/i18n/pl.ts | 860 ------ packages/app/src/i18n/ru.ts | 941 ------ packages/app/src/i18n/th.ts | 928 ------ packages/app/src/i18n/tr.ts | 946 ------ packages/app/src/i18n/uk.ts | 970 ------- packages/app/src/i18n/zh.ts | 936 ------ packages/app/src/i18n/zht.ts | 920 ------ packages/console/app/src/component/footer.tsx | 7 +- packages/console/app/src/i18n/ar.ts | 819 ------ packages/console/app/src/i18n/br.ts | 832 ------ packages/console/app/src/i18n/da.ts | 825 ------ packages/console/app/src/i18n/de.ts | 832 ------ packages/console/app/src/i18n/fr.ts | 839 ------ packages/console/app/src/i18n/index.ts | 34 +- packages/console/app/src/i18n/it.ts | 828 ------ packages/console/app/src/i18n/ja.ts | 828 ------ packages/console/app/src/i18n/ko.ts | 819 ------ packages/console/app/src/i18n/no.ts | 826 ------ packages/console/app/src/i18n/pl.ts | 832 ------ packages/console/app/src/i18n/ru.ts | 836 ------ packages/console/app/src/i18n/th.ts | 822 ------ packages/console/app/src/i18n/tr.ts | 832 ------ packages/console/app/src/i18n/uk.ts | 790 ----- packages/console/app/src/i18n/zh.ts | 801 ------ packages/console/app/src/i18n/zht.ts | 800 ------ packages/console/app/src/lib/language.ts | 127 +- packages/desktop/src/renderer/i18n/ar.ts | 26 - packages/desktop/src/renderer/i18n/br.ts | 27 - packages/desktop/src/renderer/i18n/bs.ts | 28 - packages/desktop/src/renderer/i18n/da.ts | 28 - packages/desktop/src/renderer/i18n/de.ts | 28 - packages/desktop/src/renderer/i18n/fr.ts | 28 - packages/desktop/src/renderer/i18n/index.ts | 104 +- packages/desktop/src/renderer/i18n/ja.ts | 28 - packages/desktop/src/renderer/i18n/ko.ts | 27 - packages/desktop/src/renderer/i18n/no.ts | 28 - packages/desktop/src/renderer/i18n/pl.ts | 28 - packages/desktop/src/renderer/i18n/ru.ts | 27 - packages/desktop/src/renderer/i18n/uk.ts | 28 - packages/desktop/src/renderer/i18n/zh.ts | 26 - packages/desktop/src/renderer/i18n/zht.ts | 26 - packages/enterprise/src/app.tsx | 12 +- packages/stats/app/src/i18n.ts | 32 - packages/stats/app/src/i18n/ar.ts | 234 -- packages/stats/app/src/i18n/br.ts | 236 -- packages/stats/app/src/i18n/da.ts | 235 -- packages/stats/app/src/i18n/de.ts | 236 -- packages/stats/app/src/i18n/fr.ts | 237 -- packages/stats/app/src/i18n/it.ts | 236 -- packages/stats/app/src/i18n/ja.ts | 237 -- packages/stats/app/src/i18n/ko.ts | 237 -- packages/stats/app/src/i18n/no.ts | 235 -- packages/stats/app/src/i18n/pl.ts | 234 -- packages/stats/app/src/i18n/ru.ts | 236 -- packages/stats/app/src/i18n/th.ts | 236 -- packages/stats/app/src/i18n/tr.ts | 236 -- packages/stats/app/src/i18n/uk.ts | 236 -- packages/stats/app/src/i18n/zh.ts | 235 -- packages/stats/app/src/i18n/zht.ts | 235 -- packages/ui/src/i18n/ar.ts | 168 -- packages/ui/src/i18n/br.ts | 168 -- packages/ui/src/i18n/bs.ts | 172 -- packages/ui/src/i18n/da.ts | 167 -- packages/ui/src/i18n/de.ts | 173 -- packages/ui/src/i18n/fr.ts | 168 -- packages/ui/src/i18n/ja.ts | 167 -- packages/ui/src/i18n/ko.ts | 168 -- packages/ui/src/i18n/no.ts | 171 -- packages/ui/src/i18n/pl.ts | 167 -- packages/ui/src/i18n/ru.ts | 167 -- packages/ui/src/i18n/th.ts | 169 -- packages/ui/src/i18n/tr.ts | 174 -- packages/ui/src/i18n/uk.ts | 167 -- packages/ui/src/i18n/zh.ts | 171 -- packages/ui/src/i18n/zht.ts | 171 -- packages/web/astro.config.mjs | 80 - packages/web/src/content/docs/ar/acp.mdx | 156 - packages/web/src/content/docs/ar/agents.mdx | 754 ----- packages/web/src/content/docs/ar/cli.mdx | 616 ---- packages/web/src/content/docs/ar/commands.mdx | 322 --- packages/web/src/content/docs/ar/config.mdx | 685 ----- .../web/src/content/docs/ar/custom-tools.mdx | 196 -- .../web/src/content/docs/ar/ecosystem.mdx | 78 - .../web/src/content/docs/ar/enterprise.mdx | 165 -- .../web/src/content/docs/ar/formatters.mdx | 131 - packages/web/src/content/docs/ar/github.mdx | 321 --- packages/web/src/content/docs/ar/gitlab.mdx | 195 -- packages/web/src/content/docs/ar/go.mdx | 197 -- packages/web/src/content/docs/ar/ide.mdx | 48 - packages/web/src/content/docs/ar/index.mdx | 344 --- packages/web/src/content/docs/ar/keybinds.mdx | 194 -- packages/web/src/content/docs/ar/lsp.mdx | 207 -- .../web/src/content/docs/ar/mcp-servers.mdx | 511 ---- packages/web/src/content/docs/ar/models.mdx | 222 -- packages/web/src/content/docs/ar/network.mdx | 57 - .../web/src/content/docs/ar/permissions.mdx | 235 -- packages/web/src/content/docs/ar/plugins.mdx | 385 --- .../web/src/content/docs/ar/providers.mdx | 1983 ------------- packages/web/src/content/docs/ar/rules.mdx | 180 -- packages/web/src/content/docs/ar/sdk.mdx | 463 --- packages/web/src/content/docs/ar/server.mdx | 287 -- packages/web/src/content/docs/ar/share.mdx | 127 - packages/web/src/content/docs/ar/skills.mdx | 222 -- packages/web/src/content/docs/ar/themes.mdx | 369 --- packages/web/src/content/docs/ar/tools.mdx | 341 --- .../src/content/docs/ar/troubleshooting.mdx | 299 -- packages/web/src/content/docs/ar/tui.mdx | 426 --- packages/web/src/content/docs/ar/web.mdx | 142 - .../web/src/content/docs/ar/windows-wsl.mdx | 113 - packages/web/src/content/docs/ar/zen.mdx | 306 -- packages/web/src/content/docs/bs/acp.mdx | 156 - packages/web/src/content/docs/bs/agents.mdx | 754 ----- packages/web/src/content/docs/bs/cli.mdx | 614 ---- packages/web/src/content/docs/bs/commands.mdx | 316 -- packages/web/src/content/docs/bs/config.mdx | 685 ----- .../web/src/content/docs/bs/custom-tools.mdx | 195 -- .../web/src/content/docs/bs/ecosystem.mdx | 78 - .../web/src/content/docs/bs/enterprise.mdx | 165 -- .../web/src/content/docs/bs/formatters.mdx | 124 - packages/web/src/content/docs/bs/github.mdx | 311 -- packages/web/src/content/docs/bs/gitlab.mdx | 188 -- packages/web/src/content/docs/bs/go.mdx | 211 -- packages/web/src/content/docs/bs/ide.mdx | 47 - packages/web/src/content/docs/bs/index.mdx | 323 --- packages/web/src/content/docs/bs/keybinds.mdx | 194 -- packages/web/src/content/docs/bs/lsp.mdx | 204 -- .../web/src/content/docs/bs/mcp-servers.mdx | 482 ---- packages/web/src/content/docs/bs/models.mdx | 201 -- packages/web/src/content/docs/bs/network.mdx | 51 - .../web/src/content/docs/bs/permissions.mdx | 228 -- packages/web/src/content/docs/bs/plugins.mdx | 371 --- .../web/src/content/docs/bs/providers.mdx | 1993 ------------- packages/web/src/content/docs/bs/rules.mdx | 180 -- packages/web/src/content/docs/bs/sdk.mdx | 463 --- packages/web/src/content/docs/bs/server.mdx | 284 -- packages/web/src/content/docs/bs/share.mdx | 127 - packages/web/src/content/docs/bs/skills.mdx | 222 -- packages/web/src/content/docs/bs/themes.mdx | 369 --- packages/web/src/content/docs/bs/tools.mdx | 341 --- .../src/content/docs/bs/troubleshooting.mdx | 300 -- packages/web/src/content/docs/bs/tui.mdx | 432 --- packages/web/src/content/docs/bs/web.mdx | 142 - .../web/src/content/docs/bs/windows-wsl.mdx | 113 - packages/web/src/content/docs/bs/zen.mdx | 324 --- packages/web/src/content/docs/da/acp.mdx | 156 - packages/web/src/content/docs/da/agents.mdx | 755 ----- packages/web/src/content/docs/da/cli.mdx | 617 ---- packages/web/src/content/docs/da/commands.mdx | 323 --- packages/web/src/content/docs/da/config.mdx | 688 ----- .../web/src/content/docs/da/custom-tools.mdx | 196 -- .../web/src/content/docs/da/ecosystem.mdx | 78 - .../web/src/content/docs/da/enterprise.mdx | 170 -- .../web/src/content/docs/da/formatters.mdx | 131 - packages/web/src/content/docs/da/github.mdx | 321 --- packages/web/src/content/docs/da/gitlab.mdx | 195 -- packages/web/src/content/docs/da/go.mdx | 211 -- packages/web/src/content/docs/da/ide.mdx | 48 - packages/web/src/content/docs/da/index.mdx | 360 --- packages/web/src/content/docs/da/keybinds.mdx | 194 -- packages/web/src/content/docs/da/lsp.mdx | 208 -- .../web/src/content/docs/da/mcp-servers.mdx | 511 ---- packages/web/src/content/docs/da/models.mdx | 223 -- packages/web/src/content/docs/da/network.mdx | 57 - .../web/src/content/docs/da/permissions.mdx | 235 -- packages/web/src/content/docs/da/plugins.mdx | 389 --- .../web/src/content/docs/da/providers.mdx | 1981 ------------- packages/web/src/content/docs/da/rules.mdx | 180 -- packages/web/src/content/docs/da/sdk.mdx | 463 --- packages/web/src/content/docs/da/server.mdx | 287 -- packages/web/src/content/docs/da/share.mdx | 128 - packages/web/src/content/docs/da/skills.mdx | 222 -- packages/web/src/content/docs/da/themes.mdx | 369 --- packages/web/src/content/docs/da/tools.mdx | 341 --- .../src/content/docs/da/troubleshooting.mdx | 300 -- packages/web/src/content/docs/da/tui.mdx | 426 --- packages/web/src/content/docs/da/web.mdx | 142 - .../web/src/content/docs/da/windows-wsl.mdx | 113 - packages/web/src/content/docs/da/zen.mdx | 319 --- packages/web/src/content/docs/de/acp.mdx | 156 - packages/web/src/content/docs/de/agents.mdx | 741 ----- packages/web/src/content/docs/de/cli.mdx | 616 ---- packages/web/src/content/docs/de/commands.mdx | 323 --- packages/web/src/content/docs/de/config.mdx | 684 ----- .../web/src/content/docs/de/custom-tools.mdx | 170 -- .../web/src/content/docs/de/ecosystem.mdx | 78 - .../web/src/content/docs/de/enterprise.mdx | 170 -- .../web/src/content/docs/de/formatters.mdx | 131 - packages/web/src/content/docs/de/github.mdx | 321 --- packages/web/src/content/docs/de/gitlab.mdx | 195 -- packages/web/src/content/docs/de/go.mdx | 199 -- packages/web/src/content/docs/de/ide.mdx | 48 - packages/web/src/content/docs/de/index.mdx | 356 --- packages/web/src/content/docs/de/keybinds.mdx | 194 -- packages/web/src/content/docs/de/lsp.mdx | 207 -- .../web/src/content/docs/de/mcp-servers.mdx | 511 ---- packages/web/src/content/docs/de/models.mdx | 223 -- packages/web/src/content/docs/de/network.mdx | 57 - .../web/src/content/docs/de/permissions.mdx | 235 -- packages/web/src/content/docs/de/plugins.mdx | 384 --- .../web/src/content/docs/de/providers.mdx | 1987 ------------- packages/web/src/content/docs/de/rules.mdx | 190 -- packages/web/src/content/docs/de/sdk.mdx | 465 --- packages/web/src/content/docs/de/server.mdx | 291 -- packages/web/src/content/docs/de/share.mdx | 130 - packages/web/src/content/docs/de/skills.mdx | 222 -- packages/web/src/content/docs/de/themes.mdx | 372 --- packages/web/src/content/docs/de/tools.mdx | 352 --- .../src/content/docs/de/troubleshooting.mdx | 300 -- packages/web/src/content/docs/de/tui.mdx | 429 --- packages/web/src/content/docs/de/web.mdx | 142 - .../web/src/content/docs/de/windows-wsl.mdx | 115 - packages/web/src/content/docs/de/zen.mdx | 301 -- packages/web/src/content/docs/fr/acp.mdx | 156 - packages/web/src/content/docs/fr/agents.mdx | 755 ----- packages/web/src/content/docs/fr/cli.mdx | 617 ---- packages/web/src/content/docs/fr/commands.mdx | 322 --- packages/web/src/content/docs/fr/config.mdx | 686 ----- .../web/src/content/docs/fr/custom-tools.mdx | 170 -- .../web/src/content/docs/fr/ecosystem.mdx | 78 - .../web/src/content/docs/fr/enterprise.mdx | 165 -- .../web/src/content/docs/fr/formatters.mdx | 131 - packages/web/src/content/docs/fr/github.mdx | 322 --- packages/web/src/content/docs/fr/gitlab.mdx | 195 -- packages/web/src/content/docs/fr/go.mdx | 197 -- packages/web/src/content/docs/fr/ide.mdx | 48 - packages/web/src/content/docs/fr/index.mdx | 344 --- packages/web/src/content/docs/fr/keybinds.mdx | 194 -- packages/web/src/content/docs/fr/lsp.mdx | 208 -- .../web/src/content/docs/fr/mcp-servers.mdx | 511 ---- packages/web/src/content/docs/fr/models.mdx | 222 -- packages/web/src/content/docs/fr/network.mdx | 57 - .../web/src/content/docs/fr/permissions.mdx | 235 -- packages/web/src/content/docs/fr/plugins.mdx | 384 --- .../web/src/content/docs/fr/providers.mdx | 1996 ------------- packages/web/src/content/docs/fr/rules.mdx | 180 -- packages/web/src/content/docs/fr/sdk.mdx | 463 --- packages/web/src/content/docs/fr/server.mdx | 287 -- packages/web/src/content/docs/fr/share.mdx | 128 - packages/web/src/content/docs/fr/skills.mdx | 222 -- packages/web/src/content/docs/fr/themes.mdx | 369 --- packages/web/src/content/docs/fr/tools.mdx | 341 --- .../src/content/docs/fr/troubleshooting.mdx | 300 -- packages/web/src/content/docs/fr/tui.mdx | 429 --- packages/web/src/content/docs/fr/web.mdx | 142 - .../web/src/content/docs/fr/windows-wsl.mdx | 113 - packages/web/src/content/docs/fr/zen.mdx | 301 -- packages/web/src/content/docs/it/acp.mdx | 155 - packages/web/src/content/docs/it/agents.mdx | 753 ----- packages/web/src/content/docs/it/cli.mdx | 617 ---- packages/web/src/content/docs/it/commands.mdx | 322 --- packages/web/src/content/docs/it/config.mdx | 685 ----- .../web/src/content/docs/it/custom-tools.mdx | 196 -- .../web/src/content/docs/it/ecosystem.mdx | 78 - .../web/src/content/docs/it/enterprise.mdx | 165 -- .../web/src/content/docs/it/formatters.mdx | 132 - packages/web/src/content/docs/it/github.mdx | 321 --- packages/web/src/content/docs/it/gitlab.mdx | 195 -- packages/web/src/content/docs/it/go.mdx | 209 -- packages/web/src/content/docs/it/ide.mdx | 48 - packages/web/src/content/docs/it/index.mdx | 344 --- packages/web/src/content/docs/it/keybinds.mdx | 194 -- packages/web/src/content/docs/it/lsp.mdx | 208 -- .../web/src/content/docs/it/mcp-servers.mdx | 511 ---- packages/web/src/content/docs/it/models.mdx | 222 -- packages/web/src/content/docs/it/network.mdx | 57 - .../web/src/content/docs/it/permissions.mdx | 235 -- packages/web/src/content/docs/it/plugins.mdx | 388 --- .../web/src/content/docs/it/providers.mdx | 1964 ------------- packages/web/src/content/docs/it/rules.mdx | 180 -- packages/web/src/content/docs/it/sdk.mdx | 463 --- packages/web/src/content/docs/it/server.mdx | 284 -- packages/web/src/content/docs/it/share.mdx | 127 - packages/web/src/content/docs/it/skills.mdx | 222 -- packages/web/src/content/docs/it/themes.mdx | 369 --- packages/web/src/content/docs/it/tools.mdx | 341 --- .../src/content/docs/it/troubleshooting.mdx | 299 -- packages/web/src/content/docs/it/tui.mdx | 426 --- packages/web/src/content/docs/it/web.mdx | 142 - .../web/src/content/docs/it/windows-wsl.mdx | 113 - packages/web/src/content/docs/it/zen.mdx | 319 --- packages/web/src/content/docs/ja/acp.mdx | 155 - packages/web/src/content/docs/ja/agents.mdx | 751 ----- packages/web/src/content/docs/ja/cli.mdx | 616 ---- packages/web/src/content/docs/ja/commands.mdx | 322 --- packages/web/src/content/docs/ja/config.mdx | 684 ----- .../web/src/content/docs/ja/custom-tools.mdx | 196 -- .../web/src/content/docs/ja/ecosystem.mdx | 78 - .../web/src/content/docs/ja/enterprise.mdx | 166 -- .../web/src/content/docs/ja/formatters.mdx | 132 - packages/web/src/content/docs/ja/github.mdx | 322 --- packages/web/src/content/docs/ja/gitlab.mdx | 195 -- packages/web/src/content/docs/ja/go.mdx | 197 -- packages/web/src/content/docs/ja/ide.mdx | 48 - packages/web/src/content/docs/ja/index.mdx | 350 --- packages/web/src/content/docs/ja/keybinds.mdx | 194 -- packages/web/src/content/docs/ja/lsp.mdx | 208 -- .../web/src/content/docs/ja/mcp-servers.mdx | 511 ---- packages/web/src/content/docs/ja/models.mdx | 221 -- packages/web/src/content/docs/ja/network.mdx | 55 - .../web/src/content/docs/ja/permissions.mdx | 282 -- packages/web/src/content/docs/ja/plugins.mdx | 461 --- .../web/src/content/docs/ja/providers.mdx | 1998 ------------- packages/web/src/content/docs/ja/rules.mdx | 179 -- packages/web/src/content/docs/ja/sdk.mdx | 463 --- packages/web/src/content/docs/ja/server.mdx | 282 -- packages/web/src/content/docs/ja/share.mdx | 128 - packages/web/src/content/docs/ja/skills.mdx | 222 -- packages/web/src/content/docs/ja/themes.mdx | 667 ----- packages/web/src/content/docs/ja/tools.mdx | 341 --- .../src/content/docs/ja/troubleshooting.mdx | 300 -- packages/web/src/content/docs/ja/tui.mdx | 423 --- packages/web/src/content/docs/ja/web.mdx | 143 - .../web/src/content/docs/ja/windows-wsl.mdx | 116 - packages/web/src/content/docs/ja/zen.mdx | 301 -- packages/web/src/content/docs/ko/acp.mdx | 156 - packages/web/src/content/docs/ko/agents.mdx | 754 ----- packages/web/src/content/docs/ko/cli.mdx | 616 ---- packages/web/src/content/docs/ko/commands.mdx | 323 --- packages/web/src/content/docs/ko/config.mdx | 685 ----- .../web/src/content/docs/ko/custom-tools.mdx | 196 -- .../web/src/content/docs/ko/ecosystem.mdx | 78 - .../web/src/content/docs/ko/enterprise.mdx | 165 -- .../web/src/content/docs/ko/formatters.mdx | 132 - packages/web/src/content/docs/ko/github.mdx | 321 --- packages/web/src/content/docs/ko/gitlab.mdx | 195 -- packages/web/src/content/docs/ko/go.mdx | 197 -- packages/web/src/content/docs/ko/ide.mdx | 48 - packages/web/src/content/docs/ko/index.mdx | 344 --- packages/web/src/content/docs/ko/keybinds.mdx | 194 -- packages/web/src/content/docs/ko/lsp.mdx | 208 -- .../web/src/content/docs/ko/mcp-servers.mdx | 511 ---- packages/web/src/content/docs/ko/models.mdx | 223 -- packages/web/src/content/docs/ko/network.mdx | 57 - .../web/src/content/docs/ko/permissions.mdx | 235 -- packages/web/src/content/docs/ko/plugins.mdx | 388 --- .../web/src/content/docs/ko/providers.mdx | 1984 ------------- packages/web/src/content/docs/ko/rules.mdx | 179 -- packages/web/src/content/docs/ko/sdk.mdx | 463 --- packages/web/src/content/docs/ko/server.mdx | 287 -- packages/web/src/content/docs/ko/share.mdx | 128 - packages/web/src/content/docs/ko/skills.mdx | 222 -- packages/web/src/content/docs/ko/themes.mdx | 369 --- packages/web/src/content/docs/ko/tools.mdx | 341 --- .../src/content/docs/ko/troubleshooting.mdx | 303 -- packages/web/src/content/docs/ko/tui.mdx | 425 --- packages/web/src/content/docs/ko/web.mdx | 142 - .../web/src/content/docs/ko/windows-wsl.mdx | 119 - packages/web/src/content/docs/ko/zen.mdx | 301 -- packages/web/src/content/docs/nb/acp.mdx | 156 - packages/web/src/content/docs/nb/agents.mdx | 754 ----- packages/web/src/content/docs/nb/cli.mdx | 617 ---- packages/web/src/content/docs/nb/commands.mdx | 323 --- packages/web/src/content/docs/nb/config.mdx | 688 ----- .../web/src/content/docs/nb/custom-tools.mdx | 196 -- .../web/src/content/docs/nb/ecosystem.mdx | 78 - .../web/src/content/docs/nb/enterprise.mdx | 170 -- .../web/src/content/docs/nb/formatters.mdx | 131 - packages/web/src/content/docs/nb/github.mdx | 325 --- packages/web/src/content/docs/nb/gitlab.mdx | 195 -- packages/web/src/content/docs/nb/go.mdx | 211 -- packages/web/src/content/docs/nb/ide.mdx | 48 - packages/web/src/content/docs/nb/index.mdx | 359 --- packages/web/src/content/docs/nb/keybinds.mdx | 194 -- packages/web/src/content/docs/nb/lsp.mdx | 208 -- .../web/src/content/docs/nb/mcp-servers.mdx | 624 ---- packages/web/src/content/docs/nb/models.mdx | 223 -- packages/web/src/content/docs/nb/network.mdx | 57 - .../web/src/content/docs/nb/permissions.mdx | 235 -- packages/web/src/content/docs/nb/plugins.mdx | 389 --- .../web/src/content/docs/nb/providers.mdx | 1956 ------------- packages/web/src/content/docs/nb/rules.mdx | 180 -- packages/web/src/content/docs/nb/sdk.mdx | 463 --- packages/web/src/content/docs/nb/server.mdx | 287 -- packages/web/src/content/docs/nb/share.mdx | 128 - packages/web/src/content/docs/nb/skills.mdx | 222 -- packages/web/src/content/docs/nb/themes.mdx | 369 --- packages/web/src/content/docs/nb/tools.mdx | 341 --- .../src/content/docs/nb/troubleshooting.mdx | 225 -- packages/web/src/content/docs/nb/tui.mdx | 429 --- packages/web/src/content/docs/nb/web.mdx | 105 - .../web/src/content/docs/nb/windows-wsl.mdx | 113 - packages/web/src/content/docs/nb/zen.mdx | 319 --- packages/web/src/content/docs/pl/acp.mdx | 158 - packages/web/src/content/docs/pl/agents.mdx | 754 ----- packages/web/src/content/docs/pl/cli.mdx | 617 ---- packages/web/src/content/docs/pl/commands.mdx | 323 --- packages/web/src/content/docs/pl/config.mdx | 680 ----- .../web/src/content/docs/pl/custom-tools.mdx | 196 -- .../web/src/content/docs/pl/ecosystem.mdx | 78 - .../web/src/content/docs/pl/enterprise.mdx | 170 -- .../web/src/content/docs/pl/formatters.mdx | 131 - packages/web/src/content/docs/pl/github.mdx | 321 --- packages/web/src/content/docs/pl/gitlab.mdx | 195 -- packages/web/src/content/docs/pl/go.mdx | 203 -- packages/web/src/content/docs/pl/ide.mdx | 48 - packages/web/src/content/docs/pl/index.mdx | 347 --- packages/web/src/content/docs/pl/keybinds.mdx | 194 -- packages/web/src/content/docs/pl/lsp.mdx | 208 -- .../web/src/content/docs/pl/mcp-servers.mdx | 511 ---- packages/web/src/content/docs/pl/models.mdx | 223 -- packages/web/src/content/docs/pl/network.mdx | 57 - .../web/src/content/docs/pl/permissions.mdx | 235 -- packages/web/src/content/docs/pl/plugins.mdx | 385 --- .../web/src/content/docs/pl/providers.mdx | 1986 ------------- packages/web/src/content/docs/pl/rules.mdx | 180 -- packages/web/src/content/docs/pl/sdk.mdx | 463 --- packages/web/src/content/docs/pl/server.mdx | 287 -- packages/web/src/content/docs/pl/share.mdx | 128 - packages/web/src/content/docs/pl/skills.mdx | 222 -- packages/web/src/content/docs/pl/themes.mdx | 369 --- packages/web/src/content/docs/pl/tools.mdx | 341 --- .../src/content/docs/pl/troubleshooting.mdx | 300 -- packages/web/src/content/docs/pl/tui.mdx | 429 --- packages/web/src/content/docs/pl/web.mdx | 142 - .../web/src/content/docs/pl/windows-wsl.mdx | 113 - packages/web/src/content/docs/pl/zen.mdx | 319 --- packages/web/src/content/docs/pt-br/acp.mdx | 156 - .../web/src/content/docs/pt-br/agents.mdx | 755 ----- packages/web/src/content/docs/pt-br/cli.mdx | 616 ---- .../web/src/content/docs/pt-br/commands.mdx | 322 --- .../web/src/content/docs/pt-br/config.mdx | 687 ----- .../src/content/docs/pt-br/custom-tools.mdx | 196 -- .../web/src/content/docs/pt-br/ecosystem.mdx | 78 - .../web/src/content/docs/pt-br/enterprise.mdx | 166 -- .../web/src/content/docs/pt-br/formatters.mdx | 131 - .../web/src/content/docs/pt-br/github.mdx | 321 --- .../web/src/content/docs/pt-br/gitlab.mdx | 195 -- packages/web/src/content/docs/pt-br/go.mdx | 211 -- packages/web/src/content/docs/pt-br/ide.mdx | 48 - packages/web/src/content/docs/pt-br/index.mdx | 344 --- .../web/src/content/docs/pt-br/keybinds.mdx | 194 -- packages/web/src/content/docs/pt-br/lsp.mdx | 208 -- .../src/content/docs/pt-br/mcp-servers.mdx | 511 ---- .../web/src/content/docs/pt-br/models.mdx | 222 -- .../web/src/content/docs/pt-br/network.mdx | 57 - .../src/content/docs/pt-br/permissions.mdx | 235 -- .../web/src/content/docs/pt-br/plugins.mdx | 388 --- .../web/src/content/docs/pt-br/providers.mdx | 1989 ------------- packages/web/src/content/docs/pt-br/rules.mdx | 180 -- packages/web/src/content/docs/pt-br/sdk.mdx | 463 --- .../web/src/content/docs/pt-br/server.mdx | 284 -- packages/web/src/content/docs/pt-br/share.mdx | 127 - .../web/src/content/docs/pt-br/skills.mdx | 222 -- .../web/src/content/docs/pt-br/themes.mdx | 369 --- packages/web/src/content/docs/pt-br/tools.mdx | 341 --- .../content/docs/pt-br/troubleshooting.mdx | 299 -- packages/web/src/content/docs/pt-br/tui.mdx | 426 --- packages/web/src/content/docs/pt-br/web.mdx | 142 - .../src/content/docs/pt-br/windows-wsl.mdx | 113 - packages/web/src/content/docs/pt-br/zen.mdx | 301 -- packages/web/src/content/docs/ru/acp.mdx | 156 - packages/web/src/content/docs/ru/agents.mdx | 754 ----- packages/web/src/content/docs/ru/cli.mdx | 617 ---- packages/web/src/content/docs/ru/commands.mdx | 323 --- packages/web/src/content/docs/ru/config.mdx | 685 ----- .../web/src/content/docs/ru/custom-tools.mdx | 170 -- .../web/src/content/docs/ru/ecosystem.mdx | 78 - .../web/src/content/docs/ru/enterprise.mdx | 168 -- .../web/src/content/docs/ru/formatters.mdx | 119 - packages/web/src/content/docs/ru/github.mdx | 321 --- packages/web/src/content/docs/ru/gitlab.mdx | 195 -- packages/web/src/content/docs/ru/go.mdx | 211 -- packages/web/src/content/docs/ru/ide.mdx | 48 - packages/web/src/content/docs/ru/index.mdx | 356 --- packages/web/src/content/docs/ru/keybinds.mdx | 194 -- packages/web/src/content/docs/ru/lsp.mdx | 207 -- .../web/src/content/docs/ru/mcp-servers.mdx | 511 ---- packages/web/src/content/docs/ru/models.mdx | 223 -- packages/web/src/content/docs/ru/network.mdx | 57 - .../web/src/content/docs/ru/permissions.mdx | 235 -- packages/web/src/content/docs/ru/plugins.mdx | 385 --- .../web/src/content/docs/ru/providers.mdx | 1987 ------------- packages/web/src/content/docs/ru/rules.mdx | 180 -- packages/web/src/content/docs/ru/sdk.mdx | 463 --- packages/web/src/content/docs/ru/server.mdx | 287 -- packages/web/src/content/docs/ru/share.mdx | 128 - packages/web/src/content/docs/ru/skills.mdx | 222 -- packages/web/src/content/docs/ru/themes.mdx | 369 --- packages/web/src/content/docs/ru/tools.mdx | 341 --- .../src/content/docs/ru/troubleshooting.mdx | 300 -- packages/web/src/content/docs/ru/tui.mdx | 429 --- packages/web/src/content/docs/ru/web.mdx | 142 - .../web/src/content/docs/ru/windows-wsl.mdx | 113 - packages/web/src/content/docs/ru/zen.mdx | 319 --- packages/web/src/content/docs/th/acp.mdx | 156 - packages/web/src/content/docs/th/agents.mdx | 744 ----- packages/web/src/content/docs/th/cli.mdx | 618 ---- packages/web/src/content/docs/th/commands.mdx | 320 --- packages/web/src/content/docs/th/config.mdx | 690 ----- .../web/src/content/docs/th/custom-tools.mdx | 196 -- .../web/src/content/docs/th/ecosystem.mdx | 78 - .../web/src/content/docs/th/enterprise.mdx | 170 -- .../web/src/content/docs/th/formatters.mdx | 131 - packages/web/src/content/docs/th/github.mdx | 321 --- packages/web/src/content/docs/th/gitlab.mdx | 195 -- packages/web/src/content/docs/th/go.mdx | 197 -- packages/web/src/content/docs/th/ide.mdx | 48 - packages/web/src/content/docs/th/index.mdx | 360 --- packages/web/src/content/docs/th/keybinds.mdx | 194 -- packages/web/src/content/docs/th/lsp.mdx | 208 -- .../web/src/content/docs/th/mcp-servers.mdx | 511 ---- packages/web/src/content/docs/th/models.mdx | 223 -- packages/web/src/content/docs/th/network.mdx | 57 - .../web/src/content/docs/th/permissions.mdx | 235 -- packages/web/src/content/docs/th/plugins.mdx | 389 --- .../web/src/content/docs/th/providers.mdx | 2532 ----------------- packages/web/src/content/docs/th/rules.mdx | 180 -- packages/web/src/content/docs/th/sdk.mdx | 463 --- packages/web/src/content/docs/th/server.mdx | 287 -- packages/web/src/content/docs/th/share.mdx | 128 - packages/web/src/content/docs/th/skills.mdx | 222 -- packages/web/src/content/docs/th/themes.mdx | 369 --- packages/web/src/content/docs/th/tools.mdx | 341 --- .../src/content/docs/th/troubleshooting.mdx | 300 -- packages/web/src/content/docs/th/tui.mdx | 429 --- packages/web/src/content/docs/th/web.mdx | 142 - .../web/src/content/docs/th/windows-wsl.mdx | 113 - packages/web/src/content/docs/th/zen.mdx | 303 -- packages/web/src/content/docs/tr/acp.mdx | 156 - packages/web/src/content/docs/tr/agents.mdx | 754 ----- packages/web/src/content/docs/tr/cli.mdx | 617 ---- packages/web/src/content/docs/tr/commands.mdx | 323 --- packages/web/src/content/docs/tr/config.mdx | 687 ----- .../web/src/content/docs/tr/custom-tools.mdx | 196 -- .../web/src/content/docs/tr/ecosystem.mdx | 78 - .../web/src/content/docs/tr/enterprise.mdx | 170 -- .../web/src/content/docs/tr/formatters.mdx | 131 - packages/web/src/content/docs/tr/github.mdx | 321 --- packages/web/src/content/docs/tr/gitlab.mdx | 195 -- packages/web/src/content/docs/tr/go.mdx | 197 -- packages/web/src/content/docs/tr/ide.mdx | 48 - packages/web/src/content/docs/tr/index.mdx | 347 --- packages/web/src/content/docs/tr/keybinds.mdx | 194 -- packages/web/src/content/docs/tr/lsp.mdx | 208 -- .../web/src/content/docs/tr/mcp-servers.mdx | 511 ---- packages/web/src/content/docs/tr/models.mdx | 223 -- packages/web/src/content/docs/tr/network.mdx | 57 - .../web/src/content/docs/tr/permissions.mdx | 235 -- packages/web/src/content/docs/tr/plugins.mdx | 388 --- .../web/src/content/docs/tr/providers.mdx | 1988 ------------- packages/web/src/content/docs/tr/rules.mdx | 180 -- packages/web/src/content/docs/tr/sdk.mdx | 463 --- packages/web/src/content/docs/tr/server.mdx | 285 -- packages/web/src/content/docs/tr/share.mdx | 127 - packages/web/src/content/docs/tr/skills.mdx | 222 -- packages/web/src/content/docs/tr/themes.mdx | 369 --- packages/web/src/content/docs/tr/tools.mdx | 341 --- .../src/content/docs/tr/troubleshooting.mdx | 299 -- packages/web/src/content/docs/tr/tui.mdx | 427 --- packages/web/src/content/docs/tr/web.mdx | 142 - .../web/src/content/docs/tr/windows-wsl.mdx | 113 - packages/web/src/content/docs/tr/zen.mdx | 301 -- packages/web/src/content/docs/zh-cn/acp.mdx | 156 - .../web/src/content/docs/zh-cn/agents.mdx | 754 ----- packages/web/src/content/docs/zh-cn/cli.mdx | 617 ---- .../web/src/content/docs/zh-cn/commands.mdx | 322 --- .../web/src/content/docs/zh-cn/config.mdx | 683 ----- .../src/content/docs/zh-cn/custom-tools.mdx | 196 -- .../web/src/content/docs/zh-cn/ecosystem.mdx | 78 - .../web/src/content/docs/zh-cn/enterprise.mdx | 165 -- .../web/src/content/docs/zh-cn/formatters.mdx | 132 - .../web/src/content/docs/zh-cn/github.mdx | 321 --- .../web/src/content/docs/zh-cn/gitlab.mdx | 194 -- packages/web/src/content/docs/zh-cn/go.mdx | 197 -- packages/web/src/content/docs/zh-cn/ide.mdx | 48 - packages/web/src/content/docs/zh-cn/index.mdx | 343 --- .../web/src/content/docs/zh-cn/keybinds.mdx | 194 -- packages/web/src/content/docs/zh-cn/lsp.mdx | 208 -- .../src/content/docs/zh-cn/mcp-servers.mdx | 511 ---- .../web/src/content/docs/zh-cn/models.mdx | 222 -- .../web/src/content/docs/zh-cn/network.mdx | 57 - .../src/content/docs/zh-cn/permissions.mdx | 235 -- .../web/src/content/docs/zh-cn/plugins.mdx | 388 --- .../web/src/content/docs/zh-cn/providers.mdx | 1949 ------------- packages/web/src/content/docs/zh-cn/rules.mdx | 180 -- packages/web/src/content/docs/zh-cn/sdk.mdx | 463 --- .../web/src/content/docs/zh-cn/server.mdx | 284 -- packages/web/src/content/docs/zh-cn/share.mdx | 127 - .../web/src/content/docs/zh-cn/skills.mdx | 222 -- .../web/src/content/docs/zh-cn/themes.mdx | 369 --- packages/web/src/content/docs/zh-cn/tools.mdx | 341 --- .../content/docs/zh-cn/troubleshooting.mdx | 299 -- packages/web/src/content/docs/zh-cn/tui.mdx | 426 --- packages/web/src/content/docs/zh-cn/web.mdx | 142 - .../src/content/docs/zh-cn/windows-wsl.mdx | 112 - packages/web/src/content/docs/zh-cn/zen.mdx | 301 -- packages/web/src/content/docs/zh-tw/acp.mdx | 156 - .../web/src/content/docs/zh-tw/agents.mdx | 754 ----- packages/web/src/content/docs/zh-tw/cli.mdx | 617 ---- .../web/src/content/docs/zh-tw/commands.mdx | 322 --- .../web/src/content/docs/zh-tw/config.mdx | 687 ----- .../src/content/docs/zh-tw/custom-tools.mdx | 196 -- .../web/src/content/docs/zh-tw/ecosystem.mdx | 78 - .../web/src/content/docs/zh-tw/enterprise.mdx | 165 -- .../web/src/content/docs/zh-tw/formatters.mdx | 132 - .../web/src/content/docs/zh-tw/github.mdx | 321 --- .../web/src/content/docs/zh-tw/gitlab.mdx | 194 -- packages/web/src/content/docs/zh-tw/go.mdx | 197 -- packages/web/src/content/docs/zh-tw/ide.mdx | 48 - packages/web/src/content/docs/zh-tw/index.mdx | 343 --- .../web/src/content/docs/zh-tw/keybinds.mdx | 194 -- packages/web/src/content/docs/zh-tw/lsp.mdx | 208 -- .../src/content/docs/zh-tw/mcp-servers.mdx | 511 ---- .../web/src/content/docs/zh-tw/models.mdx | 222 -- .../web/src/content/docs/zh-tw/network.mdx | 57 - .../src/content/docs/zh-tw/permissions.mdx | 235 -- .../web/src/content/docs/zh-tw/plugins.mdx | 388 --- .../web/src/content/docs/zh-tw/providers.mdx | 1970 ------------- packages/web/src/content/docs/zh-tw/rules.mdx | 180 -- packages/web/src/content/docs/zh-tw/sdk.mdx | 463 --- .../web/src/content/docs/zh-tw/server.mdx | 284 -- packages/web/src/content/docs/zh-tw/share.mdx | 127 - .../web/src/content/docs/zh-tw/skills.mdx | 222 -- .../web/src/content/docs/zh-tw/themes.mdx | 369 --- packages/web/src/content/docs/zh-tw/tools.mdx | 341 --- .../content/docs/zh-tw/troubleshooting.mdx | 299 -- packages/web/src/content/docs/zh-tw/tui.mdx | 426 --- packages/web/src/content/docs/zh-tw/web.mdx | 142 - .../src/content/docs/zh-tw/windows-wsl.mdx | 112 - packages/web/src/content/docs/zh-tw/zen.mdx | 308 -- packages/web/src/content/i18n/ar.json | 75 - packages/web/src/content/i18n/bs.json | 75 - packages/web/src/content/i18n/da.json | 75 - packages/web/src/content/i18n/de.json | 75 - packages/web/src/content/i18n/fr.json | 75 - packages/web/src/content/i18n/it.json | 75 - packages/web/src/content/i18n/ja.json | 75 - packages/web/src/content/i18n/ko.json | 75 - packages/web/src/content/i18n/nb.json | 75 - packages/web/src/content/i18n/pl.json | 75 - packages/web/src/content/i18n/pt-BR.json | 75 - packages/web/src/content/i18n/ru.json | 75 - packages/web/src/content/i18n/th.json | 75 - packages/web/src/content/i18n/tr.json | 75 - packages/web/src/content/i18n/zh-CN.json | 75 - packages/web/src/content/i18n/zh-TW.json | 75 - packages/web/src/i18n/locales.ts | 67 +- 650 files changed, 25 insertions(+), 217803 deletions(-) delete mode 100644 packages/app/src/i18n/ar.ts delete mode 100644 packages/app/src/i18n/br.ts delete mode 100644 packages/app/src/i18n/bs.ts delete mode 100644 packages/app/src/i18n/da.ts delete mode 100644 packages/app/src/i18n/de.ts delete mode 100644 packages/app/src/i18n/fr.ts delete mode 100644 packages/app/src/i18n/ja.ts delete mode 100644 packages/app/src/i18n/ko.ts delete mode 100644 packages/app/src/i18n/no.ts delete mode 100644 packages/app/src/i18n/parity.test.ts delete mode 100644 packages/app/src/i18n/pl.ts delete mode 100644 packages/app/src/i18n/ru.ts delete mode 100644 packages/app/src/i18n/th.ts delete mode 100644 packages/app/src/i18n/tr.ts delete mode 100644 packages/app/src/i18n/uk.ts delete mode 100644 packages/app/src/i18n/zh.ts delete mode 100644 packages/app/src/i18n/zht.ts delete mode 100644 packages/console/app/src/i18n/ar.ts delete mode 100644 packages/console/app/src/i18n/br.ts delete mode 100644 packages/console/app/src/i18n/da.ts delete mode 100644 packages/console/app/src/i18n/de.ts delete mode 100644 packages/console/app/src/i18n/fr.ts delete mode 100644 packages/console/app/src/i18n/it.ts delete mode 100644 packages/console/app/src/i18n/ja.ts delete mode 100644 packages/console/app/src/i18n/ko.ts delete mode 100644 packages/console/app/src/i18n/no.ts delete mode 100644 packages/console/app/src/i18n/pl.ts delete mode 100644 packages/console/app/src/i18n/ru.ts delete mode 100644 packages/console/app/src/i18n/th.ts delete mode 100644 packages/console/app/src/i18n/tr.ts delete mode 100644 packages/console/app/src/i18n/uk.ts delete mode 100644 packages/console/app/src/i18n/zh.ts delete mode 100644 packages/console/app/src/i18n/zht.ts delete mode 100644 packages/desktop/src/renderer/i18n/ar.ts delete mode 100644 packages/desktop/src/renderer/i18n/br.ts delete mode 100644 packages/desktop/src/renderer/i18n/bs.ts delete mode 100644 packages/desktop/src/renderer/i18n/da.ts delete mode 100644 packages/desktop/src/renderer/i18n/de.ts delete mode 100644 packages/desktop/src/renderer/i18n/fr.ts delete mode 100644 packages/desktop/src/renderer/i18n/ja.ts delete mode 100644 packages/desktop/src/renderer/i18n/ko.ts delete mode 100644 packages/desktop/src/renderer/i18n/no.ts delete mode 100644 packages/desktop/src/renderer/i18n/pl.ts delete mode 100644 packages/desktop/src/renderer/i18n/ru.ts delete mode 100644 packages/desktop/src/renderer/i18n/uk.ts delete mode 100644 packages/desktop/src/renderer/i18n/zh.ts delete mode 100644 packages/desktop/src/renderer/i18n/zht.ts delete mode 100644 packages/stats/app/src/i18n/ar.ts delete mode 100644 packages/stats/app/src/i18n/br.ts delete mode 100644 packages/stats/app/src/i18n/da.ts delete mode 100644 packages/stats/app/src/i18n/de.ts delete mode 100644 packages/stats/app/src/i18n/fr.ts delete mode 100644 packages/stats/app/src/i18n/it.ts delete mode 100644 packages/stats/app/src/i18n/ja.ts delete mode 100644 packages/stats/app/src/i18n/ko.ts delete mode 100644 packages/stats/app/src/i18n/no.ts delete mode 100644 packages/stats/app/src/i18n/pl.ts delete mode 100644 packages/stats/app/src/i18n/ru.ts delete mode 100644 packages/stats/app/src/i18n/th.ts delete mode 100644 packages/stats/app/src/i18n/tr.ts delete mode 100644 packages/stats/app/src/i18n/uk.ts delete mode 100644 packages/stats/app/src/i18n/zh.ts delete mode 100644 packages/stats/app/src/i18n/zht.ts delete mode 100644 packages/ui/src/i18n/ar.ts delete mode 100644 packages/ui/src/i18n/br.ts delete mode 100644 packages/ui/src/i18n/bs.ts delete mode 100644 packages/ui/src/i18n/da.ts delete mode 100644 packages/ui/src/i18n/de.ts delete mode 100644 packages/ui/src/i18n/fr.ts delete mode 100644 packages/ui/src/i18n/ja.ts delete mode 100644 packages/ui/src/i18n/ko.ts delete mode 100644 packages/ui/src/i18n/no.ts delete mode 100644 packages/ui/src/i18n/pl.ts delete mode 100644 packages/ui/src/i18n/ru.ts delete mode 100644 packages/ui/src/i18n/th.ts delete mode 100644 packages/ui/src/i18n/tr.ts delete mode 100644 packages/ui/src/i18n/uk.ts delete mode 100644 packages/ui/src/i18n/zh.ts delete mode 100644 packages/ui/src/i18n/zht.ts delete mode 100644 packages/web/src/content/docs/ar/acp.mdx delete mode 100644 packages/web/src/content/docs/ar/agents.mdx delete mode 100644 packages/web/src/content/docs/ar/cli.mdx delete mode 100644 packages/web/src/content/docs/ar/commands.mdx delete mode 100644 packages/web/src/content/docs/ar/config.mdx delete mode 100644 packages/web/src/content/docs/ar/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/ar/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/ar/enterprise.mdx delete mode 100644 packages/web/src/content/docs/ar/formatters.mdx delete mode 100644 packages/web/src/content/docs/ar/github.mdx delete mode 100644 packages/web/src/content/docs/ar/gitlab.mdx delete mode 100644 packages/web/src/content/docs/ar/go.mdx delete mode 100644 packages/web/src/content/docs/ar/ide.mdx delete mode 100644 packages/web/src/content/docs/ar/index.mdx delete mode 100644 packages/web/src/content/docs/ar/keybinds.mdx delete mode 100644 packages/web/src/content/docs/ar/lsp.mdx delete mode 100644 packages/web/src/content/docs/ar/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/ar/models.mdx delete mode 100644 packages/web/src/content/docs/ar/network.mdx delete mode 100644 packages/web/src/content/docs/ar/permissions.mdx delete mode 100644 packages/web/src/content/docs/ar/plugins.mdx delete mode 100644 packages/web/src/content/docs/ar/providers.mdx delete mode 100644 packages/web/src/content/docs/ar/rules.mdx delete mode 100644 packages/web/src/content/docs/ar/sdk.mdx delete mode 100644 packages/web/src/content/docs/ar/server.mdx delete mode 100644 packages/web/src/content/docs/ar/share.mdx delete mode 100644 packages/web/src/content/docs/ar/skills.mdx delete mode 100644 packages/web/src/content/docs/ar/themes.mdx delete mode 100644 packages/web/src/content/docs/ar/tools.mdx delete mode 100644 packages/web/src/content/docs/ar/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/ar/tui.mdx delete mode 100644 packages/web/src/content/docs/ar/web.mdx delete mode 100644 packages/web/src/content/docs/ar/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/ar/zen.mdx delete mode 100644 packages/web/src/content/docs/bs/acp.mdx delete mode 100644 packages/web/src/content/docs/bs/agents.mdx delete mode 100644 packages/web/src/content/docs/bs/cli.mdx delete mode 100644 packages/web/src/content/docs/bs/commands.mdx delete mode 100644 packages/web/src/content/docs/bs/config.mdx delete mode 100644 packages/web/src/content/docs/bs/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/bs/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/bs/enterprise.mdx delete mode 100644 packages/web/src/content/docs/bs/formatters.mdx delete mode 100644 packages/web/src/content/docs/bs/github.mdx delete mode 100644 packages/web/src/content/docs/bs/gitlab.mdx delete mode 100644 packages/web/src/content/docs/bs/go.mdx delete mode 100644 packages/web/src/content/docs/bs/ide.mdx delete mode 100644 packages/web/src/content/docs/bs/index.mdx delete mode 100644 packages/web/src/content/docs/bs/keybinds.mdx delete mode 100644 packages/web/src/content/docs/bs/lsp.mdx delete mode 100644 packages/web/src/content/docs/bs/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/bs/models.mdx delete mode 100644 packages/web/src/content/docs/bs/network.mdx delete mode 100644 packages/web/src/content/docs/bs/permissions.mdx delete mode 100644 packages/web/src/content/docs/bs/plugins.mdx delete mode 100644 packages/web/src/content/docs/bs/providers.mdx delete mode 100644 packages/web/src/content/docs/bs/rules.mdx delete mode 100644 packages/web/src/content/docs/bs/sdk.mdx delete mode 100644 packages/web/src/content/docs/bs/server.mdx delete mode 100644 packages/web/src/content/docs/bs/share.mdx delete mode 100644 packages/web/src/content/docs/bs/skills.mdx delete mode 100644 packages/web/src/content/docs/bs/themes.mdx delete mode 100644 packages/web/src/content/docs/bs/tools.mdx delete mode 100644 packages/web/src/content/docs/bs/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/bs/tui.mdx delete mode 100644 packages/web/src/content/docs/bs/web.mdx delete mode 100644 packages/web/src/content/docs/bs/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/bs/zen.mdx delete mode 100644 packages/web/src/content/docs/da/acp.mdx delete mode 100644 packages/web/src/content/docs/da/agents.mdx delete mode 100644 packages/web/src/content/docs/da/cli.mdx delete mode 100644 packages/web/src/content/docs/da/commands.mdx delete mode 100644 packages/web/src/content/docs/da/config.mdx delete mode 100644 packages/web/src/content/docs/da/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/da/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/da/enterprise.mdx delete mode 100644 packages/web/src/content/docs/da/formatters.mdx delete mode 100644 packages/web/src/content/docs/da/github.mdx delete mode 100644 packages/web/src/content/docs/da/gitlab.mdx delete mode 100644 packages/web/src/content/docs/da/go.mdx delete mode 100644 packages/web/src/content/docs/da/ide.mdx delete mode 100644 packages/web/src/content/docs/da/index.mdx delete mode 100644 packages/web/src/content/docs/da/keybinds.mdx delete mode 100644 packages/web/src/content/docs/da/lsp.mdx delete mode 100644 packages/web/src/content/docs/da/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/da/models.mdx delete mode 100644 packages/web/src/content/docs/da/network.mdx delete mode 100644 packages/web/src/content/docs/da/permissions.mdx delete mode 100644 packages/web/src/content/docs/da/plugins.mdx delete mode 100644 packages/web/src/content/docs/da/providers.mdx delete mode 100644 packages/web/src/content/docs/da/rules.mdx delete mode 100644 packages/web/src/content/docs/da/sdk.mdx delete mode 100644 packages/web/src/content/docs/da/server.mdx delete mode 100644 packages/web/src/content/docs/da/share.mdx delete mode 100644 packages/web/src/content/docs/da/skills.mdx delete mode 100644 packages/web/src/content/docs/da/themes.mdx delete mode 100644 packages/web/src/content/docs/da/tools.mdx delete mode 100644 packages/web/src/content/docs/da/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/da/tui.mdx delete mode 100644 packages/web/src/content/docs/da/web.mdx delete mode 100644 packages/web/src/content/docs/da/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/da/zen.mdx delete mode 100644 packages/web/src/content/docs/de/acp.mdx delete mode 100644 packages/web/src/content/docs/de/agents.mdx delete mode 100644 packages/web/src/content/docs/de/cli.mdx delete mode 100644 packages/web/src/content/docs/de/commands.mdx delete mode 100644 packages/web/src/content/docs/de/config.mdx delete mode 100644 packages/web/src/content/docs/de/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/de/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/de/enterprise.mdx delete mode 100644 packages/web/src/content/docs/de/formatters.mdx delete mode 100644 packages/web/src/content/docs/de/github.mdx delete mode 100644 packages/web/src/content/docs/de/gitlab.mdx delete mode 100644 packages/web/src/content/docs/de/go.mdx delete mode 100644 packages/web/src/content/docs/de/ide.mdx delete mode 100644 packages/web/src/content/docs/de/index.mdx delete mode 100644 packages/web/src/content/docs/de/keybinds.mdx delete mode 100644 packages/web/src/content/docs/de/lsp.mdx delete mode 100644 packages/web/src/content/docs/de/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/de/models.mdx delete mode 100644 packages/web/src/content/docs/de/network.mdx delete mode 100644 packages/web/src/content/docs/de/permissions.mdx delete mode 100644 packages/web/src/content/docs/de/plugins.mdx delete mode 100644 packages/web/src/content/docs/de/providers.mdx delete mode 100644 packages/web/src/content/docs/de/rules.mdx delete mode 100644 packages/web/src/content/docs/de/sdk.mdx delete mode 100644 packages/web/src/content/docs/de/server.mdx delete mode 100644 packages/web/src/content/docs/de/share.mdx delete mode 100644 packages/web/src/content/docs/de/skills.mdx delete mode 100644 packages/web/src/content/docs/de/themes.mdx delete mode 100644 packages/web/src/content/docs/de/tools.mdx delete mode 100644 packages/web/src/content/docs/de/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/de/tui.mdx delete mode 100644 packages/web/src/content/docs/de/web.mdx delete mode 100644 packages/web/src/content/docs/de/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/de/zen.mdx delete mode 100644 packages/web/src/content/docs/fr/acp.mdx delete mode 100644 packages/web/src/content/docs/fr/agents.mdx delete mode 100644 packages/web/src/content/docs/fr/cli.mdx delete mode 100644 packages/web/src/content/docs/fr/commands.mdx delete mode 100644 packages/web/src/content/docs/fr/config.mdx delete mode 100644 packages/web/src/content/docs/fr/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/fr/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/fr/enterprise.mdx delete mode 100644 packages/web/src/content/docs/fr/formatters.mdx delete mode 100644 packages/web/src/content/docs/fr/github.mdx delete mode 100644 packages/web/src/content/docs/fr/gitlab.mdx delete mode 100644 packages/web/src/content/docs/fr/go.mdx delete mode 100644 packages/web/src/content/docs/fr/ide.mdx delete mode 100644 packages/web/src/content/docs/fr/index.mdx delete mode 100644 packages/web/src/content/docs/fr/keybinds.mdx delete mode 100644 packages/web/src/content/docs/fr/lsp.mdx delete mode 100644 packages/web/src/content/docs/fr/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/fr/models.mdx delete mode 100644 packages/web/src/content/docs/fr/network.mdx delete mode 100644 packages/web/src/content/docs/fr/permissions.mdx delete mode 100644 packages/web/src/content/docs/fr/plugins.mdx delete mode 100644 packages/web/src/content/docs/fr/providers.mdx delete mode 100644 packages/web/src/content/docs/fr/rules.mdx delete mode 100644 packages/web/src/content/docs/fr/sdk.mdx delete mode 100644 packages/web/src/content/docs/fr/server.mdx delete mode 100644 packages/web/src/content/docs/fr/share.mdx delete mode 100644 packages/web/src/content/docs/fr/skills.mdx delete mode 100644 packages/web/src/content/docs/fr/themes.mdx delete mode 100644 packages/web/src/content/docs/fr/tools.mdx delete mode 100644 packages/web/src/content/docs/fr/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/fr/tui.mdx delete mode 100644 packages/web/src/content/docs/fr/web.mdx delete mode 100644 packages/web/src/content/docs/fr/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/fr/zen.mdx delete mode 100644 packages/web/src/content/docs/it/acp.mdx delete mode 100644 packages/web/src/content/docs/it/agents.mdx delete mode 100644 packages/web/src/content/docs/it/cli.mdx delete mode 100644 packages/web/src/content/docs/it/commands.mdx delete mode 100644 packages/web/src/content/docs/it/config.mdx delete mode 100644 packages/web/src/content/docs/it/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/it/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/it/enterprise.mdx delete mode 100644 packages/web/src/content/docs/it/formatters.mdx delete mode 100644 packages/web/src/content/docs/it/github.mdx delete mode 100644 packages/web/src/content/docs/it/gitlab.mdx delete mode 100644 packages/web/src/content/docs/it/go.mdx delete mode 100644 packages/web/src/content/docs/it/ide.mdx delete mode 100644 packages/web/src/content/docs/it/index.mdx delete mode 100644 packages/web/src/content/docs/it/keybinds.mdx delete mode 100644 packages/web/src/content/docs/it/lsp.mdx delete mode 100644 packages/web/src/content/docs/it/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/it/models.mdx delete mode 100644 packages/web/src/content/docs/it/network.mdx delete mode 100644 packages/web/src/content/docs/it/permissions.mdx delete mode 100644 packages/web/src/content/docs/it/plugins.mdx delete mode 100644 packages/web/src/content/docs/it/providers.mdx delete mode 100644 packages/web/src/content/docs/it/rules.mdx delete mode 100644 packages/web/src/content/docs/it/sdk.mdx delete mode 100644 packages/web/src/content/docs/it/server.mdx delete mode 100644 packages/web/src/content/docs/it/share.mdx delete mode 100644 packages/web/src/content/docs/it/skills.mdx delete mode 100644 packages/web/src/content/docs/it/themes.mdx delete mode 100644 packages/web/src/content/docs/it/tools.mdx delete mode 100644 packages/web/src/content/docs/it/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/it/tui.mdx delete mode 100644 packages/web/src/content/docs/it/web.mdx delete mode 100644 packages/web/src/content/docs/it/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/it/zen.mdx delete mode 100644 packages/web/src/content/docs/ja/acp.mdx delete mode 100644 packages/web/src/content/docs/ja/agents.mdx delete mode 100644 packages/web/src/content/docs/ja/cli.mdx delete mode 100644 packages/web/src/content/docs/ja/commands.mdx delete mode 100644 packages/web/src/content/docs/ja/config.mdx delete mode 100644 packages/web/src/content/docs/ja/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/ja/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/ja/enterprise.mdx delete mode 100644 packages/web/src/content/docs/ja/formatters.mdx delete mode 100644 packages/web/src/content/docs/ja/github.mdx delete mode 100644 packages/web/src/content/docs/ja/gitlab.mdx delete mode 100644 packages/web/src/content/docs/ja/go.mdx delete mode 100644 packages/web/src/content/docs/ja/ide.mdx delete mode 100644 packages/web/src/content/docs/ja/index.mdx delete mode 100644 packages/web/src/content/docs/ja/keybinds.mdx delete mode 100644 packages/web/src/content/docs/ja/lsp.mdx delete mode 100644 packages/web/src/content/docs/ja/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/ja/models.mdx delete mode 100644 packages/web/src/content/docs/ja/network.mdx delete mode 100644 packages/web/src/content/docs/ja/permissions.mdx delete mode 100644 packages/web/src/content/docs/ja/plugins.mdx delete mode 100644 packages/web/src/content/docs/ja/providers.mdx delete mode 100644 packages/web/src/content/docs/ja/rules.mdx delete mode 100644 packages/web/src/content/docs/ja/sdk.mdx delete mode 100644 packages/web/src/content/docs/ja/server.mdx delete mode 100644 packages/web/src/content/docs/ja/share.mdx delete mode 100644 packages/web/src/content/docs/ja/skills.mdx delete mode 100644 packages/web/src/content/docs/ja/themes.mdx delete mode 100644 packages/web/src/content/docs/ja/tools.mdx delete mode 100644 packages/web/src/content/docs/ja/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/ja/tui.mdx delete mode 100644 packages/web/src/content/docs/ja/web.mdx delete mode 100644 packages/web/src/content/docs/ja/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/ja/zen.mdx delete mode 100644 packages/web/src/content/docs/ko/acp.mdx delete mode 100644 packages/web/src/content/docs/ko/agents.mdx delete mode 100644 packages/web/src/content/docs/ko/cli.mdx delete mode 100644 packages/web/src/content/docs/ko/commands.mdx delete mode 100644 packages/web/src/content/docs/ko/config.mdx delete mode 100644 packages/web/src/content/docs/ko/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/ko/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/ko/enterprise.mdx delete mode 100644 packages/web/src/content/docs/ko/formatters.mdx delete mode 100644 packages/web/src/content/docs/ko/github.mdx delete mode 100644 packages/web/src/content/docs/ko/gitlab.mdx delete mode 100644 packages/web/src/content/docs/ko/go.mdx delete mode 100644 packages/web/src/content/docs/ko/ide.mdx delete mode 100644 packages/web/src/content/docs/ko/index.mdx delete mode 100644 packages/web/src/content/docs/ko/keybinds.mdx delete mode 100644 packages/web/src/content/docs/ko/lsp.mdx delete mode 100644 packages/web/src/content/docs/ko/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/ko/models.mdx delete mode 100644 packages/web/src/content/docs/ko/network.mdx delete mode 100644 packages/web/src/content/docs/ko/permissions.mdx delete mode 100644 packages/web/src/content/docs/ko/plugins.mdx delete mode 100644 packages/web/src/content/docs/ko/providers.mdx delete mode 100644 packages/web/src/content/docs/ko/rules.mdx delete mode 100644 packages/web/src/content/docs/ko/sdk.mdx delete mode 100644 packages/web/src/content/docs/ko/server.mdx delete mode 100644 packages/web/src/content/docs/ko/share.mdx delete mode 100644 packages/web/src/content/docs/ko/skills.mdx delete mode 100644 packages/web/src/content/docs/ko/themes.mdx delete mode 100644 packages/web/src/content/docs/ko/tools.mdx delete mode 100644 packages/web/src/content/docs/ko/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/ko/tui.mdx delete mode 100644 packages/web/src/content/docs/ko/web.mdx delete mode 100644 packages/web/src/content/docs/ko/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/ko/zen.mdx delete mode 100644 packages/web/src/content/docs/nb/acp.mdx delete mode 100644 packages/web/src/content/docs/nb/agents.mdx delete mode 100644 packages/web/src/content/docs/nb/cli.mdx delete mode 100644 packages/web/src/content/docs/nb/commands.mdx delete mode 100644 packages/web/src/content/docs/nb/config.mdx delete mode 100644 packages/web/src/content/docs/nb/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/nb/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/nb/enterprise.mdx delete mode 100644 packages/web/src/content/docs/nb/formatters.mdx delete mode 100644 packages/web/src/content/docs/nb/github.mdx delete mode 100644 packages/web/src/content/docs/nb/gitlab.mdx delete mode 100644 packages/web/src/content/docs/nb/go.mdx delete mode 100644 packages/web/src/content/docs/nb/ide.mdx delete mode 100644 packages/web/src/content/docs/nb/index.mdx delete mode 100644 packages/web/src/content/docs/nb/keybinds.mdx delete mode 100644 packages/web/src/content/docs/nb/lsp.mdx delete mode 100644 packages/web/src/content/docs/nb/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/nb/models.mdx delete mode 100644 packages/web/src/content/docs/nb/network.mdx delete mode 100644 packages/web/src/content/docs/nb/permissions.mdx delete mode 100644 packages/web/src/content/docs/nb/plugins.mdx delete mode 100644 packages/web/src/content/docs/nb/providers.mdx delete mode 100644 packages/web/src/content/docs/nb/rules.mdx delete mode 100644 packages/web/src/content/docs/nb/sdk.mdx delete mode 100644 packages/web/src/content/docs/nb/server.mdx delete mode 100644 packages/web/src/content/docs/nb/share.mdx delete mode 100644 packages/web/src/content/docs/nb/skills.mdx delete mode 100644 packages/web/src/content/docs/nb/themes.mdx delete mode 100644 packages/web/src/content/docs/nb/tools.mdx delete mode 100644 packages/web/src/content/docs/nb/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/nb/tui.mdx delete mode 100644 packages/web/src/content/docs/nb/web.mdx delete mode 100644 packages/web/src/content/docs/nb/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/nb/zen.mdx delete mode 100644 packages/web/src/content/docs/pl/acp.mdx delete mode 100644 packages/web/src/content/docs/pl/agents.mdx delete mode 100644 packages/web/src/content/docs/pl/cli.mdx delete mode 100644 packages/web/src/content/docs/pl/commands.mdx delete mode 100644 packages/web/src/content/docs/pl/config.mdx delete mode 100644 packages/web/src/content/docs/pl/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/pl/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/pl/enterprise.mdx delete mode 100644 packages/web/src/content/docs/pl/formatters.mdx delete mode 100644 packages/web/src/content/docs/pl/github.mdx delete mode 100644 packages/web/src/content/docs/pl/gitlab.mdx delete mode 100644 packages/web/src/content/docs/pl/go.mdx delete mode 100644 packages/web/src/content/docs/pl/ide.mdx delete mode 100644 packages/web/src/content/docs/pl/index.mdx delete mode 100644 packages/web/src/content/docs/pl/keybinds.mdx delete mode 100644 packages/web/src/content/docs/pl/lsp.mdx delete mode 100644 packages/web/src/content/docs/pl/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/pl/models.mdx delete mode 100644 packages/web/src/content/docs/pl/network.mdx delete mode 100644 packages/web/src/content/docs/pl/permissions.mdx delete mode 100644 packages/web/src/content/docs/pl/plugins.mdx delete mode 100644 packages/web/src/content/docs/pl/providers.mdx delete mode 100644 packages/web/src/content/docs/pl/rules.mdx delete mode 100644 packages/web/src/content/docs/pl/sdk.mdx delete mode 100644 packages/web/src/content/docs/pl/server.mdx delete mode 100644 packages/web/src/content/docs/pl/share.mdx delete mode 100644 packages/web/src/content/docs/pl/skills.mdx delete mode 100644 packages/web/src/content/docs/pl/themes.mdx delete mode 100644 packages/web/src/content/docs/pl/tools.mdx delete mode 100644 packages/web/src/content/docs/pl/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/pl/tui.mdx delete mode 100644 packages/web/src/content/docs/pl/web.mdx delete mode 100644 packages/web/src/content/docs/pl/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/pl/zen.mdx delete mode 100644 packages/web/src/content/docs/pt-br/acp.mdx delete mode 100644 packages/web/src/content/docs/pt-br/agents.mdx delete mode 100644 packages/web/src/content/docs/pt-br/cli.mdx delete mode 100644 packages/web/src/content/docs/pt-br/commands.mdx delete mode 100644 packages/web/src/content/docs/pt-br/config.mdx delete mode 100644 packages/web/src/content/docs/pt-br/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/pt-br/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/pt-br/enterprise.mdx delete mode 100644 packages/web/src/content/docs/pt-br/formatters.mdx delete mode 100644 packages/web/src/content/docs/pt-br/github.mdx delete mode 100644 packages/web/src/content/docs/pt-br/gitlab.mdx delete mode 100644 packages/web/src/content/docs/pt-br/go.mdx delete mode 100644 packages/web/src/content/docs/pt-br/ide.mdx delete mode 100644 packages/web/src/content/docs/pt-br/index.mdx delete mode 100644 packages/web/src/content/docs/pt-br/keybinds.mdx delete mode 100644 packages/web/src/content/docs/pt-br/lsp.mdx delete mode 100644 packages/web/src/content/docs/pt-br/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/pt-br/models.mdx delete mode 100644 packages/web/src/content/docs/pt-br/network.mdx delete mode 100644 packages/web/src/content/docs/pt-br/permissions.mdx delete mode 100644 packages/web/src/content/docs/pt-br/plugins.mdx delete mode 100644 packages/web/src/content/docs/pt-br/providers.mdx delete mode 100644 packages/web/src/content/docs/pt-br/rules.mdx delete mode 100644 packages/web/src/content/docs/pt-br/sdk.mdx delete mode 100644 packages/web/src/content/docs/pt-br/server.mdx delete mode 100644 packages/web/src/content/docs/pt-br/share.mdx delete mode 100644 packages/web/src/content/docs/pt-br/skills.mdx delete mode 100644 packages/web/src/content/docs/pt-br/themes.mdx delete mode 100644 packages/web/src/content/docs/pt-br/tools.mdx delete mode 100644 packages/web/src/content/docs/pt-br/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/pt-br/tui.mdx delete mode 100644 packages/web/src/content/docs/pt-br/web.mdx delete mode 100644 packages/web/src/content/docs/pt-br/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/pt-br/zen.mdx delete mode 100644 packages/web/src/content/docs/ru/acp.mdx delete mode 100644 packages/web/src/content/docs/ru/agents.mdx delete mode 100644 packages/web/src/content/docs/ru/cli.mdx delete mode 100644 packages/web/src/content/docs/ru/commands.mdx delete mode 100644 packages/web/src/content/docs/ru/config.mdx delete mode 100644 packages/web/src/content/docs/ru/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/ru/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/ru/enterprise.mdx delete mode 100644 packages/web/src/content/docs/ru/formatters.mdx delete mode 100644 packages/web/src/content/docs/ru/github.mdx delete mode 100644 packages/web/src/content/docs/ru/gitlab.mdx delete mode 100644 packages/web/src/content/docs/ru/go.mdx delete mode 100644 packages/web/src/content/docs/ru/ide.mdx delete mode 100644 packages/web/src/content/docs/ru/index.mdx delete mode 100644 packages/web/src/content/docs/ru/keybinds.mdx delete mode 100644 packages/web/src/content/docs/ru/lsp.mdx delete mode 100644 packages/web/src/content/docs/ru/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/ru/models.mdx delete mode 100644 packages/web/src/content/docs/ru/network.mdx delete mode 100644 packages/web/src/content/docs/ru/permissions.mdx delete mode 100644 packages/web/src/content/docs/ru/plugins.mdx delete mode 100644 packages/web/src/content/docs/ru/providers.mdx delete mode 100644 packages/web/src/content/docs/ru/rules.mdx delete mode 100644 packages/web/src/content/docs/ru/sdk.mdx delete mode 100644 packages/web/src/content/docs/ru/server.mdx delete mode 100644 packages/web/src/content/docs/ru/share.mdx delete mode 100644 packages/web/src/content/docs/ru/skills.mdx delete mode 100644 packages/web/src/content/docs/ru/themes.mdx delete mode 100644 packages/web/src/content/docs/ru/tools.mdx delete mode 100644 packages/web/src/content/docs/ru/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/ru/tui.mdx delete mode 100644 packages/web/src/content/docs/ru/web.mdx delete mode 100644 packages/web/src/content/docs/ru/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/ru/zen.mdx delete mode 100644 packages/web/src/content/docs/th/acp.mdx delete mode 100644 packages/web/src/content/docs/th/agents.mdx delete mode 100644 packages/web/src/content/docs/th/cli.mdx delete mode 100644 packages/web/src/content/docs/th/commands.mdx delete mode 100644 packages/web/src/content/docs/th/config.mdx delete mode 100644 packages/web/src/content/docs/th/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/th/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/th/enterprise.mdx delete mode 100644 packages/web/src/content/docs/th/formatters.mdx delete mode 100644 packages/web/src/content/docs/th/github.mdx delete mode 100644 packages/web/src/content/docs/th/gitlab.mdx delete mode 100644 packages/web/src/content/docs/th/go.mdx delete mode 100644 packages/web/src/content/docs/th/ide.mdx delete mode 100644 packages/web/src/content/docs/th/index.mdx delete mode 100644 packages/web/src/content/docs/th/keybinds.mdx delete mode 100644 packages/web/src/content/docs/th/lsp.mdx delete mode 100644 packages/web/src/content/docs/th/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/th/models.mdx delete mode 100644 packages/web/src/content/docs/th/network.mdx delete mode 100644 packages/web/src/content/docs/th/permissions.mdx delete mode 100644 packages/web/src/content/docs/th/plugins.mdx delete mode 100644 packages/web/src/content/docs/th/providers.mdx delete mode 100644 packages/web/src/content/docs/th/rules.mdx delete mode 100644 packages/web/src/content/docs/th/sdk.mdx delete mode 100644 packages/web/src/content/docs/th/server.mdx delete mode 100644 packages/web/src/content/docs/th/share.mdx delete mode 100644 packages/web/src/content/docs/th/skills.mdx delete mode 100644 packages/web/src/content/docs/th/themes.mdx delete mode 100644 packages/web/src/content/docs/th/tools.mdx delete mode 100644 packages/web/src/content/docs/th/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/th/tui.mdx delete mode 100644 packages/web/src/content/docs/th/web.mdx delete mode 100644 packages/web/src/content/docs/th/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/th/zen.mdx delete mode 100644 packages/web/src/content/docs/tr/acp.mdx delete mode 100644 packages/web/src/content/docs/tr/agents.mdx delete mode 100644 packages/web/src/content/docs/tr/cli.mdx delete mode 100644 packages/web/src/content/docs/tr/commands.mdx delete mode 100644 packages/web/src/content/docs/tr/config.mdx delete mode 100644 packages/web/src/content/docs/tr/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/tr/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/tr/enterprise.mdx delete mode 100644 packages/web/src/content/docs/tr/formatters.mdx delete mode 100644 packages/web/src/content/docs/tr/github.mdx delete mode 100644 packages/web/src/content/docs/tr/gitlab.mdx delete mode 100644 packages/web/src/content/docs/tr/go.mdx delete mode 100644 packages/web/src/content/docs/tr/ide.mdx delete mode 100644 packages/web/src/content/docs/tr/index.mdx delete mode 100644 packages/web/src/content/docs/tr/keybinds.mdx delete mode 100644 packages/web/src/content/docs/tr/lsp.mdx delete mode 100644 packages/web/src/content/docs/tr/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/tr/models.mdx delete mode 100644 packages/web/src/content/docs/tr/network.mdx delete mode 100644 packages/web/src/content/docs/tr/permissions.mdx delete mode 100644 packages/web/src/content/docs/tr/plugins.mdx delete mode 100644 packages/web/src/content/docs/tr/providers.mdx delete mode 100644 packages/web/src/content/docs/tr/rules.mdx delete mode 100644 packages/web/src/content/docs/tr/sdk.mdx delete mode 100644 packages/web/src/content/docs/tr/server.mdx delete mode 100644 packages/web/src/content/docs/tr/share.mdx delete mode 100644 packages/web/src/content/docs/tr/skills.mdx delete mode 100644 packages/web/src/content/docs/tr/themes.mdx delete mode 100644 packages/web/src/content/docs/tr/tools.mdx delete mode 100644 packages/web/src/content/docs/tr/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/tr/tui.mdx delete mode 100644 packages/web/src/content/docs/tr/web.mdx delete mode 100644 packages/web/src/content/docs/tr/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/tr/zen.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/acp.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/agents.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/cli.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/commands.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/config.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/enterprise.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/formatters.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/github.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/gitlab.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/go.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/ide.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/index.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/keybinds.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/lsp.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/models.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/network.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/permissions.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/plugins.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/providers.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/rules.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/sdk.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/server.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/share.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/skills.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/themes.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/tools.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/tui.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/web.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/zh-cn/zen.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/acp.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/agents.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/cli.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/commands.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/config.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/custom-tools.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/ecosystem.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/enterprise.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/formatters.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/github.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/gitlab.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/go.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/ide.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/index.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/keybinds.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/lsp.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/mcp-servers.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/models.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/network.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/permissions.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/plugins.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/providers.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/rules.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/sdk.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/server.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/share.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/skills.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/themes.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/tools.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/troubleshooting.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/tui.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/web.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/windows-wsl.mdx delete mode 100644 packages/web/src/content/docs/zh-tw/zen.mdx delete mode 100644 packages/web/src/content/i18n/ar.json delete mode 100644 packages/web/src/content/i18n/bs.json delete mode 100644 packages/web/src/content/i18n/da.json delete mode 100644 packages/web/src/content/i18n/de.json delete mode 100644 packages/web/src/content/i18n/fr.json delete mode 100644 packages/web/src/content/i18n/it.json delete mode 100644 packages/web/src/content/i18n/ja.json delete mode 100644 packages/web/src/content/i18n/ko.json delete mode 100644 packages/web/src/content/i18n/nb.json delete mode 100644 packages/web/src/content/i18n/pl.json delete mode 100644 packages/web/src/content/i18n/pt-BR.json delete mode 100644 packages/web/src/content/i18n/ru.json delete mode 100644 packages/web/src/content/i18n/th.json delete mode 100644 packages/web/src/content/i18n/tr.json delete mode 100644 packages/web/src/content/i18n/zh-CN.json delete mode 100644 packages/web/src/content/i18n/zh-TW.json diff --git a/DIVERGENCES.md b/DIVERGENCES.md index 90c734ca50..cb2c7ae1b4 100644 --- a/DIVERGENCES.md +++ b/DIVERGENCES.md @@ -39,6 +39,8 @@ future `packages/codev-*`) never conflict and are not tracked here. | `README.md` | Replaced with fork README | Fork identity, sync + divergence policy. | Keep ours entirely. | | `README.*.md` (21 translations) | Deleted | Upstream marketing translations, irrelevant to the fork. | Keep deleted (`git rm` the upstream side of modify/delete conflicts). | | `screenshot-uk.png` | Deleted | Orphaned README-translation asset; referenced by nothing. | Keep deleted. | +| Locale dicts in `packages/{ui,app}/src/i18n/`, `packages/desktop/src/renderer/i18n/`, `packages/console/app/src/i18n/`, `packages/stats/app/src/i18n/`, `packages/web/src/content/i18n/`; translated docs dirs in `packages/web/src/content/docs/` | Deleted every locale except `en`/`es` (incl. `packages/app/src/i18n/parity.test.ts`) | Fork ships English + Spanish only. | Keep deleted (`git rm` the upstream side of modify/delete conflicts); also delete any locale files upstream adds. | +| `packages/app/src/context/language.tsx`, `packages/app/src/entry.tsx`, `packages/desktop/src/renderer/i18n/index.ts`, `packages/console/app/src/i18n/index.ts`, `packages/console/app/src/lib/language.ts`, `packages/console/app/src/component/footer.tsx`, `packages/stats/app/src/i18n.ts`, `packages/web/src/i18n/locales.ts`, `packages/web/astro.config.mjs`, `packages/enterprise/src/app.tsx` | Locale registries trimmed to `en` + `es`: `Locale` types, LOCALES/LABEL/TAG/DOCS maps, dict loaders, accept-language matchers, starlight `locales` config; enterprise/entry `zh` special cases now use `es`; console footer always links Discord (Feishu was zh-only) | Fork ships English + Spanish only. | Keep our trimmed lists; take upstream's structural changes and re-trim any new locale entries. | ## Known rebrand gaps (deliberate, revisit before external distribution) @@ -56,8 +58,8 @@ future `packages/codev-*`) never conflict and are not tracked here. disabled. The binary inside platform packages is still named `opencode` (cosmetic). - **UI branding**: TUI banner, default-theme accent, desktop/web app names, and favicon/PWA assets are rebranded (see table). Still upstream-branded, deliberately: in-app i18n strings - mentioning "OpenCode" (~33 × 19 locale files — a merge-conflict farm; revisit with a - runtime display-name shim if it matters), `favicon-v3.ico` + `social-share.png` (binary + mentioning "OpenCode" (now only in the `en`/`es` locale files — see the locale-trim rows above; + revisit with a runtime display-name shim if it matters), `favicon-v3.ico` + `social-share.png` (binary formats we can't author well — need design assets), desktop app ICONS (resources/icons — need design assets), and the `ai.opencode.desktop` appId / `opencode://` scheme (identity plumbing, like the OPENCODE_* env vars). diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index 6b2eb314c8..aa93c8968a 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -6,25 +6,7 @@ import { Persist, persisted } from "@/utils/persist" import { dict as en } from "@/i18n/en" import { dict as uiEn } from "@opencode-ai/ui/i18n/en" -export type Locale = - | "en" - | "zh" - | "zht" - | "ko" - | "de" - | "es" - | "fr" - | "da" - | "ja" - | "pl" - | "ru" - | "uk" - | "ar" - | "no" - | "br" - | "th" - | "bs" - | "tr" +export type Locale = "en" | "es" type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten @@ -34,67 +16,16 @@ function cookie(locale: Locale) { return `oc_locale=${encodeURIComponent(locale)}; Path=/; Max-Age=31536000; SameSite=Lax` } -const LOCALES: readonly Locale[] = [ - "en", - "zh", - "zht", - "ko", - "de", - "es", - "fr", - "da", - "ja", - "pl", - "ru", - "uk", - "bs", - "ar", - "no", - "br", - "th", - "tr", -] +const LOCALES: readonly Locale[] = ["en", "es"] const INTL: Record = { en: "en", - zh: "zh-Hans", - zht: "zh-Hant", - ko: "ko", - de: "de", es: "es", - fr: "fr", - da: "da", - ja: "ja", - pl: "pl", - ru: "ru", - uk: "uk", - ar: "ar", - no: "nb-NO", - br: "pt-BR", - th: "th", - bs: "bs", - tr: "tr", } const LABEL_KEY: Record = { en: "language.en", - zh: "language.zh", - zht: "language.zht", - ko: "language.ko", - de: "language.de", es: "language.es", - fr: "language.fr", - da: "language.da", - ja: "language.ja", - pl: "language.pl", - ru: "language.ru", - uk: "language.uk", - ar: "language.ar", - no: "language.no", - br: "language.br", - th: "language.th", - bs: "language.bs", - tr: "language.tr", } const base = i18n.flatten({ ...en, ...uiEn }) @@ -104,23 +35,7 @@ const merge = (app: Promise, ui: Promise) => Promise.all([app, ui]).then(([a, b]) => ({ ...base, ...i18n.flatten({ ...a.dict, ...b.dict }) }) as Dictionary) const loaders: Record, () => Promise> = { - zh: () => merge(import("@/i18n/zh"), import("@opencode-ai/ui/i18n/zh")), - zht: () => merge(import("@/i18n/zht"), import("@opencode-ai/ui/i18n/zht")), - ko: () => merge(import("@/i18n/ko"), import("@opencode-ai/ui/i18n/ko")), - de: () => merge(import("@/i18n/de"), import("@opencode-ai/ui/i18n/de")), es: () => merge(import("@/i18n/es"), import("@opencode-ai/ui/i18n/es")), - fr: () => merge(import("@/i18n/fr"), import("@opencode-ai/ui/i18n/fr")), - da: () => merge(import("@/i18n/da"), import("@opencode-ai/ui/i18n/da")), - ja: () => merge(import("@/i18n/ja"), import("@opencode-ai/ui/i18n/ja")), - pl: () => merge(import("@/i18n/pl"), import("@opencode-ai/ui/i18n/pl")), - ru: () => merge(import("@/i18n/ru"), import("@opencode-ai/ui/i18n/ru")), - uk: () => merge(import("@/i18n/uk"), import("@opencode-ai/ui/i18n/uk")), - ar: () => merge(import("@/i18n/ar"), import("@opencode-ai/ui/i18n/ar")), - no: () => merge(import("@/i18n/no"), import("@opencode-ai/ui/i18n/no")), - br: () => merge(import("@/i18n/br"), import("@opencode-ai/ui/i18n/br")), - th: () => merge(import("@/i18n/th"), import("@opencode-ai/ui/i18n/th")), - bs: () => merge(import("@/i18n/bs"), import("@opencode-ai/ui/i18n/bs")), - tr: () => merge(import("@/i18n/tr"), import("@opencode-ai/ui/i18n/tr")), } function loadDict(locale: Locale) { @@ -140,26 +55,7 @@ export function loadLocaleDict(locale: Locale) { const localeMatchers: Array<{ locale: Locale; match: (language: string) => boolean }> = [ { locale: "en", match: (language) => language.startsWith("en") }, - { locale: "zht", match: (language) => language.startsWith("zh") && language.includes("hant") }, - { locale: "zh", match: (language) => language.startsWith("zh") }, - { locale: "ko", match: (language) => language.startsWith("ko") }, - { locale: "de", match: (language) => language.startsWith("de") }, { locale: "es", match: (language) => language.startsWith("es") }, - { locale: "fr", match: (language) => language.startsWith("fr") }, - { locale: "da", match: (language) => language.startsWith("da") }, - { locale: "ja", match: (language) => language.startsWith("ja") }, - { locale: "pl", match: (language) => language.startsWith("pl") }, - { locale: "ru", match: (language) => language.startsWith("ru") }, - { locale: "uk", match: (language) => language.startsWith("uk") }, - { locale: "ar", match: (language) => language.startsWith("ar") }, - { - locale: "no", - match: (language) => language.startsWith("no") || language.startsWith("nb") || language.startsWith("nn"), - }, - { locale: "br", match: (language) => language.startsWith("pt") }, - { locale: "th", match: (language) => language.startsWith("th") }, - { locale: "bs", match: (language) => language.startsWith("bs") }, - { locale: "tr", match: (language) => language.startsWith("tr") }, ] function detectLocale(): Locale { diff --git a/packages/app/src/entry.tsx b/packages/app/src/entry.tsx index c41c1bb4b6..aa4d99a143 100644 --- a/packages/app/src/entry.tsx +++ b/packages/app/src/entry.tsx @@ -5,7 +5,7 @@ import { render } from "solid-js/web" import { AppBaseProviders, AppInterface } from "@/app" import { type Platform, PlatformProvider } from "@/context/platform" import { dict as en } from "@/i18n/en" -import { dict as zh } from "@/i18n/zh" +import { dict as es } from "@/i18n/es" import { handleNotificationClick } from "@/utils/notification-click" import { authFromToken } from "@/utils/server" import pkg from "../package.json" @@ -18,7 +18,7 @@ const getLocale = () => { const languages = navigator.languages?.length ? navigator.languages : [navigator.language] for (const language of languages) { if (!language) continue - if (language.toLowerCase().startsWith("zh")) return "zh" as const + if (language.toLowerCase().startsWith("es")) return "es" as const } return "en" as const } @@ -26,7 +26,7 @@ const getLocale = () => { const getRootNotFoundError = () => { const key = "error.dev.rootNotFound" as const const locale = getLocale() - return locale === "zh" ? (zh[key] ?? en[key]) : en[key] + return locale === "es" ? (es[key] ?? en[key]) : en[key] } const getStorage = (key: string) => { diff --git a/packages/app/src/i18n/ar.ts b/packages/app/src/i18n/ar.ts deleted file mode 100644 index a5174a5900..0000000000 --- a/packages/app/src/i18n/ar.ts +++ /dev/null @@ -1,850 +0,0 @@ -export const dict = { - "command.category.suggested": "مقترح", - "command.category.view": "عرض", - "command.category.project": "مشروع", - "command.category.provider": "موفر", - "command.category.server": "خادم", - "command.category.session": "جلسة", - "command.category.theme": "سمة", - "command.category.language": "لغة", - "command.category.file": "ملف", - "command.category.context": "سياق", - "command.category.terminal": "محطة طرفية", - "command.category.model": "نموذج", - "command.category.mcp": "MCP", - "command.category.agent": "وكيل", - "command.category.permissions": "أذونات", - "command.category.workspace": "مساحة عمل", - "command.category.settings": "إعدادات", - "theme.scheme.system": "نظام", - "theme.scheme.light": "فاتح", - "theme.scheme.dark": "داكن", - "command.sidebar.toggle": "تبديل الشريط الجانبي", - "command.project.open": "فتح مشروع", - "command.provider.connect": "اتصال بموفر", - "command.server.switch": "تبديل الخادم", - "command.settings.open": "فتح الإعدادات", - "command.session.previous": "الجلسة السابقة", - "command.session.next": "الجلسة التالية", - "command.session.previous.unseen": "الجلسة غير المقروءة السابقة", - "command.session.next.unseen": "الجلسة غير المقروءة التالية", - "command.session.archive": "أرشفة الجلسة", - "command.palette": "لوحة الأوامر", - "command.theme.cycle": "تغيير السمة", - "command.theme.set": "استخدام السمة: {{theme}}", - "command.theme.scheme.cycle": "تغيير مخطط الألوان", - "command.theme.scheme.set": "استخدام مخطط الألوان: {{scheme}}", - "command.language.cycle": "تغيير اللغة", - "command.language.set": "استخدام اللغة: {{language}}", - "command.session.new": "جلسة جديدة", - "command.file.open": "فتح ملف", - "command.tab.close": "إغلاق علامة التبويب", - "command.context.addSelection": "إضافة التحديد إلى السياق", - "command.context.addSelection.description": "إضافة الأسطر المحددة من الملف الحالي", - "command.input.focus": "التركيز على حقل الإدخال", - "command.terminal.toggle": "تبديل المحطة الطرفية", - "command.fileTree.toggle": "تبديل شجرة الملفات", - "command.review.toggle": "تبديل المراجعة", - "command.terminal.new": "محطة طرفية جديدة", - "command.terminal.new.description": "إنشاء علامة تبويب جديدة للمحطة الطرفية", - "command.steps.toggle": "تبديل الخطوات", - "command.steps.toggle.description": "إظهار أو إخفاء خطوات الرسالة الحالية", - "command.message.previous": "الرسالة السابقة", - "command.message.previous.description": "انتقل إلى رسالة المستخدم السابقة", - "command.message.next": "الرسالة التالية", - "command.message.next.description": "انتقل إلى رسالة المستخدم التالية", - "command.model.choose": "اختيار نموذج", - "command.model.choose.description": "حدد نموذجًا مختلفًا", - "command.mcp.toggle": "تبديل MCPs", - "command.mcp.toggle.description": "تبديل MCPs", - "command.agent.cycle": "تغيير الوكيل", - "command.agent.cycle.description": "التبديل إلى الوكيل التالي", - "command.agent.cycle.reverse": "تغيير الوكيل للخلف", - "command.agent.cycle.reverse.description": "التبديل إلى الوكيل السابق", - "command.model.variant.cycle": "تغيير جهد التفكير", - "command.model.variant.cycle.description": "التبديل إلى مستوى الجهد التالي", - "command.prompt.mode.shell": "Shell", - "command.prompt.mode.normal": "Prompt", - "command.permissions.autoaccept.enable": "قبول الأذونات تلقائيًا", - "command.permissions.autoaccept.disable": "إيقاف قبول الأذونات تلقائيًا", - "command.workspace.toggle": "تبديل مساحات العمل", - "command.workspace.toggle.description": "تمكين أو تعطيل مساحات العمل المتعددة في الشريط الجانبي", - "command.session.undo": "تراجع", - "command.session.undo.description": "تراجع عن الرسالة الأخيرة", - "command.session.redo": "إعادة", - "command.session.redo.description": "إعادة الرسالة التي تم التراجع عنها", - "command.session.compact": "ضغط الجلسة", - "command.session.compact.description": "تلخيص الجلسة لتقليل حجم السياق", - "command.session.fork": "تشعب من الرسالة", - "command.session.fork.description": "إنشاء جلسة جديدة من رسالة سابقة", - "command.session.share": "مشاركة الجلسة", - "command.session.share.description": "مشاركة هذه الجلسة ونسخ الرابط إلى الحافظة", - "command.session.unshare": "إلغاء مشاركة الجلسة", - "command.session.unshare.description": "إيقاف مشاركة هذه الجلسة", - "palette.search.placeholder": "البحث في الملفات والأوامر والجلسات", - "palette.empty": "لا توجد نتائج", - "palette.group.commands": "الأوامر", - "palette.group.files": "الملفات", - "dialog.provider.search.placeholder": "البحث عن موفرين", - "dialog.provider.empty": "لم يتم العثور على موفرين", - "dialog.provider.group.popular": "شائع", - "dialog.provider.group.other": "آخر", - "dialog.provider.tag.recommended": "موصى به", - "dialog.provider.opencode.note": "نماذج مختارة تتضمن Claude و GPT و Gemini والمزيد", - "dialog.provider.opencode.tagline": "نماذج موثوقة ومحسنة", - "dialog.provider.opencodeGo.tagline": "اشتراك منخفض التكلفة للجميع", - "dialog.provider.anthropic.note": "اتصل باستخدام Claude Pro/Max أو مفتاح API", - "dialog.provider.copilot.note": "اتصل باستخدام Copilot أو مفتاح API", - "dialog.provider.openai.note": "اتصل باستخدام ChatGPT Pro/Plus أو مفتاح API", - "dialog.provider.google.note": "نماذج Gemini لاستجابات سريعة ومنظمة", - "dialog.provider.openrouter.note": "الوصول إلى جميع النماذج المدعومة من موفر واحد", - "dialog.provider.vercel.note": "وصول موحد إلى نماذج الذكاء الاصطناعي مع توجيه ذكي", - "dialog.model.select.title": "تحديد نموذج", - "dialog.model.search.placeholder": "البحث عن نماذج", - "dialog.model.empty": "لا توجد نتائج للنماذج", - "dialog.model.manage": "إدارة النماذج", - "dialog.model.manage.description": "تخصيص النماذج التي تظهر في محدد النماذج.", - "dialog.model.manage.provider.toggle": "تبديل جميع نماذج {{provider}}", - "dialog.model.unpaid.freeModels.title": "نماذج مجانية مقدمة من OpenCode", - "dialog.model.unpaid.addMore.title": "إضافة المزيد من النماذج من موفرين مشهورين", - "dialog.provider.viewAll": "عرض المزيد من الموفرين", - "provider.connect.title": "اتصال {{provider}}", - "provider.connect.title.anthropicProMax": "تسجيل الدخول باستخدام Claude Pro/Max", - "provider.connect.selectMethod": "حدد طريقة تسجيل الدخول لـ {{provider}}.", - "provider.connect.method.apiKey": "مفتاح API", - "provider.connect.status.inProgress": "جارٍ التفويض...", - "provider.connect.status.waiting": "في انتظار التفويض...", - "provider.connect.status.failed": "فشل التفويض: {{error}}", - "provider.connect.apiKey.description": - "أدخل مفتاح واجهة برمجة تطبيقات {{provider}} الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", - "provider.connect.apiKey.label": "مفتاح واجهة برمجة تطبيقات {{provider}}", - "provider.connect.apiKey.placeholder": "مفتاح API", - "provider.connect.apiKey.required": "مفتاح API مطلوب", - "provider.connect.opencodeZen.line1": - "يمنحك OpenCode Zen الوصول إلى مجموعة مختارة من النماذج الموثوقة والمحسنة لوكلاء البرمجة.", - "provider.connect.opencodeZen.line2": - "باستخدام مفتاح API واحد، ستحصل على إمكانية الوصول إلى نماذج مثل Claude و GPT و Gemini و GLM والمزيد.", - "provider.connect.opencodeZen.visit.prefix": "قم بزيارة ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " للحصول على مفتاح API الخاص بك.", - "provider.connect.oauth.code.visit.prefix": "قم بزيارة ", - "provider.connect.oauth.code.visit.link": "هذا الرابط", - "provider.connect.oauth.code.visit.suffix": - " للحصول على رمز التفويض الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", - "provider.connect.oauth.code.label": "رمز تفويض {{method}}", - "provider.connect.oauth.code.placeholder": "رمز التفويض", - "provider.connect.oauth.code.required": "رمز التفويض مطلوب", - "provider.connect.oauth.code.invalid": "رمز التفويض غير صالح", - "provider.connect.oauth.auto.visit.prefix": "قم بزيارة ", - "provider.connect.oauth.auto.visit.link": "هذا الرابط", - "provider.connect.oauth.auto.visit.suffix": - " وأدخل الرمز أدناه لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", - "provider.connect.oauth.auto.confirmationCode": "رمز التأكيد", - "provider.connect.toast.connected.title": "تم توصيل {{provider}}", - "provider.connect.toast.connected.description": "نماذج {{provider}} متاحة الآن للاستخدام.", - "provider.custom.title": "موفر مخصص", - "provider.custom.description.prefix": "تكوين موفر متوافق مع OpenAI. راجع ", - "provider.custom.description.link": "وثائق تكوين الموفر", - "provider.custom.description.suffix": ".", - "provider.custom.field.providerID.label": "معرف الموفر", - "provider.custom.field.providerID.placeholder": "myprovider", - "provider.custom.field.providerID.description": "أحرف صغيرة، أرقام، شرطات، أو شرطات سفلية", - "provider.custom.field.name.label": "اسم العرض", - "provider.custom.field.name.placeholder": "موفر الذكاء الاصطناعي الخاص بي", - "provider.custom.field.baseURL.label": "عنوان URL الأساسي", - "provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1", - "provider.custom.field.apiKey.label": "مفتاح API", - "provider.custom.field.apiKey.placeholder": "مفتاح API", - "provider.custom.field.apiKey.description": "اختياري. اتركه فارغًا إذا كنت تدير المصادقة عبر الترويسات.", - "provider.custom.models.label": "النماذج", - "provider.custom.models.id.label": "المعرف", - "provider.custom.models.id.placeholder": "model-id", - "provider.custom.models.name.label": "الاسم", - "provider.custom.models.name.placeholder": "اسم العرض", - "provider.custom.models.remove": "إزالة النموذج", - "provider.custom.models.add": "إضافة نموذج", - "provider.custom.headers.label": "الترويسات (اختياري)", - "provider.custom.headers.key.label": "ترويسة", - "provider.custom.headers.key.placeholder": "Header-Name", - "provider.custom.headers.value.label": "القيمة", - "provider.custom.headers.value.placeholder": "قيمة", - "provider.custom.headers.remove": "إزالة الترويسة", - "provider.custom.headers.add": "إضافة ترويسة", - "provider.custom.error.providerID.required": "معرف الموفر مطلوب", - "provider.custom.error.providerID.format": "استخدم أحرفًا صغيرة، أرقامًا، شرطات، أو شرطات سفلية", - "provider.custom.error.providerID.exists": "معرف الموفر هذا موجود بالفعل", - "provider.custom.error.name.required": "اسم العرض مطلوب", - "provider.custom.error.baseURL.required": "عنوان URL الأساسي مطلوب", - "provider.custom.error.baseURL.format": "يجب أن يبدأ بـ http:// أو https://", - "provider.custom.error.required": "مطلوب", - "provider.custom.error.duplicate": "مكرر", - "provider.disconnect.toast.disconnected.title": "تم فصل {{provider}}", - "provider.disconnect.toast.disconnected.description": "لم تعد نماذج {{provider}} متاحة.", - "model.tag.free": "مجاني", - "model.tag.latest": "الأحدث", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "نص", - "model.input.image": "صورة", - "model.input.audio": "صوت", - "model.input.video": "فيديو", - "model.input.pdf": "pdf", - "model.tooltip.allows": "يسمح: {{inputs}}", - "model.tooltip.reasoning.allowed": "يسمح بالاستنتاج", - "model.tooltip.reasoning.none": "بدون استنتاج", - "model.tooltip.context": "حد السياق {{limit}}", - "common.search.placeholder": "بحث", - "common.goBack": "رجوع", - "common.goForward": "انتقل للأمام", - "common.loading": "جارٍ التحميل", - "common.loading.ellipsis": "...", - "common.cancel": "إلغاء", - "common.connect": "اتصال", - "common.disconnect": "قطع الاتصال", - "common.continue": "إرسال", - "common.submit": "إرسال", - "common.save": "حفظ", - "common.saving": "جارٍ الحفظ...", - "common.default": "افتراضي", - "common.attachment": "مرفق", - "prompt.placeholder.shell": "أدخل أمر shell... {{example}}", - "prompt.placeholder.normal": 'اسأل أي شيء... "{{example}}"', - "prompt.placeholder.simple": "اسأل أي شيء...", - "prompt.placeholder.summarizeComments": "لخّص التعليقات…", - "prompt.placeholder.summarizeComment": "لخّص التعليق…", - "prompt.mode.shell": "Shell", - "prompt.mode.normal": "Prompt", - "prompt.mode.shell.exit": "esc للخروج", - "prompt.example.1": "إصلاح TODO في قاعدة التعليمات البرمجية", - "prompt.example.2": "ما هو المكدس التقني لهذا المشروع؟", - "prompt.example.3": "إصلاح الاختبارات المعطلة", - "prompt.example.4": "اشرح كيف تعمل المصادقة", - "prompt.example.5": "البحث عن وإصلاح الثغرات الأمنية", - "prompt.example.6": "إضافة اختبارات وحدة لخدمة المستخدم", - "prompt.example.7": "إعادة هيكلة هذه الدالة لتكون أكثر قابلية للقراءة", - "prompt.example.8": "ماذا يعني هذا الخطأ؟", - "prompt.example.9": "ساعدني في تصحيح هذه المشكلة", - "prompt.example.10": "توليد وثائق API", - "prompt.example.11": "تحسين استعلامات قاعدة البيانات", - "prompt.example.12": "إضافة التحقق من صحة الإدخال", - "prompt.example.13": "إنشاء مكون جديد لـ...", - "prompt.example.14": "كيف أقوم بنشر هذا المشروع؟", - "prompt.example.15": "مراجعة الكود الخاص بي لأفضل الممارسات", - "prompt.example.16": "إضافة معالجة الأخطاء لهذه الدالة", - "prompt.example.17": "اشرح نمط regex هذا", - "prompt.example.18": "تحويل هذا إلى TypeScript", - "prompt.example.19": "إضافة تسجيل الدخول (logging) في جميع أنحاء قاعدة التعليمات البرمجية", - "prompt.example.20": "ما هي التبعيات القديمة؟", - "prompt.example.21": "ساعدني في كتابة برنامج نصي للهجرة", - "prompt.example.22": "تنفيذ التخزين المؤقت لهذه النقطة النهائية", - "prompt.example.23": "إضافة ترقيم الصفحات إلى هذه القائمة", - "prompt.example.24": "إنشاء أمر CLI لـ...", - "prompt.example.25": "كيف تعمل متغيرات البيئة هنا؟", - "prompt.popover.emptyResults": "لا توجد نتائج مطابقة", - "prompt.popover.emptyCommands": "لا توجد أوامر مطابقة", - "prompt.dropzone.label": "أفلت الصور أو ملفات PDF أو الملفات النصية هنا", - "prompt.dropzone.file.label": "أفلت لإشارة @ للملف", - "prompt.slash.badge.custom": "مخصص", - "prompt.slash.badge.skill": "مهارة", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "نشط", - "prompt.context.includeActiveFile": "تضمين الملف النشط", - "prompt.context.removeActiveFile": "إزالة الملف النشط من السياق", - "prompt.context.removeFile": "إزالة الملف من السياق", - "prompt.action.attachFile": "إرفاق ملف", - "prompt.attachment.remove": "إزالة المرفق", - "prompt.action.send": "إرسال", - "prompt.action.stop": "توقف", - "prompt.toast.pasteUnsupported.title": "مرفق غير مدعوم", - "prompt.toast.pasteUnsupported.description": "يمكن إرفاق الصور أو ملفات PDF أو الملفات النصية فقط هنا.", - "prompt.toast.modelAgentRequired.title": "حدد وكيلاً ونموذجاً", - "prompt.toast.modelAgentRequired.description": "اختر وكيلاً ونموذجاً قبل إرسال الموجه.", - "prompt.toast.worktreeCreateFailed.title": "فشل إنشاء شجرة العمل", - "prompt.toast.sessionCreateFailed.title": "فشل إنشاء الجلسة", - "prompt.toast.shellSendFailed.title": "فشل إرسال أمر shell", - "prompt.toast.commandSendFailed.title": "فشل إرسال الأمر", - "prompt.toast.promptSendFailed.title": "فشل إرسال الموجه", - "prompt.toast.promptSendFailed.description": "تعذر استرداد الجلسة", - "dialog.mcp.title": "MCPs", - "dialog.mcp.description": "{{enabled}} من {{total}} مفعل", - "dialog.mcp.empty": "لم يتم تكوين MCPs", - "dialog.lsp.empty": "تم الكشف تلقائيًا عن LSPs من أنواع الملفات", - "dialog.plugins.empty": "الإضافات المكونة في opencode.json", - "mcp.status.connected": "متصل", - "mcp.status.failed": "فشل", - "mcp.status.needs_auth": "يحتاج إلى مصادقة", - "mcp.auth.clickToAuthenticate": "انقر للمصادقة", - "mcp.status.disabled": "معطل", - "dialog.fork.empty": "لا توجد رسائل للتفرع منها", - "dialog.directory.search.placeholder": "البحث في المجلدات", - "dialog.directory.empty": "لم يتم العثور على مجلدات", - "dialog.directory.action.selectFile": "اختيار ملف", - "dialog.directory.action.selectFolder": "اختيار مجلد", - "dialog.directory.root": "الجذر", - "dialog.directory.parent": "المجلد الأصل", - "dialog.directory.readError": "تعذرت قراءة هذا المجلد", - "dialog.server.title": "الخوادم", - "dialog.server.description": "تبديل خادم OpenCode الذي يتصل به هذا التطبيق.", - "dialog.server.search.placeholder": "البحث في الخوادم", - "dialog.server.empty": "لا توجد خوادم بعد", - "dialog.server.add.title": "إضافة خادم", - "dialog.server.add.url": "عنوان URL للخادم", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "تعذر الاتصال بالخادم", - "dialog.server.add.checking": "جارٍ التحقق...", - "dialog.server.add.button": "إضافة خادم", - "dialog.server.add.name": "اسم الخادم (اختياري)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "اسم المستخدم (اختياري)", - "dialog.server.add.password": "كلمة المرور (اختياري)", - "dialog.server.edit.title": "تحرير الخادم", - "dialog.server.default.title": "الخادم الافتراضي", - "dialog.server.default.description": - "الاتصال بهذا الخادم عند بدء تشغيل التطبيق بدلاً من بدء خادم محلي. يتطلب إعادة التشغيل.", - "dialog.server.default.none": "لم يتم تحديد خادم", - "dialog.server.default.set": "تعيين الخادم الحالي كافتراضي", - "dialog.server.default.clear": "مسح", - "dialog.server.action.remove": "إزالة الخادم", - "dialog.server.menu.edit": "تعديل", - "dialog.server.menu.default": "تعيين كافتراضي", - "dialog.server.menu.defaultRemove": "إزالة الافتراضي", - "dialog.server.menu.delete": "حذف", - "dialog.server.current": "الخادم الحالي", - "dialog.server.status.default": "افتراضي", - "dialog.project.edit.title": "تحرير المشروع", - "dialog.project.edit.name": "الاسم", - "dialog.project.edit.icon": "أيقونة", - "dialog.project.edit.icon.alt": "أيقونة المشروع", - "dialog.project.edit.icon.hint": "انقر أو اسحب صورة", - "dialog.project.edit.icon.recommended": "موصى به: 128x128px", - "dialog.project.edit.color": "لون", - "dialog.project.edit.color.select": "اختر لون {{color}}", - "dialog.project.edit.worktree.startup": "سكريبت بدء تشغيل مساحة العمل", - "dialog.project.edit.worktree.startup.description": "يتم تشغيله بعد إنشاء مساحة عمل جديدة (شجرة عمل).", - "dialog.project.edit.worktree.startup.placeholder": "مثال: bun install", - "context.breakdown.title": "تفصيل السياق", - "context.breakdown.note": 'تفصيل تقريبي لرموز الإدخال. يشمل "أخرى" تعريفات الأدوات والنفقات العامة.', - "context.breakdown.system": "النظام", - "context.breakdown.user": "المستخدم", - "context.breakdown.assistant": "المساعد", - "context.breakdown.tool": "استدعاءات الأداة", - "context.breakdown.other": "أخرى", - "context.systemPrompt.title": "موجه النظام", - "context.rawMessages.title": "الرسائل الخام", - "context.stats.session": "جلسة", - "context.stats.messages": "رسائل", - "context.stats.provider": "موفر", - "context.stats.model": "نموذج", - "context.stats.limit": "حد السياق", - "context.stats.totalTokens": "إجمالي الرموز", - "context.stats.usage": "استخدام", - "context.stats.inputTokens": "رموز الإدخال", - "context.stats.outputTokens": "رموز الإخراج", - "context.stats.reasoningTokens": "رموز الاستنتاج", - "context.stats.cacheTokens": "رموز التخزين المؤقت (قراءة/كتابة)", - "context.stats.userMessages": "رسائل المستخدم", - "context.stats.assistantMessages": "رسائل المساعد", - "context.stats.totalCost": "التكلفة الإجمالية", - "context.stats.sessionCreated": "تم إنشاء الجلسة", - "context.stats.lastActivity": "آخر نشاط", - "context.usage.tokens": "رموز", - "context.usage.usage": "استخدام", - "context.usage.cost": "تكلفة", - "context.usage.clickToView": "انقر لعرض السياق", - "context.usage.view": "عرض استخدام السياق", - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - "toast.language.title": "لغة", - "toast.language.description": "تم التبديل إلى {{language}}", - "toast.theme.title": "تم تبديل السمة", - "toast.scheme.title": "مخطط الألوان", - "toast.workspace.enabled.title": "تم تمكين مساحات العمل", - "toast.workspace.enabled.description": "الآن يتم عرض عدة worktrees في الشريط الجانبي", - "toast.workspace.disabled.title": "تم تعطيل مساحات العمل", - "toast.workspace.disabled.description": "يتم عرض worktree الرئيسي فقط في الشريط الجانبي", - "toast.permissions.autoaccept.on.title": "يتم قبول الأذونات تلقائيًا", - "toast.permissions.autoaccept.on.description": "ستتم الموافقة على طلبات الأذونات تلقائيًا", - "toast.permissions.autoaccept.off.title": "تم إيقاف قبول الأذونات تلقائيًا", - "toast.permissions.autoaccept.off.description": "ستتطلب طلبات الأذونات موافقة", - "toast.model.none.title": "لم يتم تحديد نموذج", - "toast.model.none.description": "قم بتوصيل موفر لتلخيص هذه الجلسة", - "toast.file.loadFailed.title": "فشل تحميل الملف", - "toast.file.listFailed.title": "فشل سرد الملفات", - "toast.context.noLineSelection.title": "لا يوجد تحديد للأسطر", - "toast.context.noLineSelection.description": "حدد نطاق أسطر في تبويب ملف أولاً.", - "toast.session.share.copyFailed.title": "فشل نسخ عنوان URL إلى الحافظة", - "toast.session.share.success.title": "تمت مشاركة الجلسة", - "toast.session.share.success.description": "تم نسخ عنوان URL للمشاركة إلى الحافظة!", - "toast.session.share.failed.title": "فشل مشاركة الجلسة", - "toast.session.share.failed.description": "حدث خطأ أثناء مشاركة الجلسة", - "toast.session.unshare.success.title": "تم إلغاء مشاركة الجلسة", - "toast.session.unshare.success.description": "تم إلغاء مشاركة الجلسة بنجاح!", - "toast.session.unshare.failed.title": "فشل إلغاء مشاركة الجلسة", - "toast.session.unshare.failed.description": "حدث خطأ أثناء إلغاء مشاركة الجلسة", - "toast.session.listFailed.title": "فشل تحميل الجلسات لـ {{project}}", - "toast.update.title": "تحديث متاح", - "toast.update.description": "نسخة جديدة من OpenCode ({{version}}) متاحة الآن للتثبيت.", - "toast.update.action.installRestart": "تثبيت وإعادة تشغيل", - "toast.update.action.notYet": "ليس الآن", - "error.page.title": "حدث خطأ ما", - "error.page.description": "حدث خطأ أثناء تحميل التطبيق.", - "error.page.details.label": "تفاصيل الخطأ", - "error.page.action.restart": "إعادة تشغيل", - "error.page.action.report": "الإبلاغ عن الخطأ", - "error.page.action.reported": "تم الإبلاغ عن الخطأ", - "error.page.action.checking": "جارٍ التحقق...", - "error.page.action.checkUpdates": "التحقق من وجود تحديثات", - "error.page.action.updateTo": "تحديث إلى {{version}}", - "error.page.report.prefix": "يرجى الإبلاغ عن هذا الخطأ لفريق OpenCode", - "error.page.report.discord": "على Discord", - "error.page.version": "الإصدار: {{version}}", - "error.dev.rootNotFound": - "لم يتم العثور على العنصر الجذري. هل نسيت إضافته إلى index.html؟ أو ربما تمت كتابة سمة id بشكل خاطئ؟", - "error.serverSync.connectFailed": "تعذر الاتصال بالخادم. هل هناك خادم يعمل في `{{url}}`؟", - "directory.error.invalidUrl": "دليل غير صالح في عنوان URL.", - "error.chain.unknown": "خطأ غير معروف", - "error.chain.causedBy": "بسبب:", - "error.chain.apiError": "خطأ API", - "error.chain.status": "الحالة: {{status}}", - "error.chain.retryable": "قابل لإعادة المحاولة: {{retryable}}", - "error.chain.responseBody": "نص الاستجابة:\n{{body}}", - "error.chain.didYouMean": "هل كنت تعني: {{suggestions}}", - "error.chain.modelNotFound": "النموذج غير موجود: {{provider}}/{{model}}", - "error.chain.checkConfig": "تحقق من أسماء الموفر/النموذج في التكوين (opencode.json)", - "error.chain.mcpFailed": 'فشل خادم MCP "{{name}}". لاحظ أن OpenCode لا يدعم مصادقة MCP بعد.', - "error.chain.providerAuthFailed": "فشلت مصادقة الموفر ({{provider}}): {{message}}", - "error.chain.providerInitFailed": 'فشل تهيئة الموفر "{{provider}}". تحقق من بيانات الاعتماد والتكوين.', - "error.chain.configJsonInvalid": "ملف التكوين في {{path}} ليس JSON(C) صالحًا", - "error.chain.configJsonInvalidWithMessage": "ملف التكوين في {{path}} ليس JSON(C) صالحًا: {{message}}", - "error.chain.configDirectoryTypo": - 'الدليل "{{dir}}" في {{path}} غير صالح. أعد تسمية الدليل إلى "{{suggestion}}" أو قم بإزالته. هذا خطأ مطبعي شائع.', - "error.chain.configFrontmatterError": "فشل تحليل frontmatter في {{path}}:\n{{message}}", - "error.chain.configInvalid": "ملف التكوين في {{path}} غير صالح", - "error.chain.configInvalidWithMessage": "ملف التكوين في {{path}} غير صالح: {{message}}", - "notification.permission.title": "مطلوب إذن", - "notification.permission.description": "{{sessionTitle}} في {{projectName}} يحتاج إلى إذن", - "notification.question.title": "سؤال", - "notification.question.description": "{{sessionTitle}} في {{projectName}} لديه سؤال", - "notification.action.goToSession": "انتقل إلى الجلسة", - "notification.session.responseReady.title": "الاستجابة جاهزة", - "notification.session.error.title": "خطأ في الجلسة", - "notification.session.error.fallbackDescription": "حدث خطأ", - "home.recentProjects": "المشاريع الحديثة", - "home.empty.title": "لا توجد مشاريع حديثة", - "home.empty.description": "ابدأ بفتح مشروع محلي", - "session.tab.session": "جلسة", - "session.tab.review": "مراجعة", - "session.tab.context": "سياق", - "session.panel.reviewAndFiles": "المراجعة والملفات", - "session.review.filesChanged": "تم تغيير {{count}} ملفات", - "session.review.change.one": "تغيير", - "session.review.change.other": "تغييرات", - "session.review.loadingChanges": "جارٍ تحميل التغييرات...", - "session.review.empty": "لا توجد تغييرات في هذه الجلسة بعد", - "session.review.noChanges": "لا توجد تغييرات", - "session.review.noVcs": "لم يتم اكتشاف نظام التحكم في الإصدار Git، لن يتم عرض التغييرات", - "session.review.noSnapshot": "تم تعطيل تتبع اللقطات في التكوين، لذا فإن تغييرات الجلسة غير متوفرة", - "session.files.selectToOpen": "اختر ملفًا لفتحه", - "session.files.all": "كل الملفات", - "session.files.empty": "لا توجد ملفات", - "session.files.binaryContent": "ملف ثنائي (لا يمكن عرض المحتوى)", - "session.messages.renderEarlier": "عرض الرسائل السابقة", - "session.messages.loadingEarlier": "جارٍ تحميل الرسائل السابقة...", - "session.messages.loadEarlier": "تحميل الرسائل السابقة", - "session.messages.loading": "جارٍ تحميل الرسائل...", - "session.messages.jumpToLatest": "الانتقال إلى الأحدث", - "session.context.addToContext": "إضافة {{selection}} إلى السياق", - "session.todo.title": "المهام", - "session.todo.collapse": "طي", - "session.todo.expand": "توسيع", - "session.followupDock.summary.one": "{{count}} رسالة في الانتظار", - "session.followupDock.summary.other": "{{count}} رسائل في الانتظار", - "session.followupDock.sendNow": "إرسال الآن", - "session.followupDock.edit": "تحرير", - "session.followupDock.collapse": "طي الرسائل المنتظرة", - "session.followupDock.expand": "توسيع الرسائل المنتظرة", - "session.revertDock.summary.one": "{{count}} رسالة تم التراجع عنها", - "session.revertDock.summary.other": "{{count}} رسائل تم التراجع عنها", - "session.revertDock.collapse": "طي الرسائل التي تم التراجع عنها", - "session.revertDock.expand": "توسيع الرسائل التي تم التراجع عنها", - "session.revertDock.restore": "استعادة الرسالة", - "session.new.title": "ابنِ أي شيء", - "session.new.worktree.main": "الفرع الرئيسي", - "session.new.worktree.mainWithBranch": "الفرع الرئيسي ({{branch}})", - "session.new.worktree.create": "إنشاء شجرة عمل جديدة", - "session.new.lastModified": "آخر تعديل", - "session.header.search.placeholder": "بحث {{project}}", - "session.header.searchFiles": "بحث عن الملفات", - "session.header.openIn": "فتح في", - "session.header.open.action": "فتح {{app}}", - "session.header.open.ariaLabel": "فتح في {{app}}", - "session.header.open.menu": "خيارات الفتح", - "session.header.open.copyPath": "نسخ المسار", - "status.popover.trigger": "الحالة", - "status.popover.ariaLabel": "إعدادات الخوادم", - "status.popover.tab.servers": "الخوادم", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "الإضافات", - "status.popover.action.manageServers": "إدارة الخوادم", - "session.share.popover.title": "نشر على الويب", - "session.share.popover.description.shared": "هذه الجلسة عامة على الويب. يمكن لأي شخص لديه الرابط الوصول إليها.", - "session.share.popover.description.unshared": "شارك الجلسة علنًا على الويب. ستكون متاحة لأي شخص لديه الرابط.", - "session.share.action.share": "مشاركة", - "session.share.action.publish": "نشر", - "session.share.action.publishing": "جارٍ النشر...", - "session.share.action.unpublish": "إلغاء النشر", - "session.share.action.unpublishing": "جارٍ إلغاء النشر...", - "session.share.action.view": "عرض", - "session.share.copy.copied": "تم النسخ", - "session.share.copy.copyLink": "نسخ الرابط", - "lsp.tooltip.none": "لا توجد خوادم LSP", - "lsp.label.connected": "{{count}} LSP", - "prompt.loading": "جارٍ تحميل الموجه...", - "terminal.loading": "جارٍ تحميل المحطة الطرفية...", - "terminal.title": "محطة طرفية", - "terminal.title.numbered": "محطة طرفية {{number}}", - "terminal.close": "إغلاق المحطة الطرفية", - "terminal.connectionLost.title": "فقد الاتصال", - "terminal.connectionLost.description": "انقطع اتصال المحطة الطرفية. يمكن أن يحدث هذا عند إعادة تشغيل الخادم.", - "common.closeTab": "إغلاق علامة التبويب", - "common.dismiss": "رفض", - "common.requestFailed": "فشل الطلب", - "common.moreOptions": "مزيد من الخيارات", - "common.learnMore": "اعرف المزيد", - "common.rename": "إعادة تسمية", - "common.reset": "إعادة تعيين", - "common.archive": "أرشفة", - "common.delete": "حذف", - "common.close": "إغلاق", - "common.edit": "تحرير", - "common.loadMore": "تحميل المزيد", - "common.key.esc": "ESC", - "sidebar.menu.toggle": "تبديل القائمة", - "sidebar.nav.projectsAndSessions": "المشاريع والجلسات", - "sidebar.settings": "الإعدادات", - "sidebar.help": "مساعدة", - "sidebar.workspaces.enable": "تمكين مساحات العمل", - "sidebar.workspaces.disable": "تعطيل مساحات العمل", - "sidebar.gettingStarted.title": "البدء", - "sidebar.gettingStarted.line1": "يتضمن OpenCode نماذج مجانية حتى تتمكن من البدء فورًا.", - "sidebar.gettingStarted.line2": "قم بتوصيل أي موفر لاستخدام النماذج، بما في ذلك Claude و GPT و Gemini وما إلى ذلك.", - "sidebar.project.recentSessions": "الجلسات الحديثة", - "sidebar.project.viewAllSessions": "عرض جميع الجلسات", - "sidebar.project.clearNotifications": "مسح الإشعارات", - "app.name.desktop": "OpenCode Desktop", - "settings.section.desktop": "سطح المكتب", - "settings.section.server": "الخادم", - "settings.tab.general": "عام", - "settings.tab.shortcuts": "اختصارات", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "تكامل WSL", - "settings.desktop.wsl.description": "تشغيل خادم OpenCode داخل WSL على Windows.", - "settings.general.section.appearance": "المظهر", - "settings.general.section.notifications": "إشعارات النظام", - "settings.general.section.updates": "التحديثات", - "settings.general.section.sounds": "المؤثرات الصوتية", - "settings.general.section.feed": "الخلاصة", - "settings.general.section.display": "شاشة العرض", - "settings.general.row.language.title": "اللغة", - "settings.general.row.language.description": "تغيير لغة العرض لـ OpenCode", - "settings.general.row.appearance.title": "المظهر", - "settings.general.row.appearance.description": "تخصيص كيفية ظهور OpenCode على جهازك", - "settings.general.row.colorScheme.title": "مخطط الألوان", - "settings.general.row.colorScheme.description": "اختر ما إذا كان OpenCode يتبع سمة النظام أو الفاتح أو الداكن", - "settings.general.row.theme.title": "السمة", - "settings.general.row.theme.description": "تخصيص سمة OpenCode.", - "settings.general.row.font.title": "خط الكود", - "settings.general.row.font.description": "خصّص الخط المستخدم في كتل التعليمات البرمجية", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "خط الواجهة", - "settings.general.row.uiFont.description": "خصّص الخط المستخدم في الواجهة بأكملها", - "settings.general.row.followup.title": "سلوك المتابعة", - "settings.general.row.followup.description": "اختر ما إذا كانت طلبات المتابعة توجه فورًا أو تنتظر في قائمة انتظار", - "settings.general.row.followup.option.queue": "قائمة انتظار", - "settings.general.row.followup.option.steer": "توجيه", - "settings.general.row.reasoningSummaries.title": "إظهار ملخصات الاستنتاج", - "settings.general.row.reasoningSummaries.description": "عرض ملخصات استنتاج النموذج في الشريط الزمني", - "settings.general.row.shellToolPartsExpanded.title": "توسيع أجزاء أداة shell", - "settings.general.row.shellToolPartsExpanded.description": - "إظهار أجزاء أداة shell موسعة بشكل افتراضي في الشريط الزمني", - "settings.general.row.editToolPartsExpanded.title": "توسيع أجزاء أداة edit", - "settings.general.row.editToolPartsExpanded.description": - "إظهار أجزاء أدوات edit و write و patch موسعة بشكل افتراضي في الشريط الزمني", - "settings.general.row.wayland.title": "استخدام Wayland الأصلي", - "settings.general.row.wayland.description": "تعطيل التراجع إلى X11 على Wayland. يتطلب إعادة التشغيل.", - "settings.general.row.wayland.tooltip": - "على Linux مع شاشات بمعدلات تحديث مختلطة، يمكن أن يكون Wayland الأصلي أكثر استقرارًا.", - "settings.general.row.releaseNotes.title": "ملاحظات الإصدار", - "settings.general.row.releaseNotes.description": 'عرض نوافذ "ما الجديد" المنبثقة بعد التحديثات', - "settings.updates.row.startup.title": "التحقق من التحديثات عند بدء التشغيل", - "settings.updates.row.startup.description": "التحقق تلقائيًا من التحديثات عند تشغيل OpenCode", - "settings.updates.row.check.title": "التحقق من التحديثات", - "settings.updates.row.check.description": "التحقق يدويًا من التحديثات وتثبيتها إذا كانت متاحة", - "settings.updates.action.checkNow": "تحقق الآن", - "settings.updates.action.checking": "جارٍ التحقق...", - "settings.updates.toast.latest.title": "أنت على آخر إصدار", - "settings.updates.toast.latest.description": "أنت تستخدم أحدث إصدار من OpenCode.", - "sound.option.none": "بلا", - "sound.option.alert01": "تنبيه 01", - "sound.option.alert02": "تنبيه 02", - "sound.option.alert03": "تنبيه 03", - "sound.option.alert04": "تنبيه 04", - "sound.option.alert05": "تنبيه 05", - "sound.option.alert06": "تنبيه 06", - "sound.option.alert07": "تنبيه 07", - "sound.option.alert08": "تنبيه 08", - "sound.option.alert09": "تنبيه 09", - "sound.option.alert10": "تنبيه 10", - "sound.option.bipbop01": "بيب بوب 01", - "sound.option.bipbop02": "بيب بوب 02", - "sound.option.bipbop03": "بيب بوب 03", - "sound.option.bipbop04": "بيب بوب 04", - "sound.option.bipbop05": "بيب بوب 05", - "sound.option.bipbop06": "بيب بوب 06", - "sound.option.bipbop07": "بيب بوب 07", - "sound.option.bipbop08": "بيب بوب 08", - "sound.option.bipbop09": "بيب بوب 09", - "sound.option.bipbop10": "بيب بوب 10", - "sound.option.staplebops01": "ستابل بوبس 01", - "sound.option.staplebops02": "ستابل بوبس 02", - "sound.option.staplebops03": "ستابل بوبس 03", - "sound.option.staplebops04": "ستابل بوبس 04", - "sound.option.staplebops05": "ستابل بوبس 05", - "sound.option.staplebops06": "ستابل بوبس 06", - "sound.option.staplebops07": "ستابل بوبس 07", - "sound.option.nope01": "كلا 01", - "sound.option.nope02": "كلا 02", - "sound.option.nope03": "كلا 03", - "sound.option.nope04": "كلا 04", - "sound.option.nope05": "كلا 05", - "sound.option.nope06": "كلا 06", - "sound.option.nope07": "كلا 07", - "sound.option.nope08": "كلا 08", - "sound.option.nope09": "كلا 09", - "sound.option.nope10": "كلا 10", - "sound.option.nope11": "كلا 11", - "sound.option.nope12": "كلا 12", - "sound.option.yup01": "نعم 01", - "sound.option.yup02": "نعم 02", - "sound.option.yup03": "نعم 03", - "sound.option.yup04": "نعم 04", - "sound.option.yup05": "نعم 05", - "sound.option.yup06": "نعم 06", - "settings.general.notifications.agent.title": "وكيل", - "settings.general.notifications.agent.description": "عرض إشعار النظام عندما يكتمل الوكيل أو يحتاج إلى اهتمام", - "settings.general.notifications.permissions.title": "أذونات", - "settings.general.notifications.permissions.description": "عرض إشعار النظام عند الحاجة إلى إذن", - "settings.general.notifications.errors.title": "أخطاء", - "settings.general.notifications.errors.description": "عرض إشعار النظام عند حدوث خطأ", - "settings.general.sounds.agent.title": "وكيل", - "settings.general.sounds.agent.description": "تشغيل صوت عندما يكتمل الوكيل أو يحتاج إلى اهتمام", - "settings.general.sounds.permissions.title": "أذونات", - "settings.general.sounds.permissions.description": "تشغيل صوت عند الحاجة إلى إذن", - "settings.general.sounds.errors.title": "أخطاء", - "settings.general.sounds.errors.description": "تشغيل صوت عند حدوث خطأ", - "settings.shortcuts.title": "اختصارات لوحة المفاتيح", - "settings.shortcuts.reset.button": "إعادة التعيين إلى الافتراضيات", - "settings.shortcuts.reset.toast.title": "تم إعادة تعيين الاختصارات", - "settings.shortcuts.reset.toast.description": "تم إعادة تعيين اختصارات لوحة المفاتيح إلى الافتراضيات.", - "settings.shortcuts.conflict.title": "الاختصار قيد الاستخدام بالفعل", - "settings.shortcuts.conflict.description": "{{keybind}} معين بالفعل لـ {{titles}}.", - "settings.shortcuts.unassigned": "غير معين", - "settings.shortcuts.pressKeys": "اضغط على المفاتيح", - "settings.shortcuts.search.placeholder": "البحث في الاختصارات", - "settings.shortcuts.search.empty": "لم يتم العثور على اختصارات", - "settings.shortcuts.group.general": "عام", - "settings.shortcuts.group.session": "جلسة", - "settings.shortcuts.group.navigation": "تصفح", - "settings.shortcuts.group.modelAndAgent": "النموذج والوكيل", - "settings.shortcuts.group.terminal": "المحطة الطرفية", - "settings.shortcuts.group.prompt": "موجه", - "settings.providers.title": "الموفرون", - "settings.providers.description": "ستكون إعدادات الموفر قابلة للتكوين هنا.", - "settings.providers.section.connected": "الموفرون المتصلون", - "settings.providers.connected.empty": "لا يوجد موفرون متصلون", - "settings.providers.section.popular": "الموفرون الشائعون", - "settings.providers.tag.environment": "البيئة", - "settings.providers.tag.config": "التكوين", - "settings.providers.tag.custom": "مخصص", - "settings.providers.tag.other": "أخرى", - "settings.models.title": "النماذج", - "settings.models.description": "ستكون إعدادات النموذج قابلة للتكوين هنا.", - "settings.agents.title": "الوكلاء", - "settings.agents.description": "ستكون إعدادات الوكيل قابلة للتكوين هنا.", - "settings.commands.title": "الأوامر", - "settings.commands.description": "ستكون إعدادات الأمر قابلة للتكوين هنا.", - "settings.mcp.title": "MCP", - "settings.mcp.description": "ستكون إعدادات MCP قابلة للتكوين هنا.", - "settings.permissions.title": "الأذونات", - "settings.permissions.description": "تحكم في الأدوات التي يمكن للخادم استخدامها بشكل افتراضي.", - "settings.permissions.section.tools": "الأدوات", - "settings.permissions.toast.updateFailed.title": "فشل تحديث الأذونات", - "settings.permissions.action.allow": "سماح", - "settings.permissions.action.ask": "سؤال", - "settings.permissions.action.deny": "رفض", - "settings.permissions.tool.read.title": "قراءة", - "settings.permissions.tool.read.description": "قراءة ملف (يطابق مسار الملف)", - "settings.permissions.tool.edit.title": "تحرير", - "settings.permissions.tool.edit.description": - "تعديل الملفات، بما في ذلك التحرير والكتابة والتصحيحات والتحرير المتعدد", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "مطابقة الملفات باستخدام أنماط glob", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "البحث في محتويات الملف باستخدام التعبيرات العادية", - "settings.permissions.tool.list.title": "قائمة", - "settings.permissions.tool.list.description": "سرد الملفات داخل دليل", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "تشغيل أوامر shell", - "settings.permissions.tool.task.title": "مهمة", - "settings.permissions.tool.task.description": "تشغيل الوكلاء الفرعيين", - "settings.permissions.tool.skill.title": "مهارة", - "settings.permissions.tool.skill.description": "تحميل مهارة بالاسم", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "تشغيل استعلامات خادم اللغة", - "settings.permissions.tool.todowrite.title": "كتابة المهام", - "settings.permissions.tool.todowrite.description": "تحديث قائمة المهام", - "settings.permissions.tool.webfetch.title": "جلب الويب", - "settings.permissions.tool.webfetch.description": "جلب محتوى من عنوان URL", - "settings.permissions.tool.websearch.title": "بحث الويب", - "settings.permissions.tool.websearch.description": "البحث في الويب", - "settings.permissions.tool.external_directory.title": "دليل خارجي", - "settings.permissions.tool.external_directory.description": "الوصول إلى الملفات خارج دليل المشروع", - "settings.permissions.tool.doom_loop.title": "حلقة الموت", - "settings.permissions.tool.doom_loop.description": "اكتشاف استدعاءات الأدوات المتكررة بمدخلات متطابقة", - "session.delete.failed.title": "فشل حذف الجلسة", - "session.delete.title": "حذف الجلسة", - "session.delete.confirm": 'حذف الجلسة "{{name}}"؟', - "session.delete.button": "حذف الجلسة", - "workspace.new": "مساحة عمل جديدة", - "workspace.type.local": "محلي", - "workspace.type.sandbox": "صندوق رمل", - "workspace.create.failed.title": "فشل إنشاء مساحة العمل", - "workspace.delete.failed.title": "فشل حذف مساحة العمل", - "workspace.resetting.title": "إعادة تعيين مساحة العمل", - "workspace.resetting.description": "قد يستغرق هذا دقيقة.", - "workspace.reset.failed.title": "فشل إعادة تعيين مساحة العمل", - "workspace.reset.success.title": "تمت إعادة تعيين مساحة العمل", - "workspace.reset.success.description": "مساحة العمل تطابق الآن الفرع الافتراضي.", - "workspace.error.stillPreparing": "مساحة العمل لا تزال قيد الإعداد", - "workspace.status.checking": "التحقق من التغييرات غير المدمجة...", - "workspace.status.error": "تعذر التحقق من حالة git.", - "workspace.status.clean": "لم يتم اكتشاف تغييرات غير مدمجة.", - "workspace.status.dirty": "تم اكتشاف تغييرات غير مدمجة في مساحة العمل هذه.", - "workspace.delete.title": "حذف مساحة العمل", - "workspace.delete.confirm": 'حذف مساحة العمل "{{name}}"؟', - "workspace.delete.button": "حذف مساحة العمل", - "workspace.reset.title": "إعادة تعيين مساحة العمل", - "workspace.reset.confirm": 'إعادة تعيين مساحة العمل "{{name}}"؟', - "workspace.reset.button": "إعادة تعيين مساحة العمل", - "workspace.reset.archived.none": "لن تتم أرشفة أي جلسات نشطة.", - "workspace.reset.archived.one": "ستتم أرشفة جلسة واحدة.", - "workspace.reset.archived.many": "ستتم أرشفة {{count}} جلسات.", - "workspace.reset.note": "سيؤدي هذا إلى إعادة تعيين مساحة العمل لتتطابق مع الفرع الافتراضي.", - "common.open": "فتح", - "dialog.releaseNotes.action.getStarted": "البدء", - "dialog.releaseNotes.action.next": "التالي", - "dialog.releaseNotes.action.hideFuture": "عدم إظهار هذا في المستقبل", - "dialog.releaseNotes.media.alt": "معاينة الإصدار", - "toast.project.reloadFailed.title": "فشل في إعادة تحميل {{project}}", - "error.server.invalidConfiguration": "تكوين غير صالح", - "common.moreCountSuffix": " (+{{count}} إضافي)", - "common.time.justNow": "الآن", - "common.time.minutesAgo.short": "قبل {{count}} د", - "common.time.hoursAgo.short": "قبل {{count}} س", - "common.time.daysAgo.short": "قبل {{count}} ي", - "settings.providers.connected.environmentDescription": "متصل من متغيرات البيئة الخاصة بك", - "settings.providers.custom.description": "أضف مزود متوافق مع OpenAI بواسطة عنوان URL الأساسي.", - - "app.server.unreachable": "تعذر الوصول إلى {{server}}", - "app.server.retrying": "جاري إعادة المحاولة تلقائيًا...", - "app.server.otherServers": "خوادم أخرى", - "dialog.server.add.usernamePlaceholder": "اسم المستخدم", - "dialog.server.add.passwordPlaceholder": "كلمة المرور", - "server.row.noUsername": "لا يوجد اسم مستخدم", - "session.review.noVcs.createGit.title": "إنشاء مستودع Git", - "session.review.noVcs.createGit.description": "تتبع ومراجعة والتراجع عن التغييرات في هذا المشروع", - "session.review.noVcs.createGit.actionLoading": "جاري إنشاء مستودع Git...", - "session.review.noVcs.createGit.action": "إنشاء مستودع Git", - "session.todo.progress": "تم إكمال {{done}} من {{total}} مهام", - "session.question.progress": "{{current}} من {{total}} أسئلة", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "مستكشف الملفات", - "session.header.open.fileManager": "مدير الملفات", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "المحطة الطرفية", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "تشخيص أداء التطوير", - "debugBar.na": "غير متاح", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": "آخر انتقال مكتمل للمسار يمس صفحة جلسة، مُقاسًا من بدء التوجيه حتى أول رسم بعد استقراره.", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "الإطارات المتجددة في الثانية خلال آخر 5 ثوانٍ.", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "أسوأ وقت للإطار خلال آخر 5 ثوانٍ.", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "الإطارات التي تزيد عن 32 مللي ثانية في آخر 5 ثوانٍ.", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "الوقت المحظور وعدد المهام الطويلة في آخر 5 ثوانٍ. أقصى مهمة: {{max}}.", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "أسوأ تأخير إدخال تمت ملاحظته في آخر 5 ثوانٍ.", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": "مدة التفاعل التقريبية خلال آخر 5 ثوانٍ. هذا يشبه INP، وليس Web Vitals INP الرسمي.", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "التحول التخطيطي التراكمي لعمر التطبيق الحالي.", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "كومة JS المستخدمة مقابل حد الكومة. Chromium فقط.", - "debugBar.mem.tip": "كومة JS المستخدمة مقابل حد الكومة. {{used}} من {{limit}}.", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "Space", - "common.key.backspace": "Backspace", - "common.key.enter": "Enter", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "غير معروف", - "error.page.circular": "[دائري]", - "error.serverSDK.noServerAvailable": "لا يوجد خادم متاح", - "error.serverSDK.serverNotAvailable": "الخادم غير متاح", - "error.childStore.persistedCacheCreateFailed": "فشل إنشاء ذاكرة التخزين المؤقت الدائمة", - "error.childStore.persistedProjectMetadataCreateFailed": "فشل إنشاء بيانات تعريف المشروع الدائمة", - "error.childStore.persistedProjectIconCreateFailed": "فشل إنشاء أيقونة المشروع الدائمة", - "error.childStore.storeCreateFailed": "فشل إنشاء المخزن", - "terminal.connectionLost.abnormalClose": "تم إغلاق WebSocket بشكل غير طبيعي: {{code}}", -} diff --git a/packages/app/src/i18n/br.ts b/packages/app/src/i18n/br.ts deleted file mode 100644 index 2e53bb1af0..0000000000 --- a/packages/app/src/i18n/br.ts +++ /dev/null @@ -1,862 +0,0 @@ -export const dict = { - "command.category.suggested": "Sugerido", - "command.category.view": "Visualizar", - "command.category.project": "Projeto", - "command.category.provider": "Provedor", - "command.category.server": "Servidor", - "command.category.session": "Sessão", - "command.category.theme": "Tema", - "command.category.language": "Idioma", - "command.category.file": "Arquivo", - "command.category.context": "Contexto", - "command.category.terminal": "Terminal", - "command.category.model": "Modelo", - "command.category.mcp": "MCP", - "command.category.agent": "Agente", - "command.category.permissions": "Permissões", - "command.category.workspace": "Espaço de trabalho", - "command.category.settings": "Configurações", - "theme.scheme.system": "Sistema", - "theme.scheme.light": "Claro", - "theme.scheme.dark": "Escuro", - "command.sidebar.toggle": "Alternar barra lateral", - "command.project.open": "Abrir projeto", - "command.provider.connect": "Conectar provedor", - "command.server.switch": "Trocar servidor", - "command.settings.open": "Abrir configurações", - "command.session.previous": "Sessão anterior", - "command.session.next": "Próxima sessão", - "command.session.previous.unseen": "Sessão não lida anterior", - "command.session.next.unseen": "Próxima sessão não lida", - "command.session.archive": "Arquivar sessão", - "command.palette": "Paleta de comandos", - "command.theme.cycle": "Alternar tema", - "command.theme.set": "Usar tema: {{theme}}", - "command.theme.scheme.cycle": "Alternar esquema de cores", - "command.theme.scheme.set": "Usar esquema de cores: {{scheme}}", - "command.language.cycle": "Alternar idioma", - "command.language.set": "Usar idioma: {{language}}", - "command.session.new": "Nova sessão", - "command.file.open": "Abrir arquivo", - "command.tab.close": "Fechar aba", - "command.context.addSelection": "Adicionar seleção ao contexto", - "command.context.addSelection.description": "Adicionar as linhas selecionadas do arquivo atual", - "command.input.focus": "Focar entrada", - "command.terminal.toggle": "Alternar terminal", - "command.fileTree.toggle": "Alternar árvore de arquivos", - "command.review.toggle": "Alternar revisão", - "command.terminal.new": "Novo terminal", - "command.terminal.new.description": "Criar uma nova aba de terminal", - "command.steps.toggle": "Alternar passos", - "command.steps.toggle.description": "Mostrar ou ocultar passos da mensagem atual", - "command.message.previous": "Mensagem anterior", - "command.message.previous.description": "Ir para a mensagem de usuário anterior", - "command.message.next": "Próxima mensagem", - "command.message.next.description": "Ir para a próxima mensagem de usuário", - "command.model.choose": "Escolher modelo", - "command.model.choose.description": "Selecionar um modelo diferente", - "command.mcp.toggle": "Alternar MCPs", - "command.mcp.toggle.description": "Alternar MCPs", - "command.agent.cycle": "Alternar agente", - "command.agent.cycle.description": "Mudar para o próximo agente", - "command.agent.cycle.reverse": "Alternar agente (reverso)", - "command.agent.cycle.reverse.description": "Mudar para o agente anterior", - "command.model.variant.cycle": "Alternar nível de raciocínio", - "command.model.variant.cycle.description": "Mudar para o próximo nível de esforço", - "command.prompt.mode.shell": "Shell", - "command.prompt.mode.normal": "Prompt", - "command.permissions.autoaccept.enable": "Aceitar permissões automaticamente", - "command.permissions.autoaccept.disable": "Parar de aceitar permissões automaticamente", - "command.workspace.toggle": "Alternar espaços de trabalho", - "command.workspace.toggle.description": "Habilitar ou desabilitar múltiplos espaços de trabalho na barra lateral", - "command.session.undo": "Desfazer", - "command.session.undo.description": "Desfazer a última mensagem", - "command.session.redo": "Refazer", - "command.session.redo.description": "Refazer a última mensagem desfeita", - "command.session.compact": "Compactar sessão", - "command.session.compact.description": "Resumir a sessão para reduzir o tamanho do contexto", - "command.session.fork": "Bifurcar da mensagem", - "command.session.fork.description": "Criar uma nova sessão a partir de uma mensagem anterior", - "command.session.share": "Compartilhar sessão", - "command.session.share.description": "Compartilhar esta sessão e copiar a URL para a área de transferência", - "command.session.unshare": "Parar de compartilhar sessão", - "command.session.unshare.description": "Parar de compartilhar esta sessão", - "palette.search.placeholder": "Buscar arquivos, comandos e sessões", - "palette.empty": "Nenhum resultado encontrado", - "palette.group.commands": "Comandos", - "palette.group.files": "Arquivos", - "dialog.provider.search.placeholder": "Buscar provedores", - "dialog.provider.empty": "Nenhum provedor encontrado", - "dialog.provider.group.popular": "Popular", - "dialog.provider.group.other": "Outro", - "dialog.provider.tag.recommended": "Recomendado", - "dialog.provider.opencode.note": "Modelos selecionados incluindo Claude, GPT, Gemini e mais", - "dialog.provider.opencode.tagline": "Modelos otimizados e confiáveis", - "dialog.provider.opencodeGo.tagline": "Assinatura de baixo custo para todos", - "dialog.provider.anthropic.note": "Conectar com Claude Pro/Max ou chave de API", - "dialog.provider.copilot.note": "Conectar com Copilot ou chave de API", - "dialog.provider.openai.note": "Conectar com ChatGPT Pro/Plus ou chave de API", - "dialog.provider.google.note": "Modelos Gemini para respostas rápidas e estruturadas", - "dialog.provider.openrouter.note": "Acesse todos os modelos suportados de um único provedor", - "dialog.provider.vercel.note": "Acesso unificado a modelos de IA com roteamento inteligente", - "dialog.model.select.title": "Selecionar modelo", - "dialog.model.search.placeholder": "Buscar modelos", - "dialog.model.empty": "Nenhum resultado de modelo", - "dialog.model.manage": "Gerenciar modelos", - "dialog.model.manage.description": "Personalizar quais modelos aparecem no seletor de modelos.", - "dialog.model.manage.provider.toggle": "Alternar todos os modelos {{provider}}", - "dialog.model.unpaid.freeModels.title": "Modelos gratuitos fornecidos pelo OpenCode", - "dialog.model.unpaid.addMore.title": "Adicionar mais modelos de provedores populares", - "dialog.provider.viewAll": "Ver mais provedores", - "provider.connect.title": "Conectar {{provider}}", - "provider.connect.title.anthropicProMax": "Entrar com Claude Pro/Max", - "provider.connect.selectMethod": "Selecionar método de login para {{provider}}.", - "provider.connect.method.apiKey": "Chave de API", - "provider.connect.status.inProgress": "Autorização em andamento...", - "provider.connect.status.waiting": "Aguardando autorização...", - "provider.connect.status.failed": "Autorização falhou: {{error}}", - "provider.connect.apiKey.description": - "Digite sua chave de API do {{provider}} para conectar sua conta e usar modelos do {{provider}} no OpenCode.", - "provider.connect.apiKey.label": "Chave de API do {{provider}}", - "provider.connect.apiKey.placeholder": "Chave de API", - "provider.connect.apiKey.required": "A chave de API é obrigatória", - "provider.connect.opencodeZen.line1": - "OpenCode Zen oferece acesso a um conjunto selecionado de modelos confiáveis otimizados para agentes de código.", - "provider.connect.opencodeZen.line2": - "Com uma única chave de API você terá acesso a modelos como Claude, GPT, Gemini, GLM e mais.", - "provider.connect.opencodeZen.visit.prefix": "Visite ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " para obter sua chave de API.", - "provider.connect.oauth.code.visit.prefix": "Visite ", - "provider.connect.oauth.code.visit.link": "este link", - "provider.connect.oauth.code.visit.suffix": - " para obter seu código de autorização e conectar sua conta para usar modelos do {{provider}} no OpenCode.", - "provider.connect.oauth.code.label": "Código de autorização {{method}}", - "provider.connect.oauth.code.placeholder": "Código de autorização", - "provider.connect.oauth.code.required": "O código de autorização é obrigatório", - "provider.connect.oauth.code.invalid": "Código de autorização inválido", - "provider.connect.oauth.auto.visit.prefix": "Visite ", - "provider.connect.oauth.auto.visit.link": "este link", - "provider.connect.oauth.auto.visit.suffix": - " e digite o código abaixo para conectar sua conta e usar modelos do {{provider}} no OpenCode.", - "provider.connect.oauth.auto.confirmationCode": "Código de confirmação", - "provider.connect.toast.connected.title": "{{provider}} conectado", - "provider.connect.toast.connected.description": "Modelos do {{provider}} agora estão disponíveis para uso.", - "provider.custom.title": "Provedor personalizado", - "provider.custom.description.prefix": "Configure um provedor compatível com OpenAI. Veja a ", - "provider.custom.description.link": "documentação de configuração do provedor", - "provider.custom.description.suffix": ".", - "provider.custom.field.providerID.label": "ID do Provedor", - "provider.custom.field.providerID.placeholder": "meuprovedor", - "provider.custom.field.providerID.description": "Letras minúsculas, números, hifens ou sublinhados", - "provider.custom.field.name.label": "Nome de exibição", - "provider.custom.field.name.placeholder": "Meu Provedor de IA", - "provider.custom.field.baseURL.label": "URL Base", - "provider.custom.field.baseURL.placeholder": "https://api.meuprovedor.com/v1", - "provider.custom.field.apiKey.label": "Chave de API", - "provider.custom.field.apiKey.placeholder": "Chave de API", - "provider.custom.field.apiKey.description": "Opcional. Deixe em branco se gerenciar autenticação via cabeçalhos.", - "provider.custom.models.label": "Modelos", - "provider.custom.models.id.label": "ID", - "provider.custom.models.id.placeholder": "id-do-modelo", - "provider.custom.models.name.label": "Nome", - "provider.custom.models.name.placeholder": "Nome de Exibição", - "provider.custom.models.remove": "Remover modelo", - "provider.custom.models.add": "Adicionar modelo", - "provider.custom.headers.label": "Cabeçalhos (opcional)", - "provider.custom.headers.key.label": "Cabeçalho", - "provider.custom.headers.key.placeholder": "Nome-Do-Cabeçalho", - "provider.custom.headers.value.label": "Valor", - "provider.custom.headers.value.placeholder": "valor", - "provider.custom.headers.remove": "Remover cabeçalho", - "provider.custom.headers.add": "Adicionar cabeçalho", - "provider.custom.error.providerID.required": "ID do Provedor é obrigatório", - "provider.custom.error.providerID.format": "Use letras minúsculas, números, hifens ou sublinhados", - "provider.custom.error.providerID.exists": "Esse ID de provedor já existe", - "provider.custom.error.name.required": "Nome de exibição é obrigatório", - "provider.custom.error.baseURL.required": "URL Base é obrigatória", - "provider.custom.error.baseURL.format": "Deve começar com http:// ou https://", - "provider.custom.error.required": "Obrigatório", - "provider.custom.error.duplicate": "Duplicado", - "provider.disconnect.toast.disconnected.title": "{{provider}} desconectado", - "provider.disconnect.toast.disconnected.description": "Os modelos de {{provider}} não estão mais disponíveis.", - "model.tag.free": "Grátis", - "model.tag.latest": "Mais recente", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "texto", - "model.input.image": "imagem", - "model.input.audio": "áudio", - "model.input.video": "vídeo", - "model.input.pdf": "pdf", - "model.tooltip.allows": "Permite: {{inputs}}", - "model.tooltip.reasoning.allowed": "Permite raciocínio", - "model.tooltip.reasoning.none": "Sem raciocínio", - "model.tooltip.context": "Limite de contexto {{limit}}", - "common.search.placeholder": "Buscar", - "common.goBack": "Voltar", - "common.goForward": "Avançar", - "common.loading": "Carregando", - "common.loading.ellipsis": "...", - "common.cancel": "Cancelar", - "common.connect": "Conectar", - "common.disconnect": "Desconectar", - "common.continue": "Enviar", - "common.submit": "Enviar", - "common.save": "Salvar", - "common.saving": "Salvando...", - "common.default": "Padrão", - "common.attachment": "anexo", - "prompt.placeholder.shell": "Digite comando do shell... {{example}}", - "prompt.placeholder.normal": 'Pergunte qualquer coisa... "{{example}}"', - "prompt.placeholder.simple": "Pergunte qualquer coisa...", - "prompt.placeholder.summarizeComments": "Resumir comentários…", - "prompt.placeholder.summarizeComment": "Resumir comentário…", - "prompt.mode.shell": "Shell", - "prompt.mode.normal": "Prompt", - "prompt.mode.shell.exit": "esc para sair", - "prompt.example.1": "Corrigir um TODO no código", - "prompt.example.2": "Qual é a stack tecnológica deste projeto?", - "prompt.example.3": "Corrigir testes quebrados", - "prompt.example.4": "Explicar como funciona a autenticação", - "prompt.example.5": "Encontrar e corrigir vulnerabilidades de segurança", - "prompt.example.6": "Adicionar testes unitários para o serviço de usuário", - "prompt.example.7": "Refatorar esta função para melhor legibilidade", - "prompt.example.8": "O que significa este erro?", - "prompt.example.9": "Me ajude a depurar este problema", - "prompt.example.10": "Gerar documentação da API", - "prompt.example.11": "Otimizar consultas ao banco de dados", - "prompt.example.12": "Adicionar validação de entrada", - "prompt.example.13": "Criar um novo componente para...", - "prompt.example.14": "Como faço o deploy deste projeto?", - "prompt.example.15": "Revisar meu código para boas práticas", - "prompt.example.16": "Adicionar tratamento de erros a esta função", - "prompt.example.17": "Explicar este padrão regex", - "prompt.example.18": "Converter isto para TypeScript", - "prompt.example.19": "Adicionar logging em todo o código", - "prompt.example.20": "Quais dependências estão desatualizadas?", - "prompt.example.21": "Me ajude a escrever um script de migração", - "prompt.example.22": "Implementar cache para este endpoint", - "prompt.example.23": "Adicionar paginação a esta lista", - "prompt.example.24": "Criar um comando CLI para...", - "prompt.example.25": "Como funcionam as variáveis de ambiente aqui?", - "prompt.popover.emptyResults": "Nenhum resultado correspondente", - "prompt.popover.emptyCommands": "Nenhum comando correspondente", - "prompt.dropzone.label": "Arraste imagens, PDFs ou arquivos de texto aqui", - "prompt.dropzone.file.label": "Solte para @mencionar arquivo", - "prompt.slash.badge.custom": "personalizado", - "prompt.slash.badge.skill": "skill", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "ativo", - "prompt.context.includeActiveFile": "Incluir arquivo ativo", - "prompt.context.removeActiveFile": "Remover arquivo ativo do contexto", - "prompt.context.removeFile": "Remover arquivo do contexto", - "prompt.action.attachFile": "Anexar arquivo", - "prompt.attachment.remove": "Remover anexo", - "prompt.action.send": "Enviar", - "prompt.action.stop": "Parar", - "prompt.toast.pasteUnsupported.title": "Anexo não suportado", - "prompt.toast.pasteUnsupported.description": "Apenas imagens, PDFs ou arquivos de texto podem ser anexados aqui.", - "prompt.toast.modelAgentRequired.title": "Selecione um agente e modelo", - "prompt.toast.modelAgentRequired.description": "Escolha um agente e modelo antes de enviar um prompt.", - "prompt.toast.worktreeCreateFailed.title": "Falha ao criar worktree", - "prompt.toast.sessionCreateFailed.title": "Falha ao criar sessão", - "prompt.toast.shellSendFailed.title": "Falha ao enviar comando shell", - "prompt.toast.commandSendFailed.title": "Falha ao enviar comando", - "prompt.toast.promptSendFailed.title": "Falha ao enviar prompt", - "prompt.toast.promptSendFailed.description": "Não foi possível recuperar a sessão", - "dialog.mcp.title": "MCPs", - "dialog.mcp.description": "{{enabled}} of {{total}} habilitados", - "dialog.mcp.empty": "Nenhum MCP configurado", - "dialog.lsp.empty": "LSPs detectados automaticamente pelos tipos de arquivo", - "dialog.plugins.empty": "Plugins configurados em opencode.json", - "mcp.status.connected": "conectado", - "mcp.status.failed": "falhou", - "mcp.status.needs_auth": "precisa de autenticação", - "mcp.auth.clickToAuthenticate": "Clique para autenticar", - "mcp.status.disabled": "desabilitado", - "dialog.fork.empty": "Nenhuma mensagem para bifurcar", - "dialog.directory.search.placeholder": "Buscar pastas", - "dialog.directory.empty": "Nenhuma pasta encontrada", - "dialog.directory.action.selectFile": "Selecionar arquivo", - "dialog.directory.action.selectFolder": "Selecionar pasta", - "dialog.directory.root": "Raiz", - "dialog.directory.parent": "Pasta superior", - "dialog.directory.readError": "Não foi possível ler esta pasta", - "dialog.server.title": "Servidores", - "dialog.server.description": "Trocar para qual servidor OpenCode este aplicativo se conecta.", - "dialog.server.search.placeholder": "Buscar servidores", - "dialog.server.empty": "Nenhum servidor ainda", - "dialog.server.add.title": "Adicionar um servidor", - "dialog.server.add.url": "URL do servidor", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "Não foi possível conectar ao servidor", - "dialog.server.add.checking": "Verificando...", - "dialog.server.add.button": "Adicionar", - "dialog.server.add.name": "Nome do servidor (opcional)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "Nome de usuário (opcional)", - "dialog.server.add.password": "Senha (opcional)", - "dialog.server.edit.title": "Editar servidor", - "dialog.server.default.title": "Servidor padrão", - "dialog.server.default.description": - "Conectar a este servidor na inicialização do aplicativo ao invés de iniciar um servidor local. Requer reinicialização.", - "dialog.server.default.none": "Nenhum servidor selecionado", - "dialog.server.default.set": "Definir servidor atual como padrão", - "dialog.server.default.clear": "Limpar", - "dialog.server.action.remove": "Remover servidor", - "dialog.server.menu.edit": "Editar", - "dialog.server.menu.default": "Definir como padrão", - "dialog.server.menu.defaultRemove": "Remover padrão", - "dialog.server.menu.delete": "Excluir", - "dialog.server.current": "Servidor atual", - "dialog.server.status.default": "Padrão", - "dialog.project.edit.title": "Editar projeto", - "dialog.project.edit.name": "Nome", - "dialog.project.edit.icon": "Ícone", - "dialog.project.edit.icon.alt": "Ícone do projeto", - "dialog.project.edit.icon.hint": "Clique ou arraste uma imagem", - "dialog.project.edit.icon.recommended": "Recomendado: 128x128px", - "dialog.project.edit.color": "Cor", - "dialog.project.edit.color.select": "Selecionar cor {{color}}", - "dialog.project.edit.worktree.startup": "Script de inicialização do espaço de trabalho", - "dialog.project.edit.worktree.startup.description": "Executa após criar um novo espaço de trabalho (worktree).", - "dialog.project.edit.worktree.startup.placeholder": "ex: bun install", - "context.breakdown.title": "Detalhamento do Contexto", - "context.breakdown.note": - 'Detalhamento aproximado dos tokens de entrada. "Outros" inclui definições de ferramentas e overhead.', - "context.breakdown.system": "Sistema", - "context.breakdown.user": "Usuário", - "context.breakdown.assistant": "Assistente", - "context.breakdown.tool": "Chamadas de Ferramentas", - "context.breakdown.other": "Outros", - "context.systemPrompt.title": "Prompt do Sistema", - "context.rawMessages.title": "Mensagens brutas", - "context.stats.session": "Sessão", - "context.stats.messages": "Mensagens", - "context.stats.provider": "Provedor", - "context.stats.model": "Modelo", - "context.stats.limit": "Limite de Contexto", - "context.stats.totalTokens": "Total de Tokens", - "context.stats.usage": "Uso", - "context.stats.inputTokens": "Tokens de Entrada", - "context.stats.outputTokens": "Tokens de Saída", - "context.stats.reasoningTokens": "Tokens de Raciocínio", - "context.stats.cacheTokens": "Tokens de Cache (leitura/escrita)", - "context.stats.userMessages": "Mensagens de Usuário", - "context.stats.assistantMessages": "Mensagens do Assistente", - "context.stats.totalCost": "Custo Total", - "context.stats.sessionCreated": "Sessão Criada", - "context.stats.lastActivity": "Última Atividade", - "context.usage.tokens": "Tokens", - "context.usage.usage": "Uso", - "context.usage.cost": "Custo", - "context.usage.clickToView": "Clique para ver o contexto", - "context.usage.view": "Ver uso do contexto", - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - "toast.language.title": "Idioma", - "toast.language.description": "Alterado para {{language}}", - "toast.theme.title": "Tema alterado", - "toast.scheme.title": "Esquema de cores", - "toast.workspace.enabled.title": "Espaços de trabalho ativados", - "toast.workspace.enabled.description": "Várias worktrees agora são exibidas na barra lateral", - "toast.workspace.disabled.title": "Espaços de trabalho desativados", - "toast.workspace.disabled.description": "Apenas a worktree principal é exibida na barra lateral", - "toast.permissions.autoaccept.on.title": "Aceitando permissões automaticamente", - "toast.permissions.autoaccept.on.description": "Solicitações de permissão serão aprovadas automaticamente", - "toast.permissions.autoaccept.off.title": "Parou de aceitar permissões automaticamente", - "toast.permissions.autoaccept.off.description": "Solicitações de permissão exigirão aprovação", - "toast.model.none.title": "Nenhum modelo selecionado", - "toast.model.none.description": "Conecte um provedor para resumir esta sessão", - "toast.file.loadFailed.title": "Falha ao carregar arquivo", - "toast.file.listFailed.title": "Falha ao listar arquivos", - "toast.context.noLineSelection.title": "Nenhuma seleção de linhas", - "toast.context.noLineSelection.description": "Selecione primeiro um intervalo de linhas em uma aba de arquivo.", - "toast.session.share.copyFailed.title": "Falha ao copiar URL para a área de transferência", - "toast.session.share.success.title": "Sessão compartilhada", - "toast.session.share.success.description": "URL compartilhada copiada para a área de transferência!", - "toast.session.share.failed.title": "Falha ao compartilhar sessão", - "toast.session.share.failed.description": "Ocorreu um erro ao compartilhar a sessão", - "toast.session.unshare.success.title": "Sessão não compartilhada", - "toast.session.unshare.success.description": "Sessão deixou de ser compartilhada com sucesso!", - "toast.session.unshare.failed.title": "Falha ao parar de compartilhar sessão", - "toast.session.unshare.failed.description": "Ocorreu um erro ao parar de compartilhar a sessão", - "toast.session.listFailed.title": "Falha ao carregar sessões para {{project}}", - "toast.update.title": "Atualização disponível", - "toast.update.description": "Uma nova versão do OpenCode ({{version}}) está disponível para instalação.", - "toast.update.action.installRestart": "Instalar e reiniciar", - "toast.update.action.notYet": "Agora não", - "error.page.title": "Algo deu errado", - "error.page.description": "Ocorreu um erro ao carregar a aplicação.", - "error.page.details.label": "Detalhes do Erro", - "error.page.action.restart": "Reiniciar", - "error.page.action.report": "Reportar erro", - "error.page.action.reported": "Erro reportado", - "error.page.action.checking": "Verificando...", - "error.page.action.checkUpdates": "Verificar atualizações", - "error.page.action.updateTo": "Atualizar para {{version}}", - "error.page.report.prefix": "Por favor, reporte este erro para a equipe do OpenCode", - "error.page.report.discord": "no Discord", - "error.page.version": "Versão: {{version}}", - "error.dev.rootNotFound": - "Elemento raiz não encontrado. Você esqueceu de adicioná-lo ao seu index.html? Ou talvez o atributo id foi escrito incorretamente?", - "error.serverSync.connectFailed": "Não foi possível conectar ao servidor. Há um servidor executando em `{{url}}`?", - "directory.error.invalidUrl": "Diretório inválido na URL.", - "error.chain.unknown": "Erro desconhecido", - "error.chain.causedBy": "Causado por:", - "error.chain.apiError": "Erro de API", - "error.chain.status": "Status: {{status}}", - "error.chain.retryable": "Pode tentar novamente: {{retryable}}", - "error.chain.responseBody": "Corpo da resposta:\n{{body}}", - "error.chain.didYouMean": "Você quis dizer: {{suggestions}}", - "error.chain.modelNotFound": "Modelo não encontrado: {{provider}}/{{model}}", - "error.chain.checkConfig": "Verifique os nomes de provedor/modelo na sua configuração (opencode.json)", - "error.chain.mcpFailed": 'Servidor MCP "{{name}}" falhou. Nota: OpenCode ainda não suporta autenticação MCP.', - "error.chain.providerAuthFailed": "Autenticação do provedor falhou ({{provider}}): {{message}}", - "error.chain.providerInitFailed": - 'Falha ao inicializar provedor "{{provider}}". Verifique credenciais e configuração.', - "error.chain.configJsonInvalid": "Arquivo de configuração em {{path}} não é um JSON(C) válido", - "error.chain.configJsonInvalidWithMessage": - "Arquivo de configuração em {{path}} não é um JSON(C) válido: {{message}}", - "error.chain.configDirectoryTypo": - 'Diretório "{{dir}}" em {{path}} não é válido. Renomeie o diretório para "{{suggestion}}" ou remova-o. Este é um erro de digitação comum.', - "error.chain.configFrontmatterError": "Falha ao analisar frontmatter em {{path}}:\n{{message}}", - "error.chain.configInvalid": "Arquivo de configuração em {{path}} é inválido", - "error.chain.configInvalidWithMessage": "Arquivo de configuração em {{path}} é inválido: {{message}}", - "notification.permission.title": "Permissão necessária", - "notification.permission.description": "{{sessionTitle}} em {{projectName}} precisa de permissão", - "notification.question.title": "Pergunta", - "notification.question.description": "{{sessionTitle}} em {{projectName}} tem uma pergunta", - "notification.action.goToSession": "Ir para sessão", - "notification.session.responseReady.title": "Resposta pronta", - "notification.session.error.title": "Erro na sessão", - "notification.session.error.fallbackDescription": "Ocorreu um erro", - "home.recentProjects": "Projetos recentes", - "home.empty.title": "Nenhum projeto recente", - "home.empty.description": "Comece abrindo um projeto local", - "session.tab.session": "Sessão", - "session.tab.review": "Revisão", - "session.tab.context": "Contexto", - "session.panel.reviewAndFiles": "Revisão e arquivos", - "session.review.filesChanged": "{{count}} Arquivos Alterados", - "session.review.change.one": "Alteração", - "session.review.change.other": "Alterações", - "session.review.loadingChanges": "Carregando alterações...", - "session.review.empty": "Nenhuma alteração nesta sessão ainda", - "session.review.noVcs": "Nenhum Sistema de Controle de Versão Git detectado, alterações não exibidas", - "session.review.noSnapshot": - "O rastreamento de snapshot está desabilitado na configuração, então as alterações da sessão estão indisponíveis", - "session.review.noChanges": "Sem alterações", - "session.files.selectToOpen": "Selecione um arquivo para abrir", - "session.files.all": "Todos os arquivos", - "session.files.empty": "Nenhum arquivo", - "session.files.binaryContent": "Arquivo binário (conteúdo não pode ser exibido)", - "session.messages.renderEarlier": "Renderizar mensagens anteriores", - "session.messages.loadingEarlier": "Carregando mensagens anteriores...", - "session.messages.loadEarlier": "Carregar mensagens anteriores", - "session.messages.loading": "Carregando mensagens...", - "session.messages.jumpToLatest": "Ir para a mais recente", - "session.context.addToContext": "Adicionar {{selection}} ao contexto", - "session.todo.title": "Tarefas", - "session.todo.collapse": "Recolher", - "session.todo.expand": "Expandir", - "session.followupDock.summary.one": "{{count}} mensagem na fila", - "session.followupDock.summary.other": "{{count}} mensagens na fila", - "session.followupDock.sendNow": "Enviar agora", - "session.followupDock.edit": "Editar", - "session.followupDock.collapse": "Recolher mensagens na fila", - "session.followupDock.expand": "Expandir mensagens na fila", - "session.revertDock.summary.one": "{{count}} mensagem revertida", - "session.revertDock.summary.other": "{{count}} mensagens revertidas", - "session.revertDock.collapse": "Recolher mensagens revertidas", - "session.revertDock.expand": "Expandir mensagens revertidas", - "session.revertDock.restore": "Restaurar mensagem", - "session.new.title": "Crie qualquer coisa", - "session.new.worktree.main": "Branch principal", - "session.new.worktree.mainWithBranch": "Branch principal ({{branch}})", - "session.new.worktree.create": "Criar novo worktree", - "session.new.lastModified": "Última modificação", - "session.header.search.placeholder": "Buscar {{project}}", - "session.header.searchFiles": "Buscar arquivos", - "session.header.openIn": "Abrir em", - "session.header.open.action": "Abrir {{app}}", - "session.header.open.ariaLabel": "Abrir em {{app}}", - "session.header.open.menu": "Opções de abertura", - "session.header.open.copyPath": "Copiar caminho", - "status.popover.trigger": "Status", - "status.popover.ariaLabel": "Configurações de servidores", - "status.popover.tab.servers": "Servidores", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "Plugins", - "status.popover.action.manageServers": "Gerenciar servidores", - "session.share.popover.title": "Publicar na web", - "session.share.popover.description.shared": - "Esta sessão é pública na web. Está acessível para qualquer pessoa com o link.", - "session.share.popover.description.unshared": - "Compartilhar sessão publicamente na web. Estará acessível para qualquer pessoa com o link.", - "session.share.action.share": "Compartilhar", - "session.share.action.publish": "Publicar", - "session.share.action.publishing": "Publicando...", - "session.share.action.unpublish": "Cancelar publicação", - "session.share.action.unpublishing": "Cancelando publicação...", - "session.share.action.view": "Ver", - "session.share.copy.copied": "Copiado", - "session.share.copy.copyLink": "Copiar link", - "lsp.tooltip.none": "Nenhum servidor LSP", - "lsp.label.connected": "{{count}} LSP", - "prompt.loading": "Carregando prompt...", - "terminal.loading": "Carregando terminal...", - "terminal.title": "Terminal", - "terminal.title.numbered": "Terminal {{number}}", - "terminal.close": "Fechar terminal", - "terminal.connectionLost.title": "Conexão Perdida", - "terminal.connectionLost.description": - "A conexão do terminal foi interrompida. Isso pode acontecer quando o servidor reinicia.", - "common.closeTab": "Fechar aba", - "common.dismiss": "Descartar", - "common.requestFailed": "Requisição falhou", - "common.moreOptions": "Mais opções", - "common.learnMore": "Saiba mais", - "common.rename": "Renomear", - "common.reset": "Redefinir", - "common.archive": "Arquivar", - "common.delete": "Excluir", - "common.close": "Fechar", - "common.edit": "Editar", - "common.loadMore": "Carregar mais", - "common.key.esc": "ESC", - "sidebar.menu.toggle": "Alternar menu", - "sidebar.nav.projectsAndSessions": "Projetos e sessões", - "sidebar.settings": "Configurações", - "sidebar.help": "Ajuda", - "sidebar.workspaces.enable": "Habilitar espaços de trabalho", - "sidebar.workspaces.disable": "Desabilitar espaços de trabalho", - "sidebar.gettingStarted.title": "Começando", - "sidebar.gettingStarted.line1": "OpenCode inclui modelos gratuitos para você começar imediatamente.", - "sidebar.gettingStarted.line2": "Conecte qualquer provedor para usar modelos, incluindo Claude, GPT, Gemini etc.", - "sidebar.project.recentSessions": "Sessões recentes", - "sidebar.project.viewAllSessions": "Ver todas as sessões", - "sidebar.project.clearNotifications": "Limpar notificações", - "app.name.desktop": "OpenCode Desktop", - "settings.section.desktop": "Desktop", - "settings.section.server": "Servidor", - "settings.tab.general": "Geral", - "settings.tab.shortcuts": "Atalhos", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "WSL integration", - "settings.desktop.wsl.description": "Executar o servidor OpenCode dentro do WSL no Windows.", - "settings.general.section.appearance": "Aparência", - "settings.general.section.notifications": "Notificações do sistema", - "settings.general.section.updates": "Atualizações", - "settings.general.section.sounds": "Efeitos sonoros", - "settings.general.section.feed": "Feed", - "settings.general.section.display": "Tela", - "settings.general.row.language.title": "Idioma", - "settings.general.row.language.description": "Alterar o idioma de exibição do OpenCode", - "settings.general.row.appearance.title": "Aparência", - "settings.general.row.appearance.description": "Personalize como o OpenCode aparece no seu dispositivo", - "settings.general.row.colorScheme.title": "Esquema de cores", - "settings.general.row.colorScheme.description": "Escolha se o OpenCode segue o tema do sistema, claro ou escuro", - "settings.general.row.theme.title": "Tema", - "settings.general.row.theme.description": "Personalize como o OpenCode é tematizado.", - "settings.general.row.font.title": "Fonte de código", - "settings.general.row.font.description": "Personalize a fonte usada em blocos de código", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "Fonte da interface", - "settings.general.row.uiFont.description": "Personalize a fonte usada em toda a interface", - "settings.general.row.followup.title": "Comportamento de acompanhamento", - "settings.general.row.followup.description": - "Escolha se os prompts de acompanhamento orientam imediatamente ou esperam na fila", - "settings.general.row.followup.option.queue": "Fila", - "settings.general.row.followup.option.steer": "Orientar", - "settings.general.row.reasoningSummaries.title": "Mostrar resumos de raciocínio", - "settings.general.row.reasoningSummaries.description": "Exibir resumos de raciocínio do modelo na linha do tempo", - "settings.general.row.shellToolPartsExpanded.title": "Expandir partes da ferramenta shell", - "settings.general.row.shellToolPartsExpanded.description": - "Mostrar partes da ferramenta shell expandidas por padrão na linha do tempo", - "settings.general.row.editToolPartsExpanded.title": "Expandir partes da ferramenta de edição", - "settings.general.row.editToolPartsExpanded.description": - "Mostrar partes das ferramentas de edição, escrita e patch expandidas por padrão na linha do tempo", - "settings.general.row.wayland.title": "Usar Wayland nativo", - "settings.general.row.wayland.description": "Desabilitar fallback X11 no Wayland. Requer reinicialização.", - "settings.general.row.wayland.tooltip": - "No Linux com monitores de taxas de atualização mistas, Wayland nativo pode ser mais estável.", - "settings.general.row.releaseNotes.title": "Notas da versão", - "settings.general.row.releaseNotes.description": 'Mostrar pop-ups de "Novidades" após atualizações', - "settings.updates.row.startup.title": "Verificar atualizações ao iniciar", - "settings.updates.row.startup.description": "Verificar atualizações automaticamente quando o OpenCode iniciar", - "settings.updates.row.check.title": "Verificar atualizações", - "settings.updates.row.check.description": "Verificar atualizações manualmente e instalar se houver", - "settings.updates.action.checkNow": "Verificar agora", - "settings.updates.action.checking": "Verificando...", - "settings.updates.toast.latest.title": "Você está atualizado", - "settings.updates.toast.latest.description": "Você está usando a versão mais recente do OpenCode.", - "sound.option.none": "Nenhum", - "sound.option.alert01": "Alerta 01", - "sound.option.alert02": "Alerta 02", - "sound.option.alert03": "Alerta 03", - "sound.option.alert04": "Alerta 04", - "sound.option.alert05": "Alerta 05", - "sound.option.alert06": "Alerta 06", - "sound.option.alert07": "Alerta 07", - "sound.option.alert08": "Alerta 08", - "sound.option.alert09": "Alerta 09", - "sound.option.alert10": "Alerta 10", - "sound.option.bipbop01": "Bip-bop 01", - "sound.option.bipbop02": "Bip-bop 02", - "sound.option.bipbop03": "Bip-bop 03", - "sound.option.bipbop04": "Bip-bop 04", - "sound.option.bipbop05": "Bip-bop 05", - "sound.option.bipbop06": "Bip-bop 06", - "sound.option.bipbop07": "Bip-bop 07", - "sound.option.bipbop08": "Bip-bop 08", - "sound.option.bipbop09": "Bip-bop 09", - "sound.option.bipbop10": "Bip-bop 10", - "sound.option.staplebops01": "Staplebops 01", - "sound.option.staplebops02": "Staplebops 02", - "sound.option.staplebops03": "Staplebops 03", - "sound.option.staplebops04": "Staplebops 04", - "sound.option.staplebops05": "Staplebops 05", - "sound.option.staplebops06": "Staplebops 06", - "sound.option.staplebops07": "Staplebops 07", - "sound.option.nope01": "Não 01", - "sound.option.nope02": "Não 02", - "sound.option.nope03": "Não 03", - "sound.option.nope04": "Não 04", - "sound.option.nope05": "Não 05", - "sound.option.nope06": "Não 06", - "sound.option.nope07": "Não 07", - "sound.option.nope08": "Não 08", - "sound.option.nope09": "Não 09", - "sound.option.nope10": "Não 10", - "sound.option.nope11": "Não 11", - "sound.option.nope12": "Não 12", - "sound.option.yup01": "Sim 01", - "sound.option.yup02": "Sim 02", - "sound.option.yup03": "Sim 03", - "sound.option.yup04": "Sim 04", - "sound.option.yup05": "Sim 05", - "sound.option.yup06": "Sim 06", - "settings.general.notifications.agent.title": "Agente", - "settings.general.notifications.agent.description": - "Mostrar notificação do sistema quando o agente estiver completo ou precisar de atenção", - "settings.general.notifications.permissions.title": "Permissões", - "settings.general.notifications.permissions.description": - "Mostrar notificação do sistema quando uma permissão for necessária", - "settings.general.notifications.errors.title": "Erros", - "settings.general.notifications.errors.description": "Mostrar notificação do sistema quando ocorrer um erro", - "settings.general.sounds.agent.title": "Agente", - "settings.general.sounds.agent.description": "Reproduzir som quando o agente estiver completo ou precisar de atenção", - "settings.general.sounds.permissions.title": "Permissões", - "settings.general.sounds.permissions.description": "Reproduzir som quando uma permissão for necessária", - "settings.general.sounds.errors.title": "Erros", - "settings.general.sounds.errors.description": "Reproduzir som quando ocorrer um erro", - "settings.shortcuts.title": "Atalhos de teclado", - "settings.shortcuts.reset.button": "Redefinir para padrões", - "settings.shortcuts.reset.toast.title": "Atalhos redefinidos", - "settings.shortcuts.reset.toast.description": "Atalhos de teclado foram redefinidos para os padrões.", - "settings.shortcuts.conflict.title": "Atalho já em uso", - "settings.shortcuts.conflict.description": "{{keybind}} já está atribuído a {{titles}}.", - "settings.shortcuts.unassigned": "Não atribuído", - "settings.shortcuts.pressKeys": "Pressione teclas", - "settings.shortcuts.search.placeholder": "Buscar atalhos", - "settings.shortcuts.search.empty": "Nenhum atalho encontrado", - "settings.shortcuts.group.general": "Geral", - "settings.shortcuts.group.session": "Sessão", - "settings.shortcuts.group.navigation": "Navegação", - "settings.shortcuts.group.modelAndAgent": "Modelo e agente", - "settings.shortcuts.group.terminal": "Terminal", - "settings.shortcuts.group.prompt": "Prompt", - "settings.providers.title": "Provedores", - "settings.providers.description": "Configurações de provedores estarão disponíveis aqui.", - "settings.providers.section.connected": "Provedores conectados", - "settings.providers.connected.empty": "Nenhum provedor conectado", - "settings.providers.section.popular": "Provedores populares", - "settings.providers.tag.environment": "Ambiente", - "settings.providers.tag.config": "Configuração", - "settings.providers.tag.custom": "Personalizado", - "settings.providers.tag.other": "Outro", - "settings.models.title": "Modelos", - "settings.models.description": "Configurações de modelos estarão disponíveis aqui.", - "settings.agents.title": "Agentes", - "settings.agents.description": "Configurações de agentes estarão disponíveis aqui.", - "settings.commands.title": "Comandos", - "settings.commands.description": "Configurações de comandos estarão disponíveis aqui.", - "settings.mcp.title": "MCP", - "settings.mcp.description": "Configurações de MCP estarão disponíveis aqui.", - "settings.permissions.title": "Permissões", - "settings.permissions.description": "Controle quais ferramentas o servidor pode usar por padrão.", - "settings.permissions.section.tools": "Ferramentas", - "settings.permissions.toast.updateFailed.title": "Falha ao atualizar permissões", - "settings.permissions.action.allow": "Permitir", - "settings.permissions.action.ask": "Perguntar", - "settings.permissions.action.deny": "Negar", - "settings.permissions.tool.read.title": "Ler", - "settings.permissions.tool.read.description": "Ler um arquivo (corresponde ao caminho do arquivo)", - "settings.permissions.tool.edit.title": "Editar", - "settings.permissions.tool.edit.description": - "Modificar arquivos, incluindo edições, escritas, patches e multi-edições", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "Corresponder arquivos usando padrões glob", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "Buscar conteúdo de arquivos usando expressões regulares", - "settings.permissions.tool.list.title": "Listar", - "settings.permissions.tool.list.description": "Listar arquivos dentro de um diretório", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "Executar comandos shell", - "settings.permissions.tool.task.title": "Tarefa", - "settings.permissions.tool.task.description": "Lançar sub-agentes", - "settings.permissions.tool.skill.title": "Habilidade", - "settings.permissions.tool.skill.description": "Carregar uma habilidade por nome", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "Executar consultas de servidor de linguagem", - "settings.permissions.tool.todowrite.title": "Escrever Tarefas", - "settings.permissions.tool.todowrite.description": "Atualizar a lista de tarefas", - "settings.permissions.tool.webfetch.title": "Buscar Web", - "settings.permissions.tool.webfetch.description": "Buscar conteúdo de uma URL", - "settings.permissions.tool.websearch.title": "Pesquisa Web", - "settings.permissions.tool.websearch.description": "Pesquisar na web", - "settings.permissions.tool.external_directory.title": "Diretório Externo", - "settings.permissions.tool.external_directory.description": "Acessar arquivos fora do diretório do projeto", - "settings.permissions.tool.doom_loop.title": "Loop Infinito", - "settings.permissions.tool.doom_loop.description": "Detectar chamadas de ferramentas repetidas com entrada idêntica", - "session.delete.failed.title": "Falha ao excluir sessão", - "session.delete.title": "Excluir sessão", - "session.delete.confirm": 'Excluir sessão "{{name}}"?', - "session.delete.button": "Excluir sessão", - "workspace.new": "Novo espaço de trabalho", - "workspace.type.local": "local", - "workspace.type.sandbox": "sandbox", - "workspace.create.failed.title": "Falha ao criar espaço de trabalho", - "workspace.delete.failed.title": "Falha ao excluir espaço de trabalho", - "workspace.resetting.title": "Redefinindo espaço de trabalho", - "workspace.resetting.description": "Isso pode levar um minuto.", - "workspace.reset.failed.title": "Falha ao redefinir espaço de trabalho", - "workspace.reset.success.title": "Espaço de trabalho redefinido", - "workspace.reset.success.description": "Espaço de trabalho agora corresponde ao branch padrão.", - "workspace.error.stillPreparing": "O espaço de trabalho ainda está sendo preparado", - "workspace.status.checking": "Verificando alterações não mescladas...", - "workspace.status.error": "Não foi possível verificar o status do git.", - "workspace.status.clean": "Nenhuma alteração não mesclada detectada.", - "workspace.status.dirty": "Alterações não mescladas detectadas neste espaço de trabalho.", - "workspace.delete.title": "Excluir espaço de trabalho", - "workspace.delete.confirm": 'Excluir espaço de trabalho "{{name}}"?', - "workspace.delete.button": "Excluir espaço de trabalho", - "workspace.reset.title": "Redefinir espaço de trabalho", - "workspace.reset.confirm": 'Redefinir espaço de trabalho "{{name}}"?', - "workspace.reset.button": "Redefinir espaço de trabalho", - "workspace.reset.archived.none": "Nenhuma sessão ativa será arquivada.", - "workspace.reset.archived.one": "1 sessão será arquivada.", - "workspace.reset.archived.many": "{{count}} sessões serão arquivadas.", - "workspace.reset.note": "Isso redefinirá o espaço de trabalho para corresponder ao branch padrão.", - "common.open": "Abrir", - "dialog.releaseNotes.action.getStarted": "Começar", - "dialog.releaseNotes.action.next": "Próximo", - "dialog.releaseNotes.action.hideFuture": "Não mostrar isso no futuro", - "dialog.releaseNotes.media.alt": "Prévia do lançamento", - "toast.project.reloadFailed.title": "Falha ao recarregar {{project}}", - "error.server.invalidConfiguration": "Configuração inválida", - "common.moreCountSuffix": " (+{{count}} mais)", - "common.time.justNow": "Agora mesmo", - "common.time.minutesAgo.short": "{{count}}m atrás", - "common.time.hoursAgo.short": "{{count}}h atrás", - "common.time.daysAgo.short": "{{count}}d atrás", - "settings.providers.connected.environmentDescription": "Conectado a partir de suas variáveis de ambiente", - "settings.providers.custom.description": "Adicionar um provedor compatível com a OpenAI através do URL base.", - - "app.server.unreachable": "Não foi possível conectar a {{server}}", - "app.server.retrying": "Tentando novamente automaticamente...", - "app.server.otherServers": "Outros servidores", - "dialog.server.add.usernamePlaceholder": "nome de usuário", - "dialog.server.add.passwordPlaceholder": "senha", - "server.row.noUsername": "sem nome de usuário", - "session.review.noVcs.createGit.title": "Criar um repositório Git", - "session.review.noVcs.createGit.description": "Rastreie, revise e desfaça alterações neste projeto", - "session.review.noVcs.createGit.actionLoading": "Criando repositório Git...", - "session.review.noVcs.createGit.action": "Criar repositório Git", - "session.todo.progress": "{{done}} de {{total}} tarefas concluídas", - "session.question.progress": "{{current}} de {{total}} perguntas", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "Explorador de Arquivos", - "session.header.open.fileManager": "Gerenciador de Arquivos", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "Terminal", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "Diagnóstico de desempenho de desenvolvimento", - "debugBar.na": "n/a", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": - "Última transição de rota concluída tocando em uma página de sessão, medida desde o início do roteador até a primeira pintura após o estabelecimento.", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "Quadros por segundo nos últimos 5 segundos.", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "Pior tempo de quadro nos últimos 5 segundos.", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "Quadros acima de 32ms nos últimos 5 segundos.", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "Tempo bloqueado e contagem de tarefas longas nos últimos 5 segundos. Tarefa máx: {{max}}.", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "Pior atraso de entrada observado nos últimos 5 segundos.", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": - "Duração aproximada da interação nos últimos 5 segundos. Isso é semelhante ao INP, não o INP oficial do Web Vitals.", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "Mudança cumulativa de layout para o tempo de vida atual do aplicativo.", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "Heap JS usado vs limite de heap. Apenas Chromium.", - "debugBar.mem.tip": "Heap JS usado vs limite de heap. {{used}} de {{limit}}.", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "Espaço", - "common.key.backspace": "Backspace", - "common.key.enter": "Enter", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "desconhecido", - "error.page.circular": "[Circular]", - "error.serverSDK.noServerAvailable": "Nenhum servidor disponível", - "error.serverSDK.serverNotAvailable": "Servidor indisponível", - "error.childStore.persistedCacheCreateFailed": "Falha ao criar cache persistente", - "error.childStore.persistedProjectMetadataCreateFailed": "Falha ao criar metadados de projeto persistentes", - "error.childStore.persistedProjectIconCreateFailed": "Falha ao criar ícone de projeto persistente", - "error.childStore.storeCreateFailed": "Falha ao criar armazenamento", - "terminal.connectionLost.abnormalClose": "WebSocket fechado anormalmente: {{code}}", -} diff --git a/packages/app/src/i18n/bs.ts b/packages/app/src/i18n/bs.ts deleted file mode 100644 index c5b9e1a6d8..0000000000 --- a/packages/app/src/i18n/bs.ts +++ /dev/null @@ -1,938 +0,0 @@ -export const dict = { - "command.category.suggested": "Predloženo", - "command.category.view": "Prikaz", - "command.category.project": "Projekat", - "command.category.provider": "Provajder", - "command.category.server": "Server", - "command.category.session": "Sesija", - "command.category.theme": "Tema", - "command.category.language": "Jezik", - "command.category.file": "Datoteka", - "command.category.context": "Kontekst", - "command.category.terminal": "Terminal", - "command.category.model": "Model", - "command.category.mcp": "MCP", - "command.category.agent": "Agent", - "command.category.permissions": "Dozvole", - "command.category.workspace": "Radni prostor", - "command.category.settings": "Postavke", - - "theme.scheme.system": "Sistem", - "theme.scheme.light": "Svijetlo", - "theme.scheme.dark": "Tamno", - - "command.sidebar.toggle": "Prikaži/sakrij bočnu traku", - "command.project.open": "Otvori projekat", - "command.provider.connect": "Poveži provajdera", - "command.server.switch": "Promijeni server", - "command.settings.open": "Otvori postavke", - "command.session.previous": "Prethodna sesija", - "command.session.next": "Sljedeća sesija", - "command.session.previous.unseen": "Prethodna nepročitana sesija", - "command.session.next.unseen": "Sljedeća nepročitana sesija", - "command.session.archive": "Arhiviraj sesiju", - - "command.palette": "Paleta komandi", - - "command.theme.cycle": "Promijeni temu", - "command.theme.set": "Koristi temu: {{theme}}", - "command.theme.scheme.cycle": "Promijeni šemu boja", - "command.theme.scheme.set": "Koristi šemu boja: {{scheme}}", - - "command.language.cycle": "Promijeni jezik", - "command.language.set": "Koristi jezik: {{language}}", - - "command.session.new": "Nova sesija", - "command.file.open": "Otvori datoteku", - "command.tab.close": "Zatvori karticu", - "command.context.addSelection": "Dodaj odabir u kontekst", - "command.context.addSelection.description": "Dodaj odabrane linije iz trenutne datoteke", - "command.input.focus": "Fokusiraj polje za unos", - "command.terminal.toggle": "Prikaži/sakrij terminal", - "command.fileTree.toggle": "Prikaži/sakrij stablo datoteka", - "command.review.toggle": "Prikaži/sakrij pregled", - "command.terminal.new": "Novi terminal", - "command.terminal.new.description": "Kreiraj novu karticu terminala", - "command.steps.toggle": "Prikaži/sakrij korake", - "command.steps.toggle.description": "Prikaži ili sakrij korake za trenutnu poruku", - "command.message.previous": "Prethodna poruka", - "command.message.previous.description": "Idi na prethodnu korisničku poruku", - "command.message.next": "Sljedeća poruka", - "command.message.next.description": "Idi na sljedeću korisničku poruku", - "command.model.choose": "Odaberi model", - "command.model.choose.description": "Odaberi drugi model", - "command.mcp.toggle": "Prikaži/sakrij MCP-ove", - "command.mcp.toggle.description": "Prikaži/sakrij MCP-ove", - "command.agent.cycle": "Promijeni agenta", - "command.agent.cycle.description": "Prebaci na sljedećeg agenta", - "command.agent.cycle.reverse": "Promijeni agenta unazad", - "command.agent.cycle.reverse.description": "Prebaci na prethodnog agenta", - "command.model.variant.cycle": "Promijeni nivo razmišljanja", - "command.model.variant.cycle.description": "Prebaci na sljedeći nivo", - "command.prompt.mode.shell": "Shell", - "command.prompt.mode.normal": "Prompt", - "command.permissions.autoaccept.enable": "Automatski prihvati dozvole", - "command.permissions.autoaccept.disable": "Zaustavi automatsko prihvatanje dozvola", - "command.workspace.toggle": "Prikaži/sakrij radne prostore", - "command.workspace.toggle.description": "Omogući ili onemogući više radnih prostora u bočnoj traci", - "command.session.undo": "Poništi", - "command.session.undo.description": "Poništi posljednju poruku", - "command.session.redo": "Vrati", - "command.session.redo.description": "Vrati posljednju poništenu poruku", - "command.session.compact": "Sažmi sesiju", - "command.session.compact.description": "Sažmi sesiju kako bi se smanjio kontekst", - "command.session.fork": "Fork iz poruke", - "command.session.fork.description": "Kreiraj novu sesiju iz prethodne poruke", - "command.session.share": "Podijeli sesiju", - "command.session.share.description": "Podijeli ovu sesiju i kopiraj URL u međuspremnik", - "command.session.unshare": "Ukini dijeljenje sesije", - "command.session.unshare.description": "Zaustavi dijeljenje ove sesije", - - "palette.search.placeholder": "Pretraži datoteke, komande i sesije", - "palette.empty": "Nema rezultata", - "palette.group.commands": "Komande", - "palette.group.files": "Datoteke", - - "dialog.provider.search.placeholder": "Pretraži provajdere", - "dialog.provider.empty": "Nema pronađenih provajdera", - "dialog.provider.group.popular": "Popularno", - "dialog.provider.group.other": "Ostalo", - "dialog.provider.tag.recommended": "Preporučeno", - "dialog.provider.opencode.note": "Kurirani modeli uključujući Claude, GPT, Gemini i druge", - "dialog.provider.opencode.tagline": "Pouzdani optimizovani modeli", - "dialog.provider.opencodeGo.tagline": "Povoljna pretplata za sve", - "dialog.provider.anthropic.note": "Direktan pristup Claude modelima, uključujući Pro i Max", - "dialog.provider.copilot.note": "AI modeli za pomoć pri kodiranju putem GitHub Copilot", - "dialog.provider.openai.note": "GPT modeli za brze, sposobne opšte AI zadatke", - "dialog.provider.google.note": "Gemini modeli za brze, strukturirane odgovore", - "dialog.provider.openrouter.note": "Pristup svim podržanim modelima preko jednog provajdera", - "dialog.provider.vercel.note": "Jedinstven pristup AI modelima uz pametno rutiranje", - - "dialog.model.select.title": "Odaberi model", - "dialog.model.search.placeholder": "Pretraži modele", - "dialog.model.empty": "Nema rezultata za modele", - "dialog.model.manage": "Upravljaj modelima", - "dialog.model.manage.description": "Prilagodi koji se modeli prikazuju u izborniku modela.", - "dialog.model.manage.provider.toggle": "Uključi/isključi sve {{provider}} modele", - - "dialog.model.unpaid.freeModels.title": "Besplatni modeli koje obezbjeđuje OpenCode", - "dialog.model.unpaid.addMore.title": "Dodaj još modela od popularnih provajdera", - - "dialog.provider.viewAll": "Prikaži više provajdera", - - "provider.connect.title": "Poveži {{provider}}", - "provider.connect.title.anthropicProMax": "Prijavi se putem Claude Pro/Max", - "provider.connect.selectMethod": "Odaberi način prijave za {{provider}}.", - "provider.connect.method.apiKey": "API ključ", - "provider.connect.status.inProgress": "Autorizacija je u toku...", - "provider.connect.status.waiting": "Čekanje na autorizaciju...", - "provider.connect.status.failed": "Autorizacija nije uspjela: {{error}}", - "provider.connect.apiKey.description": - "Unesi svoj {{provider}} API ključ da povežeš račun i koristiš {{provider}} modele u OpenCode-u.", - "provider.connect.apiKey.label": "{{provider}} API ključ", - "provider.connect.apiKey.placeholder": "API ključ", - "provider.connect.apiKey.required": "API ključ je obavezan", - "provider.connect.opencodeZen.line1": - "OpenCode Zen ti daje pristup kuriranom skupu pouzdanih, optimizovanih modela za coding agente.", - "provider.connect.opencodeZen.line2": - "Sa jednim API ključem dobijaš pristup modelima kao što su Claude, GPT, Gemini, GLM i drugi.", - "provider.connect.opencodeZen.visit.prefix": "Posjeti ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " da preuzmeš svoj API ključ.", - "provider.connect.oauth.code.visit.prefix": "Posjeti ", - "provider.connect.oauth.code.visit.link": "ovaj link", - "provider.connect.oauth.code.visit.suffix": - " da preuzmeš autorizacijski kod i povežeš račun te koristiš {{provider}} modele u OpenCode-u.", - "provider.connect.oauth.code.label": "{{method}} autorizacijski kod", - "provider.connect.oauth.code.placeholder": "Autorizacijski kod", - "provider.connect.oauth.code.required": "Autorizacijski kod je obavezan", - "provider.connect.oauth.code.invalid": "Nevažeći autorizacijski kod", - "provider.connect.oauth.auto.visit.prefix": "Posjeti ", - "provider.connect.oauth.auto.visit.link": "ovaj link", - "provider.connect.oauth.auto.visit.suffix": - " i unesi kod ispod da povežeš račun i koristiš {{provider}} modele u OpenCode-u.", - "provider.connect.oauth.auto.confirmationCode": "Kod za potvrdu", - "provider.connect.toast.connected.title": "{{provider}} povezan", - "provider.connect.toast.connected.description": "{{provider}} modeli su sada dostupni za korištenje.", - - "provider.custom.title": "Prilagođeni provajder", - "provider.custom.description.prefix": "Konfiguriši OpenAI-kompatibilnog provajdera. Pogledaj ", - "provider.custom.description.link": "dokumentaciju za konfiguraciju provajdera", - "provider.custom.description.suffix": ".", - "provider.custom.field.providerID.label": "ID provajdera", - "provider.custom.field.providerID.placeholder": "mojprovajder", - "provider.custom.field.providerID.description": "Mala slova, brojevi, crtice ili donje crte", - "provider.custom.field.name.label": "Prikazano ime", - "provider.custom.field.name.placeholder": "Moj AI Provajder", - "provider.custom.field.baseURL.label": "Bazni URL", - "provider.custom.field.baseURL.placeholder": "https://api.mojprovajder.com/v1", - "provider.custom.field.apiKey.label": "API ključ", - "provider.custom.field.apiKey.placeholder": "API ključ", - "provider.custom.field.apiKey.description": - "Opcionalno. Ostavi prazno ako upravljaš autentifikacijom putem zaglavlja.", - "provider.custom.models.label": "Modeli", - "provider.custom.models.id.label": "ID", - "provider.custom.models.id.placeholder": "model-id", - "provider.custom.models.name.label": "Ime", - "provider.custom.models.name.placeholder": "Prikazano ime", - "provider.custom.models.remove": "Ukloni model", - "provider.custom.models.add": "Dodaj model", - "provider.custom.headers.label": "Zaglavlja (opcionalno)", - "provider.custom.headers.key.label": "Zaglavlje", - "provider.custom.headers.key.placeholder": "Ime-Zaglavlja", - "provider.custom.headers.value.label": "Vrijednost", - "provider.custom.headers.value.placeholder": "vrijednost", - "provider.custom.headers.remove": "Ukloni zaglavlje", - "provider.custom.headers.add": "Dodaj zaglavlje", - "provider.custom.error.providerID.required": "ID provajdera je obavezan", - "provider.custom.error.providerID.format": "Koristi mala slova, brojeve, crtice ili donje crte", - "provider.custom.error.providerID.exists": "Taj ID provajdera već postoji", - "provider.custom.error.name.required": "Prikazano ime je obavezno", - "provider.custom.error.baseURL.required": "Bazni URL je obavezan", - "provider.custom.error.baseURL.format": "Mora početi sa http:// ili https://", - "provider.custom.error.required": "Obavezno", - "provider.custom.error.duplicate": "Duplikat", - - "provider.disconnect.toast.disconnected.title": "{{provider}} odspojen", - "provider.disconnect.toast.disconnected.description": "{{provider}} modeli više nisu dostupni.", - - "model.tag.free": "Besplatno", - "model.tag.latest": "Najnovije", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "tekst", - "model.input.image": "slika", - "model.input.audio": "zvuk", - "model.input.video": "video", - "model.input.pdf": "pdf", - "model.tooltip.allows": "Podržava: {{inputs}}", - "model.tooltip.reasoning.allowed": "Podržava rasuđivanje", - "model.tooltip.reasoning.none": "Bez rasuđivanja", - "model.tooltip.context": "Limit konteksta {{limit}}", - - "common.search.placeholder": "Pretraži", - "common.goBack": "Nazad", - "common.goForward": "Naprijed", - "common.loading": "Učitavanje", - "common.loading.ellipsis": "...", - "common.cancel": "Otkaži", - "common.connect": "Poveži", - "common.disconnect": "Prekini vezu", - "common.continue": "Pošalji", - "common.submit": "Pošalji", - "common.save": "Sačuvaj", - "common.saving": "Čuvanje...", - "common.default": "Podrazumijevano", - "common.attachment": "prilog", - - "prompt.placeholder.shell": "Unesi shell naredbu... {{example}}", - "prompt.placeholder.normal": 'Pitaj bilo šta... "{{example}}"', - "prompt.placeholder.simple": "Pitaj bilo šta...", - "prompt.placeholder.summarizeComments": "Sažmi komentare…", - "prompt.placeholder.summarizeComment": "Sažmi komentar…", - "prompt.mode.shell": "Shell", - "prompt.mode.normal": "Prompt", - "prompt.mode.shell.exit": "esc za izlaz", - - "prompt.example.1": "Popravi TODO u bazi koda", - "prompt.example.2": "Koji je tehnološki stack ovog projekta?", - "prompt.example.3": "Popravi pokvarene testove", - "prompt.example.4": "Objasni kako radi autentifikacija", - "prompt.example.5": "Pronađi i popravi sigurnosne ranjivosti", - "prompt.example.6": "Dodaj jedinične testove za servis korisnika", - "prompt.example.7": "Refaktoriši ovu funkciju da bude čitljivija", - "prompt.example.8": "Šta znači ova greška?", - "prompt.example.9": "Pomozi mi da otklonim ovu grešku", - "prompt.example.10": "Generiši API dokumentaciju", - "prompt.example.11": "Optimizuj upite prema bazi podataka", - "prompt.example.12": "Dodaj validaciju ulaza", - "prompt.example.13": "Napravi novu komponentu za...", - "prompt.example.14": "Kako da deployam ovaj projekat?", - "prompt.example.15": "Pregledaj moj kod prema najboljim praksama", - "prompt.example.16": "Dodaj obradu grešaka u ovu funkciju", - "prompt.example.17": "Objasni ovaj regex obrazac", - "prompt.example.18": "Pretvori ovo u TypeScript", - "prompt.example.19": "Dodaj logovanje kroz cijelu bazu koda", - "prompt.example.20": "Koje su zavisnosti zastarjele?", - "prompt.example.21": "Pomozi mi da napišem migracijsku skriptu", - "prompt.example.22": "Implementiraj keširanje za ovaj endpoint", - "prompt.example.23": "Dodaj paginaciju u ovu listu", - "prompt.example.24": "Napravi CLI komandu za...", - "prompt.example.25": "Kako ovdje rade varijable okruženja?", - - "prompt.popover.emptyResults": "Nema rezultata", - "prompt.popover.emptyCommands": "Nema komandi", - "prompt.dropzone.label": "Ovdje prevucite slike, PDF-ove ili tekstualne datoteke", - "prompt.dropzone.file.label": "Spusti za @spominjanje datoteke", - "prompt.slash.badge.custom": "prilagođeno", - "prompt.slash.badge.skill": "skill", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "aktivno", - "prompt.context.includeActiveFile": "Uključi aktivnu datoteku", - "prompt.context.removeActiveFile": "Ukloni aktivnu datoteku iz konteksta", - "prompt.context.removeFile": "Ukloni datoteku iz konteksta", - "prompt.action.attachFile": "Priloži datoteku", - "prompt.attachment.remove": "Ukloni prilog", - "prompt.action.send": "Pošalji", - "prompt.action.stop": "Zaustavi", - - "prompt.toast.pasteUnsupported.title": "Nepodržan prilog", - "prompt.toast.pasteUnsupported.description": "Ovdje se mogu priložiti samo slike, PDF-ovi ili tekstualne datoteke.", - "prompt.toast.modelAgentRequired.title": "Odaberi agenta i model", - "prompt.toast.modelAgentRequired.description": "Odaberi agenta i model prije slanja upita.", - "prompt.toast.worktreeCreateFailed.title": "Neuspješno kreiranje worktree-a", - "prompt.toast.sessionCreateFailed.title": "Neuspješno kreiranje sesije", - "prompt.toast.shellSendFailed.title": "Neuspješno slanje shell naredbe", - "prompt.toast.commandSendFailed.title": "Neuspješno slanje komande", - "prompt.toast.promptSendFailed.title": "Neuspješno slanje upita", - "prompt.toast.promptSendFailed.description": "Nije moguće dohvatiti sesiju", - - "dialog.mcp.title": "MCP-ovi", - "dialog.mcp.description": "{{enabled}} od {{total}} omogućeno", - "dialog.mcp.empty": "Nema konfigurisnih MCP-ova", - - "dialog.lsp.empty": "LSP-ovi se automatski otkrivaju prema tipu datoteke", - "dialog.plugins.empty": "Plugini su konfigurisani u opencode.json", - - "mcp.status.connected": "povezano", - "mcp.status.failed": "neuspjelo", - "mcp.status.needs_auth": "potrebna autentifikacija", - "mcp.auth.clickToAuthenticate": "Kliknite za autentifikaciju", - "mcp.status.disabled": "onemogućeno", - - "dialog.fork.empty": "Nema poruka za fork", - - "dialog.directory.search.placeholder": "Pretraži foldere", - "dialog.directory.empty": "Nema pronađenih foldera", - "dialog.directory.action.selectFile": "Odaberi datoteku", - "dialog.directory.action.selectFolder": "Odaberi folder", - "dialog.directory.root": "Korijen", - "dialog.directory.parent": "Nadređeni folder", - "dialog.directory.readError": "Nije moguće pročitati ovaj folder", - - "dialog.server.title": "Serveri", - "dialog.server.description": "Promijeni na koji se OpenCode server ova aplikacija povezuje.", - "dialog.server.search.placeholder": "Pretraži servere", - "dialog.server.empty": "Još nema servera", - "dialog.server.add.title": "Dodaj server", - "dialog.server.add.url": "URL servera", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "Nije moguće povezati se na server", - "dialog.server.add.checking": "Provjera...", - "dialog.server.add.button": "Dodaj server", - "dialog.server.add.name": "Ime servera (opcionalno)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "Korisničko ime (opcionalno)", - "dialog.server.add.password": "Lozinka (opcionalno)", - "dialog.server.edit.title": "Uredi server", - "dialog.server.default.title": "Podrazumijevani server", - "dialog.server.default.description": - "Poveži se na ovaj server pri pokretanju aplikacije umjesto pokretanja lokalnog servera. Potreban je restart.", - "dialog.server.default.none": "Nije odabran server", - "dialog.server.default.set": "Postavi trenutni server kao podrazumijevani", - "dialog.server.default.clear": "Očisti", - "dialog.server.action.remove": "Ukloni server", - - "dialog.server.menu.edit": "Uredi", - "dialog.server.menu.default": "Postavi kao podrazumijevano", - "dialog.server.menu.defaultRemove": "Ukloni podrazumijevano", - "dialog.server.menu.delete": "Izbriši", - "dialog.server.current": "Trenutni server", - "dialog.server.status.default": "Podrazumijevano", - - "dialog.project.edit.title": "Uredi projekat", - "dialog.project.edit.name": "Naziv", - "dialog.project.edit.icon": "Ikonica", - "dialog.project.edit.icon.alt": "Ikonica projekta", - "dialog.project.edit.icon.hint": "Klikni ili prevuci sliku", - "dialog.project.edit.icon.recommended": "Preporučeno: 128x128px", - "dialog.project.edit.color": "Boja", - "dialog.project.edit.color.select": "Odaberi boju {{color}}", - "dialog.project.edit.worktree.startup": "Skripta za pokretanje radnog prostora", - "dialog.project.edit.worktree.startup.description": "Pokreće se nakon kreiranja novog radnog prostora (worktree).", - "dialog.project.edit.worktree.startup.placeholder": "npr. bun install", - - "context.breakdown.title": "Razlaganje konteksta", - "context.breakdown.note": - 'Približna raspodjela ulaznih tokena. "Ostalo" uključuje definicije alata i dodatni overhead.', - "context.breakdown.system": "Sistem", - "context.breakdown.user": "Korisnik", - "context.breakdown.assistant": "Asistent", - "context.breakdown.tool": "Pozivi alata", - "context.breakdown.other": "Ostalo", - - "context.systemPrompt.title": "Sistemski prompt", - "context.rawMessages.title": "Sirove poruke", - - "context.stats.session": "Sesija", - "context.stats.messages": "Poruke", - "context.stats.provider": "Provajder", - "context.stats.model": "Model", - "context.stats.limit": "Limit konteksta", - "context.stats.totalTokens": "Ukupno tokena", - "context.stats.usage": "Korištenje", - "context.stats.inputTokens": "Ulazni tokeni", - "context.stats.outputTokens": "Izlazni tokeni", - "context.stats.reasoningTokens": "Tokeni za rasuđivanje", - "context.stats.cacheTokens": "Cache tokeni (čitanje/pisanje)", - "context.stats.userMessages": "Korisničke poruke", - "context.stats.assistantMessages": "Poruke asistenta", - "context.stats.totalCost": "Ukupni trošak", - "context.stats.sessionCreated": "Sesija kreirana", - "context.stats.lastActivity": "Posljednja aktivnost", - - "context.usage.tokens": "Tokeni", - "context.usage.usage": "Korištenje", - "context.usage.cost": "Trošak", - "context.usage.clickToView": "Klikni da vidiš kontekst", - "context.usage.view": "Prikaži korištenje konteksta", - - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - - "toast.language.title": "Jezik", - "toast.language.description": "Prebačeno na {{language}}", - - "toast.theme.title": "Tema promijenjena", - "toast.scheme.title": "Šema boja", - - "toast.workspace.enabled.title": "Radni prostori omogućeni", - "toast.workspace.enabled.description": "Više worktree-ova se sada prikazuje u bočnoj traci", - "toast.workspace.disabled.title": "Radni prostori onemogućeni", - "toast.workspace.disabled.description": "Samo glavni worktree se prikazuje u bočnoj traci", - - "toast.permissions.autoaccept.on.title": "Automatsko prihvatanje dozvola", - "toast.permissions.autoaccept.on.description": "Zahtjevi za dozvole će biti automatski odobreni", - "toast.permissions.autoaccept.off.title": "Zaustavljeno automatsko prihvatanje dozvola", - "toast.permissions.autoaccept.off.description": "Zahtjevi za dozvole će zahtijevati odobrenje", - - "toast.model.none.title": "Nije odabran model", - "toast.model.none.description": "Poveži provajdera da sažmeš ovu sesiju", - - "toast.file.loadFailed.title": "Neuspjelo učitavanje datoteke", - "toast.file.listFailed.title": "Neuspješno listanje datoteka", - - "toast.context.noLineSelection.title": "Nema odabranih linija", - "toast.context.noLineSelection.description": "Prvo odaberi raspon linija u kartici datoteke.", - - "toast.session.share.copyFailed.title": "Neuspjelo kopiranje URL-a u međuspremnik", - "toast.session.share.success.title": "Sesija podijeljena", - "toast.session.share.success.description": "URL za dijeljenje je kopiran u međuspremnik!", - "toast.session.share.failed.title": "Neuspjelo dijeljenje sesije", - "toast.session.share.failed.description": "Došlo je do greške prilikom dijeljenja sesije", - - "toast.session.unshare.success.title": "Dijeljenje sesije ukinuto", - "toast.session.unshare.success.description": "Dijeljenje sesije je uspješno ukinuto!", - "toast.session.unshare.failed.title": "Neuspjelo ukidanje dijeljenja", - "toast.session.unshare.failed.description": "Došlo je do greške prilikom ukidanja dijeljenja", - - "toast.session.listFailed.title": "Neuspjelo učitavanje sesija za {{project}}", - - "toast.update.title": "Dostupno ažuriranje", - "toast.update.description": "Nova verzija OpenCode-a ({{version}}) je dostupna za instalaciju.", - "toast.update.action.installRestart": "Instaliraj i restartuj", - "toast.update.action.notYet": "Ne još", - - "error.page.title": "Nešto je pošlo po zlu", - "error.page.description": "Došlo je do greške prilikom učitavanja aplikacije.", - "error.page.details.label": "Detalji greške", - "error.page.action.restart": "Restartuj", - "error.page.action.report": "Prijavi grešku", - "error.page.action.reported": "Greška prijavljena", - "error.page.action.checking": "Provjera...", - "error.page.action.checkUpdates": "Provjeri ažuriranja", - "error.page.action.updateTo": "Ažuriraj na {{version}}", - "error.page.report.prefix": "Molimo prijavi ovu grešku OpenCode timu", - "error.page.report.discord": "na Discordu", - "error.page.version": "Verzija: {{version}}", - - "error.dev.rootNotFound": - "Korijenski element nije pronađen. Da li si zaboravio da ga dodaš u index.html? Ili je možda id atribut pogrešno napisan?", - - "error.serverSync.connectFailed": "Nije moguće povezati se na server. Da li server radi na `{{url}}`?", - "directory.error.invalidUrl": "Nevažeći direktorij u URL-u.", - - "error.chain.unknown": "Nepoznata greška", - "error.chain.causedBy": "Uzrok:", - "error.chain.apiError": "API greška", - "error.chain.status": "Status: {{status}}", - "error.chain.retryable": "Može se ponoviti: {{retryable}}", - "error.chain.responseBody": "Tijelo odgovora:\n{{body}}", - "error.chain.didYouMean": "Da li si mislio: {{suggestions}}", - "error.chain.modelNotFound": "Model nije pronađen: {{provider}}/{{model}}", - "error.chain.checkConfig": "Provjeri konfiguraciju (opencode.json) provider/model names", - "error.chain.mcpFailed": 'MCP server "{{name}}" nije uspio. Napomena: OpenCode još ne podržava MCP autentifikaciju.', - "error.chain.providerAuthFailed": "Autentifikacija provajdera nije uspjela ({{provider}}): {{message}}", - "error.chain.providerInitFailed": - 'Neuspjelo inicijalizovanje provajdera "{{provider}}". Provjeri kredencijale i konfiguraciju.', - "error.chain.configJsonInvalid": "Konfiguracijska datoteka na {{path}} nije važeći JSON(C)", - "error.chain.configJsonInvalidWithMessage": "Konfiguracijska datoteka na {{path}} nije važeći JSON(C): {{message}}", - "error.chain.configDirectoryTypo": - 'Direktorij "{{dir}}" u {{path}} nije ispravan. Preimenuj direktorij u "{{suggestion}}" ili ga ukloni. Ovo je česta greška u kucanju.', - "error.chain.configFrontmatterError": "Neuspjelo parsiranje frontmatter-a u {{path}}:\n{{message}}", - "error.chain.configInvalid": "Konfiguracijska datoteka na {{path}} nije ispravna", - "error.chain.configInvalidWithMessage": "Konfiguracijska datoteka na {{path}} nije ispravna: {{message}}", - - "notification.permission.title": "Potrebna dozvola", - "notification.permission.description": "{{sessionTitle}} u {{projectName}} traži dozvolu", - "notification.question.title": "Pitanje", - "notification.question.description": "{{sessionTitle}} u {{projectName}} ima pitanje", - "notification.action.goToSession": "Idi na sesiju", - - "notification.session.responseReady.title": "Odgovor je spreman", - "notification.session.error.title": "Greška sesije", - "notification.session.error.fallbackDescription": "Došlo je do greške", - - "home.recentProjects": "Nedavni projekti", - "home.empty.title": "Nema nedavnih projekata", - "home.empty.description": "Kreni tako što ćeš otvoriti lokalni projekat", - - "session.tab.session": "Sesija", - "session.tab.review": "Pregled", - "session.tab.context": "Kontekst", - "session.panel.reviewAndFiles": "Pregled i datoteke", - "session.review.filesChanged": "Izmijenjeno {{count}} datoteka", - "session.review.change.one": "Izmjena", - "session.review.change.other": "Izmjene", - "session.review.loadingChanges": "Učitavanje izmjena...", - "session.review.empty": "Još nema izmjena u ovoj sesiji", - "session.review.noVcs": "Nije detektovan Git sistem kontrole verzija, promjene se ne prikazuju", - "session.review.noSnapshot": - "Praćenje snimaka (snapshot) je onemogućeno u konfiguraciji, pa promjene sesije nisu dostupne", - "session.review.noChanges": "Nema izmjena", - - "session.files.selectToOpen": "Odaberi datoteku za otvaranje", - "session.files.all": "Sve datoteke", - "session.files.empty": "Nema datoteka", - "session.files.binaryContent": "Binarna datoteka (sadržaj se ne može prikazati)", - - "session.messages.renderEarlier": "Prikaži ranije poruke", - "session.messages.loadingEarlier": "Učitavanje ranijih poruka...", - "session.messages.loadEarlier": "Učitaj ranije poruke", - "session.messages.loading": "Učitavanje poruka...", - "session.messages.jumpToLatest": "Idi na najnovije", - - "session.context.addToContext": "Dodaj {{selection}} u kontekst", - "session.todo.title": "Zadaci", - "session.todo.collapse": "Sažmi", - "session.todo.expand": "Proširi", - "session.followupDock.summary.one": "{{count}} poruka na čekanju", - "session.followupDock.summary.other": "{{count}} poruka na čekanju", - "session.followupDock.sendNow": "Pošalji sada", - "session.followupDock.edit": "Uredi", - "session.followupDock.collapse": "Sažmi poruke na čekanju", - "session.followupDock.expand": "Proširi poruke na čekanju", - "session.revertDock.summary.one": "{{count}} vraćena poruka", - "session.revertDock.summary.other": "{{count}} vraćenih poruka", - "session.revertDock.collapse": "Sažmi vraćene poruke", - "session.revertDock.expand": "Proširi vraćene poruke", - "session.revertDock.restore": "Vrati poruku", - - "session.new.title": "Napravi bilo šta", - "session.new.worktree.main": "Glavna grana", - "session.new.worktree.mainWithBranch": "Glavna grana ({{branch}})", - "session.new.worktree.create": "Kreiraj novi worktree", - "session.new.lastModified": "Posljednja izmjena", - - "session.header.search.placeholder": "Pretraži {{project}}", - "session.header.searchFiles": "Pretraži datoteke", - "session.header.openIn": "Otvori u", - "session.header.open.action": "Otvori {{app}}", - "session.header.open.ariaLabel": "Otvori u {{app}}", - "session.header.open.menu": "Opcije otvaranja", - "session.header.open.copyPath": "Kopiraj putanju", - - "status.popover.trigger": "Status", - "status.popover.ariaLabel": "Konfiguracije servera", - "status.popover.tab.servers": "Serveri", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "Plugini", - "status.popover.action.manageServers": "Upravljaj serverima", - - "session.share.popover.title": "Objavi na webu", - "session.share.popover.description.shared": "Ova sesija je javna na webu. Dostupna je svima koji imaju link.", - "session.share.popover.description.unshared": "Podijeli sesiju javno na webu. Biće dostupna svima koji imaju link.", - "session.share.action.share": "Podijeli", - "session.share.action.publish": "Objavi", - "session.share.action.publishing": "Objavljivanje...", - "session.share.action.unpublish": "Poništi objavu", - "session.share.action.unpublishing": "Poništavanje objave...", - "session.share.action.view": "Prikaži", - "session.share.copy.copied": "Kopirano", - "session.share.copy.copyLink": "Kopiraj link", - - "lsp.tooltip.none": "Nema LSP servera", - "lsp.label.connected": "{{count}} LSP", - - "prompt.loading": "Učitavanje upita...", - "terminal.loading": "Učitavanje terminala...", - "terminal.title": "Terminal", - "terminal.title.numbered": "Terminal {{number}}", - "terminal.close": "Zatvori terminal", - "terminal.connectionLost.title": "Veza prekinuta", - "terminal.connectionLost.description": - "Veza s terminalom je prekinuta. Ovo se može desiti kada se server restartuje.", - - "common.closeTab": "Zatvori karticu", - "common.dismiss": "Odbaci", - "common.requestFailed": "Zahtjev nije uspio", - "common.moreOptions": "Više opcija", - "common.learnMore": "Saznaj više", - "common.rename": "Preimenuj", - "common.reset": "Resetuj", - "common.archive": "Arhiviraj", - "common.delete": "Izbriši", - "common.close": "Zatvori", - "common.edit": "Uredi", - "common.loadMore": "Učitaj još", - "common.key.esc": "ESC", - - "sidebar.menu.toggle": "Prikaži/sakrij meni", - "sidebar.nav.projectsAndSessions": "Projekti i sesije", - "sidebar.settings": "Postavke", - "sidebar.help": "Pomoć", - "sidebar.workspaces.enable": "Omogući radne prostore", - "sidebar.workspaces.disable": "Onemogući radne prostore", - "sidebar.gettingStarted.title": "Početak", - "sidebar.gettingStarted.line1": "OpenCode uključuje besplatne modele, tako da možeš odmah početi.", - "sidebar.gettingStarted.line2": "Poveži bilo kojeg provajdera da koristiš modele, npr. Claude, GPT, Gemini itd.", - "sidebar.project.recentSessions": "Nedavne sesije", - "sidebar.project.viewAllSessions": "Prikaži sve sesije", - "sidebar.project.clearNotifications": "Očisti obavijesti", - - "app.name.desktop": "OpenCode Desktop", - - "settings.section.desktop": "Desktop", - "settings.section.server": "Server", - "settings.tab.general": "Opšte", - "settings.tab.shortcuts": "Prečice", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "WSL integracija", - "settings.desktop.wsl.description": "Pokreni OpenCode server unutar WSL-a na Windowsu.", - - "settings.general.section.appearance": "Izgled", - "settings.general.section.notifications": "Sistemske obavijesti", - "settings.general.section.updates": "Ažuriranja", - "settings.general.section.sounds": "Zvučni efekti", - "settings.general.section.feed": "Feed", - "settings.general.section.display": "Prikaz", - - "settings.general.row.language.title": "Jezik", - "settings.general.row.language.description": "Promijeni jezik prikaza u OpenCode-u", - "settings.general.row.appearance.title": "Izgled", - "settings.general.row.appearance.description": "Prilagodi kako OpenCode izgleda na tvom uređaju", - "settings.general.row.colorScheme.title": "Šema boja", - "settings.general.row.colorScheme.description": "Odaberi da li OpenCode prati sistemsku, svijetlu ili tamnu temu", - "settings.general.row.theme.title": "Tema", - "settings.general.row.theme.description": "Prilagodi temu OpenCode-a.", - "settings.general.row.font.title": "Font za kod", - "settings.general.row.font.description": "Prilagodi font koji se koristi u blokovima koda", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "UI font", - "settings.general.row.uiFont.description": "Prilagodi font koji se koristi u cijelom interfejsu", - "settings.general.row.followup.title": "Ponašanje nadovezivanja", - "settings.general.row.followup.description": "Odaberi da li upiti nadovezivanja usmjeravaju odmah ili čekaju u redu", - "settings.general.row.followup.option.queue": "Red čekanja", - "settings.general.row.followup.option.steer": "Usmjeri", - "settings.general.row.reasoningSummaries.title": "Prikaži sažetke rasuđivanja", - "settings.general.row.reasoningSummaries.description": "Prikaži sažetke rasuđivanja modela na vremenskoj traci", - - "settings.general.row.shellToolPartsExpanded.title": "Proširi dijelove shell alata", - "settings.general.row.shellToolPartsExpanded.description": - "Prikaži dijelove shell alata podrazumijevano proširene na vremenskoj traci", - "settings.general.row.editToolPartsExpanded.title": "Proširi dijelove alata za uređivanje", - "settings.general.row.editToolPartsExpanded.description": - "Prikaži dijelove alata za uređivanje, pisanje i patch podrazumijevano proširene na vremenskoj traci", - "settings.general.row.wayland.title": "Koristi nativni Wayland", - "settings.general.row.wayland.description": "Onemogući X11 fallback na Waylandu. Zahtijeva restart.", - "settings.general.row.wayland.tooltip": - "Na Linuxu sa monitorima miješanih stopa osvježavanja, nativni Wayland može biti stabilniji.", - - "settings.general.row.releaseNotes.title": "Bilješke o izdanju", - "settings.general.row.releaseNotes.description": 'Prikaži iskačuće prozore "Šta je novo" nakon ažuriranja', - - "settings.updates.row.startup.title": "Provjeri ažuriranja pri pokretanju", - "settings.updates.row.startup.description": "Automatski provjerava ažuriranja kada se OpenCode pokrene", - "settings.updates.row.check.title": "Provjeri ažuriranja", - "settings.updates.row.check.description": "Ručno provjeri ažuriranja i instaliraj ako su dostupna", - "settings.updates.action.checkNow": "Provjeri sada", - "settings.updates.action.checking": "Provjera...", - "settings.updates.toast.latest.title": "Sve je ažurno", - "settings.updates.toast.latest.description": "Koristiš najnoviju verziju OpenCode-a.", - "sound.option.none": "Nijedan", - "sound.option.alert01": "Upozorenje 01", - "sound.option.alert02": "Upozorenje 02", - "sound.option.alert03": "Upozorenje 03", - "sound.option.alert04": "Upozorenje 04", - "sound.option.alert05": "Upozorenje 05", - "sound.option.alert06": "Upozorenje 06", - "sound.option.alert07": "Upozorenje 07", - "sound.option.alert08": "Upozorenje 08", - "sound.option.alert09": "Upozorenje 09", - "sound.option.alert10": "Upozorenje 10", - "sound.option.bipbop01": "Bip-bop 01", - "sound.option.bipbop02": "Bip-bop 02", - "sound.option.bipbop03": "Bip-bop 03", - "sound.option.bipbop04": "Bip-bop 04", - "sound.option.bipbop05": "Bip-bop 05", - "sound.option.bipbop06": "Bip-bop 06", - "sound.option.bipbop07": "Bip-bop 07", - "sound.option.bipbop08": "Bip-bop 08", - "sound.option.bipbop09": "Bip-bop 09", - "sound.option.bipbop10": "Bip-bop 10", - "sound.option.staplebops01": "Staplebops 01", - "sound.option.staplebops02": "Staplebops 02", - "sound.option.staplebops03": "Staplebops 03", - "sound.option.staplebops04": "Staplebops 04", - "sound.option.staplebops05": "Staplebops 05", - "sound.option.staplebops06": "Staplebops 06", - "sound.option.staplebops07": "Staplebops 07", - "sound.option.nope01": "Ne 01", - "sound.option.nope02": "Ne 02", - "sound.option.nope03": "Ne 03", - "sound.option.nope04": "Ne 04", - "sound.option.nope05": "Ne 05", - "sound.option.nope06": "Ne 06", - "sound.option.nope07": "Ne 07", - "sound.option.nope08": "Ne 08", - "sound.option.nope09": "Ne 09", - "sound.option.nope10": "Ne 10", - "sound.option.nope11": "Ne 11", - "sound.option.nope12": "Ne 12", - "sound.option.yup01": "Da 01", - "sound.option.yup02": "Da 02", - "sound.option.yup03": "Da 03", - "sound.option.yup04": "Da 04", - "sound.option.yup05": "Da 05", - "sound.option.yup06": "Da 06", - - "settings.general.notifications.agent.title": "Agent", - "settings.general.notifications.agent.description": - "Prikaži sistemsku obavijest kada agent završi ili zahtijeva pažnju", - "settings.general.notifications.permissions.title": "Dozvole", - "settings.general.notifications.permissions.description": "Prikaži sistemsku obavijest kada je potrebna dozvola", - "settings.general.notifications.errors.title": "Greške", - "settings.general.notifications.errors.description": "Prikaži sistemsku obavijest kada dođe do greške", - - "settings.general.sounds.agent.title": "Agent", - "settings.general.sounds.agent.description": "Pusti zvuk kada agent završi ili zahtijeva pažnju", - "settings.general.sounds.permissions.title": "Dozvole", - "settings.general.sounds.permissions.description": "Pusti zvuk kada je potrebna dozvola", - "settings.general.sounds.errors.title": "Greške", - "settings.general.sounds.errors.description": "Pusti zvuk kada dođe do greške", - - "settings.shortcuts.title": "Prečice na tastaturi", - "settings.shortcuts.reset.button": "Vrati na podrazumijevano", - "settings.shortcuts.reset.toast.title": "Prečice resetovane", - "settings.shortcuts.reset.toast.description": "Prečice na tastaturi su vraćene na podrazumijevane.", - "settings.shortcuts.conflict.title": "Prečica je već u upotrebi", - "settings.shortcuts.conflict.description": "{{keybind}} je već dodijeljeno za {{titles}}.", - "settings.shortcuts.unassigned": "Nedodijeljeno", - "settings.shortcuts.pressKeys": "Pritisni tastere", - "settings.shortcuts.search.placeholder": "Pretraži prečice", - "settings.shortcuts.search.empty": "Nema pronađenih prečica", - - "settings.shortcuts.group.general": "Opšte", - "settings.shortcuts.group.session": "Sesija", - "settings.shortcuts.group.navigation": "Navigacija", - "settings.shortcuts.group.modelAndAgent": "Model i agent", - "settings.shortcuts.group.terminal": "Terminal", - "settings.shortcuts.group.prompt": "Upit", - - "settings.providers.title": "Provajderi", - "settings.providers.description": "Postavke provajdera će se ovdje moći podešavati.", - "settings.providers.section.connected": "Povezani provajderi", - "settings.providers.connected.empty": "Nema povezanih provajdera", - "settings.providers.section.popular": "Popularni provajderi", - "settings.providers.tag.environment": "Okruženje", - "settings.providers.tag.config": "Konfiguracija", - "settings.providers.tag.custom": "Prilagođeno", - "settings.providers.tag.other": "Ostalo", - "settings.models.title": "Modeli", - "settings.models.description": "Postavke modela će se ovdje moći podešavati.", - "settings.agents.title": "Agenti", - "settings.agents.description": "Postavke agenata će se ovdje moći podešavati.", - "settings.commands.title": "Komande", - "settings.commands.description": "Postavke komandi će se ovdje moći podešavati.", - "settings.mcp.title": "MCP", - "settings.mcp.description": "MCP postavke će se ovdje moći podešavati.", - - "settings.permissions.title": "Dozvole", - "settings.permissions.description": "Kontroliši koje alate server smije koristiti po defaultu.", - "settings.permissions.section.tools": "Alati", - "settings.permissions.toast.updateFailed.title": "Neuspjelo ažuriranje dozvola", - - "settings.permissions.action.allow": "Dozvoli", - "settings.permissions.action.ask": "Pitaj", - "settings.permissions.action.deny": "Zabrani", - - "settings.permissions.tool.read.title": "Čitanje", - "settings.permissions.tool.read.description": "Čitanje datoteke (podudara se s putanjom datoteke)", - "settings.permissions.tool.edit.title": "Uređivanje", - "settings.permissions.tool.edit.description": - "Mijenjanje datoteka, uključujući izmjene, pisanja, patch-eve i multi-izmjene", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "Podudaranje datoteka pomoću glob šablona", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "Pretraživanje sadržaja datoteka pomoću regularnih izraza", - "settings.permissions.tool.list.title": "Lista", - "settings.permissions.tool.list.description": "Listanje datoteka unutar direktorija", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "Pokretanje shell komandi", - "settings.permissions.tool.task.title": "Zadatak", - "settings.permissions.tool.task.description": "Pokretanje pod-agenta", - "settings.permissions.tool.skill.title": "Vještina", - "settings.permissions.tool.skill.description": "Učitaj vještinu po nazivu", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "Pokreni upite jezičnog servera", - "settings.permissions.tool.todowrite.title": "Ažuriranje liste zadataka", - "settings.permissions.tool.todowrite.description": "Ažuriraj listu zadataka", - "settings.permissions.tool.webfetch.title": "Web preuzimanje", - "settings.permissions.tool.webfetch.description": "Preuzmi sadržaj sa URL-a", - "settings.permissions.tool.websearch.title": "Web pretraga", - "settings.permissions.tool.websearch.description": "Pretražuj web", - "settings.permissions.tool.external_directory.title": "Vanjski direktorij", - "settings.permissions.tool.external_directory.description": "Pristup datotekama izvan direktorija projekta", - "settings.permissions.tool.doom_loop.title": "Beskonačna petlja", - "settings.permissions.tool.doom_loop.description": "Otkriva ponovljene pozive alata sa identičnim unosom", - - "session.delete.failed.title": "Neuspjelo brisanje sesije", - "session.delete.title": "Izbriši sesiju", - "session.delete.confirm": 'Izbriši sesiju "{{name}}"?', - "session.delete.button": "Izbriši sesiju", - - "workspace.new": "Novi radni prostor", - "workspace.type.local": "lokalno", - "workspace.type.sandbox": "sandbox", - "workspace.create.failed.title": "Neuspješno kreiranje radnog prostora", - "workspace.delete.failed.title": "Neuspješno brisanje radnog prostora", - "workspace.resetting.title": "Resetovanje radnog prostora", - "workspace.resetting.description": "Ovo može potrajati minut.", - "workspace.reset.failed.title": "Neuspješno resetovanje radnog prostora", - "workspace.reset.success.title": "Radni prostor resetovan", - "workspace.reset.success.description": "Radni prostor sada odgovara podrazumijevanoj grani.", - "workspace.error.stillPreparing": "Radni prostor se još priprema", - "workspace.status.checking": "Provjera neobjedinjenih promjena...", - "workspace.status.error": "Nije moguće provjeriti git status.", - "workspace.status.clean": "Nisu pronađene neobjedinjene promjene.", - "workspace.status.dirty": "Pronađene su neobjedinjene promjene u ovom radnom prostoru.", - "workspace.delete.title": "Izbriši radni prostor", - "workspace.delete.confirm": 'Izbriši radni prostor "{{name}}"?', - "workspace.delete.button": "Izbriši radni prostor", - "workspace.reset.title": "Resetuj radni prostor", - "workspace.reset.confirm": 'Resetuj radni prostor "{{name}}"?', - "workspace.reset.button": "Resetuj radni prostor", - "workspace.reset.archived.none": "Nijedna aktivna sesija neće biti arhivirana.", - "workspace.reset.archived.one": "1 sesija će biti arhivirana.", - "workspace.reset.archived.many": "Biće arhivirano {{count}} sesija.", - "workspace.reset.note": "Ovo će resetovati radni prostor da odgovara podrazumijevanoj grani.", - "common.open": "Otvori", - "dialog.releaseNotes.action.getStarted": "Započni", - "dialog.releaseNotes.action.next": "Sljedeće", - "dialog.releaseNotes.action.hideFuture": "Ne prikazuj ovo u budućnosti", - "dialog.releaseNotes.media.alt": "Pregled izdanja", - "toast.project.reloadFailed.title": "Nije uspjelo ponovno učitavanje {{project}}", - "error.server.invalidConfiguration": "Nevažeća konfiguracija", - "common.moreCountSuffix": " (+{{count}} više)", - "common.time.justNow": "Upravo sada", - "common.time.minutesAgo.short": "prije {{count}} min", - "common.time.hoursAgo.short": "prije {{count}} h", - "common.time.daysAgo.short": "prije {{count}} d", - "settings.providers.connected.environmentDescription": "Povezano sa vašim varijablama okruženja", - "settings.providers.custom.description": "Dodajte provajdera kompatibilnog s OpenAI putem osnovnog URL-a.", - - "app.server.unreachable": "Nije moguće pristupiti {{server}}", - "app.server.retrying": "Automatski ponovni pokušaj...", - "app.server.otherServers": "Drugi serveri", - "dialog.server.add.usernamePlaceholder": "korisničko ime", - "dialog.server.add.passwordPlaceholder": "lozinka", - "server.row.noUsername": "nema korisničkog imena", - "session.review.noVcs.createGit.title": "Kreiraj Git repozitorij", - "session.review.noVcs.createGit.description": "Pratite, pregledajte i poništite promjene u ovom projektu", - "session.review.noVcs.createGit.actionLoading": "Kreiranje Git repozitorija...", - "session.review.noVcs.createGit.action": "Kreiraj Git repozitorij", - "session.todo.progress": "{{done}} od {{total}} zadataka završeno", - "session.question.progress": "{{current}} od {{total}} pitanja", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "File Explorer", - "session.header.open.fileManager": "File Manager", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "Terminal", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "Dijagnostika performansi razvoja", - "debugBar.na": "n/a", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": - "Posljednji završeni prelazak rute koji dotiče stranicu sesije, mjeren od početka rutera do prvog iscrtavanja nakon smirivanja.", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "Kadrovi u sekundi tokom posljednjih 5 sekundi.", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "Najgore vrijeme kadra u posljednjih 5 sekundi.", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "Kadrovi duži od 32ms u posljednjih 5 sekundi.", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "Blokirano vrijeme i broj dugih zadataka u posljednjih 5 sekundi. Maks zadatak: {{max}}.", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "Najgore zabilježeno kašnjenje unosa u posljednjih 5 sekundi.", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": - "Približno trajanje interakcije tokom posljednjih 5 sekundi. Ovo je slično INP-u, nije službeni Web Vitals INP.", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "Kumulativni pomak rasporeda za trenutni životni vijek aplikacije.", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "Korišteni JS heap naspram limita heapa. Samo Chromium.", - "debugBar.mem.tip": "Korišteni JS heap naspram limita heapa. {{used}} od {{limit}}.", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "Space", - "common.key.backspace": "Backspace", - "common.key.enter": "Enter", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "nepoznato", - "error.page.circular": "[Kružno]", - "error.serverSDK.noServerAvailable": "Nema dostupnog servera", - "error.serverSDK.serverNotAvailable": "Server nije dostupan", - "error.childStore.persistedCacheCreateFailed": "Nije uspjelo kreiranje trajnog keša", - "error.childStore.persistedProjectMetadataCreateFailed": "Nije uspjelo kreiranje trajnih metapodataka projekta", - "error.childStore.persistedProjectIconCreateFailed": "Nije uspjelo kreiranje trajne ikone projekta", - "error.childStore.storeCreateFailed": "Nije uspjelo kreiranje skladišta", - "terminal.connectionLost.abnormalClose": "WebSocket zatvoren nenormalno: {{code}}", -} diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts deleted file mode 100644 index ad43c1d111..0000000000 --- a/packages/app/src/i18n/da.ts +++ /dev/null @@ -1,932 +0,0 @@ -export const dict = { - "command.category.suggested": "Foreslået", - "command.category.view": "Vis", - "command.category.project": "Projekt", - "command.category.provider": "Udbyder", - "command.category.server": "Server", - "command.category.session": "Session", - "command.category.theme": "Tema", - "command.category.language": "Sprog", - "command.category.file": "Fil", - "command.category.context": "Kontekst", - "command.category.terminal": "Terminal", - "command.category.model": "Model", - "command.category.mcp": "MCP", - "command.category.agent": "Agent", - "command.category.permissions": "Tilladelser", - "command.category.workspace": "Arbejdsområde", - - "command.category.settings": "Indstillinger", - "theme.scheme.system": "System", - "theme.scheme.light": "Lys", - "theme.scheme.dark": "Mørk", - - "command.sidebar.toggle": "Skift sidebjælke", - "command.project.open": "Åbn projekt", - "command.provider.connect": "Tilslut udbyder", - "command.server.switch": "Skift server", - "command.settings.open": "Åbn indstillinger", - "command.session.previous": "Forrige session", - "command.session.next": "Næste session", - "command.session.previous.unseen": "Forrige ulæste session", - "command.session.next.unseen": "Næste ulæste session", - "command.session.archive": "Arkivér session", - - "command.palette": "Kommandopalette", - - "command.theme.cycle": "Skift tema", - "command.theme.set": "Brug tema: {{theme}}", - "command.theme.scheme.cycle": "Skift farveskema", - "command.theme.scheme.set": "Brug farveskema: {{scheme}}", - - "command.language.cycle": "Skift sprog", - "command.language.set": "Brug sprog: {{language}}", - - "command.session.new": "Ny session", - "command.file.open": "Åbn fil", - "command.tab.close": "Luk fane", - "command.context.addSelection": "Tilføj markering til kontekst", - "command.context.addSelection.description": "Tilføj markerede linjer fra den aktuelle fil", - "command.input.focus": "Fokuser inputfelt", - "command.terminal.toggle": "Skift terminal", - "command.fileTree.toggle": "Skift filtræ", - "command.review.toggle": "Skift gennemgang", - "command.terminal.new": "Ny terminal", - "command.terminal.new.description": "Opret en ny terminalfane", - "command.steps.toggle": "Skift trin", - "command.steps.toggle.description": "Vis eller skjul trin for den aktuelle besked", - "command.message.previous": "Forrige besked", - "command.message.previous.description": "Gå til den forrige brugerbesked", - "command.message.next": "Næste besked", - "command.message.next.description": "Gå til den næste brugerbesked", - "command.model.choose": "Vælg model", - "command.model.choose.description": "Vælg en anden model", - "command.mcp.toggle": "Skift MCP'er", - "command.mcp.toggle.description": "Skift MCP'er", - "command.agent.cycle": "Skift agent", - "command.agent.cycle.description": "Skift til næste agent", - "command.agent.cycle.reverse": "Skift agent baglæns", - "command.agent.cycle.reverse.description": "Skift til forrige agent", - "command.model.variant.cycle": "Skift tænkeindsats", - "command.model.variant.cycle.description": "Skift til næste indsatsniveau", - "command.prompt.mode.shell": "Shell", - "command.prompt.mode.normal": "Prompt", - "command.permissions.autoaccept.enable": "Accepter tilladelser automatisk", - "command.permissions.autoaccept.disable": "Stop med at acceptere tilladelser automatisk", - "command.workspace.toggle": "Skift arbejdsområder", - "command.workspace.toggle.description": "Aktiver eller deaktiver flere arbejdsområder i sidebjælken", - "command.session.undo": "Fortryd", - "command.session.undo.description": "Fortryd den sidste besked", - "command.session.redo": "Omgør", - "command.session.redo.description": "Omgør den sidste fortrudte besked", - "command.session.compact": "Komprimér session", - "command.session.compact.description": "Opsummer sessionen for at reducere kontekststørrelsen", - "command.session.fork": "Forgren fra besked", - "command.session.fork.description": "Opret en ny session fra en tidligere besked", - "command.session.share": "Del session", - "command.session.share.description": "Del denne session og kopier URL'en til udklipsholderen", - "command.session.unshare": "Stop deling af session", - "command.session.unshare.description": "Stop med at dele denne session", - - "palette.search.placeholder": "Søg i filer, kommandoer og sessioner", - "palette.empty": "Ingen resultater fundet", - "palette.group.commands": "Kommandoer", - "palette.group.files": "Filer", - - "dialog.provider.search.placeholder": "Søg udbydere", - "dialog.provider.empty": "Ingen udbydere fundet", - "dialog.provider.group.popular": "Populære", - "dialog.provider.group.other": "Andre", - "dialog.provider.tag.recommended": "Anbefalet", - "dialog.provider.opencode.note": "Udvalgte modeller inklusive Claude, GPT, Gemini og flere", - "dialog.provider.opencode.tagline": "Pålidelige optimerede modeller", - "dialog.provider.opencodeGo.tagline": "Billigt abonnement for alle", - "dialog.provider.anthropic.note": "Direkte adgang til Claude-modeller, inklusive Pro og Max", - "dialog.provider.copilot.note": "AI-modeller til kodningsassistance via GitHub Copilot", - "dialog.provider.openai.note": "GPT-modeller til hurtige, kompetente generelle AI-opgaver", - "dialog.provider.google.note": "Gemini-modeller til hurtige, strukturerede svar", - "dialog.provider.openrouter.note": "Få adgang til alle understøttede modeller fra én udbyder", - "dialog.provider.vercel.note": "Samlet adgang til AI-modeller med smart routing", - - "dialog.model.select.title": "Vælg model", - "dialog.model.search.placeholder": "Søg modeller", - "dialog.model.empty": "Ingen modeller fundet", - "dialog.model.manage": "Administrer modeller", - "dialog.model.manage.description": "Tilpas hvilke modeller der vises i modelvælgeren.", - "dialog.model.manage.provider.toggle": "Skift alle {{provider}}-modeller", - - "dialog.model.unpaid.freeModels.title": "Gratis modeller leveret af OpenCode", - "dialog.model.unpaid.addMore.title": "Tilføj flere modeller fra populære udbydere", - - "dialog.provider.viewAll": "Vis flere udbydere", - - "provider.connect.title": "Forbind {{provider}}", - "provider.connect.title.anthropicProMax": "Log ind med Claude Pro/Max", - "provider.connect.selectMethod": "Vælg loginmetode for {{provider}}.", - "provider.connect.method.apiKey": "API-nøgle", - "provider.connect.status.inProgress": "Godkendelse i gang...", - "provider.connect.status.waiting": "Venter på godkendelse...", - "provider.connect.status.failed": "Godkendelse mislykkedes: {{error}}", - "provider.connect.apiKey.description": - "Indtast din {{provider}} API-nøgle for at forbinde din konto og bruge {{provider}} modeller i OpenCode.", - "provider.connect.apiKey.label": "{{provider}} API-nøgle", - "provider.connect.apiKey.placeholder": "API-nøgle", - "provider.connect.apiKey.required": "API-nøgle er påkrævet", - "provider.connect.opencodeZen.line1": - "OpenCode Zen giver dig adgang til et udvalg af pålidelige optimerede modeller til kodningsagenter.", - "provider.connect.opencodeZen.line2": - "Med en enkelt API-nøgle får du adgang til modeller som Claude, GPT, Gemini, GLM og flere.", - "provider.connect.opencodeZen.visit.prefix": "Besøg ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " for at hente din API-nøgle.", - "provider.connect.oauth.code.visit.prefix": "Besøg ", - "provider.connect.oauth.code.visit.link": "dette link", - "provider.connect.oauth.code.visit.suffix": - " for at hente din godkendelseskode for at forbinde din konto og bruge {{provider}} modeller i OpenCode.", - "provider.connect.oauth.code.label": "{{method}} godkendelseskode", - "provider.connect.oauth.code.placeholder": "Godkendelseskode", - "provider.connect.oauth.code.required": "Godkendelseskode er påkrævet", - "provider.connect.oauth.code.invalid": "Ugyldig godkendelseskode", - "provider.connect.oauth.auto.visit.prefix": "Besøg ", - "provider.connect.oauth.auto.visit.link": "dette link", - "provider.connect.oauth.auto.visit.suffix": - " og indtast koden nedenfor for at forbinde din konto og bruge {{provider}} modeller i OpenCode.", - "provider.connect.oauth.auto.confirmationCode": "Bekræftelseskode", - "provider.connect.toast.connected.title": "{{provider}} forbundet", - "provider.connect.toast.connected.description": "{{provider}} modeller er nu tilgængelige.", - - "provider.custom.title": "Brugerdefineret udbyder", - "provider.custom.description.prefix": "Konfigurer en OpenAI-kompatibel udbyder. Se ", - "provider.custom.description.link": "dokumentation for udbyderkonfiguration", - "provider.custom.description.suffix": ".", - "provider.custom.field.providerID.label": "Udbyder-ID", - "provider.custom.field.providerID.placeholder": "minudbyder", - "provider.custom.field.providerID.description": "Små bogstaver, tal, bindestreger eller understregninger", - "provider.custom.field.name.label": "Visningsnavn", - "provider.custom.field.name.placeholder": "Min AI-udbyder", - "provider.custom.field.baseURL.label": "Basis-URL", - "provider.custom.field.baseURL.placeholder": "https://api.minudbyder.dk/v1", - "provider.custom.field.apiKey.label": "API-nøgle", - "provider.custom.field.apiKey.placeholder": "API-nøgle", - "provider.custom.field.apiKey.description": "Valgfri. Lad være tom, hvis du administrerer godkendelse via headers.", - "provider.custom.models.label": "Modeller", - "provider.custom.models.id.label": "ID", - "provider.custom.models.id.placeholder": "model-id", - "provider.custom.models.name.label": "Navn", - "provider.custom.models.name.placeholder": "Visningsnavn", - "provider.custom.models.remove": "Fjern model", - "provider.custom.models.add": "Tilføj model", - "provider.custom.headers.label": "Headers (valgfri)", - "provider.custom.headers.key.label": "Header", - "provider.custom.headers.key.placeholder": "Header-Navn", - "provider.custom.headers.value.label": "Værdi", - "provider.custom.headers.value.placeholder": "værdi", - "provider.custom.headers.remove": "Fjern header", - "provider.custom.headers.add": "Tilføj header", - "provider.custom.error.providerID.required": "Udbyder-ID er påkrævet", - "provider.custom.error.providerID.format": "Brug små bogstaver, tal, bindestreger eller understregninger", - "provider.custom.error.providerID.exists": "Dette udbyder-ID findes allerede", - "provider.custom.error.name.required": "Visningsnavn er påkrævet", - "provider.custom.error.baseURL.required": "Basis-URL er påkrævet", - "provider.custom.error.baseURL.format": "Skal starte med http:// eller https://", - "provider.custom.error.required": "Påkrævet", - "provider.custom.error.duplicate": "Duplikeret", - - "provider.disconnect.toast.disconnected.title": "{{provider}} frakoblet", - "provider.disconnect.toast.disconnected.description": "Modeller fra {{provider}} er ikke længere tilgængelige.", - "model.tag.free": "Gratis", - "model.tag.latest": "Nyeste", - - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "tekst", - "model.input.image": "billede", - "model.input.audio": "lyd", - "model.input.video": "video", - "model.input.pdf": "pdf", - "model.tooltip.allows": "Tillader: {{inputs}}", - "model.tooltip.reasoning.allowed": "Tillader tænkning", - "model.tooltip.reasoning.none": "Ingen tænkning", - "model.tooltip.context": "Kontekstgrænse {{limit}}", - "common.search.placeholder": "Søg", - "common.goBack": "Gå tilbage", - "common.goForward": "Naviger fremad", - "common.loading": "Indlæser", - "common.loading.ellipsis": "...", - "common.cancel": "Annuller", - "common.connect": "Forbind", - "common.disconnect": "Frakobl", - "common.continue": "Indsend", - "common.submit": "Indsend", - "common.save": "Gem", - "common.saving": "Gemmer...", - "common.default": "Standard", - "common.attachment": "vedhæftning", - - "prompt.placeholder.shell": "Indtast shell-kommando... {{example}}", - "prompt.placeholder.normal": 'Spørg om hvad som helst... "{{example}}"', - "prompt.placeholder.simple": "Spørg om hvad som helst...", - "prompt.placeholder.summarizeComments": "Opsummér kommentarer…", - "prompt.placeholder.summarizeComment": "Opsummér kommentar…", - "prompt.mode.shell": "Shell", - "prompt.mode.normal": "Prompt", - "prompt.mode.shell.exit": "esc for at afslutte", - - "prompt.example.1": "Ret en TODO i koden", - "prompt.example.2": "Hvad er teknologistakken for dette projekt?", - "prompt.example.3": "Ret ødelagte tests", - "prompt.example.4": "Forklar hvordan godkendelse fungerer", - "prompt.example.5": "Find og ret sikkerhedshuller", - "prompt.example.6": "Tilføj enhedstests for brugerservice", - "prompt.example.7": "Refaktorer denne funktion så den er mere læsbar", - "prompt.example.8": "Hvad betyder denne fejl?", - "prompt.example.9": "Hjælp mig med at debugge dette problem", - "prompt.example.10": "Generer API-dokumentation", - "prompt.example.11": "Optimer databaseforespørgsler", - "prompt.example.12": "Tilføj validering af input", - "prompt.example.13": "Opret en ny komponent til...", - "prompt.example.14": "Hvordan deployerer jeg dette projekt?", - "prompt.example.15": "Gennemgå min kode for bedste praksis", - "prompt.example.16": "Tilføj fejlhåndtering til denne funktion", - "prompt.example.17": "Forklar dette regex-mønster", - "prompt.example.18": "Konverter dette til TypeScript", - "prompt.example.19": "Tilføj logning i hele koden", - "prompt.example.20": "Hvilke afhængigheder er forældede?", - "prompt.example.21": "Hjælp mig med at skrive et migreringsscript", - "prompt.example.22": "Implementer caching for dette endpoint", - "prompt.example.23": "Tilføj sideinddeling til denne liste", - "prompt.example.24": "Opret en CLI-kommando til...", - "prompt.example.25": "Hvordan fungerer miljøvariabler her?", - - "prompt.popover.emptyResults": "Ingen matchende resultater", - "prompt.popover.emptyCommands": "Ingen matchende kommandoer", - "prompt.dropzone.label": "Slip billeder, PDF'er eller tekstfiler her", - "prompt.dropzone.file.label": "Slip for at @nævne fil", - "prompt.slash.badge.custom": "brugerdefineret", - "prompt.slash.badge.skill": "skill", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "aktiv", - "prompt.context.includeActiveFile": "Inkluder aktiv fil", - "prompt.context.removeActiveFile": "Fjern aktiv fil fra kontekst", - "prompt.context.removeFile": "Fjern fil fra kontekst", - "prompt.action.attachFile": "Vedhæft fil", - "prompt.attachment.remove": "Fjern vedhæftning", - "prompt.action.send": "Send", - "prompt.action.stop": "Stop", - - "prompt.toast.pasteUnsupported.title": "Ikke understøttet vedhæftning", - "prompt.toast.pasteUnsupported.description": "Kun billeder, PDF'er eller tekstfiler kan vedhæftes her.", - "prompt.toast.modelAgentRequired.title": "Vælg en agent og model", - "prompt.toast.modelAgentRequired.description": "Vælg en agent og model før du sender en forespørgsel.", - "prompt.toast.worktreeCreateFailed.title": "Kunne ikke oprette worktree", - "prompt.toast.sessionCreateFailed.title": "Kunne ikke oprette session", - "prompt.toast.shellSendFailed.title": "Kunne ikke sende shell-kommando", - "prompt.toast.commandSendFailed.title": "Kunne ikke sende kommando", - "prompt.toast.promptSendFailed.title": "Kunne ikke sende forespørgsel", - "prompt.toast.promptSendFailed.description": "Kunne ikke hente session", - - "dialog.mcp.title": "MCP'er", - "dialog.mcp.description": "{{enabled}} af {{total}} aktiveret", - "dialog.mcp.empty": "Ingen MCP'er konfigureret", - - "dialog.lsp.empty": "LSP'er registreret automatisk fra filtyper", - "dialog.plugins.empty": "Plugins konfigureret i opencode.json", - - "mcp.status.connected": "forbundet", - "mcp.status.failed": "mislykkedes", - "mcp.status.needs_auth": "kræver godkendelse", - "mcp.auth.clickToAuthenticate": "Klik for at godkende", - "mcp.status.disabled": "deaktiveret", - - "dialog.fork.empty": "Ingen beskeder at forgrene fra", - - "dialog.directory.search.placeholder": "Søg mapper", - "dialog.directory.empty": "Ingen mapper fundet", - "dialog.directory.action.selectFile": "Vælg fil", - "dialog.directory.action.selectFolder": "Vælg mappe", - "dialog.directory.root": "Rod", - "dialog.directory.parent": "Overordnet", - "dialog.directory.readError": "Denne mappe kan ikke læses", - - "dialog.server.title": "Servere", - "dialog.server.description": "Skift hvilken OpenCode-server denne app forbinder til.", - "dialog.server.search.placeholder": "Søg servere", - "dialog.server.empty": "Ingen servere endnu", - "dialog.server.add.title": "Tilføj en server", - "dialog.server.add.url": "Server URL", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "Kunne ikke forbinde til server", - "dialog.server.add.checking": "Tjekker...", - "dialog.server.add.button": "Tilføj server", - "dialog.server.add.name": "Servernavn (valgfrit)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "Brugernavn (valgfrit)", - "dialog.server.add.password": "Adgangskode (valgfrit)", - "dialog.server.edit.title": "Rediger server", - "dialog.server.default.title": "Standardserver", - "dialog.server.default.description": - "Forbind til denne server ved start af app i stedet for at starte en lokal server. Kræver genstart.", - "dialog.server.default.none": "Ingen server valgt", - "dialog.server.default.set": "Sæt nuværende server som standard", - "dialog.server.default.clear": "Ryd", - "dialog.server.action.remove": "Fjern server", - - "dialog.server.menu.edit": "Rediger", - "dialog.server.menu.default": "Sæt som standard", - "dialog.server.menu.defaultRemove": "Fjern som standard", - "dialog.server.menu.delete": "Slet", - "dialog.server.current": "Nuværende server", - "dialog.server.status.default": "Standard", - - "dialog.project.edit.title": "Rediger projekt", - "dialog.project.edit.name": "Navn", - "dialog.project.edit.icon": "Ikon", - "dialog.project.edit.icon.alt": "Projektikon", - "dialog.project.edit.icon.hint": "Klik eller træk et billede", - "dialog.project.edit.icon.recommended": "Anbefalet: 128x128px", - "dialog.project.edit.color": "Farve", - "dialog.project.edit.color.select": "Vælg farven {{color}}", - - "dialog.project.edit.worktree.startup": "Opstartsscript for arbejdsområde", - "dialog.project.edit.worktree.startup.description": "Køres efter oprettelse af et nyt arbejdsområde (worktree).", - "dialog.project.edit.worktree.startup.placeholder": "f.eks. bun install", - "context.breakdown.title": "Kontekstfordeling", - "context.breakdown.note": - 'Omtrentlig fordeling af input-tokens. "Andre" inkluderer værktøjsdefinitioner og overhead.', - "context.breakdown.system": "System", - "context.breakdown.user": "Bruger", - "context.breakdown.assistant": "Assistent", - "context.breakdown.tool": "Værktøjskald", - "context.breakdown.other": "Andre", - - "context.systemPrompt.title": "Systemprompt", - "context.rawMessages.title": "Rå beskeder", - - "context.stats.session": "Session", - "context.stats.messages": "Beskeder", - "context.stats.provider": "Udbyder", - "context.stats.model": "Model", - "context.stats.limit": "Kontekstgrænse", - "context.stats.totalTokens": "Samlede tokens", - "context.stats.usage": "Forbrug", - "context.stats.inputTokens": "Input-tokens", - "context.stats.outputTokens": "Output-tokens", - "context.stats.reasoningTokens": "Tænke Tokens", - "context.stats.cacheTokens": "Cache Tokens (læs/skriv)", - "context.stats.userMessages": "Brugerbeskeder", - "context.stats.assistantMessages": "Assistentbeskeder", - "context.stats.totalCost": "Samlede omkostninger", - "context.stats.sessionCreated": "Session oprettet", - "context.stats.lastActivity": "Seneste aktivitet", - - "context.usage.tokens": "Tokens", - "context.usage.usage": "Forbrug", - "context.usage.cost": "Omkostning", - "context.usage.clickToView": "Klik for at se kontekst", - "context.usage.view": "Se kontekstforbrug", - - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - - "toast.language.title": "Sprog", - "toast.language.description": "Skiftede til {{language}}", - - "toast.theme.title": "Tema skiftet", - "toast.scheme.title": "Farveskema", - - "toast.permissions.autoaccept.on.title": "Accepterer tilladelser automatisk", - "toast.permissions.autoaccept.on.description": "Anmodninger om tilladelse godkendes automatisk", - "toast.permissions.autoaccept.off.title": "Stoppet med at acceptere tilladelser automatisk", - "toast.permissions.autoaccept.off.description": "Anmodninger om tilladelse vil kræve godkendelse", - - "toast.workspace.enabled.title": "Arbejdsområder aktiveret", - "toast.workspace.enabled.description": "Flere worktrees vises nu i sidepanelet", - "toast.workspace.disabled.title": "Arbejdsområder deaktiveret", - "toast.workspace.disabled.description": "Kun hoved-worktree vises i sidepanelet", - - "toast.model.none.title": "Ingen model valgt", - "toast.model.none.description": "Forbind en udbyder for at opsummere denne session", - - "toast.file.loadFailed.title": "Kunne ikke indlæse fil", - - "toast.file.listFailed.title": "Kunne ikke liste filer", - "toast.context.noLineSelection.title": "Ingen linjevalg", - "toast.context.noLineSelection.description": "Vælg først et linjeinterval i en filfane.", - "toast.session.share.copyFailed.title": "Kunne ikke kopiere URL til udklipsholder", - "toast.session.share.success.title": "Session delt", - "toast.session.share.success.description": "Delings-URL kopieret til udklipsholder!", - "toast.session.share.failed.title": "Kunne ikke dele session", - "toast.session.share.failed.description": "Der opstod en fejl under deling af sessionen", - - "toast.session.unshare.success.title": "Deling af session stoppet", - "toast.session.unshare.success.description": "Deling af session blev stoppet!", - "toast.session.unshare.failed.title": "Kunne ikke stoppe deling af session", - "toast.session.unshare.failed.description": "Der opstod en fejl under stop af sessionsdeling", - - "toast.session.listFailed.title": "Kunne ikke indlæse sessioner for {{project}}", - - "toast.update.title": "Opdatering tilgængelig", - "toast.update.description": "En ny version af OpenCode ({{version}}) er nu tilgængelig til installation.", - "toast.update.action.installRestart": "Installer og genstart", - "toast.update.action.notYet": "Ikke endnu", - - "error.page.title": "Noget gik galt", - "error.page.description": "Der opstod en fejl under indlæsning af applikationen.", - "error.page.details.label": "Fejldetaljer", - "error.page.action.restart": "Genstart", - "error.page.action.report": "Rapportér fejl", - "error.page.action.reported": "Fejl rapporteret", - "error.page.action.checking": "Tjekker...", - "error.page.action.checkUpdates": "Tjek for opdateringer", - "error.page.action.updateTo": "Opdater til {{version}}", - "error.page.report.prefix": "Rapporter venligst denne fejl til OpenCode-teamet", - "error.page.report.discord": "på Discord", - "error.page.version": "Version: {{version}}", - - "error.dev.rootNotFound": - "Rodelement ikke fundet. Har du glemt at tilføje det til din index.html? Eller måske er id-attributten stavet forkert?", - - "error.serverSync.connectFailed": "Kunne ikke forbinde til server. Kører der en server på `{{url}}`?", - "directory.error.invalidUrl": "Ugyldig mappe i URL.", - - "error.chain.unknown": "Ukendt fejl", - "error.chain.causedBy": "Forårsaget af:", - "error.chain.apiError": "API-fejl", - "error.chain.status": "Status: {{status}}", - "error.chain.retryable": "Kan forsøges igen: {{retryable}}", - "error.chain.responseBody": "Svarindhold:\n{{body}}", - "error.chain.didYouMean": "Mente du: {{suggestions}}", - "error.chain.modelNotFound": "Model ikke fundet: {{provider}}/{{model}}", - "error.chain.checkConfig": "Tjek dine konfigurations (opencode.json) udbyder/modelnavne", - "error.chain.mcpFailed": 'MCP-server "{{name}}" fejlede. Bemærk, OpenCode understøtter ikke MCP-godkendelse endnu.', - "error.chain.providerAuthFailed": "Udbydergodkendelse mislykkedes ({{provider}}): {{message}}", - "error.chain.providerInitFailed": - 'Kunne ikke initialisere udbyder "{{provider}}". Tjek legitimationsoplysninger og konfiguration.', - "error.chain.configJsonInvalid": "Konfigurationsfil på {{path}} er ikke gyldig JSON(C)", - "error.chain.configJsonInvalidWithMessage": "Konfigurationsfil på {{path}} er ikke gyldig JSON(C): {{message}}", - "error.chain.configDirectoryTypo": - 'Mappe "{{dir}}" i {{path}} er ikke gyldig. Omdøb mappen til "{{suggestion}}" eller fjern den. Dette er en almindelig slåfejl.', - "error.chain.configFrontmatterError": "Kunne ikke parse frontmatter i {{path}}:\n{{message}}", - "error.chain.configInvalid": "Konfigurationsfil på {{path}} er ugyldig", - "error.chain.configInvalidWithMessage": "Konfigurationsfil på {{path}} er ugyldig: {{message}}", - - "notification.permission.title": "Tilladelse påkrævet", - "notification.permission.description": "{{sessionTitle}} i {{projectName}} kræver tilladelse", - "notification.question.title": "Spørgsmål", - "notification.question.description": "{{sessionTitle}} i {{projectName}} har et spørgsmål", - "notification.action.goToSession": "Gå til session", - - "notification.session.responseReady.title": "Svar klar", - "notification.session.error.title": "Sessionsfejl", - "notification.session.error.fallbackDescription": "Der opstod en fejl", - - "home.recentProjects": "Seneste projekter", - "home.empty.title": "Ingen seneste projekter", - "home.empty.description": "Kom i gang ved at åbne et lokalt projekt", - - "session.tab.session": "Session", - "session.tab.review": "Gennemgang", - "session.tab.context": "Kontekst", - "session.panel.reviewAndFiles": "Gennemgang og filer", - "session.review.filesChanged": "{{count}} Filer ændret", - "session.review.change.one": "Ændring", - "session.review.change.other": "Ændringer", - "session.review.loadingChanges": "Indlæser ændringer...", - "session.review.empty": "Ingen ændringer i denne session endnu", - "session.review.noVcs": "Intet Git versionsstyringssystem fundet, ændringer vises ikke", - "session.review.noSnapshot": - "Snapshot-sporing er deaktiveret i konfigurationen, så sessionsændringer er ikke tilgængelige", - "session.review.noChanges": "Ingen ændringer", - "session.files.selectToOpen": "Vælg en fil at åbne", - "session.files.all": "Alle filer", - "session.files.empty": "Ingen filer", - "session.files.binaryContent": "Binær fil (indhold kan ikke vises)", - "session.messages.renderEarlier": "Vis tidligere beskeder", - "session.messages.loadingEarlier": "Indlæser tidligere beskeder...", - "session.messages.loadEarlier": "Indlæs tidligere beskeder", - "session.messages.loading": "Indlæser beskeder...", - - "session.messages.jumpToLatest": "Gå til seneste", - "session.context.addToContext": "Tilføj {{selection}} til kontekst", - "session.todo.title": "Opgaver", - "session.todo.collapse": "Skjul", - "session.todo.expand": "Udvid", - "session.followupDock.summary.one": "{{count}} besked i kø", - "session.followupDock.summary.other": "{{count}} beskeder i kø", - "session.followupDock.sendNow": "Send nu", - "session.followupDock.edit": "Rediger", - "session.followupDock.collapse": "Skjul beskeder i kø", - "session.followupDock.expand": "Udvid beskeder i kø", - "session.revertDock.summary.one": "{{count}} tilbagerullet besked", - "session.revertDock.summary.other": "{{count}} tilbagerullede beskeder", - "session.revertDock.collapse": "Skjul tilbagerullede beskeder", - "session.revertDock.expand": "Udvid tilbagerullede beskeder", - "session.revertDock.restore": "Gendan besked", - - "session.new.title": "Byg hvad som helst", - "session.new.worktree.main": "Hovedgren", - "session.new.worktree.mainWithBranch": "Hovedgren ({{branch}})", - "session.new.worktree.create": "Opret nyt worktree", - "session.new.lastModified": "Sidst ændret", - - "session.header.search.placeholder": "Søg {{project}}", - "session.header.searchFiles": "Søg efter filer", - "session.header.openIn": "Åbn i", - "session.header.open.action": "Åbn {{app}}", - "session.header.open.ariaLabel": "Åbn i {{app}}", - "session.header.open.menu": "Åbningsmuligheder", - "session.header.open.copyPath": "Kopier sti", - - "status.popover.trigger": "Status", - "status.popover.ariaLabel": "Serverkonfigurationer", - "status.popover.tab.servers": "Servere", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "Plugins", - "status.popover.action.manageServers": "Administrer servere", - - "session.share.popover.title": "Udgiv på nettet", - "session.share.popover.description.shared": - "Denne session er offentlig på nettet. Den er tilgængelig for alle med linket.", - "session.share.popover.description.unshared": - "Del session offentligt på nettet. Den vil være tilgængelig for alle med linket.", - "session.share.action.share": "Del", - "session.share.action.publish": "Udgiv", - "session.share.action.publishing": "Udgiver...", - "session.share.action.unpublish": "Afpublicer", - "session.share.action.unpublishing": "Afpublicerer...", - "session.share.action.view": "Vis", - "session.share.copy.copied": "Kopieret", - "session.share.copy.copyLink": "Kopier link", - - "lsp.tooltip.none": "Ingen LSP-servere", - "lsp.label.connected": "{{count}} LSP", - - "prompt.loading": "Indlæser prompt...", - "terminal.loading": "Indlæser terminal...", - "terminal.title": "Terminal", - "terminal.title.numbered": "Terminal {{number}}", - "terminal.close": "Luk terminal", - - "terminal.connectionLost.title": "Forbindelse mistet", - "terminal.connectionLost.description": "Terminalforbindelsen blev afbrudt. Dette kan ske, når serveren genstarter.", - "common.closeTab": "Luk fane", - "common.dismiss": "Afvis", - "common.requestFailed": "Forespørgsel mislykkedes", - "common.moreOptions": "Flere muligheder", - "common.learnMore": "Lær mere", - "common.rename": "Omdøb", - "common.reset": "Nulstil", - "common.archive": "Arkivér", - "common.delete": "Slet", - "common.close": "Luk", - "common.edit": "Rediger", - "common.loadMore": "Indlæs flere", - - "common.key.esc": "ESC", - "sidebar.menu.toggle": "Skift menu", - "sidebar.nav.projectsAndSessions": "Projekter og sessioner", - "sidebar.settings": "Indstillinger", - "sidebar.help": "Hjælp", - "sidebar.workspaces.enable": "Aktiver arbejdsområder", - "sidebar.workspaces.disable": "Deaktiver arbejdsområder", - "sidebar.gettingStarted.title": "Kom i gang", - "sidebar.gettingStarted.line1": "OpenCode inkluderer gratis modeller så du kan starte med det samme.", - "sidebar.gettingStarted.line2": "Forbind enhver udbyder for at bruge modeller, inkl. Claude, GPT, Gemini osv.", - "sidebar.project.recentSessions": "Seneste sessioner", - "sidebar.project.viewAllSessions": "Vis alle sessioner", - "sidebar.project.clearNotifications": "Ryd notifikationer", - - "app.name.desktop": "OpenCode Desktop", - "settings.section.desktop": "Desktop", - "settings.section.server": "Server", - "settings.tab.general": "Generelt", - "settings.tab.shortcuts": "Genveje", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "WSL integration", - "settings.desktop.wsl.description": "Kør OpenCode-serveren inde i WSL på Windows.", - - "settings.general.section.appearance": "Udseende", - "settings.general.section.notifications": "Systemmeddelelser", - "settings.general.section.updates": "Opdateringer", - "settings.general.section.sounds": "Lydeffekter", - "settings.general.section.feed": "Feed", - "settings.general.section.display": "Skærm", - - "settings.general.row.language.title": "Sprog", - "settings.general.row.language.description": "Ændr visningssproget for OpenCode", - "settings.general.row.appearance.title": "Udseende", - "settings.general.row.appearance.description": "Tilpas hvordan OpenCode ser ud på din enhed", - "settings.general.row.colorScheme.title": "Farveskema", - "settings.general.row.colorScheme.description": "Vælg om OpenCode følger systemets, lyst eller mørkt tema", - "settings.general.row.theme.title": "Tema", - "settings.general.row.theme.description": "Tilpas hvordan OpenCode er temabestemt.", - "settings.general.row.font.title": "Kode-skrifttype", - "settings.general.row.font.description": "Tilpas skrifttypen, der bruges i kodeblokke", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "UI-skrifttype", - "settings.general.row.uiFont.description": "Tilpas skrifttypen, der bruges i hele brugerfladen", - "settings.general.row.followup.title": "Opfølgningsadfærd", - "settings.general.row.followup.description": "Vælg om opfølgende forespørgsler skal styre straks eller vente i kø", - "settings.general.row.followup.option.queue": "Kø", - "settings.general.row.followup.option.steer": "Styr", - "settings.general.row.reasoningSummaries.title": "Vis tænkeoversigter", - "settings.general.row.reasoningSummaries.description": "Vis model tænkeoversigter i tidslinjen", - - "settings.general.row.shellToolPartsExpanded.title": "Udvid shell-værktøjsdele", - "settings.general.row.shellToolPartsExpanded.description": "Vis shell-værktøjsdele udvidet som standard i tidslinjen", - "settings.general.row.editToolPartsExpanded.title": "Udvid edit-værktøjsdele", - "settings.general.row.editToolPartsExpanded.description": - "Vis edit-, write- og patch-værktøjsdele udvidet som standard i tidslinjen", - "settings.general.row.wayland.title": "Brug native Wayland", - "settings.general.row.wayland.description": "Deaktiver X11-fallback på Wayland. Kræver genstart.", - "settings.general.row.wayland.tooltip": - "På Linux med skærme med blandet opdateringshastighed kan native Wayland være mere stabilt.", - - "settings.general.row.releaseNotes.title": "Udgivelsesnoter", - "settings.general.row.releaseNotes.description": 'Vis "Hvad er nyt"-popups efter opdateringer', - - "settings.updates.row.startup.title": "Tjek for opdateringer ved opstart", - "settings.updates.row.startup.description": "Tjek automatisk for opdateringer, når OpenCode starter", - "settings.updates.row.check.title": "Tjek for opdateringer", - "settings.updates.row.check.description": "Tjek manuelt for opdateringer og installer, hvis tilgængelig", - "settings.updates.action.checkNow": "Tjek nu", - "settings.updates.action.checking": "Tjekker...", - "settings.updates.toast.latest.title": "Du er opdateret", - "settings.updates.toast.latest.description": "Du kører den nyeste version af OpenCode.", - - "sound.option.none": "Ingen", - "sound.option.alert01": "Alarm 01", - "sound.option.alert02": "Alarm 02", - "sound.option.alert03": "Alarm 03", - "sound.option.alert04": "Alarm 04", - "sound.option.alert05": "Alarm 05", - "sound.option.alert06": "Alarm 06", - "sound.option.alert07": "Alarm 07", - "sound.option.alert08": "Alarm 08", - "sound.option.alert09": "Alarm 09", - "sound.option.alert10": "Alarm 10", - "sound.option.bipbop01": "Bip-bop 01", - "sound.option.bipbop02": "Bip-bop 02", - "sound.option.bipbop03": "Bip-bop 03", - "sound.option.bipbop04": "Bip-bop 04", - "sound.option.bipbop05": "Bip-bop 05", - "sound.option.bipbop06": "Bip-bop 06", - "sound.option.bipbop07": "Bip-bop 07", - "sound.option.bipbop08": "Bip-bop 08", - "sound.option.bipbop09": "Bip-bop 09", - "sound.option.bipbop10": "Bip-bop 10", - "sound.option.staplebops01": "Staplebops 01", - "sound.option.staplebops02": "Staplebops 02", - "sound.option.staplebops03": "Staplebops 03", - "sound.option.staplebops04": "Staplebops 04", - "sound.option.staplebops05": "Staplebops 05", - "sound.option.staplebops06": "Staplebops 06", - "sound.option.staplebops07": "Staplebops 07", - "sound.option.nope01": "Nej 01", - "sound.option.nope02": "Nej 02", - "sound.option.nope03": "Nej 03", - "sound.option.nope04": "Nej 04", - "sound.option.nope05": "Nej 05", - "sound.option.nope06": "Nej 06", - "sound.option.nope07": "Nej 07", - "sound.option.nope08": "Nej 08", - "sound.option.nope09": "Nej 09", - "sound.option.nope10": "Nej 10", - "sound.option.nope11": "Nej 11", - "sound.option.nope12": "Nej 12", - "sound.option.yup01": "Ja 01", - "sound.option.yup02": "Ja 02", - "sound.option.yup03": "Ja 03", - "sound.option.yup04": "Ja 04", - "sound.option.yup05": "Ja 05", - "sound.option.yup06": "Ja 06", - "settings.general.notifications.agent.title": "Agent", - "settings.general.notifications.agent.description": - "Vis systemmeddelelse når agenten er færdig eller kræver opmærksomhed", - "settings.general.notifications.permissions.title": "Tilladelser", - "settings.general.notifications.permissions.description": "Vis systemmeddelelse når en tilladelse er påkrævet", - "settings.general.notifications.errors.title": "Fejl", - "settings.general.notifications.errors.description": "Vis systemmeddelelse når der opstår en fejl", - - "settings.general.sounds.agent.title": "Agent", - "settings.general.sounds.agent.description": "Afspil lyd når agenten er færdig eller kræver opmærksomhed", - "settings.general.sounds.permissions.title": "Tilladelser", - "settings.general.sounds.permissions.description": "Afspil lyd når en tilladelse er påkrævet", - "settings.general.sounds.errors.title": "Fejl", - "settings.general.sounds.errors.description": "Afspil lyd når der opstår en fejl", - - "settings.shortcuts.title": "Tastaturgenveje", - "settings.shortcuts.reset.button": "Nulstil til standard", - "settings.shortcuts.reset.toast.title": "Genveje nulstillet", - "settings.shortcuts.reset.toast.description": "Tastaturgenveje er blevet nulstillet til standard.", - "settings.shortcuts.conflict.title": "Genvej allerede i brug", - "settings.shortcuts.conflict.description": "{{keybind}} er allerede tildelt til {{titles}}.", - "settings.shortcuts.unassigned": "Ikke tildelt", - "settings.shortcuts.pressKeys": "Tryk på taster", - "settings.shortcuts.search.placeholder": "Søg genveje", - "settings.shortcuts.search.empty": "Ingen genveje fundet", - - "settings.shortcuts.group.general": "Generelt", - "settings.shortcuts.group.session": "Session", - "settings.shortcuts.group.navigation": "Navigation", - "settings.shortcuts.group.modelAndAgent": "Model og agent", - "settings.shortcuts.group.terminal": "Terminal", - "settings.shortcuts.group.prompt": "Prompt", - - "settings.providers.title": "Udbydere", - "settings.providers.description": "Udbyderindstillinger vil kunne konfigureres her.", - "settings.providers.section.connected": "Forbundne udbydere", - "settings.providers.connected.empty": "Ingen forbundne udbydere", - "settings.providers.section.popular": "Populære udbydere", - "settings.providers.tag.environment": "Miljø", - "settings.providers.tag.config": "Konfiguration", - "settings.providers.tag.custom": "Brugerdefineret", - "settings.providers.tag.other": "Andet", - "settings.models.title": "Modeller", - "settings.models.description": "Modelindstillinger vil kunne konfigureres her.", - "settings.agents.title": "Agenter", - "settings.agents.description": "Agentindstillinger vil kunne konfigureres her.", - "settings.commands.title": "Kommandoer", - "settings.commands.description": "Kommandoindstillinger vil kunne konfigureres her.", - "settings.mcp.title": "MCP", - "settings.mcp.description": "MCP-indstillinger vil kunne konfigureres her.", - - "settings.permissions.title": "Tilladelser", - "settings.permissions.description": "Styr hvilke værktøjer serveren kan bruge som standard.", - "settings.permissions.section.tools": "Værktøjer", - "settings.permissions.toast.updateFailed.title": "Kunne ikke opdatere tilladelser", - - "settings.permissions.action.allow": "Tillad", - "settings.permissions.action.ask": "Spørg", - "settings.permissions.action.deny": "Afvis", - - "settings.permissions.tool.read.title": "Læs", - "settings.permissions.tool.read.description": "Læsning af en fil (matcher filstien)", - "settings.permissions.tool.edit.title": "Rediger", - "settings.permissions.tool.edit.description": - "Ændre filer, herunder redigeringer, skrivninger, patches og multi-redigeringer", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "Match filer ved hjælp af glob-mønstre", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "Søg i filindhold ved hjælp af regulære udtryk", - "settings.permissions.tool.list.title": "Liste", - "settings.permissions.tool.list.description": "List filer i en mappe", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "Kør shell-kommandoer", - "settings.permissions.tool.task.title": "Opgave", - "settings.permissions.tool.task.description": "Start underagenter", - "settings.permissions.tool.skill.title": "Færdighed", - "settings.permissions.tool.skill.description": "Indlæs en færdighed efter navn", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "Kør sprogserverforespørgsler", - "settings.permissions.tool.todowrite.title": "Skriv To-do", - "settings.permissions.tool.todowrite.description": "Opdater to-do listen", - "settings.permissions.tool.webfetch.title": "Webhentning", - "settings.permissions.tool.webfetch.description": "Hent indhold fra en URL", - "settings.permissions.tool.websearch.title": "Websøgning", - "settings.permissions.tool.websearch.description": "Søg på nettet", - "settings.permissions.tool.external_directory.title": "Ekstern mappe", - "settings.permissions.tool.external_directory.description": "Få adgang til filer uden for projektmappen", - "settings.permissions.tool.doom_loop.title": "Doom Loop", - "settings.permissions.tool.doom_loop.description": "Opdag gentagne værktøjskald med identisk input", - - "session.delete.failed.title": "Kunne ikke slette session", - "session.delete.title": "Slet session", - "session.delete.confirm": 'Slet session "{{name}}"?', - "session.delete.button": "Slet session", - - "workspace.new": "Nyt arbejdsområde", - "workspace.type.local": "lokal", - "workspace.type.sandbox": "sandkasse", - "workspace.create.failed.title": "Kunne ikke oprette arbejdsområde", - "workspace.delete.failed.title": "Kunne ikke slette arbejdsområde", - "workspace.resetting.title": "Nulstiller arbejdsområde", - "workspace.resetting.description": "Dette kan tage et minut.", - "workspace.reset.failed.title": "Kunne ikke nulstille arbejdsområde", - "workspace.reset.success.title": "Arbejdsområde nulstillet", - "workspace.reset.success.description": "Arbejdsområdet matcher nu hovedgrenen.", - "workspace.error.stillPreparing": "Arbejdsområdet er stadig ved at blive klargjort", - "workspace.status.checking": "Tjekker for uflettede ændringer...", - "workspace.status.error": "Kunne ikke bekræfte git-status.", - "workspace.status.clean": "Ingen uflettede ændringer fundet.", - "workspace.status.dirty": "Uflettede ændringer fundet i dette arbejdsområde.", - "workspace.delete.title": "Slet arbejdsområde", - "workspace.delete.confirm": 'Slet arbejdsområde "{{name}}"?', - "workspace.delete.button": "Slet arbejdsområde", - "workspace.reset.title": "Nulstil arbejdsområde", - "workspace.reset.confirm": 'Nulstil arbejdsområde "{{name}}"?', - "workspace.reset.button": "Nulstil arbejdsområde", - "workspace.reset.archived.none": "Ingen aktive sessioner vil blive arkiveret.", - "workspace.reset.archived.one": "1 session vil blive arkiveret.", - "workspace.reset.archived.many": "{{count}} sessioner vil blive arkiveret.", - "workspace.reset.note": "Dette vil nulstille arbejdsområdet til at matche hovedgrenen.", - "common.open": "Åbn", - "dialog.releaseNotes.action.getStarted": "Kom i gang", - "dialog.releaseNotes.action.next": "Næste", - "dialog.releaseNotes.action.hideFuture": "Vis ikke disse i fremtiden", - "dialog.releaseNotes.media.alt": "Forhåndsvisning af udgivelse", - "toast.project.reloadFailed.title": "Kunne ikke genindlæse {{project}}", - "error.server.invalidConfiguration": "Ugyldig konfiguration", - "common.moreCountSuffix": " (+{{count}} mere)", - "common.time.justNow": "Lige nu", - "common.time.minutesAgo.short": "{{count}}m siden", - "common.time.hoursAgo.short": "{{count}}t siden", - "common.time.daysAgo.short": "{{count}}d siden", - "settings.providers.connected.environmentDescription": "Tilsluttet fra dine miljøvariabler", - "settings.providers.custom.description": "Tilføj en OpenAI-kompatibel udbyder via basis-URL.", - - "app.server.unreachable": "Kunne ikke nå {{server}}", - "app.server.retrying": "Prøver igen automatisk...", - "app.server.otherServers": "Andre servere", - "dialog.server.add.usernamePlaceholder": "brugernavn", - "dialog.server.add.passwordPlaceholder": "adgangskode", - "server.row.noUsername": "intet brugernavn", - "session.review.noVcs.createGit.title": "Opret et Git-repository", - "session.review.noVcs.createGit.description": "Spor, gennemgå og fortryd ændringer i dette projekt", - "session.review.noVcs.createGit.actionLoading": "Opretter Git-repository...", - "session.review.noVcs.createGit.action": "Opret Git-repository", - "session.todo.progress": "{{done}} af {{total}} opgaver fuldført", - "session.question.progress": "{{current}} af {{total}} spørgsmål", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "Stifinder", - "session.header.open.fileManager": "Filhåndtering", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "Terminal", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "Udviklingsydelsesdiagnostik", - "debugBar.na": "n/a", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": - "Sidste gennemførte ruteovergang, der berører en sessionsside, målt fra routerstart til den første optegning efter den falder til ro.", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "Rullende billeder pr. sekund over de sidste 5 sekunder.", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "Værste billedtid over de sidste 5 sekunder.", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "Billeder over 32ms i de sidste 5 sekunder.", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "Blokeret tid og antal lange opgaver i de sidste 5 sekunder. Maks opgave: {{max}}.", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "Værste observerede inputforsinkelse i de sidste 5 sekunder.", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": - "Omtrentlig interaktionsvarighed over de sidste 5 sekunder. Dette er INP-lignende, ikke den officielle Web Vitals INP.", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "Kumulativt layoutskift for den nuværende app-levetid.", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "Brugt JS-heap vs heap-grænse. Kun Chromium.", - "debugBar.mem.tip": "Brugt JS-heap vs heap-grænse. {{used}} af {{limit}}.", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "Mellemrum", - "common.key.backspace": "Backspace", - "common.key.enter": "Enter", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "ukendt", - "error.page.circular": "[Cirkulær]", - "error.serverSDK.noServerAvailable": "Ingen server tilgængelig", - "error.serverSDK.serverNotAvailable": "Server ikke tilgængelig", - "error.childStore.persistedCacheCreateFailed": "Kunne ikke oprette vedvarende cache", - "error.childStore.persistedProjectMetadataCreateFailed": "Kunne ikke oprette vedvarende projektmetadata", - "error.childStore.persistedProjectIconCreateFailed": "Kunne ikke oprette vedvarende projektikon", - "error.childStore.storeCreateFailed": "Kunne ikke oprette lager", - "terminal.connectionLost.abnormalClose": "WebSocket lukkede unormalt: {{code}}", -} diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts deleted file mode 100644 index d0ec9507e0..0000000000 --- a/packages/app/src/i18n/de.ts +++ /dev/null @@ -1,874 +0,0 @@ -import { dict as en } from "./en" - -type Keys = keyof typeof en - -export const dict = { - "command.category.suggested": "Vorgeschlagen", - "command.category.view": "Ansicht", - "command.category.project": "Projekt", - "command.category.provider": "Anbieter", - "command.category.server": "Server", - "command.category.session": "Sitzung", - "command.category.theme": "Thema", - "command.category.language": "Sprache", - "command.category.file": "Datei", - "command.category.context": "Kontext", - "command.category.terminal": "Terminal", - "command.category.model": "Modell", - "command.category.mcp": "MCP", - "command.category.agent": "Agent", - "command.category.permissions": "Berechtigungen", - "command.category.workspace": "Arbeitsbereich", - "command.category.settings": "Einstellungen", - "theme.scheme.system": "System", - "theme.scheme.light": "Hell", - "theme.scheme.dark": "Dunkel", - "command.sidebar.toggle": "Seitenleiste umschalten", - "command.project.open": "Projekt öffnen", - "command.provider.connect": "Anbieter verbinden", - "command.server.switch": "Server wechseln", - "command.settings.open": "Einstellungen öffnen", - "command.session.previous": "Vorherige Sitzung", - "command.session.next": "Nächste Sitzung", - "command.session.previous.unseen": "Vorherige ungelesene Sitzung", - "command.session.next.unseen": "Nächste ungelesene Sitzung", - "command.session.archive": "Sitzung archivieren", - "command.palette": "Befehlspalette", - "command.theme.cycle": "Thema wechseln", - "command.theme.set": "Thema verwenden: {{theme}}", - "command.theme.scheme.cycle": "Farbschema wechseln", - "command.theme.scheme.set": "Farbschema verwenden: {{scheme}}", - "command.language.cycle": "Sprache wechseln", - "command.language.set": "Sprache verwenden: {{language}}", - "command.session.new": "Neue Sitzung", - "command.file.open": "Datei öffnen", - "command.tab.close": "Tab schließen", - "command.context.addSelection": "Auswahl zum Kontext hinzufügen", - "command.context.addSelection.description": "Ausgewählte Zeilen aus der aktuellen Datei hinzufügen", - "command.input.focus": "Eingabefeld fokussieren", - "command.terminal.toggle": "Terminal umschalten", - "command.fileTree.toggle": "Dateibaum umschalten", - "command.review.toggle": "Überprüfung umschalten", - "command.terminal.new": "Neues Terminal", - "command.terminal.new.description": "Neuen Terminal-Tab erstellen", - "command.steps.toggle": "Schritte umschalten", - "command.steps.toggle.description": "Schritte für die aktuelle Nachricht anzeigen oder ausblenden", - "command.message.previous": "Vorherige Nachricht", - "command.message.previous.description": "Zur vorherigen Benutzernachricht gehen", - "command.message.next": "Nächste Nachricht", - "command.message.next.description": "Zur nächsten Benutzernachricht gehen", - "command.model.choose": "Modell wählen", - "command.model.choose.description": "Ein anderes Modell auswählen", - "command.mcp.toggle": "MCPs umschalten", - "command.mcp.toggle.description": "MCPs umschalten", - "command.agent.cycle": "Agent wechseln", - "command.agent.cycle.description": "Zum nächsten Agenten wechseln", - "command.agent.cycle.reverse": "Agent rückwärts wechseln", - "command.agent.cycle.reverse.description": "Zum vorherigen Agenten wechseln", - "command.model.variant.cycle": "Denkaufwand wechseln", - "command.model.variant.cycle.description": "Zum nächsten Aufwandslevel wechseln", - "command.prompt.mode.shell": "Shell", - "command.prompt.mode.normal": "Prompt", - "command.permissions.autoaccept.enable": "Berechtigungen automatisch akzeptieren", - "command.permissions.autoaccept.disable": "Automatische Akzeptanz von Berechtigungen stoppen", - "command.workspace.toggle": "Arbeitsbereiche umschalten", - "command.workspace.toggle.description": "Mehrere Arbeitsbereiche in der Seitenleiste aktivieren oder deaktivieren", - "command.session.undo": "Rückgängig", - "command.session.undo.description": "Letzte Nachricht rückgängig machen", - "command.session.redo": "Wiederherstellen", - "command.session.redo.description": "Letzte rückgängig gemachte Nachricht wiederherstellen", - "command.session.compact": "Sitzung komprimieren", - "command.session.compact.description": "Sitzung zusammenfassen, um die Kontextgröße zu reduzieren", - "command.session.fork": "Von Nachricht abzweigen", - "command.session.fork.description": "Neue Sitzung aus einer früheren Nachricht erstellen", - "command.session.share": "Sitzung teilen", - "command.session.share.description": "Diese Sitzung teilen und URL in die Zwischenablage kopieren", - "command.session.unshare": "Teilen der Sitzung aufheben", - "command.session.unshare.description": "Teilen dieser Sitzung beenden", - "palette.search.placeholder": "Dateien, Befehle und Sitzungen durchsuchen", - "palette.empty": "Keine Ergebnisse gefunden", - "palette.group.commands": "Befehle", - "palette.group.files": "Dateien", - "dialog.provider.search.placeholder": "Anbieter durchsuchen", - "dialog.provider.empty": "Keine Anbieter gefunden", - "dialog.provider.group.popular": "Beliebt", - "dialog.provider.group.other": "Andere", - "dialog.provider.tag.recommended": "Empfohlen", - "dialog.provider.opencode.note": "Kuratierte Modelle inklusive Claude, GPT, Gemini und mehr", - "dialog.provider.opencode.tagline": "Zuverlässige, optimierte Modelle", - "dialog.provider.opencodeGo.tagline": "Kostengünstiges Abo für alle", - "dialog.provider.anthropic.note": "Mit Claude Pro/Max oder API-Schlüssel verbinden", - "dialog.provider.copilot.note": "Mit Copilot oder API-Schlüssel verbinden", - "dialog.provider.openai.note": "Mit ChatGPT Pro/Plus oder API-Schlüssel verbinden", - "dialog.provider.google.note": "Gemini-Modelle für schnelle, strukturierte Antworten", - "dialog.provider.openrouter.note": "Zugriff auf alle unterstützten Modelle über einen Anbieter", - "dialog.provider.vercel.note": "Einheitlicher Zugriff auf KI-Modelle mit intelligentem Routing", - "dialog.model.select.title": "Modell auswählen", - "dialog.model.search.placeholder": "Modelle durchsuchen", - "dialog.model.empty": "Keine Modellergebnisse", - "dialog.model.manage": "Modelle verwalten", - "dialog.model.manage.description": "Anpassen, welche Modelle in der Modellauswahl erscheinen.", - "dialog.model.manage.provider.toggle": "Alle {{provider}}-Modelle umschalten", - "dialog.model.unpaid.freeModels.title": "Kostenlose Modelle von OpenCode", - "dialog.model.unpaid.addMore.title": "Weitere Modelle von beliebten Anbietern hinzufügen", - "dialog.provider.viewAll": "Mehr Anbieter anzeigen", - "provider.connect.title": "{{provider}} verbinden", - "provider.connect.title.anthropicProMax": "Mit Claude Pro/Max anmelden", - "provider.connect.selectMethod": "Anmeldemethode für {{provider}} auswählen.", - "provider.connect.method.apiKey": "API-Schlüssel", - "provider.connect.status.inProgress": "Autorisierung läuft...", - "provider.connect.status.waiting": "Warten auf Autorisierung...", - "provider.connect.status.failed": "Autorisierung fehlgeschlagen: {{error}}", - "provider.connect.apiKey.description": - "Geben Sie Ihren {{provider}} API-Schlüssel ein, um Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", - "provider.connect.apiKey.label": "{{provider}} API-Schlüssel", - "provider.connect.apiKey.placeholder": "API-Schlüssel", - "provider.connect.apiKey.required": "API-Schlüssel ist erforderlich", - "provider.connect.opencodeZen.line1": - "OpenCode Zen bietet Ihnen Zugriff auf eine kuratierte Auswahl zuverlässiger, optimierter Modelle für Coding-Agenten.", - "provider.connect.opencodeZen.line2": - "Mit einem einzigen API-Schlüssel erhalten Sie Zugriff auf Modelle wie Claude, GPT, Gemini, GLM und mehr.", - "provider.connect.opencodeZen.visit.prefix": "Besuchen Sie ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": ", um Ihren API-Schlüssel zu erhalten.", - "provider.connect.oauth.code.visit.prefix": "Besuchen Sie ", - "provider.connect.oauth.code.visit.link": "diesen Link", - "provider.connect.oauth.code.visit.suffix": - ", um Ihren Autorisierungscode zu erhalten, Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", - "provider.connect.oauth.code.label": "{{method}} Autorisierungscode", - "provider.connect.oauth.code.placeholder": "Autorisierungscode", - "provider.connect.oauth.code.required": "Autorisierungscode ist erforderlich", - "provider.connect.oauth.code.invalid": "Ungültiger Autorisierungscode", - "provider.connect.oauth.auto.visit.prefix": "Besuchen Sie ", - "provider.connect.oauth.auto.visit.link": "diesen Link", - "provider.connect.oauth.auto.visit.suffix": - " und geben Sie den untenstehenden Code ein, um Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", - "provider.connect.oauth.auto.confirmationCode": "Bestätigungscode", - "provider.connect.toast.connected.title": "{{provider}} verbunden", - "provider.connect.toast.connected.description": "{{provider}} Modelle sind jetzt verfügbar.", - "provider.custom.title": "Benutzerdefinierter Anbieter", - "provider.custom.description.prefix": "Konfigurieren Sie einen OpenAI-kompatiblen Anbieter. Siehe die ", - "provider.custom.description.link": "Anbieter-Konfigurationsdokumente", - "provider.custom.description.suffix": ".", - "provider.custom.field.providerID.label": "Anbieter-ID", - "provider.custom.field.providerID.placeholder": "myprovider", - "provider.custom.field.providerID.description": "Kleinbuchstaben, Zahlen, Bindestriche oder Unterstriche", - "provider.custom.field.name.label": "Anzeigename", - "provider.custom.field.name.placeholder": "Mein KI-Anbieter", - "provider.custom.field.baseURL.label": "Basis-URL", - "provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1", - "provider.custom.field.apiKey.label": "API-Schlüssel", - "provider.custom.field.apiKey.placeholder": "API-Schlüssel", - "provider.custom.field.apiKey.description": - "Optional. Leer lassen, wenn Sie die Authentifizierung über Header verwalten.", - "provider.custom.models.label": "Modelle", - "provider.custom.models.id.label": "ID", - "provider.custom.models.id.placeholder": "model-id", - "provider.custom.models.name.label": "Name", - "provider.custom.models.name.placeholder": "Anzeigename", - "provider.custom.models.remove": "Modell entfernen", - "provider.custom.models.add": "Modell hinzufügen", - "provider.custom.headers.label": "Header (optional)", - "provider.custom.headers.key.label": "Header", - "provider.custom.headers.key.placeholder": "Header-Name", - "provider.custom.headers.value.label": "Wert", - "provider.custom.headers.value.placeholder": "wert", - "provider.custom.headers.remove": "Header entfernen", - "provider.custom.headers.add": "Header hinzufügen", - "provider.custom.error.providerID.required": "Anbieter-ID ist erforderlich", - "provider.custom.error.providerID.format": "Verwenden Sie Kleinbuchstaben, Zahlen, Bindestriche oder Unterstriche", - "provider.custom.error.providerID.exists": "Diese Anbieter-ID existiert bereits", - "provider.custom.error.name.required": "Anzeigename ist erforderlich", - "provider.custom.error.baseURL.required": "Basis-URL ist erforderlich", - "provider.custom.error.baseURL.format": "Muss mit http:// oder https:// beginnen", - "provider.custom.error.required": "Erforderlich", - "provider.custom.error.duplicate": "Duplikat", - "provider.disconnect.toast.disconnected.title": "{{provider}} getrennt", - "provider.disconnect.toast.disconnected.description": "Die {{provider}}-Modelle sind nicht mehr verfügbar.", - "model.tag.free": "Kostenlos", - "model.tag.latest": "Neueste", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "Text", - "model.input.image": "Bild", - "model.input.audio": "Audio", - "model.input.video": "Video", - "model.input.pdf": "PDF", - "model.tooltip.allows": "Erlaubt: {{inputs}}", - "model.tooltip.reasoning.allowed": "Erlaubt Reasoning", - "model.tooltip.reasoning.none": "Kein Reasoning", - "model.tooltip.context": "Kontextlimit {{limit}}", - "common.search.placeholder": "Suchen", - "common.goBack": "Zurück", - "common.goForward": "Vorwärts navigieren", - "common.loading": "Laden", - "common.loading.ellipsis": "...", - "common.cancel": "Abbrechen", - "common.connect": "Verbinden", - "common.disconnect": "Trennen", - "common.continue": "Absenden", - "common.submit": "Absenden", - "common.save": "Speichern", - "common.saving": "Speichert...", - "common.default": "Standard", - "common.attachment": "Anhang", - "prompt.placeholder.shell": "Shell-Befehl eingeben... {{example}}", - "prompt.placeholder.normal": 'Fragen Sie alles... "{{example}}"', - "prompt.placeholder.simple": "Fragen Sie alles...", - "prompt.placeholder.summarizeComments": "Kommentare zusammenfassen…", - "prompt.placeholder.summarizeComment": "Kommentar zusammenfassen…", - "prompt.mode.shell": "Shell", - "prompt.mode.normal": "Prompt", - "prompt.mode.shell.exit": "esc zum Verlassen", - "prompt.example.1": "Ein TODO in der Codebasis beheben", - "prompt.example.2": "Was ist der Tech-Stack dieses Projekts?", - "prompt.example.3": "Fehlerhafte Tests beheben", - "prompt.example.4": "Erkläre, wie die Authentifizierung funktioniert", - "prompt.example.5": "Sicherheitslücken finden und beheben", - "prompt.example.6": "Unit-Tests für den Benutzerdienst hinzufügen", - "prompt.example.7": "Diese Funktion lesbarer gestalten", - "prompt.example.8": "Was bedeutet dieser Fehler?", - "prompt.example.9": "Hilf mir, dieses Problem zu debuggen", - "prompt.example.10": "API-Dokumentation generieren", - "prompt.example.11": "Datenbankabfragen optimieren", - "prompt.example.12": "Eingabevalidierung hinzufügen", - "prompt.example.13": "Neue Komponente erstellen für...", - "prompt.example.14": "Wie deploye ich dieses Projekt?", - "prompt.example.15": "Meinen Code auf Best Practices überprüfen", - "prompt.example.16": "Fehlerbehandlung zu dieser Funktion hinzufügen", - "prompt.example.17": "Erkläre dieses Regex-Muster", - "prompt.example.18": "Dies in TypeScript konvertieren", - "prompt.example.19": "Logging in der gesamten Codebasis hinzufügen", - "prompt.example.20": "Welche Abhängigkeiten sind veraltet?", - "prompt.example.21": "Hilf mir, ein Migrationsskript zu schreiben", - "prompt.example.22": "Caching für diesen Endpunkt implementieren", - "prompt.example.23": "Paginierung zu dieser Liste hinzufügen", - "prompt.example.24": "CLI-Befehl erstellen für...", - "prompt.example.25": "Wie funktionieren Umgebungsvariablen hier?", - "prompt.popover.emptyResults": "Keine passenden Ergebnisse", - "prompt.popover.emptyCommands": "Keine passenden Befehle", - "prompt.dropzone.label": "Bilder, PDFs oder Textdateien hier ablegen", - "prompt.dropzone.file.label": "Ablegen zum @Erwähnen der Datei", - "prompt.slash.badge.custom": "benutzerdefiniert", - "prompt.slash.badge.skill": "Skill", - "prompt.slash.badge.mcp": "MCP", - "prompt.context.active": "aktiv", - "prompt.context.includeActiveFile": "Aktive Datei einbeziehen", - "prompt.context.removeActiveFile": "Aktive Datei aus dem Kontext entfernen", - "prompt.context.removeFile": "Datei aus dem Kontext entfernen", - "prompt.action.attachFile": "Datei anhängen", - "prompt.attachment.remove": "Anhang entfernen", - "prompt.action.send": "Senden", - "prompt.action.stop": "Stopp", - "prompt.toast.pasteUnsupported.title": "Nicht unterstützter Anhang", - "prompt.toast.pasteUnsupported.description": "Hier können nur Bilder, PDFs oder Textdateien angehängt werden.", - "prompt.toast.modelAgentRequired.title": "Wählen Sie einen Agenten und ein Modell", - "prompt.toast.modelAgentRequired.description": - "Wählen Sie einen Agenten und ein Modell, bevor Sie eine Eingabe senden.", - "prompt.toast.worktreeCreateFailed.title": "Worktree konnte nicht erstellt werden", - "prompt.toast.sessionCreateFailed.title": "Sitzung konnte nicht erstellt werden", - "prompt.toast.shellSendFailed.title": "Shell-Befehl konnte nicht gesendet werden", - "prompt.toast.commandSendFailed.title": "Befehl konnte nicht gesendet werden", - "prompt.toast.promptSendFailed.title": "Eingabe konnte nicht gesendet werden", - "prompt.toast.promptSendFailed.description": "Sitzung konnte nicht abgerufen werden", - "dialog.mcp.title": "MCPs", - "dialog.mcp.description": "{{enabled}} von {{total}} aktiviert", - "dialog.mcp.empty": "Keine MCPs konfiguriert", - "dialog.lsp.empty": "LSPs automatisch nach Dateityp erkannt", - "dialog.plugins.empty": "In opencode.json konfigurierte Plugins", - "mcp.status.connected": "verbunden", - "mcp.status.failed": "fehlgeschlagen", - "mcp.status.needs_auth": "benötigt Authentifizierung", - "mcp.auth.clickToAuthenticate": "Zum Authentifizieren klicken", - "mcp.status.disabled": "deaktiviert", - "dialog.fork.empty": "Keine Nachrichten zum Abzweigen vorhanden", - "dialog.directory.search.placeholder": "Ordner durchsuchen", - "dialog.directory.empty": "Keine Ordner gefunden", - "dialog.directory.action.selectFile": "Datei auswählen", - "dialog.directory.action.selectFolder": "Ordner auswählen", - "dialog.directory.root": "Stammverzeichnis", - "dialog.directory.parent": "Übergeordnet", - "dialog.directory.readError": "Dieser Ordner kann nicht gelesen werden", - "dialog.server.title": "Server", - "dialog.server.description": "Wechseln Sie den OpenCode-Server, mit dem sich diese App verbindet.", - "dialog.server.search.placeholder": "Server durchsuchen", - "dialog.server.empty": "Noch keine Server", - "dialog.server.add.title": "Server hinzufügen", - "dialog.server.add.url": "Server-URL", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "Verbindung zum Server fehlgeschlagen", - "dialog.server.add.checking": "Prüfen...", - "dialog.server.add.button": "Server hinzufügen", - "dialog.server.add.name": "Servername (optional)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "Benutzername (optional)", - "dialog.server.add.password": "Passwort (optional)", - "dialog.server.edit.title": "Server bearbeiten", - "dialog.server.default.title": "Standardserver", - "dialog.server.default.description": - "Beim App-Start mit diesem Server verbinden, anstatt einen lokalen Server zu starten. Erfordert Neustart.", - "dialog.server.default.none": "Kein Server ausgewählt", - "dialog.server.default.set": "Aktuellen Server als Standard setzen", - "dialog.server.default.clear": "Löschen", - "dialog.server.action.remove": "Server entfernen", - "dialog.server.menu.edit": "Bearbeiten", - "dialog.server.menu.default": "Als Standard festlegen", - "dialog.server.menu.defaultRemove": "Standard entfernen", - "dialog.server.menu.delete": "Löschen", - "dialog.server.current": "Aktueller Server", - "dialog.server.status.default": "Standard", - "dialog.project.edit.title": "Projekt bearbeiten", - "dialog.project.edit.name": "Name", - "dialog.project.edit.icon": "Icon", - "dialog.project.edit.icon.alt": "Projekt-Icon", - "dialog.project.edit.icon.hint": "Klicken oder Bild ziehen", - "dialog.project.edit.icon.recommended": "Empfohlen: 128x128px", - "dialog.project.edit.color": "Farbe", - "dialog.project.edit.color.select": "{{color}}-Farbe auswählen", - "dialog.project.edit.worktree.startup": "Startup-Skript für Arbeitsbereich", - "dialog.project.edit.worktree.startup.description": - "Wird nach dem Erstellen eines neuen Arbeitsbereichs (Worktree) ausgeführt.", - "dialog.project.edit.worktree.startup.placeholder": "z. B. bun install", - "context.breakdown.title": "Kontext-Aufschlüsselung", - "context.breakdown.note": - 'Ungefähre Aufschlüsselung der Eingabe-Token. "Andere" beinhaltet Werkzeugdefinitionen und Overhead.', - "context.breakdown.system": "System", - "context.breakdown.user": "Benutzer", - "context.breakdown.assistant": "Assistent", - "context.breakdown.tool": "Werkzeugaufrufe", - "context.breakdown.other": "Andere", - "context.systemPrompt.title": "System-Prompt", - "context.rawMessages.title": "Rohdaten der Nachrichten", - "context.stats.session": "Sitzung", - "context.stats.messages": "Nachrichten", - "context.stats.provider": "Anbieter", - "context.stats.model": "Modell", - "context.stats.limit": "Kontextlimit", - "context.stats.totalTokens": "Gesamt-Token", - "context.stats.usage": "Nutzung", - "context.stats.inputTokens": "Eingabe-Token", - "context.stats.outputTokens": "Ausgabe-Token", - "context.stats.reasoningTokens": "Reasoning-Token", - "context.stats.cacheTokens": "Cache-Token (lesen/schreiben)", - "context.stats.userMessages": "Benutzernachrichten", - "context.stats.assistantMessages": "Assistentennachrichten", - "context.stats.totalCost": "Gesamtkosten", - "context.stats.sessionCreated": "Sitzung erstellt", - "context.stats.lastActivity": "Letzte Aktivität", - "context.usage.tokens": "Token", - "context.usage.usage": "Nutzung", - "context.usage.cost": "Kosten", - "context.usage.clickToView": "Klicken, um Kontext anzuzeigen", - "context.usage.view": "Kontextnutzung anzeigen", - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - "toast.language.title": "Sprache", - "toast.language.description": "Zu {{language}} gewechselt", - "toast.theme.title": "Thema gewechselt", - "toast.scheme.title": "Farbschema", - "toast.workspace.enabled.title": "Arbeitsbereiche aktiviert", - "toast.workspace.enabled.description": "Mehrere Worktrees werden jetzt in der Seitenleiste angezeigt", - "toast.workspace.disabled.title": "Arbeitsbereiche deaktiviert", - "toast.workspace.disabled.description": "Nur der Haupt-Worktree wird in der Seitenleiste angezeigt", - "toast.permissions.autoaccept.on.title": "Berechtigungen werden automatisch akzeptiert", - "toast.permissions.autoaccept.on.description": "Berechtigungsanfragen werden automatisch genehmigt", - "toast.permissions.autoaccept.off.title": "Automatische Akzeptanz von Berechtigungen gestoppt", - "toast.permissions.autoaccept.off.description": "Berechtigungsanfragen erfordern eine Genehmigung", - "toast.model.none.title": "Kein Modell ausgewählt", - "toast.model.none.description": "Verbinden Sie einen Anbieter, um diese Sitzung zusammenzufassen", - "toast.file.loadFailed.title": "Datei konnte nicht geladen werden", - "toast.file.listFailed.title": "Dateien konnten nicht aufgelistet werden", - "toast.context.noLineSelection.title": "Keine Zeilenauswahl", - "toast.context.noLineSelection.description": "Wählen Sie zuerst einen Zeilenbereich in einem Datei-Tab aus.", - "toast.session.share.copyFailed.title": "URL konnte nicht in die Zwischenablage kopiert werden", - "toast.session.share.success.title": "Sitzung geteilt", - "toast.session.share.success.description": "Teilen-URL in die Zwischenablage kopiert!", - "toast.session.share.failed.title": "Sitzung konnte nicht geteilt werden", - "toast.session.share.failed.description": "Beim Teilen der Sitzung ist ein Fehler aufgetreten", - "toast.session.unshare.success.title": "Teilen der Sitzung aufgehoben", - "toast.session.unshare.success.description": "Teilen der Sitzung erfolgreich aufgehoben!", - "toast.session.unshare.failed.title": "Aufheben des Teilens fehlgeschlagen", - "toast.session.unshare.failed.description": "Beim Aufheben des Teilens ist ein Fehler aufgetreten", - "toast.session.listFailed.title": "Sitzungen für {{project}} konnten nicht geladen werden", - "toast.update.title": "Update verfügbar", - "toast.update.description": "Eine neue Version von OpenCode ({{version}}) ist zur Installation verfügbar.", - "toast.update.action.installRestart": "Installieren und neu starten", - "toast.update.action.notYet": "Noch nicht", - "error.page.title": "Etwas ist schiefgelaufen", - "error.page.description": "Beim Laden der Anwendung ist ein Fehler aufgetreten.", - "error.page.details.label": "Fehlerdetails", - "error.page.action.restart": "Neustart", - "error.page.action.report": "Fehler melden", - "error.page.action.reported": "Fehler gemeldet", - "error.page.action.checking": "Prüfen...", - "error.page.action.checkUpdates": "Nach Updates suchen", - "error.page.action.updateTo": "Auf {{version}} aktualisieren", - "error.page.report.prefix": "Bitte melden Sie diesen Fehler dem OpenCode-Team", - "error.page.report.discord": "auf Discord", - "error.page.version": "Version: {{version}}", - "error.dev.rootNotFound": - "Wurzelelement nicht gefunden. Haben Sie vergessen, es in Ihre index.html aufzunehmen? Oder wurde das id-Attribut falsch geschrieben?", - "error.serverSync.connectFailed": "Verbindung zum Server fehlgeschlagen. Läuft ein Server unter `{{url}}`?", - "directory.error.invalidUrl": "Ungültiges Verzeichnis in der URL.", - "error.chain.unknown": "Unbekannter Fehler", - "error.chain.causedBy": "Verursacht durch:", - "error.chain.apiError": "API-Fehler", - "error.chain.status": "Status: {{status}}", - "error.chain.retryable": "Wiederholbar: {{retryable}}", - "error.chain.responseBody": "Antwort-Body:\n{{body}}", - "error.chain.didYouMean": "Meinten Sie: {{suggestions}}", - "error.chain.modelNotFound": "Modell nicht gefunden: {{provider}}/{{model}}", - "error.chain.checkConfig": "Überprüfen Sie Ihre Konfiguration (opencode.json) auf Anbieter-/Modellnamen", - "error.chain.mcpFailed": - 'MCP-Server "{{name}}" fehlgeschlagen. Hinweis: OpenCode unterstützt noch keine MCP-Authentifizierung.', - "error.chain.providerAuthFailed": "Anbieter-Authentifizierung fehlgeschlagen ({{provider}}): {{message}}", - "error.chain.providerInitFailed": - 'Anbieter "{{provider}}" konnte nicht initialisiert werden. Überprüfen Sie Anmeldeinformationen und Konfiguration.', - "error.chain.configJsonInvalid": "Konfigurationsdatei unter {{path}} ist kein gültiges JSON(C)", - "error.chain.configJsonInvalidWithMessage": - "Konfigurationsdatei unter {{path}} ist kein gültiges JSON(C): {{message}}", - "error.chain.configDirectoryTypo": - 'Verzeichnis "{{dir}}" in {{path}} ist ungültig. Benennen Sie das Verzeichnis in "{{suggestion}}" um oder entfernen Sie es. Dies ist ein häufiger Tippfehler.', - "error.chain.configFrontmatterError": "Frontmatter in {{path}} konnte nicht geparst werden:\n{{message}}", - "error.chain.configInvalid": "Konfigurationsdatei unter {{path}} ist ungültig", - "error.chain.configInvalidWithMessage": "Konfigurationsdatei unter {{path}} ist ungültig: {{message}}", - "notification.permission.title": "Berechtigung erforderlich", - "notification.permission.description": "{{sessionTitle}} in {{projectName}} benötigt Berechtigung", - "notification.question.title": "Frage", - "notification.question.description": "{{sessionTitle}} in {{projectName}} hat eine Frage", - "notification.action.goToSession": "Zur Sitzung gehen", - "notification.session.responseReady.title": "Antwort bereit", - "notification.session.error.title": "Sitzungsfehler", - "notification.session.error.fallbackDescription": "Ein Fehler ist aufgetreten", - "home.recentProjects": "Letzte Projekte", - "home.empty.title": "Keine letzten Projekte", - "home.empty.description": "Starten Sie, indem Sie ein lokales Projekt öffnen", - "session.tab.session": "Sitzung", - "session.tab.review": "Überprüfung", - "session.tab.context": "Kontext", - "session.panel.reviewAndFiles": "Überprüfung und Dateien", - "session.review.filesChanged": "{{count}} Dateien geändert", - "session.review.change.one": "Änderung", - "session.review.change.other": "Änderungen", - "session.review.loadingChanges": "Lade Änderungen...", - "session.review.empty": "Noch keine Änderungen in dieser Sitzung", - "session.review.noVcs": "Kein Git-Versionskontrollsystem erkannt, Änderungen werden nicht angezeigt", - "session.review.noSnapshot": - "Snapshot-Tracking ist in der Konfiguration deaktiviert, daher sind Sitzungsänderungen nicht verfügbar", - "session.review.noChanges": "Keine Änderungen", - "session.files.selectToOpen": "Datei zum Öffnen auswählen", - "session.files.all": "Alle Dateien", - "session.files.empty": "Keine Dateien", - "session.files.binaryContent": "Binärdatei (Inhalt kann nicht angezeigt werden)", - "session.messages.renderEarlier": "Frühere Nachrichten rendern", - "session.messages.loadingEarlier": "Lade frühere Nachrichten...", - "session.messages.loadEarlier": "Frühere Nachrichten laden", - "session.messages.loading": "Lade Nachrichten...", - "session.messages.jumpToLatest": "Zum neuesten springen", - "session.context.addToContext": "{{selection}} zum Kontext hinzufügen", - "session.todo.title": "Aufgaben", - "session.todo.collapse": "Einklappen", - "session.todo.expand": "Ausklappen", - "session.followupDock.summary.one": "{{count}} Nachricht in der Warteschlange", - "session.followupDock.summary.other": "{{count}} Nachrichten in der Warteschlange", - "session.followupDock.sendNow": "Jetzt senden", - "session.followupDock.edit": "Bearbeiten", - "session.followupDock.collapse": "Warteschlange einklappen", - "session.followupDock.expand": "Warteschlange ausklappen", - "session.revertDock.summary.one": "{{count}} zurückgesetzte Nachricht", - "session.revertDock.summary.other": "{{count}} zurückgesetzte Nachrichten", - "session.revertDock.collapse": "Zurückgesetzte Nachrichten einklappen", - "session.revertDock.expand": "Zurückgesetzte Nachrichten ausklappen", - "session.revertDock.restore": "Nachricht wiederherstellen", - "session.new.title": "Baue, was du willst", - "session.new.worktree.main": "Haupt-Branch", - "session.new.worktree.mainWithBranch": "Haupt-Branch ({{branch}})", - "session.new.worktree.create": "Neuen Worktree erstellen", - "session.new.lastModified": "Zuletzt geändert", - "session.header.search.placeholder": "{{project}} durchsuchen", - "session.header.searchFiles": "Dateien suchen", - "session.header.openIn": "Öffnen in", - "session.header.open.action": "{{app}} öffnen", - "session.header.open.ariaLabel": "In {{app}} öffnen", - "session.header.open.menu": "Öffnen-Optionen", - "session.header.open.copyPath": "Pfad kopieren", - "status.popover.trigger": "Status", - "status.popover.ariaLabel": "Serverkonfigurationen", - "status.popover.tab.servers": "Server", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "Plugins", - "status.popover.action.manageServers": "Server verwalten", - "session.share.popover.title": "Im Web veröffentlichen", - "session.share.popover.description.shared": - "Diese Sitzung ist öffentlich im Web. Sie ist für jeden mit dem Link zugänglich.", - "session.share.popover.description.unshared": - "Sitzung öffentlich im Web teilen. Sie wird für jeden mit dem Link zugänglich sein.", - "session.share.action.share": "Teilen", - "session.share.action.publish": "Veröffentlichen", - "session.share.action.publishing": "Veröffentliche...", - "session.share.action.unpublish": "Veröffentlichung aufheben", - "session.share.action.unpublishing": "Hebe Veröffentlichung auf...", - "session.share.action.view": "Ansehen", - "session.share.copy.copied": "Kopiert", - "session.share.copy.copyLink": "Link kopieren", - "lsp.tooltip.none": "Keine LSP-Server", - "lsp.label.connected": "{{count}} LSP", - "prompt.loading": "Lade Prompt...", - "terminal.loading": "Lade Terminal...", - "terminal.title": "Terminal", - "terminal.title.numbered": "Terminal {{number}}", - "terminal.close": "Terminal schließen", - "terminal.connectionLost.title": "Verbindung verloren", - "terminal.connectionLost.description": - "Die Terminalverbindung wurde unterbrochen. Das kann passieren, wenn der Server neu startet.", - "common.closeTab": "Tab schließen", - "common.dismiss": "Verwerfen", - "common.requestFailed": "Anfrage fehlgeschlagen", - "common.moreOptions": "Weitere Optionen", - "common.learnMore": "Mehr erfahren", - "common.rename": "Umbenennen", - "common.reset": "Zurücksetzen", - "common.archive": "Archivieren", - "common.delete": "Löschen", - "common.close": "Schließen", - "common.edit": "Bearbeiten", - "common.loadMore": "Mehr laden", - "common.key.esc": "ESC", - "sidebar.menu.toggle": "Menü umschalten", - "sidebar.nav.projectsAndSessions": "Projekte und Sitzungen", - "sidebar.settings": "Einstellungen", - "sidebar.help": "Hilfe", - "sidebar.workspaces.enable": "Arbeitsbereiche aktivieren", - "sidebar.workspaces.disable": "Arbeitsbereiche deaktivieren", - "sidebar.gettingStarted.title": "Erste Schritte", - "sidebar.gettingStarted.line1": "OpenCode enthält kostenlose Modelle, damit Sie sofort loslegen können.", - "sidebar.gettingStarted.line2": - "Verbinden Sie einen beliebigen Anbieter, um Modelle wie Claude, GPT, Gemini usw. zu nutzen.", - "sidebar.project.recentSessions": "Letzte Sitzungen", - "sidebar.project.viewAllSessions": "Alle Sitzungen anzeigen", - "sidebar.project.clearNotifications": "Benachrichtigungen löschen", - "app.name.desktop": "OpenCode Desktop", - "settings.section.desktop": "Desktop", - "settings.section.server": "Server", - "settings.tab.general": "Allgemein", - "settings.tab.shortcuts": "Tastenkombinationen", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "WSL-Integration", - "settings.desktop.wsl.description": "OpenCode-Server innerhalb von WSL unter Windows ausführen.", - "settings.general.section.appearance": "Erscheinungsbild", - "settings.general.section.notifications": "Systembenachrichtigungen", - "settings.general.section.updates": "Updates", - "settings.general.section.sounds": "Soundeffekte", - "settings.general.section.feed": "Feed", - "settings.general.section.display": "Anzeige", - "settings.general.row.language.title": "Sprache", - "settings.general.row.language.description": "Die Anzeigesprache für OpenCode ändern", - "settings.general.row.appearance.title": "Erscheinungsbild", - "settings.general.row.appearance.description": "Anpassen, wie OpenCode auf Ihrem Gerät aussieht", - "settings.general.row.colorScheme.title": "Farbschema", - "settings.general.row.colorScheme.description": - "Wählen Sie, ob OpenCode dem System-, hellen oder dunklen Thema folgt", - "settings.general.row.theme.title": "Thema", - "settings.general.row.theme.description": "Das Thema von OpenCode anpassen.", - "settings.general.row.font.title": "Code-Schriftart", - "settings.general.row.font.description": "Die in Codeblöcken verwendete Schriftart anpassen", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "UI-Schriftart", - "settings.general.row.uiFont.description": "Die im gesamten Interface verwendete Schriftart anpassen", - "settings.general.row.followup.title": "Verhalten bei Folgefragen", - "settings.general.row.followup.description": - "Wählen Sie, ob Folgefragen sofort steuern oder in einer Warteschlange warten", - "settings.general.row.followup.option.queue": "Warteschlange", - "settings.general.row.followup.option.steer": "Steuern", - "settings.general.row.reasoningSummaries.title": "Reasoning-Zusammenfassungen anzeigen", - "settings.general.row.reasoningSummaries.description": - "Zusammenfassungen des Modell-Reasonings in der Timeline anzeigen", - "settings.general.row.shellToolPartsExpanded.title": "Shell-Tool-Abschnitte ausklappen", - "settings.general.row.shellToolPartsExpanded.description": - "Shell-Tool-Abschnitte standardmäßig in der Timeline ausgeklappt anzeigen", - "settings.general.row.editToolPartsExpanded.title": "Edit-Tool-Abschnitte ausklappen", - "settings.general.row.editToolPartsExpanded.description": - "Edit-, Write- und Patch-Tool-Abschnitte standardmäßig in der Timeline ausgeklappt anzeigen", - "settings.general.row.wayland.title": "Natives Wayland verwenden", - "settings.general.row.wayland.description": "X11-Fallback unter Wayland deaktivieren. Erfordert Neustart.", - "settings.general.row.wayland.tooltip": - "Unter Linux mit Monitoren unterschiedlicher Bildwiederholraten kann natives Wayland stabiler sein.", - "settings.general.row.releaseNotes.title": "Versionshinweise", - "settings.general.row.releaseNotes.description": '"Neuigkeiten"-Pop-ups nach Updates anzeigen', - "settings.updates.row.startup.title": "Beim Start nach Updates suchen", - "settings.updates.row.startup.description": "Beim Start von OpenCode automatisch nach Updates suchen", - "settings.updates.row.check.title": "Nach Updates suchen", - "settings.updates.row.check.description": "Manuell nach Updates suchen und installieren, wenn verfügbar", - "settings.updates.action.checkNow": "Jetzt prüfen", - "settings.updates.action.checking": "Wird geprüft...", - "settings.updates.toast.latest.title": "Du bist auf dem neuesten Stand", - "settings.updates.toast.latest.description": "Du verwendest die aktuelle Version von OpenCode.", - "sound.option.none": "Keine", - "sound.option.alert01": "Alarm 01", - "sound.option.alert02": "Alarm 02", - "sound.option.alert03": "Alarm 03", - "sound.option.alert04": "Alarm 04", - "sound.option.alert05": "Alarm 05", - "sound.option.alert06": "Alarm 06", - "sound.option.alert07": "Alarm 07", - "sound.option.alert08": "Alarm 08", - "sound.option.alert09": "Alarm 09", - "sound.option.alert10": "Alarm 10", - "sound.option.bipbop01": "Bip-bop 01", - "sound.option.bipbop02": "Bip-bop 02", - "sound.option.bipbop03": "Bip-bop 03", - "sound.option.bipbop04": "Bip-bop 04", - "sound.option.bipbop05": "Bip-bop 05", - "sound.option.bipbop06": "Bip-bop 06", - "sound.option.bipbop07": "Bip-bop 07", - "sound.option.bipbop08": "Bip-bop 08", - "sound.option.bipbop09": "Bip-bop 09", - "sound.option.bipbop10": "Bip-bop 10", - "sound.option.staplebops01": "Staplebops 01", - "sound.option.staplebops02": "Staplebops 02", - "sound.option.staplebops03": "Staplebops 03", - "sound.option.staplebops04": "Staplebops 04", - "sound.option.staplebops05": "Staplebops 05", - "sound.option.staplebops06": "Staplebops 06", - "sound.option.staplebops07": "Staplebops 07", - "sound.option.nope01": "Nein 01", - "sound.option.nope02": "Nein 02", - "sound.option.nope03": "Nein 03", - "sound.option.nope04": "Nein 04", - "sound.option.nope05": "Nein 05", - "sound.option.nope06": "Nein 06", - "sound.option.nope07": "Nein 07", - "sound.option.nope08": "Nein 08", - "sound.option.nope09": "Nein 09", - "sound.option.nope10": "Nein 10", - "sound.option.nope11": "Nein 11", - "sound.option.nope12": "Nein 12", - "sound.option.yup01": "Ja 01", - "sound.option.yup02": "Ja 02", - "sound.option.yup03": "Ja 03", - "sound.option.yup04": "Ja 04", - "sound.option.yup05": "Ja 05", - "sound.option.yup06": "Ja 06", - "settings.general.notifications.agent.title": "Agent", - "settings.general.notifications.agent.description": - "Systembenachrichtigung anzeigen, wenn der Agent fertig ist oder Aufmerksamkeit benötigt", - "settings.general.notifications.permissions.title": "Berechtigungen", - "settings.general.notifications.permissions.description": - "Systembenachrichtigung anzeigen, wenn eine Berechtigung erforderlich ist", - "settings.general.notifications.errors.title": "Fehler", - "settings.general.notifications.errors.description": "Systembenachrichtigung anzeigen, wenn ein Fehler auftritt", - "settings.general.sounds.agent.title": "Agent", - "settings.general.sounds.agent.description": "Ton abspielen, wenn der Agent fertig ist oder Aufmerksamkeit benötigt", - "settings.general.sounds.permissions.title": "Berechtigungen", - "settings.general.sounds.permissions.description": "Ton abspielen, wenn eine Berechtigung erforderlich ist", - "settings.general.sounds.errors.title": "Fehler", - "settings.general.sounds.errors.description": "Ton abspielen, wenn ein Fehler auftritt", - "settings.shortcuts.title": "Tastenkombinationen", - "settings.shortcuts.reset.button": "Auf Standard zurücksetzen", - "settings.shortcuts.reset.toast.title": "Tastenkombinationen zurückgesetzt", - "settings.shortcuts.reset.toast.description": "Die Tastenkombinationen wurden auf die Standardwerte zurückgesetzt.", - "settings.shortcuts.conflict.title": "Tastenkombination bereits in Verwendung", - "settings.shortcuts.conflict.description": "{{keybind}} ist bereits {{titles}} zugewiesen.", - "settings.shortcuts.unassigned": "Nicht zugewiesen", - "settings.shortcuts.pressKeys": "Tasten drücken", - "settings.shortcuts.search.placeholder": "Tastenkürzel suchen", - "settings.shortcuts.search.empty": "Keine Tastenkürzel gefunden", - "settings.shortcuts.group.general": "Allgemein", - "settings.shortcuts.group.session": "Sitzung", - "settings.shortcuts.group.navigation": "Navigation", - "settings.shortcuts.group.modelAndAgent": "Modell und Agent", - "settings.shortcuts.group.terminal": "Terminal", - "settings.shortcuts.group.prompt": "Prompt", - "settings.providers.title": "Anbieter", - "settings.providers.description": "Anbietereinstellungen können hier konfiguriert werden.", - "settings.providers.section.connected": "Verbundene Anbieter", - "settings.providers.connected.empty": "Keine verbundenen Anbieter", - "settings.providers.section.popular": "Beliebte Anbieter", - "settings.providers.tag.environment": "Umgebung", - "settings.providers.tag.config": "Konfiguration", - "settings.providers.tag.custom": "Benutzerdefiniert", - "settings.providers.tag.other": "Andere", - "settings.models.title": "Modelle", - "settings.models.description": "Modelleinstellungen können hier konfiguriert werden.", - "settings.agents.title": "Agenten", - "settings.agents.description": "Agenteneinstellungen können hier konfiguriert werden.", - "settings.commands.title": "Befehle", - "settings.commands.description": "Befehlseinstellungen können hier konfiguriert werden.", - "settings.mcp.title": "MCP", - "settings.mcp.description": "MCP-Einstellungen können hier konfiguriert werden.", - "settings.permissions.title": "Berechtigungen", - "settings.permissions.description": "Steuern Sie, welche Tools der Server standardmäßig verwenden darf.", - "settings.permissions.section.tools": "Tools", - "settings.permissions.toast.updateFailed.title": "Berechtigungen konnten nicht aktualisiert werden", - "settings.permissions.action.allow": "Erlauben", - "settings.permissions.action.ask": "Fragen", - "settings.permissions.action.deny": "Verweigern", - "settings.permissions.tool.read.title": "Lesen", - "settings.permissions.tool.read.description": "Lesen einer Datei (stimmt mit dem Dateipfad überein)", - "settings.permissions.tool.edit.title": "Bearbeiten", - "settings.permissions.tool.edit.description": - "Dateien ändern, einschließlich Bearbeitungen, Schreibvorgängen, Patches und Mehrfachbearbeitungen", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "Dateien mithilfe von Glob-Mustern abgleichen", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "Dateiinhalte mit regulären Ausdrücken durchsuchen", - "settings.permissions.tool.list.title": "Auflisten", - "settings.permissions.tool.list.description": "Dateien in einem Verzeichnis auflisten", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "Shell-Befehle ausführen", - "settings.permissions.tool.task.title": "Aufgabe", - "settings.permissions.tool.task.description": "Unteragenten starten", - "settings.permissions.tool.skill.title": "Fähigkeit", - "settings.permissions.tool.skill.description": "Eine Fähigkeit nach Namen laden", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "Language-Server-Abfragen ausführen", - "settings.permissions.tool.todowrite.title": "Todo schreiben", - "settings.permissions.tool.todowrite.description": "Die Todo-Liste aktualisieren", - "settings.permissions.tool.webfetch.title": "Web-Abruf", - "settings.permissions.tool.webfetch.description": "Inhalt von einer URL abrufen", - "settings.permissions.tool.websearch.title": "Web-Suche", - "settings.permissions.tool.websearch.description": "Das Web durchsuchen", - "settings.permissions.tool.external_directory.title": "Externes Verzeichnis", - "settings.permissions.tool.external_directory.description": "Zugriff auf Dateien außerhalb des Projektverzeichnisses", - "settings.permissions.tool.doom_loop.title": "Doom Loop", - "settings.permissions.tool.doom_loop.description": "Wiederholte Tool-Aufrufe mit identischer Eingabe erkennen", - "session.delete.failed.title": "Sitzung konnte nicht gelöscht werden", - "session.delete.title": "Sitzung löschen", - "session.delete.confirm": 'Sitzung "{{name}}" löschen?', - "session.delete.button": "Sitzung löschen", - "workspace.new": "Neuer Arbeitsbereich", - "workspace.type.local": "lokal", - "workspace.type.sandbox": "Sandbox", - "workspace.create.failed.title": "Arbeitsbereich konnte nicht erstellt werden", - "workspace.delete.failed.title": "Arbeitsbereich konnte nicht gelöscht werden", - "workspace.resetting.title": "Arbeitsbereich wird zurückgesetzt", - "workspace.resetting.description": "Dies kann eine Minute dauern.", - "workspace.reset.failed.title": "Arbeitsbereich konnte nicht zurückgesetzt werden", - "workspace.reset.success.title": "Arbeitsbereich zurückgesetzt", - "workspace.reset.success.description": "Der Arbeitsbereich entspricht jetzt dem Standard-Branch.", - "workspace.error.stillPreparing": "Arbeitsbereich wird noch vorbereitet", - "workspace.status.checking": "Suche nach nicht zusammengeführten Änderungen...", - "workspace.status.error": "Git-Status konnte nicht überprüft werden.", - "workspace.status.clean": "Keine nicht zusammengeführten Änderungen erkannt.", - "workspace.status.dirty": "Nicht zusammengeführte Änderungen in diesem Arbeitsbereich erkannt.", - "workspace.delete.title": "Arbeitsbereich löschen", - "workspace.delete.confirm": 'Arbeitsbereich "{{name}}" löschen?', - "workspace.delete.button": "Arbeitsbereich löschen", - "workspace.reset.title": "Arbeitsbereich zurücksetzen", - "workspace.reset.confirm": 'Arbeitsbereich "{{name}}" zurücksetzen?', - "workspace.reset.button": "Arbeitsbereich zurücksetzen", - "workspace.reset.archived.none": "Keine aktiven Sitzungen werden archiviert.", - "workspace.reset.archived.one": "1 Sitzung wird archiviert.", - "workspace.reset.archived.many": "{{count}} Sitzungen werden archiviert.", - "workspace.reset.note": "Dadurch wird der Arbeitsbereich auf den Standard-Branch zurückgesetzt.", - "common.open": "Öffnen", - "dialog.releaseNotes.action.getStarted": "Loslegen", - "dialog.releaseNotes.action.next": "Weiter", - "dialog.releaseNotes.action.hideFuture": "In Zukunft nicht mehr anzeigen", - "dialog.releaseNotes.media.alt": "Vorschau auf die Version", - "toast.project.reloadFailed.title": "Fehler beim Neuladen von {{project}}", - "error.server.invalidConfiguration": "Ungültige Konfiguration", - "common.moreCountSuffix": " (+{{count}} weitere)", - "common.time.justNow": "Gerade eben", - "common.time.minutesAgo.short": "vor {{count}} Min", - "common.time.hoursAgo.short": "vor {{count}} Std", - "common.time.daysAgo.short": "vor {{count}} Tg", - "settings.providers.connected.environmentDescription": "Verbunden aus Ihren Umgebungsvariablen", - "settings.providers.custom.description": "Fügen Sie einen OpenAI-kompatiblen Anbieter per Basis-URL hinzu.", - - "app.server.unreachable": "Konnte {{server}} nicht erreichen", - "app.server.retrying": "Automatische erneute Verbindung...", - "app.server.otherServers": "Andere Server", - "dialog.server.add.usernamePlaceholder": "Benutzername", - "dialog.server.add.passwordPlaceholder": "Passwort", - "server.row.noUsername": "Kein Benutzername", - "session.review.noVcs.createGit.title": "Git-Repository erstellen", - "session.review.noVcs.createGit.description": - "Änderungen in diesem Projekt verfolgen, überprüfen und rückgängig machen", - "session.review.noVcs.createGit.actionLoading": "Git-Repository wird erstellt...", - "session.review.noVcs.createGit.action": "Git-Repository erstellen", - "session.todo.progress": "{{done}} von {{total}} Aufgaben erledigt", - "session.question.progress": "{{current}} von {{total}} Fragen", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "Datei-Explorer", - "session.header.open.fileManager": "Dateimanager", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "Terminal", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "Entwicklungs-Leistungsdiagnose", - "debugBar.na": "n.v.", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": - "Letzter abgeschlossener Routenübergang, der eine Sitzungsseite berührt, gemessen vom Start des Routers bis zum ersten Rendern nach dem Einschwingen.", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "Gleitende Bilder pro Sekunde in den letzten 5 Sekunden.", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "Schlechteste Frame-Zeit in den letzten 5 Sekunden.", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "Frames über 32ms in den letzten 5 Sekunden.", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "Blockierte Zeit und Anzahl langer Aufgaben in den letzten 5 Sekunden. Max Aufgabe: {{max}}.", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "Schlechteste beobachtete Eingabeverzögerung in den letzten 5 Sekunden.", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": - "Ungefähre Interaktionsdauer in den letzten 5 Sekunden. Dies ist INP-ähnlich, nicht das offizielle Web Vitals INP.", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "Kumulative Layoutverschiebung für die aktuelle App-Lebensdauer.", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "Verwendeter JS-Heap vs Heap-Limit. Nur Chromium.", - "debugBar.mem.tip": "Verwendeter JS-Heap vs Heap-Limit. {{used}} von {{limit}}.", - "common.key.ctrl": "Strg", - "common.key.alt": "Alt", - "common.key.shift": "Umschalt", - "common.key.meta": "Meta", - "common.key.space": "Leertaste", - "common.key.backspace": "Rücktaste", - "common.key.enter": "Eingabe", - "common.key.tab": "Tab", - "common.key.delete": "Entf", - "common.key.home": "Pos1", - "common.key.end": "Ende", - "common.key.pageUp": "Bild auf", - "common.key.pageDown": "Bild ab", - "common.key.insert": "Einfg", - "common.unknown": "unbekannt", - "error.page.circular": "[Zirkulär]", - "error.serverSDK.noServerAvailable": "Kein Server verfügbar", - "error.serverSDK.serverNotAvailable": "Server nicht verfügbar", - "error.childStore.persistedCacheCreateFailed": "Dauerhafter Cache konnte nicht erstellt werden", - "error.childStore.persistedProjectMetadataCreateFailed": "Dauerhafte Projektmetadaten konnten nicht erstellt werden", - "error.childStore.persistedProjectIconCreateFailed": "Dauerhaftes Projekticon konnte nicht erstellt werden", - "error.childStore.storeCreateFailed": "Speicher konnte nicht erstellt werden", - "terminal.connectionLost.abnormalClose": "WebSocket abnormal geschlossen: {{code}}", -} satisfies Partial> diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts deleted file mode 100644 index 7ebd34e66b..0000000000 --- a/packages/app/src/i18n/fr.ts +++ /dev/null @@ -1,873 +0,0 @@ -export const dict = { - "command.category.suggested": "Suggéré", - "command.category.view": "Affichage", - "command.category.project": "Projet", - "command.category.provider": "Fournisseur", - "command.category.server": "Serveur", - "command.category.session": "Session", - "command.category.theme": "Thème", - "command.category.language": "Langue", - "command.category.file": "Fichier", - "command.category.context": "Contexte", - "command.category.terminal": "Terminal", - "command.category.model": "Modèle", - "command.category.mcp": "MCP", - "command.category.agent": "Agent", - "command.category.permissions": "Permissions", - "command.category.workspace": "Espace de travail", - "command.category.settings": "Paramètres", - "theme.scheme.system": "Système", - "theme.scheme.light": "Clair", - "theme.scheme.dark": "Sombre", - "command.sidebar.toggle": "Basculer la barre latérale", - "command.project.open": "Ouvrir un projet", - "command.provider.connect": "Connecter un fournisseur", - "command.server.switch": "Changer de serveur", - "command.settings.open": "Ouvrir les paramètres", - "command.session.previous": "Session précédente", - "command.session.next": "Session suivante", - "command.session.previous.unseen": "Session non lue précédente", - "command.session.next.unseen": "Session non lue suivante", - "command.session.archive": "Archiver la session", - "command.palette": "Palette de commandes", - "command.theme.cycle": "Changer de thème", - "command.theme.set": "Utiliser le thème : {{theme}}", - "command.theme.scheme.cycle": "Changer de schéma de couleurs", - "command.theme.scheme.set": "Utiliser le schéma de couleurs : {{scheme}}", - "command.language.cycle": "Changer de langue", - "command.language.set": "Utiliser la langue : {{language}}", - "command.session.new": "Nouvelle session", - "command.file.open": "Ouvrir un fichier", - "command.tab.close": "Fermer l'onglet", - "command.context.addSelection": "Ajouter la sélection au contexte", - "command.context.addSelection.description": "Ajouter les lignes sélectionnées du fichier actuel", - "command.input.focus": "Focus sur l'entrée", - "command.terminal.toggle": "Basculer le terminal", - "command.fileTree.toggle": "Basculer l'arborescence des fichiers", - "command.review.toggle": "Basculer la revue", - "command.terminal.new": "Nouveau terminal", - "command.terminal.new.description": "Créer un nouvel onglet de terminal", - "command.steps.toggle": "Basculer les étapes", - "command.steps.toggle.description": "Afficher ou masquer les étapes du message actuel", - "command.message.previous": "Message précédent", - "command.message.previous.description": "Aller au message utilisateur précédent", - "command.message.next": "Message suivant", - "command.message.next.description": "Aller au message utilisateur suivant", - "command.model.choose": "Choisir le modèle", - "command.model.choose.description": "Sélectionner un modèle différent", - "command.mcp.toggle": "Basculer MCP", - "command.mcp.toggle.description": "Basculer les MCPs", - "command.agent.cycle": "Changer d'agent", - "command.agent.cycle.description": "Passer à l'agent suivant", - "command.agent.cycle.reverse": "Changer d'agent (inverse)", - "command.agent.cycle.reverse.description": "Passer à l'agent précédent", - "command.model.variant.cycle": "Changer l'effort de réflexion", - "command.model.variant.cycle.description": "Passer au niveau d'effort suivant", - "command.prompt.mode.shell": "Shell", - "command.prompt.mode.normal": "Prompt", - "command.permissions.autoaccept.enable": "Accepter automatiquement les permissions", - "command.permissions.autoaccept.disable": "Arrêter d'accepter automatiquement les permissions", - "command.workspace.toggle": "Basculer les espaces de travail", - "command.workspace.toggle.description": "Activer ou désactiver plusieurs espaces de travail dans la barre latérale", - "command.session.undo": "Annuler", - "command.session.undo.description": "Annuler le dernier message", - "command.session.redo": "Rétablir", - "command.session.redo.description": "Rétablir le dernier message annulé", - "command.session.compact": "Compacter la session", - "command.session.compact.description": "Résumer la session pour réduire la taille du contexte", - "command.session.fork": "Bifurquer à partir du message", - "command.session.fork.description": "Créer une nouvelle session à partir d'un message précédent", - "command.session.share": "Partager la session", - "command.session.share.description": "Partager cette session et copier l'URL dans le presse-papiers", - "command.session.unshare": "Ne plus partager la session", - "command.session.unshare.description": "Arrêter de partager cette session", - "palette.search.placeholder": "Rechercher des fichiers, des commandes et des sessions", - "palette.empty": "Aucun résultat trouvé", - "palette.group.commands": "Commandes", - "palette.group.files": "Fichiers", - "dialog.provider.search.placeholder": "Rechercher des fournisseurs", - "dialog.provider.empty": "Aucun fournisseur trouvé", - "dialog.provider.group.popular": "Populaire", - "dialog.provider.group.other": "Autre", - "dialog.provider.tag.recommended": "Recommandé", - "dialog.provider.opencode.note": "Modèles sélectionnés incluant Claude, GPT, Gemini et plus", - "dialog.provider.opencode.tagline": "Modèles optimisés et fiables", - "dialog.provider.opencodeGo.tagline": "Abonnement abordable pour tous", - "dialog.provider.anthropic.note": "Connectez-vous avec Claude Pro/Max ou une clé API", - "dialog.provider.copilot.note": "Connectez-vous avec Copilot ou une clé API", - "dialog.provider.openai.note": "Connectez-vous avec ChatGPT Pro/Plus ou une clé API", - "dialog.provider.google.note": "Modèles Gemini pour des réponses rapides et structurées", - "dialog.provider.openrouter.note": "Accédez à tous les modèles pris en charge depuis un seul fournisseur", - "dialog.provider.vercel.note": "Accès unifié aux modèles d'IA avec routage intelligent", - "dialog.model.select.title": "Sélectionner un modèle", - "dialog.model.search.placeholder": "Rechercher des modèles", - "dialog.model.empty": "Aucun résultat de modèle", - "dialog.model.manage": "Gérer les modèles", - "dialog.model.manage.description": "Personnalisez les modèles qui apparaissent dans le sélecteur.", - "dialog.model.manage.provider.toggle": "Basculer tous les modèles {{provider}}", - "dialog.model.unpaid.freeModels.title": "Modèles gratuits fournis par OpenCode", - "dialog.model.unpaid.addMore.title": "Ajouter plus de modèles de fournisseurs populaires", - "dialog.provider.viewAll": "Voir plus de fournisseurs", - "provider.connect.title": "Connecter {{provider}}", - "provider.connect.title.anthropicProMax": "Connexion avec Claude Pro/Max", - "provider.connect.selectMethod": "Sélectionnez la méthode de connexion pour {{provider}}.", - "provider.connect.method.apiKey": "Clé API", - "provider.connect.status.inProgress": "Autorisation en cours...", - "provider.connect.status.waiting": "En attente d'autorisation...", - "provider.connect.status.failed": "Échec de l'autorisation : {{error}}", - "provider.connect.apiKey.description": - "Entrez votre clé API {{provider}} pour connecter votre compte et utiliser les modèles {{provider}} dans OpenCode.", - "provider.connect.apiKey.label": "Clé API {{provider}}", - "provider.connect.apiKey.placeholder": "Clé API", - "provider.connect.apiKey.required": "La clé API est requise", - "provider.connect.opencodeZen.line1": - "OpenCode Zen vous donne accès à un ensemble sélectionné de modèles fiables et optimisés pour les agents de codage.", - "provider.connect.opencodeZen.line2": - "Avec une seule clé API, vous aurez accès à des modèles tels que Claude, GPT, Gemini, GLM et plus encore.", - "provider.connect.opencodeZen.visit.prefix": "Visitez ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " pour récupérer votre clé API.", - "provider.connect.oauth.code.visit.prefix": "Visitez ", - "provider.connect.oauth.code.visit.link": "ce lien", - "provider.connect.oauth.code.visit.suffix": - " pour récupérer votre code d'autorisation afin de connecter votre compte et utiliser les modèles {{provider}} dans OpenCode.", - "provider.connect.oauth.code.label": "Code d'autorisation {{method}}", - "provider.connect.oauth.code.placeholder": "Code d'autorisation", - "provider.connect.oauth.code.required": "Le code d'autorisation est requis", - "provider.connect.oauth.code.invalid": "Code d'autorisation invalide", - "provider.connect.oauth.auto.visit.prefix": "Visitez ", - "provider.connect.oauth.auto.visit.link": "ce lien", - "provider.connect.oauth.auto.visit.suffix": - " et entrez le code ci-dessous pour connecter votre compte et utiliser les modèles {{provider}} dans OpenCode.", - "provider.connect.oauth.auto.confirmationCode": "Code de confirmation", - "provider.connect.toast.connected.title": "{{provider}} connecté", - "provider.connect.toast.connected.description": "Les modèles {{provider}} sont maintenant disponibles.", - "provider.custom.title": "Fournisseur personnalisé", - "provider.custom.description.prefix": "Configurer un fournisseur compatible OpenAI. Voir la ", - "provider.custom.description.link": "doc de config fournisseur", - "provider.custom.description.suffix": ".", - "provider.custom.field.providerID.label": "ID du fournisseur", - "provider.custom.field.providerID.placeholder": "monfournisseur", - "provider.custom.field.providerID.description": "Lettres minuscules, chiffres, traits d'union ou tirets bas", - "provider.custom.field.name.label": "Nom d'affichage", - "provider.custom.field.name.placeholder": "Mon fournisseur IA", - "provider.custom.field.baseURL.label": "URL de base", - "provider.custom.field.baseURL.placeholder": "https://api.monfournisseur.com/v1", - "provider.custom.field.apiKey.label": "Clé API", - "provider.custom.field.apiKey.placeholder": "Clé API", - "provider.custom.field.apiKey.description": "Optionnel. Laisser vide si vous gérez l'auth via les en-têtes.", - "provider.custom.models.label": "Modèles", - "provider.custom.models.id.label": "ID", - "provider.custom.models.id.placeholder": "id-modele", - "provider.custom.models.name.label": "Nom", - "provider.custom.models.name.placeholder": "Nom d'affichage", - "provider.custom.models.remove": "Supprimer le modèle", - "provider.custom.models.add": "Ajouter un modèle", - "provider.custom.headers.label": "En-têtes (optionnel)", - "provider.custom.headers.key.label": "En-tête", - "provider.custom.headers.key.placeholder": "Nom-En-Tête", - "provider.custom.headers.value.label": "Valeur", - "provider.custom.headers.value.placeholder": "valeur", - "provider.custom.headers.remove": "Supprimer l'en-tête", - "provider.custom.headers.add": "Ajouter un en-tête", - "provider.custom.error.providerID.required": "L'ID du fournisseur est requis", - "provider.custom.error.providerID.format": "Utilisez des lettres minuscules, chiffres, traits d'union ou tirets bas", - "provider.custom.error.providerID.exists": "Cet ID de fournisseur existe déjà", - "provider.custom.error.name.required": "Le nom d'affichage est requis", - "provider.custom.error.baseURL.required": "L'URL de base est requise", - "provider.custom.error.baseURL.format": "Doit commencer par http:// ou https://", - "provider.custom.error.required": "Requis", - "provider.custom.error.duplicate": "Doublon", - "provider.disconnect.toast.disconnected.title": "{{provider}} déconnecté", - "provider.disconnect.toast.disconnected.description": "Les modèles {{provider}} ne sont plus disponibles.", - "model.tag.free": "Gratuit", - "model.tag.latest": "Dernier", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "texte", - "model.input.image": "image", - "model.input.audio": "audio", - "model.input.video": "vidéo", - "model.input.pdf": "pdf", - "model.tooltip.allows": "Autorise : {{inputs}}", - "model.tooltip.reasoning.allowed": "Autorise le raisonnement", - "model.tooltip.reasoning.none": "Sans raisonnement", - "model.tooltip.context": "Limite de contexte {{limit}}", - "common.search.placeholder": "Rechercher", - "common.goBack": "Retour", - "common.goForward": "Avancer", - "common.loading": "Chargement", - "common.loading.ellipsis": "...", - "common.cancel": "Annuler", - "common.connect": "Connecter", - "common.disconnect": "Déconnecter", - "common.continue": "Soumettre", - "common.submit": "Soumettre", - "common.save": "Enregistrer", - "common.saving": "Enregistrement...", - "common.default": "Défaut", - "common.attachment": "pièce jointe", - "prompt.placeholder.shell": "Entrez une commande shell... {{example}}", - "prompt.placeholder.normal": 'Demandez n\'importe quoi... "{{example}}"', - "prompt.placeholder.simple": "Demandez n'importe quoi...", - "prompt.placeholder.summarizeComments": "Résumer les commentaires…", - "prompt.placeholder.summarizeComment": "Résumer le commentaire…", - "prompt.mode.shell": "Shell", - "prompt.mode.normal": "Prompt", - "prompt.mode.shell.exit": "esc pour quitter", - "prompt.example.1": "Corriger un TODO dans la base de code", - "prompt.example.2": "Quelle est la pile technique de ce projet ?", - "prompt.example.3": "Réparer les tests échoués", - "prompt.example.4": "Expliquer comment fonctionne l'authentification", - "prompt.example.5": "Trouver et corriger les vulnérabilités de sécurité", - "prompt.example.6": "Ajouter des tests unitaires pour le service utilisateur", - "prompt.example.7": "Refactoriser cette fonction pour être plus lisible", - "prompt.example.8": "Que signifie cette erreur ?", - "prompt.example.9": "Aidez-moi à déboguer ce problème", - "prompt.example.10": "Générer la documentation de l'API", - "prompt.example.11": "Optimiser les requêtes de base de données", - "prompt.example.12": "Ajouter une validation d'entrée", - "prompt.example.13": "Créer un nouveau composant pour...", - "prompt.example.14": "Comment déployer ce projet ?", - "prompt.example.15": "Vérifier mon code pour les meilleures pratiques", - "prompt.example.16": "Ajouter la gestion des erreurs à cette fonction", - "prompt.example.17": "Expliquer ce modèle regex", - "prompt.example.18": "Convertir ceci en TypeScript", - "prompt.example.19": "Ajouter des logs dans toute la base de code", - "prompt.example.20": "Quelles dépendances sont obsolètes ?", - "prompt.example.21": "Aidez-moi à écrire un script de migration", - "prompt.example.22": "Implémenter la mise en cache pour ce point de terminaison", - "prompt.example.23": "Ajouter la pagination à cette liste", - "prompt.example.24": "Créer une commande CLI pour...", - "prompt.example.25": "Comment fonctionnent les variables d'environnement ici ?", - "prompt.popover.emptyResults": "Aucun résultat correspondant", - "prompt.popover.emptyCommands": "Aucune commande correspondante", - "prompt.dropzone.label": "Déposez des images, des PDF ou des fichiers texte ici", - "prompt.dropzone.file.label": "Déposez pour @mentionner le fichier", - "prompt.slash.badge.custom": "personnalisé", - "prompt.slash.badge.skill": "skill", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "actif", - "prompt.context.includeActiveFile": "Inclure le fichier actif", - "prompt.context.removeActiveFile": "Retirer le fichier actif du contexte", - "prompt.context.removeFile": "Retirer le fichier du contexte", - "prompt.action.attachFile": "Joindre un fichier", - "prompt.attachment.remove": "Supprimer la pièce jointe", - "prompt.action.send": "Envoyer", - "prompt.action.stop": "Arrêter", - "prompt.toast.pasteUnsupported.title": "Pièce jointe non prise en charge", - "prompt.toast.pasteUnsupported.description": - "Seules les images, les PDF ou les fichiers texte peuvent être joints ici.", - "prompt.toast.modelAgentRequired.title": "Sélectionnez un agent et un modèle", - "prompt.toast.modelAgentRequired.description": "Choisissez un agent et un modèle avant d'envoyer un message.", - "prompt.toast.worktreeCreateFailed.title": "Échec de la création de l'arbre de travail", - "prompt.toast.sessionCreateFailed.title": "Échec de la création de la session", - "prompt.toast.shellSendFailed.title": "Échec de l'envoi de la commande shell", - "prompt.toast.commandSendFailed.title": "Échec de l'envoi de la commande", - "prompt.toast.promptSendFailed.title": "Échec de l'envoi du message", - "prompt.toast.promptSendFailed.description": "Impossible de récupérer la session", - "dialog.mcp.title": "MCPs", - "dialog.mcp.description": "{{enabled}} sur {{total}} activés", - "dialog.mcp.empty": "Aucun MCP configuré", - "dialog.lsp.empty": "LSPs détectés automatiquement par type de fichier", - "dialog.plugins.empty": "Plugins configurés dans opencode.json", - "mcp.status.connected": "connecté", - "mcp.status.failed": "échoué", - "mcp.status.needs_auth": "nécessite auth", - "mcp.auth.clickToAuthenticate": "Cliquez pour vous authentifier", - "mcp.status.disabled": "désactivé", - "dialog.fork.empty": "Aucun message à partir duquel bifurquer", - "dialog.directory.search.placeholder": "Rechercher des dossiers", - "dialog.directory.empty": "Aucun dossier trouvé", - "dialog.directory.action.selectFile": "Sélectionner le fichier", - "dialog.directory.action.selectFolder": "Sélectionner le dossier", - "dialog.directory.root": "Racine", - "dialog.directory.parent": "Parent", - "dialog.directory.readError": "Impossible de lire ce dossier", - "dialog.server.title": "Serveurs", - "dialog.server.description": "Changez le serveur OpenCode auquel cette application se connecte.", - "dialog.server.search.placeholder": "Rechercher des serveurs", - "dialog.server.empty": "Aucun serveur pour l'instant", - "dialog.server.add.title": "Ajouter un serveur", - "dialog.server.add.url": "URL du serveur", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "Impossible de se connecter au serveur", - "dialog.server.add.checking": "Vérification...", - "dialog.server.add.button": "Ajouter un serveur", - "dialog.server.add.name": "Nom du serveur (optionnel)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "Nom d'utilisateur (optionnel)", - "dialog.server.add.password": "Mot de passe (optionnel)", - "dialog.server.edit.title": "Modifier le serveur", - "dialog.server.default.title": "Serveur par défaut", - "dialog.server.default.description": - "Se connecter à ce serveur au lancement de l'application au lieu de démarrer un serveur local. Nécessite un redémarrage.", - "dialog.server.default.none": "Aucun serveur sélectionné", - "dialog.server.default.set": "Définir le serveur actuel comme défaut", - "dialog.server.default.clear": "Effacer", - "dialog.server.action.remove": "Supprimer le serveur", - "dialog.server.menu.edit": "Modifier", - "dialog.server.menu.default": "Définir par défaut", - "dialog.server.menu.defaultRemove": "Supprimer par défaut", - "dialog.server.menu.delete": "Supprimer", - "dialog.server.current": "Serveur actuel", - "dialog.server.status.default": "Défaut", - "dialog.project.edit.title": "Modifier le projet", - "dialog.project.edit.name": "Nom", - "dialog.project.edit.icon": "Icône", - "dialog.project.edit.icon.alt": "Icône du projet", - "dialog.project.edit.icon.hint": "Cliquez ou faites glisser une image", - "dialog.project.edit.icon.recommended": "Recommandé : 128x128px", - "dialog.project.edit.color": "Couleur", - "dialog.project.edit.color.select": "Sélectionner la couleur {{color}}", - "dialog.project.edit.worktree.startup": "Script de démarrage de l'espace de travail", - "dialog.project.edit.worktree.startup.description": - "S'exécute après la création d'un nouvel espace de travail (arbre de travail).", - "dialog.project.edit.worktree.startup.placeholder": "p. ex. bun install", - "context.breakdown.title": "Répartition du contexte", - "context.breakdown.note": - "Répartition approximative des jetons d'entrée. \"Autre\" inclut les définitions d'outils et les frais généraux.", - "context.breakdown.system": "Système", - "context.breakdown.user": "Utilisateur", - "context.breakdown.assistant": "Assistant", - "context.breakdown.tool": "Appels d'outils", - "context.breakdown.other": "Autre", - "context.systemPrompt.title": "Prompt système", - "context.rawMessages.title": "Messages bruts", - "context.stats.session": "Session", - "context.stats.messages": "Messages", - "context.stats.provider": "Fournisseur", - "context.stats.model": "Modèle", - "context.stats.limit": "Limite de contexte", - "context.stats.totalTokens": "Total des jetons", - "context.stats.usage": "Utilisation", - "context.stats.inputTokens": "Jetons d'entrée", - "context.stats.outputTokens": "Jetons de sortie", - "context.stats.reasoningTokens": "Jetons de raisonnement", - "context.stats.cacheTokens": "Jetons de cache (lecture/écriture)", - "context.stats.userMessages": "Messages utilisateur", - "context.stats.assistantMessages": "Messages assistant", - "context.stats.totalCost": "Coût total", - "context.stats.sessionCreated": "Session créée", - "context.stats.lastActivity": "Dernière activité", - "context.usage.tokens": "Jetons", - "context.usage.usage": "Utilisation", - "context.usage.cost": "Coût", - "context.usage.clickToView": "Cliquez pour voir le contexte", - "context.usage.view": "Voir l'utilisation du contexte", - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - "toast.language.title": "Langue", - "toast.language.description": "Passé à {{language}}", - "toast.theme.title": "Thème changé", - "toast.scheme.title": "Schéma de couleurs", - "toast.workspace.enabled.title": "Espaces de travail activés", - "toast.workspace.enabled.description": "Plusieurs worktrees sont désormais affichés dans la barre latérale", - "toast.workspace.disabled.title": "Espaces de travail désactivés", - "toast.workspace.disabled.description": "Seul le worktree principal est affiché dans la barre latérale", - "toast.permissions.autoaccept.on.title": "Acceptation automatique des permissions", - "toast.permissions.autoaccept.on.description": "Les demandes de permission seront approuvées automatiquement", - "toast.permissions.autoaccept.off.title": "Acceptation automatique des permissions arrêtée", - "toast.permissions.autoaccept.off.description": "Les demandes de permission nécessiteront une approbation", - "toast.model.none.title": "Aucun modèle sélectionné", - "toast.model.none.description": "Connectez un fournisseur pour résumer cette session", - "toast.file.loadFailed.title": "Échec du chargement du fichier", - "toast.file.listFailed.title": "Échec de la liste des fichiers", - "toast.context.noLineSelection.title": "Aucune sélection de lignes", - "toast.context.noLineSelection.description": "Sélectionnez d'abord une plage de lignes dans un onglet de fichier.", - "toast.session.share.copyFailed.title": "Échec de la copie de l'URL dans le presse-papiers", - "toast.session.share.success.title": "Session partagée", - "toast.session.share.success.description": "URL de partage copiée dans le presse-papiers !", - "toast.session.share.failed.title": "Échec du partage de la session", - "toast.session.share.failed.description": "Une erreur s'est produite lors du partage de la session", - "toast.session.unshare.success.title": "Session non partagée", - "toast.session.unshare.success.description": "Session non partagée avec succès !", - "toast.session.unshare.failed.title": "Échec de l'annulation du partage", - "toast.session.unshare.failed.description": "Une erreur s'est produite lors de l'annulation du partage de la session", - "toast.session.listFailed.title": "Échec du chargement des sessions pour {{project}}", - "toast.update.title": "Mise à jour disponible", - "toast.update.description": - "Une nouvelle version d'OpenCode ({{version}}) est maintenant disponible pour installation.", - "toast.update.action.installRestart": "Installer et redémarrer", - "toast.update.action.notYet": "Pas encore", - "error.page.title": "Quelque chose s'est mal passé", - "error.page.description": "Une erreur s'est produite lors du chargement de l'application.", - "error.page.details.label": "Détails de l'erreur", - "error.page.action.restart": "Redémarrer", - "error.page.action.report": "Signaler l'erreur", - "error.page.action.reported": "Erreur signalée", - "error.page.action.checking": "Vérification...", - "error.page.action.checkUpdates": "Vérifier les mises à jour", - "error.page.action.updateTo": "Mettre à jour vers {{version}}", - "error.page.report.prefix": "Veuillez signaler cette erreur à l'équipe OpenCode", - "error.page.report.discord": "sur Discord", - "error.page.version": "Version : {{version}}", - "error.dev.rootNotFound": - "Élément racine introuvable. Avez-vous oublié de l'ajouter à votre index.html ? Ou peut-être que l'attribut id est mal orthographié ?", - "error.serverSync.connectFailed": - "Impossible de se connecter au serveur. Y a-t-il un serveur en cours d'exécution à `{{url}}` ?", - "directory.error.invalidUrl": "Répertoire invalide dans l'URL.", - "error.chain.unknown": "Erreur inconnue", - "error.chain.causedBy": "Causé par :", - "error.chain.apiError": "Erreur API", - "error.chain.status": "Statut : {{status}}", - "error.chain.retryable": "Réessayable : {{retryable}}", - "error.chain.responseBody": "Corps de la réponse :\n{{body}}", - "error.chain.didYouMean": "Vouliez-vous dire : {{suggestions}}", - "error.chain.modelNotFound": "Modèle introuvable : {{provider}}/{{model}}", - "error.chain.checkConfig": "Vérifiez votre configuration (opencode.json) pour les noms de fournisseur/modèle", - "error.chain.mcpFailed": - "Le serveur MCP \"{{name}}\" a échoué. Notez qu'OpenCode ne supporte pas encore l'authentification MCP.", - "error.chain.providerAuthFailed": "Échec de l'authentification du fournisseur ({{provider}}) : {{message}}", - "error.chain.providerInitFailed": - 'Échec de l\'initialisation du fournisseur "{{provider}}". Vérifiez les identifiants et la configuration.', - "error.chain.configJsonInvalid": "Le fichier de configuration à {{path}} n'est pas un JSON(C) valide", - "error.chain.configJsonInvalidWithMessage": - "Le fichier de configuration à {{path}} n'est pas un JSON(C) valide : {{message}}", - "error.chain.configDirectoryTypo": - 'Le répertoire "{{dir}}" dans {{path}} n\'est pas valide. Renommez le répertoire en "{{suggestion}}" ou supprimez-le. C\'est une faute de frappe courante.', - "error.chain.configFrontmatterError": "Échec de l'analyse du frontmatter dans {{path}} :\n{{message}}", - "error.chain.configInvalid": "Le fichier de configuration à {{path}} est invalide", - "error.chain.configInvalidWithMessage": "Le fichier de configuration à {{path}} est invalide : {{message}}", - "notification.permission.title": "Permission requise", - "notification.permission.description": "{{sessionTitle}} dans {{projectName}} a besoin d'une permission", - "notification.question.title": "Question", - "notification.question.description": "{{sessionTitle}} dans {{projectName}} a une question", - "notification.action.goToSession": "Aller à la session", - "notification.session.responseReady.title": "Réponse prête", - "notification.session.error.title": "Erreur de session", - "notification.session.error.fallbackDescription": "Une erreur s'est produite", - "home.recentProjects": "Projets récents", - "home.empty.title": "Aucun projet récent", - "home.empty.description": "Commencez par ouvrir un projet local", - "session.tab.session": "Session", - "session.tab.review": "Revue", - "session.tab.context": "Contexte", - "session.panel.reviewAndFiles": "Revue et fichiers", - "session.review.filesChanged": "{{count}} fichiers modifiés", - "session.review.change.one": "Modification", - "session.review.change.other": "Modifications", - "session.review.loadingChanges": "Chargement des modifications...", - "session.review.empty": "Aucune modification dans cette session pour l'instant", - "session.review.noChanges": "Aucune modification", - "session.review.noVcs": "Aucun système de contrôle de version Git détecté, modifications non affichées", - "session.review.noSnapshot": - "Le suivi des instantanés est désactivé dans la configuration, les modifications de session sont donc indisponibles", - "session.files.selectToOpen": "Sélectionnez un fichier à ouvrir", - "session.files.all": "Tous les fichiers", - "session.files.empty": "Aucun fichier", - "session.files.binaryContent": "Fichier binaire (le contenu ne peut pas être affiché)", - "session.messages.renderEarlier": "Afficher les messages précédents", - "session.messages.loadingEarlier": "Chargement des messages précédents...", - "session.messages.loadEarlier": "Charger les messages précédents", - "session.messages.loading": "Chargement des messages...", - "session.messages.jumpToLatest": "Aller au dernier", - "session.context.addToContext": "Ajouter {{selection}} au contexte", - "session.todo.title": "Tâches", - "session.todo.collapse": "Réduire", - "session.todo.expand": "Développer", - "session.followupDock.summary.one": "{{count}} message en file d'attente", - "session.followupDock.summary.other": "{{count}} messages en file d'attente", - "session.followupDock.sendNow": "Envoyer maintenant", - "session.followupDock.edit": "Modifier", - "session.followupDock.collapse": "Réduire les messages en file d'attente", - "session.followupDock.expand": "Développer les messages en file d'attente", - "session.revertDock.summary.one": "{{count}} message annulé", - "session.revertDock.summary.other": "{{count}} messages annulés", - "session.revertDock.collapse": "Réduire les messages annulés", - "session.revertDock.expand": "Développer les messages annulés", - "session.revertDock.restore": "Restaurer le message", - "session.new.title": "Créez ce que vous voulez", - "session.new.worktree.main": "Branche principale", - "session.new.worktree.mainWithBranch": "Branche principale ({{branch}})", - "session.new.worktree.create": "Créer un nouvel arbre de travail", - "session.new.lastModified": "Dernière modification", - "session.header.search.placeholder": "Rechercher {{project}}", - "session.header.searchFiles": "Rechercher des fichiers", - "session.header.openIn": "Ouvrir dans", - "session.header.open.action": "Ouvrir {{app}}", - "session.header.open.ariaLabel": "Ouvrir dans {{app}}", - "session.header.open.menu": "Options d'ouverture", - "session.header.open.copyPath": "Copier le chemin", - "status.popover.trigger": "Statut", - "status.popover.ariaLabel": "Configurations des serveurs", - "status.popover.tab.servers": "Serveurs", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "Plugins", - "status.popover.action.manageServers": "Gérer les serveurs", - "session.share.popover.title": "Publier sur le web", - "session.share.popover.description.shared": - "Cette session est publique sur le web. Elle est accessible à toute personne disposant du lien.", - "session.share.popover.description.unshared": - "Partager la session publiquement sur le web. Elle sera accessible à toute personne disposant du lien.", - "session.share.action.share": "Partager", - "session.share.action.publish": "Publier", - "session.share.action.publishing": "Publication...", - "session.share.action.unpublish": "Dépublier", - "session.share.action.unpublishing": "Dépublication...", - "session.share.action.view": "Voir", - "session.share.copy.copied": "Copié", - "session.share.copy.copyLink": "Copier le lien", - "lsp.tooltip.none": "Aucun serveur LSP", - "lsp.label.connected": "{{count}} LSP", - "prompt.loading": "Chargement du prompt...", - "terminal.loading": "Chargement du terminal...", - "terminal.title": "Terminal", - "terminal.title.numbered": "Terminal {{number}}", - "terminal.close": "Fermer le terminal", - "terminal.connectionLost.title": "Connexion perdue", - "terminal.connectionLost.description": - "La connexion au terminal a été interrompue. Cela peut arriver lorsque le serveur redémarre.", - "common.closeTab": "Fermer l'onglet", - "common.dismiss": "Ignorer", - "common.requestFailed": "La demande a échoué", - "common.moreOptions": "Plus d'options", - "common.learnMore": "En savoir plus", - "common.rename": "Renommer", - "common.reset": "Réinitialiser", - "common.archive": "Archiver", - "common.delete": "Supprimer", - "common.close": "Fermer", - "common.edit": "Modifier", - "common.loadMore": "Charger plus", - "common.key.esc": "ESC", - "sidebar.menu.toggle": "Basculer le menu", - "sidebar.nav.projectsAndSessions": "Projets et sessions", - "sidebar.settings": "Paramètres", - "sidebar.help": "Aide", - "sidebar.workspaces.enable": "Activer les espaces de travail", - "sidebar.workspaces.disable": "Désactiver les espaces de travail", - "sidebar.gettingStarted.title": "Commencer", - "sidebar.gettingStarted.line1": - "OpenCode inclut des modèles gratuits pour que vous puissiez commencer immédiatement.", - "sidebar.gettingStarted.line2": - "Connectez n'importe quel fournisseur pour utiliser des modèles, y compris Claude, GPT, Gemini etc.", - "sidebar.project.recentSessions": "Sessions récentes", - "sidebar.project.viewAllSessions": "Voir toutes les sessions", - "sidebar.project.clearNotifications": "Effacer les notifications", - "app.name.desktop": "OpenCode Desktop", - "settings.section.desktop": "Bureau", - "settings.section.server": "Serveur", - "settings.tab.general": "Général", - "settings.tab.shortcuts": "Raccourcis", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "Intégration WSL", - "settings.desktop.wsl.description": "Exécuter le serveur OpenCode dans WSL sur Windows.", - "settings.general.section.appearance": "Apparence", - "settings.general.section.notifications": "Notifications système", - "settings.general.section.updates": "Mises à jour", - "settings.general.section.sounds": "Effets sonores", - "settings.general.section.feed": "Flux", - "settings.general.section.display": "Affichage", - "settings.general.row.language.title": "Langue", - "settings.general.row.language.description": "Changer la langue d'affichage pour OpenCode", - "settings.general.row.appearance.title": "Apparence", - "settings.general.row.appearance.description": "Personnaliser l'apparence d'OpenCode sur votre appareil", - "settings.general.row.colorScheme.title": "Schéma de couleurs", - "settings.general.row.colorScheme.description": "Choisissez si OpenCode suit le thème système, clair ou sombre", - "settings.general.row.theme.title": "Thème", - "settings.general.row.theme.description": "Personnaliser le thème d'OpenCode.", - "settings.general.row.font.title": "Police de code", - "settings.general.row.font.description": "Personnaliser la police utilisée dans les blocs de code", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "Police de l'interface", - "settings.general.row.uiFont.description": "Personnaliser la police utilisée dans toute l'interface", - "settings.general.row.followup.title": "Comportement de suivi", - "settings.general.row.followup.description": - "Choisissez si les messages de suivi dirigent immédiatement ou attendent dans une file d'attente", - "settings.general.row.followup.option.queue": "File d'attente", - "settings.general.row.followup.option.steer": "Diriger", - "settings.general.row.reasoningSummaries.title": "Afficher les résumés de raisonnement", - "settings.general.row.reasoningSummaries.description": - "Afficher les résumés de raisonnement du modèle dans la chronologie", - "settings.general.row.shellToolPartsExpanded.title": "Développer les parties de l'outil shell", - "settings.general.row.shellToolPartsExpanded.description": - "Afficher les parties de l'outil shell développées par défaut dans la chronologie", - "settings.general.row.editToolPartsExpanded.title": "Développer les parties de l'outil edit", - "settings.general.row.editToolPartsExpanded.description": - "Afficher les parties des outils edit, write et patch développées par défaut dans la chronologie", - "settings.general.row.wayland.title": "Utiliser Wayland natif", - "settings.general.row.wayland.description": "Désactiver le repli X11 sur Wayland. Nécessite un redémarrage.", - "settings.general.row.wayland.tooltip": - "Sur Linux avec des moniteurs à taux de rafraîchissement mixte, Wayland natif peut être plus stable.", - "settings.general.row.releaseNotes.title": "Notes de version", - "settings.general.row.releaseNotes.description": 'Afficher des pop-ups "Quoi de neuf" après les mises à jour', - "settings.updates.row.startup.title": "Vérifier les mises à jour au démarrage", - "settings.updates.row.startup.description": "Vérifier automatiquement les mises à jour au lancement d'OpenCode", - "settings.updates.row.check.title": "Vérifier les mises à jour", - "settings.updates.row.check.description": "Vérifier manuellement les mises à jour et installer si disponible", - "settings.updates.action.checkNow": "Vérifier maintenant", - "settings.updates.action.checking": "Vérification...", - "settings.updates.toast.latest.title": "Vous êtes à jour", - "settings.updates.toast.latest.description": "Vous utilisez la dernière version d'OpenCode.", - "sound.option.none": "Aucun", - "sound.option.alert01": "Alerte 01", - "sound.option.alert02": "Alerte 02", - "sound.option.alert03": "Alerte 03", - "sound.option.alert04": "Alerte 04", - "sound.option.alert05": "Alerte 05", - "sound.option.alert06": "Alerte 06", - "sound.option.alert07": "Alerte 07", - "sound.option.alert08": "Alerte 08", - "sound.option.alert09": "Alerte 09", - "sound.option.alert10": "Alerte 10", - "sound.option.bipbop01": "Bip-bop 01", - "sound.option.bipbop02": "Bip-bop 02", - "sound.option.bipbop03": "Bip-bop 03", - "sound.option.bipbop04": "Bip-bop 04", - "sound.option.bipbop05": "Bip-bop 05", - "sound.option.bipbop06": "Bip-bop 06", - "sound.option.bipbop07": "Bip-bop 07", - "sound.option.bipbop08": "Bip-bop 08", - "sound.option.bipbop09": "Bip-bop 09", - "sound.option.bipbop10": "Bip-bop 10", - "sound.option.staplebops01": "Staplebops 01", - "sound.option.staplebops02": "Staplebops 02", - "sound.option.staplebops03": "Staplebops 03", - "sound.option.staplebops04": "Staplebops 04", - "sound.option.staplebops05": "Staplebops 05", - "sound.option.staplebops06": "Staplebops 06", - "sound.option.staplebops07": "Staplebops 07", - "sound.option.nope01": "Non 01", - "sound.option.nope02": "Non 02", - "sound.option.nope03": "Non 03", - "sound.option.nope04": "Non 04", - "sound.option.nope05": "Non 05", - "sound.option.nope06": "Non 06", - "sound.option.nope07": "Non 07", - "sound.option.nope08": "Non 08", - "sound.option.nope09": "Non 09", - "sound.option.nope10": "Non 10", - "sound.option.nope11": "Non 11", - "sound.option.nope12": "Non 12", - "sound.option.yup01": "Oui 01", - "sound.option.yup02": "Oui 02", - "sound.option.yup03": "Oui 03", - "sound.option.yup04": "Oui 04", - "sound.option.yup05": "Oui 05", - "sound.option.yup06": "Oui 06", - "settings.general.notifications.agent.title": "Agent", - "settings.general.notifications.agent.description": - "Afficher une notification système lorsque l'agent a terminé ou nécessite une attention", - "settings.general.notifications.permissions.title": "Permissions", - "settings.general.notifications.permissions.description": - "Afficher une notification système lorsqu'une permission est requise", - "settings.general.notifications.errors.title": "Erreurs", - "settings.general.notifications.errors.description": "Afficher une notification système lorsqu'une erreur se produit", - "settings.general.sounds.agent.title": "Agent", - "settings.general.sounds.agent.description": "Jouer un son lorsque l'agent a terminé ou nécessite une attention", - "settings.general.sounds.permissions.title": "Permissions", - "settings.general.sounds.permissions.description": "Jouer un son lorsqu'une permission est requise", - "settings.general.sounds.errors.title": "Erreurs", - "settings.general.sounds.errors.description": "Jouer un son lorsqu'une erreur se produit", - "settings.shortcuts.title": "Raccourcis clavier", - "settings.shortcuts.reset.button": "Rétablir les défauts", - "settings.shortcuts.reset.toast.title": "Raccourcis réinitialisés", - "settings.shortcuts.reset.toast.description": "Les raccourcis clavier ont été réinitialisés aux valeurs par défaut.", - "settings.shortcuts.conflict.title": "Raccourci déjà utilisé", - "settings.shortcuts.conflict.description": "{{keybind}} est déjà assigné à {{titles}}.", - "settings.shortcuts.unassigned": "Non assigné", - "settings.shortcuts.pressKeys": "Appuyez sur les touches", - "settings.shortcuts.search.placeholder": "Rechercher des raccourcis", - "settings.shortcuts.search.empty": "Aucun raccourci trouvé", - "settings.shortcuts.group.general": "Général", - "settings.shortcuts.group.session": "Session", - "settings.shortcuts.group.navigation": "Navigation", - "settings.shortcuts.group.modelAndAgent": "Modèle et agent", - "settings.shortcuts.group.terminal": "Terminal", - "settings.shortcuts.group.prompt": "Prompt", - "settings.providers.title": "Fournisseurs", - "settings.providers.description": "Les paramètres des fournisseurs seront configurables ici.", - "settings.providers.section.connected": "Fournisseurs connectés", - "settings.providers.connected.empty": "Aucun fournisseur connecté", - "settings.providers.section.popular": "Fournisseurs populaires", - "settings.providers.tag.environment": "Environnement", - "settings.providers.tag.config": "Configuration", - "settings.providers.tag.custom": "Personnalisé", - "settings.providers.tag.other": "Autre", - "settings.models.title": "Modèles", - "settings.models.description": "Les paramètres des modèles seront configurables ici.", - "settings.agents.title": "Agents", - "settings.agents.description": "Les paramètres des agents seront configurables ici.", - "settings.commands.title": "Commandes", - "settings.commands.description": "Les paramètres des commandes seront configurables ici.", - "settings.mcp.title": "MCP", - "settings.mcp.description": "Les paramètres MCP seront configurables ici.", - "settings.permissions.title": "Permissions", - "settings.permissions.description": "Contrôlez les outils que le serveur peut utiliser par défaut.", - "settings.permissions.section.tools": "Outils", - "settings.permissions.toast.updateFailed.title": "Échec de la mise à jour des permissions", - "settings.permissions.action.allow": "Autoriser", - "settings.permissions.action.ask": "Demander", - "settings.permissions.action.deny": "Refuser", - "settings.permissions.tool.read.title": "Lire", - "settings.permissions.tool.read.description": "Lecture d'un fichier (correspond au chemin du fichier)", - "settings.permissions.tool.edit.title": "Modifier", - "settings.permissions.tool.edit.description": - "Modifier des fichiers, y compris les modifications, écritures, patchs et multi-modifications", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "Correspondre aux fichiers utilisant des modèles glob", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": - "Rechercher dans le contenu des fichiers à l'aide d'expressions régulières", - "settings.permissions.tool.list.title": "Lister", - "settings.permissions.tool.list.description": "Lister les fichiers dans un répertoire", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "Exécuter des commandes shell", - "settings.permissions.tool.task.title": "Tâche", - "settings.permissions.tool.task.description": "Lancer des sous-agents", - "settings.permissions.tool.skill.title": "Compétence", - "settings.permissions.tool.skill.description": "Charger une compétence par son nom", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "Exécuter des requêtes de serveur de langage", - "settings.permissions.tool.todowrite.title": "Écrire Todo", - "settings.permissions.tool.todowrite.description": "Mettre à jour la liste de tâches", - "settings.permissions.tool.webfetch.title": "Récupération Web", - "settings.permissions.tool.webfetch.description": "Récupérer le contenu d'une URL", - "settings.permissions.tool.websearch.title": "Recherche Web", - "settings.permissions.tool.websearch.description": "Rechercher sur le web", - "settings.permissions.tool.external_directory.title": "Répertoire externe", - "settings.permissions.tool.external_directory.description": "Accéder aux fichiers en dehors du répertoire du projet", - "settings.permissions.tool.doom_loop.title": "Boucle infernale", - "settings.permissions.tool.doom_loop.description": "Détecter les appels d'outils répétés avec une entrée identique", - "session.delete.failed.title": "Échec de la suppression de la session", - "session.delete.title": "Supprimer la session", - "session.delete.confirm": 'Supprimer la session "{{name}}" ?', - "session.delete.button": "Supprimer la session", - "workspace.new": "Nouvel espace de travail", - "workspace.type.local": "local", - "workspace.type.sandbox": "bac à sable", - "workspace.create.failed.title": "Échec de la création de l'espace de travail", - "workspace.delete.failed.title": "Échec de la suppression de l'espace de travail", - "workspace.resetting.title": "Réinitialisation de l'espace de travail", - "workspace.resetting.description": "Cela peut prendre une minute.", - "workspace.reset.failed.title": "Échec de la réinitialisation de l'espace de travail", - "workspace.reset.success.title": "Espace de travail réinitialisé", - "workspace.reset.success.description": "L'espace de travail correspond maintenant à la branche par défaut.", - "workspace.error.stillPreparing": "L'espace de travail est encore en cours de préparation", - "workspace.status.checking": "Vérification des modifications non fusionnées...", - "workspace.status.error": "Impossible de vérifier le statut git.", - "workspace.status.clean": "Aucune modification non fusionnée détectée.", - "workspace.status.dirty": "Modifications non fusionnées détectées dans cet espace de travail.", - "workspace.delete.title": "Supprimer l'espace de travail", - "workspace.delete.confirm": 'Supprimer l\'espace de travail "{{name}}" ?', - "workspace.delete.button": "Supprimer l'espace de travail", - "workspace.reset.title": "Réinitialiser l'espace de travail", - "workspace.reset.confirm": 'Réinitialiser l\'espace de travail "{{name}}" ?', - "workspace.reset.button": "Réinitialiser l'espace de travail", - "workspace.reset.archived.none": "Aucune session active ne sera archivée.", - "workspace.reset.archived.one": "1 session sera archivée.", - "workspace.reset.archived.many": "{{count}} sessions seront archivées.", - "workspace.reset.note": "Cela réinitialisera l'espace de travail pour correspondre à la branche par défaut.", - "common.open": "Ouvrir", - "dialog.releaseNotes.action.getStarted": "Commencer", - "dialog.releaseNotes.action.next": "Suivant", - "dialog.releaseNotes.action.hideFuture": "Ne plus afficher à l'avenir", - "dialog.releaseNotes.media.alt": "Aperçu de la version", - "toast.project.reloadFailed.title": "Échec du rechargement de {{project}}", - "error.server.invalidConfiguration": "Configuration invalide", - "common.moreCountSuffix": " (+{{count}} de plus)", - "common.time.justNow": "À l'instant", - "common.time.minutesAgo.short": "il y a {{count}}m", - "common.time.hoursAgo.short": "il y a {{count}}h", - "common.time.daysAgo.short": "il y a {{count}}j", - "settings.providers.connected.environmentDescription": "Connecté à partir de vos variables d'environnement", - "settings.providers.custom.description": "Ajouter un fournisseur compatible avec OpenAI via l'URL de base.", - - "app.server.unreachable": "Impossible de joindre {{server}}", - "app.server.retrying": "Nouvelle tentative automatique...", - "app.server.otherServers": "Autres serveurs", - "dialog.server.add.usernamePlaceholder": "nom d'utilisateur", - "dialog.server.add.passwordPlaceholder": "mot de passe", - "server.row.noUsername": "aucun nom d'utilisateur", - "session.review.noVcs.createGit.title": "Créer un dépôt Git", - "session.review.noVcs.createGit.description": "Suivre, examiner et annuler les modifications dans ce projet", - "session.review.noVcs.createGit.actionLoading": "Création du dépôt Git...", - "session.review.noVcs.createGit.action": "Créer un dépôt Git", - "session.todo.progress": "{{done}} tâches sur {{total}} terminées", - "session.question.progress": "{{current}} questions sur {{total}}", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "Explorateur de fichiers", - "session.header.open.fileManager": "Gestionnaire de fichiers", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "Terminal", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "Diagnostics de performance de développement", - "debugBar.na": "n/a", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": - "Dernière transition de route terminée touchant une page de session, mesurée du début du routeur jusqu'au premier affichage après stabilisation.", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "Images par seconde glissantes sur les 5 dernières secondes.", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "Pire temps d'image sur les 5 dernières secondes.", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "Images de plus de 32ms au cours des 5 dernières secondes.", - "debugBar.long.label": "LONG", - "debugBar.long.tip": - "Temps bloqué et nombre de tâches longues au cours des 5 dernières secondes. Tâche max : {{max}}.", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "Pire délai d'entrée observé au cours des 5 dernières secondes.", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": - "Durée approximative d'interaction au cours des 5 dernières secondes. Ceci est similaire à INP, pas le INP officiel des Web Vitals.", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "Décalage cumulatif de la mise en page pour la durée de vie actuelle de l'application.", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "Tas JS utilisé vs limite de tas. Chromium uniquement.", - "debugBar.mem.tip": "Tas JS utilisé vs limite de tas. {{used}} sur {{limit}}.", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Maj", - "common.key.meta": "Méta", - "common.key.space": "Espace", - "common.key.backspace": "Retour arrière", - "common.key.enter": "Entrée", - "common.key.tab": "Tab", - "common.key.delete": "Suppr", - "common.key.home": "Début", - "common.key.end": "Fin", - "common.key.pageUp": "Page précédente", - "common.key.pageDown": "Page suivante", - "common.key.insert": "Inser", - "common.unknown": "inconnu", - "error.page.circular": "[Circulaire]", - "error.serverSDK.noServerAvailable": "Aucun serveur disponible", - "error.serverSDK.serverNotAvailable": "Serveur non disponible", - "error.childStore.persistedCacheCreateFailed": "Échec de la création du cache persistant", - "error.childStore.persistedProjectMetadataCreateFailed": - "Échec de la création des métadonnées de projet persistantes", - "error.childStore.persistedProjectIconCreateFailed": "Échec de la création de l'icône de projet persistante", - "error.childStore.storeCreateFailed": "Échec de la création du stockage", - "terminal.connectionLost.abnormalClose": "WebSocket fermé anormalement : {{code}}", -} diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts deleted file mode 100644 index ad5dcf5387..0000000000 --- a/packages/app/src/i18n/ja.ts +++ /dev/null @@ -1,856 +0,0 @@ -export const dict = { - "command.category.suggested": "おすすめ", - "command.category.view": "表示", - "command.category.project": "プロジェクト", - "command.category.provider": "プロバイダー", - "command.category.server": "サーバー", - "command.category.session": "セッション", - "command.category.theme": "テーマ", - "command.category.language": "言語", - "command.category.file": "ファイル", - "command.category.context": "コンテキスト", - "command.category.terminal": "ターミナル", - "command.category.model": "モデル", - "command.category.mcp": "MCP", - "command.category.agent": "エージェント", - "command.category.permissions": "権限", - "command.category.workspace": "ワークスペース", - "command.category.settings": "設定", - "theme.scheme.system": "システム", - "theme.scheme.light": "ライト", - "theme.scheme.dark": "ダーク", - "command.sidebar.toggle": "サイドバーの切り替え", - "command.project.open": "プロジェクトを開く", - "command.provider.connect": "プロバイダーに接続", - "command.server.switch": "サーバーの切り替え", - "command.settings.open": "設定を開く", - "command.session.previous": "前のセッション", - "command.session.next": "次のセッション", - "command.session.previous.unseen": "前の未読セッション", - "command.session.next.unseen": "次の未読セッション", - "command.session.archive": "セッションをアーカイブ", - "command.palette": "コマンドパレット", - "command.theme.cycle": "テーマの切り替え", - "command.theme.set": "テーマを使用: {{theme}}", - "command.theme.scheme.cycle": "配色の切り替え", - "command.theme.scheme.set": "配色を使用: {{scheme}}", - "command.language.cycle": "言語の切り替え", - "command.language.set": "言語を使用: {{language}}", - "command.session.new": "新しいセッション", - "command.file.open": "ファイルを開く", - "command.tab.close": "タブを閉じる", - "command.context.addSelection": "選択範囲をコンテキストに追加", - "command.context.addSelection.description": "現在のファイルから選択した行を追加", - "command.input.focus": "入力欄にフォーカス", - "command.terminal.toggle": "ターミナルの切り替え", - "command.fileTree.toggle": "ファイルツリーを切り替え", - "command.review.toggle": "レビューの切り替え", - "command.terminal.new": "新しいターミナル", - "command.terminal.new.description": "新しいターミナルタブを作成", - "command.steps.toggle": "ステップの切り替え", - "command.steps.toggle.description": "現在のメッセージのステップを表示または非表示", - "command.message.previous": "前のメッセージ", - "command.message.previous.description": "前のユーザーメッセージに移動", - "command.message.next": "次のメッセージ", - "command.message.next.description": "次のユーザーメッセージに移動", - "command.model.choose": "モデルを選択", - "command.model.choose.description": "別のモデルを選択", - "command.mcp.toggle": "MCPの切り替え", - "command.mcp.toggle.description": "MCPを切り替える", - "command.agent.cycle": "エージェントの切り替え", - "command.agent.cycle.description": "次のエージェントに切り替え", - "command.agent.cycle.reverse": "エージェントを逆順に切り替え", - "command.agent.cycle.reverse.description": "前のエージェントに切り替え", - "command.model.variant.cycle": "思考レベルの切り替え", - "command.model.variant.cycle.description": "次の思考レベルに切り替え", - "command.prompt.mode.shell": "シェル", - "command.prompt.mode.normal": "プロンプト", - "command.permissions.autoaccept.enable": "権限を自動承認する", - "command.permissions.autoaccept.disable": "権限の自動承認を停止する", - "command.workspace.toggle": "ワークスペースを切り替え", - "command.workspace.toggle.description": "サイドバーでの複数のワークスペースの有効化・無効化", - "command.session.undo": "元に戻す", - "command.session.undo.description": "最後のメッセージを元に戻す", - "command.session.redo": "やり直す", - "command.session.redo.description": "元に戻したメッセージをやり直す", - "command.session.compact": "セッションを圧縮", - "command.session.compact.description": "セッションを要約してコンテキストサイズを削減", - "command.session.fork": "メッセージからフォーク", - "command.session.fork.description": "以前のメッセージから新しいセッションを作成", - "command.session.share": "セッションを共有", - "command.session.share.description": "このセッションを共有しURLをクリップボードにコピー", - "command.session.unshare": "セッションの共有を停止", - "command.session.unshare.description": "このセッションの共有を停止", - "palette.search.placeholder": "ファイル、コマンド、セッションを検索", - "palette.empty": "結果が見つかりません", - "palette.group.commands": "コマンド", - "palette.group.files": "ファイル", - "dialog.provider.search.placeholder": "プロバイダーを検索", - "dialog.provider.empty": "プロバイダーが見つかりません", - "dialog.provider.group.popular": "人気", - "dialog.provider.group.other": "その他", - "dialog.provider.tag.recommended": "推奨", - "dialog.provider.opencode.note": "Claude, GPT, Geminiなどを含む厳選されたモデル", - "dialog.provider.opencode.tagline": "信頼性の高い最適化モデル", - "dialog.provider.opencodeGo.tagline": "すべての人に低価格のサブスクリプション", - "dialog.provider.anthropic.note": "Claude Pro/MaxまたはAPIキーで接続", - "dialog.provider.copilot.note": "CopilotまたはAPIキーで接続", - "dialog.provider.openai.note": "ChatGPT Pro/PlusまたはAPIキーで接続", - "dialog.provider.google.note": "高速で構造化された応答のためのGeminiモデル", - "dialog.provider.openrouter.note": "1つのプロバイダーからすべてのサポートされているモデルにアクセス", - "dialog.provider.vercel.note": "スマートルーターによるAIモデルへの統合アクセス", - "dialog.model.select.title": "モデルを選択", - "dialog.model.search.placeholder": "モデルを検索", - "dialog.model.empty": "モデルが見つかりません", - "dialog.model.manage": "モデルを管理", - "dialog.model.manage.description": "モデルセレクターに表示するモデルをカスタマイズします。", - "dialog.model.manage.provider.toggle": "すべての{{provider}}モデルを切り替え", - "dialog.model.unpaid.freeModels.title": "OpenCodeが提供する無料モデル", - "dialog.model.unpaid.addMore.title": "人気のプロバイダーからモデルを追加", - "dialog.provider.viewAll": "さらにプロバイダーを表示", - "provider.connect.title": "{{provider}}を接続", - "provider.connect.title.anthropicProMax": "Claude Pro/Maxでログイン", - "provider.connect.selectMethod": "{{provider}}のログイン方法を選択してください。", - "provider.connect.method.apiKey": "APIキー", - "provider.connect.status.inProgress": "認証中...", - "provider.connect.status.waiting": "認証を待機中...", - "provider.connect.status.failed": "認証に失敗しました: {{error}}", - "provider.connect.apiKey.description": - "{{provider}}のAPIキーを入力してアカウントを接続し、OpenCodeで{{provider}}モデルを使用します。", - "provider.connect.apiKey.label": "{{provider}} APIキー", - "provider.connect.apiKey.placeholder": "APIキー", - "provider.connect.apiKey.required": "APIキーが必要です", - "provider.connect.opencodeZen.line1": - "OpenCode Zenは、コーディングエージェント向けに最適化された信頼性の高いモデルへのアクセスを提供します。", - "provider.connect.opencodeZen.line2": "1つのAPIキーで、Claude、GPT、Gemini、GLMなどのモデルにアクセスできます。", - "provider.connect.opencodeZen.visit.prefix": " ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " にアクセスしてAPIキーを取得してください。", - "provider.connect.oauth.code.visit.prefix": " ", - "provider.connect.oauth.code.visit.link": "このリンク", - "provider.connect.oauth.code.visit.suffix": - " にアクセスして認証コードを取得し、アカウントを接続してOpenCodeで{{provider}}モデルを使用してください。", - "provider.connect.oauth.code.label": "{{method}} 認証コード", - "provider.connect.oauth.code.placeholder": "認証コード", - "provider.connect.oauth.code.required": "認証コードが必要です", - "provider.connect.oauth.code.invalid": "無効な認証コード", - "provider.connect.oauth.auto.visit.prefix": " ", - "provider.connect.oauth.auto.visit.link": "このリンク", - "provider.connect.oauth.auto.visit.suffix": - " にアクセスし、以下のコードを入力してアカウントを接続し、OpenCodeで{{provider}}モデルを使用してください。", - "provider.connect.oauth.auto.confirmationCode": "確認コード", - "provider.connect.toast.connected.title": "{{provider}}が接続されました", - "provider.connect.toast.connected.description": "{{provider}}モデルが使用可能になりました。", - "provider.custom.title": "カスタムプロバイダー", - "provider.custom.description.prefix": "OpenAI互換のプロバイダーを設定します。詳細は", - "provider.custom.description.link": "プロバイダー設定ドキュメント", - "provider.custom.description.suffix": "をご覧ください。", - "provider.custom.field.providerID.label": "プロバイダーID", - "provider.custom.field.providerID.placeholder": "myprovider", - "provider.custom.field.providerID.description": "小文字、数字、ハイフン、アンダースコア", - "provider.custom.field.name.label": "表示名", - "provider.custom.field.name.placeholder": "My AI Provider", - "provider.custom.field.baseURL.label": "ベースURL", - "provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1", - "provider.custom.field.apiKey.label": "APIキー", - "provider.custom.field.apiKey.placeholder": "APIキー", - "provider.custom.field.apiKey.description": "オプション。ヘッダーで認証を管理する場合は空のままにしてください。", - "provider.custom.models.label": "モデル", - "provider.custom.models.id.label": "ID", - "provider.custom.models.id.placeholder": "model-id", - "provider.custom.models.name.label": "名前", - "provider.custom.models.name.placeholder": "表示名", - "provider.custom.models.remove": "モデルを削除", - "provider.custom.models.add": "モデルを追加", - "provider.custom.headers.label": "ヘッダー (オプション)", - "provider.custom.headers.key.label": "ヘッダー", - "provider.custom.headers.key.placeholder": "Header-Name", - "provider.custom.headers.value.label": "値", - "provider.custom.headers.value.placeholder": "value", - "provider.custom.headers.remove": "ヘッダーを削除", - "provider.custom.headers.add": "ヘッダーを追加", - "provider.custom.error.providerID.required": "プロバイダーIDが必要です", - "provider.custom.error.providerID.format": "小文字、数字、ハイフン、アンダースコアを使用してください", - "provider.custom.error.providerID.exists": "そのプロバイダーIDは既に存在します", - "provider.custom.error.name.required": "表示名が必要です", - "provider.custom.error.baseURL.required": "ベースURLが必要です", - "provider.custom.error.baseURL.format": "http:// または https:// で始まる必要があります", - "provider.custom.error.required": "必須", - "provider.custom.error.duplicate": "重複", - "provider.disconnect.toast.disconnected.title": "{{provider}}が切断されました", - "provider.disconnect.toast.disconnected.description": "{{provider}}のモデルは利用できなくなりました。", - "model.tag.free": "無料", - "model.tag.latest": "最新", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "テキスト", - "model.input.image": "画像", - "model.input.audio": "音声", - "model.input.video": "動画", - "model.input.pdf": "pdf", - "model.tooltip.allows": "対応: {{inputs}}", - "model.tooltip.reasoning.allowed": "推論を許可", - "model.tooltip.reasoning.none": "推論なし", - "model.tooltip.context": "コンテキスト上限 {{limit}}", - "common.search.placeholder": "検索", - "common.goBack": "戻る", - "common.goForward": "進む", - "common.loading": "読み込み中", - "common.loading.ellipsis": "...", - "common.cancel": "キャンセル", - "common.connect": "接続", - "common.disconnect": "切断", - "common.continue": "送信", - "common.submit": "送信", - "common.save": "保存", - "common.saving": "保存中...", - "common.default": "デフォルト", - "common.attachment": "添付ファイル", - "prompt.placeholder.shell": "シェルコマンドを入力... {{example}}", - "prompt.placeholder.normal": '何でも聞いてください... "{{example}}"', - "prompt.placeholder.simple": "何でも聞いてください...", - "prompt.placeholder.summarizeComments": "コメントを要約…", - "prompt.placeholder.summarizeComment": "コメントを要約…", - "prompt.mode.shell": "シェル", - "prompt.mode.normal": "プロンプト", - "prompt.mode.shell.exit": "escで終了", - "prompt.example.1": "コードベースのTODOを修正", - "prompt.example.2": "このプロジェクトの技術スタックは何ですか?", - "prompt.example.3": "壊れたテストを修正", - "prompt.example.4": "認証の仕組みを説明して", - "prompt.example.5": "セキュリティの脆弱性を見つけて修正", - "prompt.example.6": "ユーザーサービスのユニットテストを追加", - "prompt.example.7": "この関数を読みやすくリファクタリング", - "prompt.example.8": "このエラーはどういう意味ですか?", - "prompt.example.9": "この問題のデバッグを手伝って", - "prompt.example.10": "APIドキュメントを生成", - "prompt.example.11": "データベースクエリを最適化", - "prompt.example.12": "入力バリデーションを追加", - "prompt.example.13": "〜の新しいコンポーネントを作成", - "prompt.example.14": "このプロジェクトをデプロイするには?", - "prompt.example.15": "ベストプラクティスの観点でコードをレビュー", - "prompt.example.16": "この関数にエラーハンドリングを追加", - "prompt.example.17": "この正規表現パターンを説明して", - "prompt.example.18": "これをTypeScriptに変換", - "prompt.example.19": "コードベース全体にログを追加", - "prompt.example.20": "古い依存関係はどれですか?", - "prompt.example.21": "マイグレーションスクリプトの作成を手伝って", - "prompt.example.22": "このエンドポイントにキャッシュを実装", - "prompt.example.23": "このリストにページネーションを追加", - "prompt.example.24": "〜のCLIコマンドを作成", - "prompt.example.25": "ここでは環境変数はどう機能しますか?", - "prompt.popover.emptyResults": "一致する結果がありません", - "prompt.popover.emptyCommands": "一致するコマンドがありません", - "prompt.dropzone.label": "画像、PDF、またはテキストファイルをここにドロップしてください", - "prompt.dropzone.file.label": "ドロップして@メンションファイルを追加", - "prompt.slash.badge.custom": "カスタム", - "prompt.slash.badge.skill": "スキル", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "アクティブ", - "prompt.context.includeActiveFile": "アクティブなファイルを含める", - "prompt.context.removeActiveFile": "コンテキストからアクティブなファイルを削除", - "prompt.context.removeFile": "コンテキストからファイルを削除", - "prompt.action.attachFile": "ファイルを添付", - "prompt.attachment.remove": "添付ファイルを削除", - "prompt.action.send": "送信", - "prompt.action.stop": "停止", - "prompt.toast.pasteUnsupported.title": "サポートされていない添付ファイル", - "prompt.toast.pasteUnsupported.description": "画像、PDF、またはテキストファイルのみ添付できます。", - "prompt.toast.modelAgentRequired.title": "エージェントとモデルを選択", - "prompt.toast.modelAgentRequired.description": "プロンプトを送信する前にエージェントとモデルを選択してください。", - "prompt.toast.worktreeCreateFailed.title": "ワークツリーの作成に失敗しました", - "prompt.toast.sessionCreateFailed.title": "セッションの作成に失敗しました", - "prompt.toast.shellSendFailed.title": "シェルコマンドの送信に失敗しました", - "prompt.toast.commandSendFailed.title": "コマンドの送信に失敗しました", - "prompt.toast.promptSendFailed.title": "プロンプトの送信に失敗しました", - "prompt.toast.promptSendFailed.description": "セッションを取得できませんでした", - "dialog.mcp.title": "MCP", - "dialog.mcp.description": "{{total}}個中{{enabled}}個が有効", - "dialog.mcp.empty": "MCPが設定されていません", - "dialog.lsp.empty": "ファイルタイプから自動検出されたLSP", - "dialog.plugins.empty": "opencode.jsonで設定されたプラグイン", - "mcp.status.connected": "接続済み", - "mcp.status.failed": "失敗", - "mcp.status.needs_auth": "認証が必要", - "mcp.auth.clickToAuthenticate": "クリックして認証", - "mcp.status.disabled": "無効", - "dialog.fork.empty": "フォーク元のメッセージがありません", - "dialog.directory.search.placeholder": "フォルダを検索", - "dialog.directory.empty": "フォルダが見つかりません", - "dialog.directory.action.selectFile": "ファイルを選択", - "dialog.directory.action.selectFolder": "フォルダを選択", - "dialog.directory.root": "ルート", - "dialog.directory.parent": "親フォルダ", - "dialog.directory.readError": "このフォルダを読み取れません", - "dialog.server.title": "サーバー", - "dialog.server.description": "このアプリが接続するOpenCodeサーバーを切り替えます。", - "dialog.server.search.placeholder": "サーバーを検索", - "dialog.server.empty": "サーバーはまだありません", - "dialog.server.add.title": "サーバーを追加", - "dialog.server.add.url": "サーバーURL", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "サーバーに接続できませんでした", - "dialog.server.add.checking": "確認中...", - "dialog.server.add.button": "サーバーを追加", - "dialog.server.add.name": "サーバー名 (オプション)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "ユーザー名 (オプション)", - "dialog.server.add.password": "パスワード (オプション)", - "dialog.server.edit.title": "サーバーを編集", - "dialog.server.default.title": "デフォルトサーバー", - "dialog.server.default.description": - "ローカルサーバーを起動する代わりに、アプリ起動時にこのサーバーに接続します。再起動が必要です。", - "dialog.server.default.none": "サーバーが選択されていません", - "dialog.server.default.set": "現在のサーバーをデフォルトに設定", - "dialog.server.default.clear": "クリア", - "dialog.server.action.remove": "サーバーを削除", - "dialog.server.menu.edit": "編集", - "dialog.server.menu.default": "デフォルトに設定", - "dialog.server.menu.defaultRemove": "デフォルト設定を解除", - "dialog.server.menu.delete": "削除", - "dialog.server.current": "現在のサーバー", - "dialog.server.status.default": "デフォルト", - "dialog.project.edit.title": "プロジェクトを編集", - "dialog.project.edit.name": "名前", - "dialog.project.edit.icon": "アイコン", - "dialog.project.edit.icon.alt": "プロジェクトアイコン", - "dialog.project.edit.icon.hint": "クリックまたは画像をドラッグ", - "dialog.project.edit.icon.recommended": "推奨: 128x128px", - "dialog.project.edit.color": "色", - "dialog.project.edit.color.select": "{{color}}の色を選択", - "dialog.project.edit.worktree.startup": "ワークスペース起動スクリプト", - "dialog.project.edit.worktree.startup.description": - "新しいワークスペース (ワークツリー) を作成した後に実行されます。", - "dialog.project.edit.worktree.startup.placeholder": "例: bun install", - "context.breakdown.title": "コンテキストの内訳", - "context.breakdown.note": '入力トークンのおおよその内訳です。"その他"にはツールの定義やオーバーヘッドが含まれます。', - "context.breakdown.system": "システム", - "context.breakdown.user": "ユーザー", - "context.breakdown.assistant": "アシスタント", - "context.breakdown.tool": "ツール呼び出し", - "context.breakdown.other": "その他", - "context.systemPrompt.title": "システムプロンプト", - "context.rawMessages.title": "生のメッセージ", - "context.stats.session": "セッション", - "context.stats.messages": "メッセージ", - "context.stats.provider": "プロバイダー", - "context.stats.model": "モデル", - "context.stats.limit": "コンテキスト制限", - "context.stats.totalTokens": "総トークン数", - "context.stats.usage": "使用量", - "context.stats.inputTokens": "入力トークン", - "context.stats.outputTokens": "出力トークン", - "context.stats.reasoningTokens": "推論トークン", - "context.stats.cacheTokens": "キャッシュトークン (読込/書込)", - "context.stats.userMessages": "ユーザーメッセージ", - "context.stats.assistantMessages": "アシスタントメッセージ", - "context.stats.totalCost": "総コスト", - "context.stats.sessionCreated": "セッション作成日時", - "context.stats.lastActivity": "最終アクティビティ", - "context.usage.tokens": "トークン", - "context.usage.usage": "使用量", - "context.usage.cost": "コスト", - "context.usage.clickToView": "クリックしてコンテキストを表示", - "context.usage.view": "コンテキスト使用量を表示", - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - "toast.language.title": "言語", - "toast.language.description": "{{language}}に切り替えました", - "toast.theme.title": "テーマが切り替わりました", - "toast.scheme.title": "配色", - "toast.workspace.enabled.title": "ワークスペースが有効になりました", - "toast.workspace.enabled.description": "サイドバーに複数のワークツリーが表示されます", - "toast.workspace.disabled.title": "ワークスペースが無効になりました", - "toast.workspace.disabled.description": "サイドバーにはメインのワークツリーのみが表示されます", - "toast.permissions.autoaccept.on.title": "権限を自動承認しています", - "toast.permissions.autoaccept.on.description": "権限の要求は自動的に承認されます", - "toast.permissions.autoaccept.off.title": "権限の自動承認を停止しました", - "toast.permissions.autoaccept.off.description": "権限の要求には承認が必要になります", - "toast.model.none.title": "モデルが選択されていません", - "toast.model.none.description": "このセッションを要約するにはプロバイダーを接続してください", - "toast.file.loadFailed.title": "ファイルの読み込みに失敗しました", - "toast.file.listFailed.title": "ファイル一覧の取得に失敗しました", - "toast.context.noLineSelection.title": "行が選択されていません", - "toast.context.noLineSelection.description": "まずファイルタブで行範囲を選択してください。", - "toast.session.share.copyFailed.title": "URLのコピーに失敗しました", - "toast.session.share.success.title": "セッションを共有しました", - "toast.session.share.success.description": "共有URLをクリップボードにコピーしました!", - "toast.session.share.failed.title": "セッションの共有に失敗しました", - "toast.session.share.failed.description": "セッションの共有中にエラーが発生しました", - "toast.session.unshare.success.title": "セッションの共有を解除しました", - "toast.session.unshare.success.description": "セッションの共有解除に成功しました!", - "toast.session.unshare.failed.title": "セッションの共有解除に失敗しました", - "toast.session.unshare.failed.description": "セッションの共有解除中にエラーが発生しました", - "toast.session.listFailed.title": "{{project}}のセッション読み込みに失敗しました", - "toast.update.title": "アップデートが利用可能です", - "toast.update.description": "OpenCodeの新しいバージョン ({{version}}) がインストール可能です。", - "toast.update.action.installRestart": "インストールして再起動", - "toast.update.action.notYet": "今はしない", - "error.page.title": "問題が発生しました", - "error.page.description": "アプリケーションの読み込み中にエラーが発生しました。", - "error.page.details.label": "エラー詳細", - "error.page.action.restart": "再起動", - "error.page.action.report": "エラーを報告", - "error.page.action.reported": "エラーを報告しました", - "error.page.action.checking": "確認中...", - "error.page.action.checkUpdates": "アップデートを確認", - "error.page.action.updateTo": "{{version}}にアップデート", - "error.page.report.prefix": "このエラーをOpenCodeチームに報告してください: ", - "error.page.report.discord": "Discord", - "error.page.version": "バージョン: {{version}}", - "error.dev.rootNotFound": - "ルート要素が見つかりません。index.htmlに追加するのを忘れていませんか?またはid属性のスペルが間違っていませんか?", - "error.serverSync.connectFailed": "サーバーに接続できませんでした。`{{url}}`でサーバーが実行されていますか?", - "directory.error.invalidUrl": "URL内のディレクトリが無効です。", - "error.chain.unknown": "不明なエラー", - "error.chain.causedBy": "原因:", - "error.chain.apiError": "APIエラー", - "error.chain.status": "ステータス: {{status}}", - "error.chain.retryable": "再試行可能: {{retryable}}", - "error.chain.responseBody": "レスポンス本文:\n{{body}}", - "error.chain.didYouMean": "もしかして: {{suggestions}}", - "error.chain.modelNotFound": "モデルが見つかりません: {{provider}}/{{model}}", - "error.chain.checkConfig": "config (opencode.json) のプロバイダー/モデル名を確認してください", - "error.chain.mcpFailed": 'MCPサーバー "{{name}}" が失敗しました。注意: OpenCodeはまだMCP認証をサポートしていません。', - "error.chain.providerAuthFailed": "プロバイダー認証に失敗しました ({{provider}}): {{message}}", - "error.chain.providerInitFailed": - 'プロバイダー "{{provider}}" の初期化に失敗しました。認証情報と設定を確認してください。', - "error.chain.configJsonInvalid": "{{path}} の設定ファイルは有効なJSON(C)ではありません", - "error.chain.configJsonInvalidWithMessage": "{{path}} の設定ファイルは有効なJSON(C)ではありません: {{message}}", - "error.chain.configDirectoryTypo": - '{{path}} 内のディレクトリ "{{dir}}" は無効です。"{{suggestion}}" に名前を変更するか削除してください。これはよくあるタイプミスです。', - "error.chain.configFrontmatterError": "{{path}} のフロントマターの解析に失敗しました:\n{{message}}", - "error.chain.configInvalid": "{{path}} の設定ファイルが無効です", - "error.chain.configInvalidWithMessage": "{{path}} の設定ファイルが無効です: {{message}}", - "notification.permission.title": "権限が必要です", - "notification.permission.description": "{{projectName}} の {{sessionTitle}} が権限を必要としています", - "notification.question.title": "質問", - "notification.question.description": "{{projectName}} の {{sessionTitle}} から質問があります", - "notification.action.goToSession": "セッションへ移動", - "notification.session.responseReady.title": "応答の準備ができました", - "notification.session.error.title": "セッションエラー", - "notification.session.error.fallbackDescription": "エラーが発生しました", - "home.recentProjects": "最近のプロジェクト", - "home.empty.title": "最近のプロジェクトはありません", - "home.empty.description": "ローカルプロジェクトを開いて始めましょう", - "session.tab.session": "セッション", - "session.tab.review": "レビュー", - "session.tab.context": "コンテキスト", - "session.panel.reviewAndFiles": "レビューとファイル", - "session.review.filesChanged": "{{count}} ファイル変更", - "session.review.change.one": "変更", - "session.review.change.other": "変更", - "session.review.loadingChanges": "変更を読み込み中...", - "session.review.empty": "このセッションでの変更はまだありません", - "session.review.noVcs": "Gitバージョン管理システムが検出されないため、変更は表示されません", - "session.review.noSnapshot": "設定でスナップショット追跡が無効になっているため、セッションの変更は利用できません", - "session.review.noChanges": "変更なし", - "session.files.selectToOpen": "開くファイルを選択", - "session.files.all": "すべてのファイル", - "session.files.empty": "ファイルなし", - "session.files.binaryContent": "バイナリファイル(内容を表示できません)", - "session.messages.renderEarlier": "以前のメッセージを表示", - "session.messages.loadingEarlier": "以前のメッセージを読み込み中...", - "session.messages.loadEarlier": "以前のメッセージを読み込む", - "session.messages.loading": "メッセージを読み込み中...", - "session.messages.jumpToLatest": "最新へジャンプ", - "session.context.addToContext": "{{selection}}をコンテキストに追加", - "session.todo.title": "ToDo", - "session.todo.collapse": "折りたたむ", - "session.todo.expand": "展開", - "session.followupDock.summary.one": "{{count}} 件のメッセージが待機中", - "session.followupDock.summary.other": "{{count}} 件のメッセージが待機中", - "session.followupDock.sendNow": "今すぐ送信", - "session.followupDock.edit": "編集", - "session.followupDock.collapse": "待機中のメッセージを折りたたむ", - "session.followupDock.expand": "待機中のメッセージを展開", - "session.revertDock.summary.one": "{{count}} 件のロールバックされたメッセージ", - "session.revertDock.summary.other": "{{count}} 件のロールバックされたメッセージ", - "session.revertDock.collapse": "ロールバックされたメッセージを折りたたむ", - "session.revertDock.expand": "ロールバックされたメッセージを展開", - "session.revertDock.restore": "メッセージを復元", - "session.new.title": "何でも作る", - "session.new.worktree.main": "メインブランチ", - "session.new.worktree.mainWithBranch": "メインブランチ ({{branch}})", - "session.new.worktree.create": "新しいワークツリーを作成", - "session.new.lastModified": "最終更新", - "session.header.search.placeholder": "{{project}}を検索", - "session.header.searchFiles": "ファイルを検索", - "session.header.openIn": "で開く", - "session.header.open.action": "{{app}}を開く", - "session.header.open.ariaLabel": "{{app}}で開く", - "session.header.open.menu": "開くオプション", - "session.header.open.copyPath": "パスをコピー", - "status.popover.trigger": "ステータス", - "status.popover.ariaLabel": "サーバー設定", - "status.popover.tab.servers": "サーバー", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "プラグイン", - "status.popover.action.manageServers": "サーバーを管理", - "session.share.popover.title": "ウェブで公開", - "session.share.popover.description.shared": - "このセッションはウェブで公開されています。リンクを知っている人なら誰でもアクセスできます。", - "session.share.popover.description.unshared": - "セッションをウェブで公開します。リンクを知っている人なら誰でもアクセスできるようになります。", - "session.share.action.share": "共有", - "session.share.action.publish": "公開", - "session.share.action.publishing": "公開中...", - "session.share.action.unpublish": "非公開にする", - "session.share.action.unpublishing": "非公開にしています...", - "session.share.action.view": "表示", - "session.share.copy.copied": "コピーしました", - "session.share.copy.copyLink": "リンクをコピー", - "lsp.tooltip.none": "LSPサーバーなし", - "lsp.label.connected": "{{count}} LSP", - "prompt.loading": "プロンプトを読み込み中...", - "terminal.loading": "ターミナルを読み込み中...", - "terminal.title": "ターミナル", - "terminal.title.numbered": "ターミナル {{number}}", - "terminal.close": "ターミナルを閉じる", - "terminal.connectionLost.title": "接続が失われました", - "terminal.connectionLost.description": - "ターミナルの接続が中断されました。これはサーバーが再起動したときに発生することがあります。", - "common.closeTab": "タブを閉じる", - "common.dismiss": "閉じる", - "common.requestFailed": "リクエスト失敗", - "common.moreOptions": "その他のオプション", - "common.learnMore": "詳細", - "common.rename": "名前変更", - "common.reset": "リセット", - "common.archive": "アーカイブ", - "common.delete": "削除", - "common.close": "閉じる", - "common.edit": "編集", - "common.loadMore": "さらに読み込む", - "common.key.esc": "ESC", - "sidebar.menu.toggle": "メニューを切り替え", - "sidebar.nav.projectsAndSessions": "プロジェクトとセッション", - "sidebar.settings": "設定", - "sidebar.help": "ヘルプ", - "sidebar.workspaces.enable": "ワークスペースを有効化", - "sidebar.workspaces.disable": "ワークスペースを無効化", - "sidebar.gettingStarted.title": "はじめに", - "sidebar.gettingStarted.line1": "OpenCodeには無料モデルが含まれているため、すぐに開始できます。", - "sidebar.gettingStarted.line2": "プロバイダーを接続して、Claude、GPT、Geminiなどのモデルを使用できます。", - "sidebar.project.recentSessions": "最近のセッション", - "sidebar.project.viewAllSessions": "すべてのセッションを表示", - "sidebar.project.clearNotifications": "通知をクリア", - "app.name.desktop": "OpenCode Desktop", - "settings.section.desktop": "デスクトップ", - "settings.section.server": "サーバー", - "settings.tab.general": "一般", - "settings.tab.shortcuts": "ショートカット", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "WSL連携", - "settings.desktop.wsl.description": "WindowsのWSL環境でOpenCodeサーバーを実行します。", - "settings.general.section.appearance": "外観", - "settings.general.section.notifications": "システム通知", - "settings.general.section.updates": "アップデート", - "settings.general.section.sounds": "効果音", - "settings.general.section.feed": "フィード", - "settings.general.section.display": "ディスプレイ", - "settings.general.row.language.title": "言語", - "settings.general.row.language.description": "OpenCodeの表示言語を変更します", - "settings.general.row.appearance.title": "外観", - "settings.general.row.appearance.description": "デバイスでのOpenCodeの表示をカスタマイズします", - "settings.general.row.colorScheme.title": "配色", - "settings.general.row.colorScheme.description": "OpenCodeがシステム、ライト、またはダークテーマに従うかを選択します", - "settings.general.row.theme.title": "テーマ", - "settings.general.row.theme.description": "OpenCodeのテーマをカスタマイズします。", - "settings.general.row.font.title": "コードフォント", - "settings.general.row.font.description": "コードブロックで使用するフォントをカスタマイズします", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "UIフォント", - "settings.general.row.uiFont.description": "インターフェース全体で使用するフォントをカスタマイズします", - "settings.general.row.followup.title": "フォローアップの動作", - "settings.general.row.followup.description": - "フォローアッププロンプトを即座に実行するか、キューで待機させるかを選択します", - "settings.general.row.followup.option.queue": "キューに追加", - "settings.general.row.followup.option.steer": "即座に実行 (Steer)", - "settings.general.row.reasoningSummaries.title": "推論の要約を表示", - "settings.general.row.reasoningSummaries.description": "タイムラインにモデルの推論の要約を表示します", - "settings.general.row.shellToolPartsExpanded.title": "shell ツールパーツを展開", - "settings.general.row.shellToolPartsExpanded.description": - "タイムラインで shell ツールパーツをデフォルトで展開して表示します", - "settings.general.row.editToolPartsExpanded.title": "edit ツールパーツを展開", - "settings.general.row.editToolPartsExpanded.description": - "タイムラインで edit、write、patch ツールパーツをデフォルトで展開して表示します", - "settings.general.row.wayland.title": "ネイティブWaylandを使用", - "settings.general.row.wayland.description": "WaylandでのX11フォールバックを無効にします。再起動が必要です。", - "settings.general.row.wayland.tooltip": - "リフレッシュレートが混在するモニターを使用しているLinuxでは、ネイティブWaylandの方が安定する場合があります。", - "settings.general.row.releaseNotes.title": "リリースノート", - "settings.general.row.releaseNotes.description": "アップデート後に「新機能」ポップアップを表示", - "settings.updates.row.startup.title": "起動時にアップデートを確認", - "settings.updates.row.startup.description": "OpenCode の起動時に自動でアップデートを確認します", - "settings.updates.row.check.title": "アップデートを確認", - "settings.updates.row.check.description": "手動でアップデートを確認し、利用可能ならインストールします", - "settings.updates.action.checkNow": "今すぐ確認", - "settings.updates.action.checking": "確認中...", - "settings.updates.toast.latest.title": "最新です", - "settings.updates.toast.latest.description": "OpenCode は最新バージョンです。", - "sound.option.none": "なし", - "sound.option.alert01": "アラート 01", - "sound.option.alert02": "アラート 02", - "sound.option.alert03": "アラート 03", - "sound.option.alert04": "アラート 04", - "sound.option.alert05": "アラート 05", - "sound.option.alert06": "アラート 06", - "sound.option.alert07": "アラート 07", - "sound.option.alert08": "アラート 08", - "sound.option.alert09": "アラート 09", - "sound.option.alert10": "アラート 10", - "sound.option.bipbop01": "ビップボップ 01", - "sound.option.bipbop02": "ビップボップ 02", - "sound.option.bipbop03": "ビップボップ 03", - "sound.option.bipbop04": "ビップボップ 04", - "sound.option.bipbop05": "ビップボップ 05", - "sound.option.bipbop06": "ビップボップ 06", - "sound.option.bipbop07": "ビップボップ 07", - "sound.option.bipbop08": "ビップボップ 08", - "sound.option.bipbop09": "ビップボップ 09", - "sound.option.bipbop10": "ビップボップ 10", - "sound.option.staplebops01": "ステープルボップス 01", - "sound.option.staplebops02": "ステープルボップス 02", - "sound.option.staplebops03": "ステープルボップス 03", - "sound.option.staplebops04": "ステープルボップス 04", - "sound.option.staplebops05": "ステープルボップス 05", - "sound.option.staplebops06": "ステープルボップス 06", - "sound.option.staplebops07": "ステープルボップス 07", - "sound.option.nope01": "いいえ 01", - "sound.option.nope02": "いいえ 02", - "sound.option.nope03": "いいえ 03", - "sound.option.nope04": "いいえ 04", - "sound.option.nope05": "いいえ 05", - "sound.option.nope06": "いいえ 06", - "sound.option.nope07": "いいえ 07", - "sound.option.nope08": "いいえ 08", - "sound.option.nope09": "いいえ 09", - "sound.option.nope10": "いいえ 10", - "sound.option.nope11": "いいえ 11", - "sound.option.nope12": "いいえ 12", - "sound.option.yup01": "はい 01", - "sound.option.yup02": "はい 02", - "sound.option.yup03": "はい 03", - "sound.option.yup04": "はい 04", - "sound.option.yup05": "はい 05", - "sound.option.yup06": "はい 06", - "settings.general.notifications.agent.title": "エージェント", - "settings.general.notifications.agent.description": - "エージェントが完了したか、注意が必要な場合にシステム通知を表示します", - "settings.general.notifications.permissions.title": "権限", - "settings.general.notifications.permissions.description": "権限が必要な場合にシステム通知を表示します", - "settings.general.notifications.errors.title": "エラー", - "settings.general.notifications.errors.description": "エラーが発生した場合にシステム通知を表示します", - "settings.general.sounds.agent.title": "エージェント", - "settings.general.sounds.agent.description": "エージェントが完了したか、注意が必要な場合に音を再生します", - "settings.general.sounds.permissions.title": "権限", - "settings.general.sounds.permissions.description": "権限が必要な場合に音を再生します", - "settings.general.sounds.errors.title": "エラー", - "settings.general.sounds.errors.description": "エラーが発生した場合に音を再生します", - "settings.shortcuts.title": "キーボードショートカット", - "settings.shortcuts.reset.button": "デフォルトにリセット", - "settings.shortcuts.reset.toast.title": "ショートカットをリセットしました", - "settings.shortcuts.reset.toast.description": "キーボードショートカットがデフォルトにリセットされました。", - "settings.shortcuts.conflict.title": "ショートカットは既に使用されています", - "settings.shortcuts.conflict.description": "{{keybind}} は既に {{titles}} に割り当てられています。", - "settings.shortcuts.unassigned": "未割り当て", - "settings.shortcuts.pressKeys": "キーを押してください", - "settings.shortcuts.search.placeholder": "ショートカットを検索", - "settings.shortcuts.search.empty": "ショートカットが見つかりません", - "settings.shortcuts.group.general": "一般", - "settings.shortcuts.group.session": "セッション", - "settings.shortcuts.group.navigation": "ナビゲーション", - "settings.shortcuts.group.modelAndAgent": "モデルとエージェント", - "settings.shortcuts.group.terminal": "ターミナル", - "settings.shortcuts.group.prompt": "プロンプト", - "settings.providers.title": "プロバイダー", - "settings.providers.description": "プロバイダー設定はここで構成できます。", - "settings.providers.section.connected": "接続済みプロバイダー", - "settings.providers.connected.empty": "接続済みプロバイダーはありません", - "settings.providers.section.popular": "人気のプロバイダー", - "settings.providers.tag.environment": "環境", - "settings.providers.tag.config": "設定", - "settings.providers.tag.custom": "カスタム", - "settings.providers.tag.other": "その他", - "settings.models.title": "モデル", - "settings.models.description": "モデル設定はここで構成できます。", - "settings.agents.title": "エージェント", - "settings.agents.description": "エージェント設定はここで構成できます。", - "settings.commands.title": "コマンド", - "settings.commands.description": "コマンド設定はここで構成できます。", - "settings.mcp.title": "MCP", - "settings.mcp.description": "MCP設定はここで構成できます。", - "settings.permissions.title": "権限", - "settings.permissions.description": "サーバーがデフォルトで使用できるツールを制御します。", - "settings.permissions.section.tools": "ツール", - "settings.permissions.toast.updateFailed.title": "権限の更新に失敗しました", - "settings.permissions.action.allow": "許可", - "settings.permissions.action.ask": "確認", - "settings.permissions.action.deny": "拒否", - "settings.permissions.tool.read.title": "読み込み", - "settings.permissions.tool.read.description": "ファイルの読み込み (ファイルパスに一致)", - "settings.permissions.tool.edit.title": "編集", - "settings.permissions.tool.edit.description": "ファイルの変更(編集、書き込み、パッチ、複数編集を含む)", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "Globパターンを使用したファイルの一致", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "正規表現を使用したファイル内容の検索", - "settings.permissions.tool.list.title": "リスト", - "settings.permissions.tool.list.description": "ディレクトリ内のファイル一覧表示", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "シェルコマンドの実行", - "settings.permissions.tool.task.title": "タスク", - "settings.permissions.tool.task.description": "サブエージェントの起動", - "settings.permissions.tool.skill.title": "スキル", - "settings.permissions.tool.skill.description": "名前によるスキルの読み込み", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "言語サーバークエリの実行", - "settings.permissions.tool.todowrite.title": "Todo書き込み", - "settings.permissions.tool.todowrite.description": "Todoリストの更新", - "settings.permissions.tool.webfetch.title": "Web取得", - "settings.permissions.tool.webfetch.description": "URLからコンテンツを取得", - "settings.permissions.tool.websearch.title": "Web検索", - "settings.permissions.tool.websearch.description": "ウェブを検索", - "settings.permissions.tool.external_directory.title": "外部ディレクトリ", - "settings.permissions.tool.external_directory.description": "プロジェクトディレクトリ外のファイルへのアクセス", - "settings.permissions.tool.doom_loop.title": "無限ループ", - "settings.permissions.tool.doom_loop.description": "同一入力による繰り返しのツール呼び出しを検出", - "session.delete.failed.title": "セッションの削除に失敗しました", - "session.delete.title": "セッションの削除", - "session.delete.confirm": 'セッション "{{name}}" を削除しますか?', - "session.delete.button": "セッションを削除", - "workspace.new": "新しいワークスペース", - "workspace.type.local": "ローカル", - "workspace.type.sandbox": "サンドボックス", - "workspace.create.failed.title": "ワークスペースの作成に失敗しました", - "workspace.delete.failed.title": "ワークスペースの削除に失敗しました", - "workspace.resetting.title": "ワークスペースをリセット中", - "workspace.resetting.description": "これには少し時間がかかる場合があります。", - "workspace.reset.failed.title": "ワークスペースのリセットに失敗しました", - "workspace.reset.success.title": "ワークスペースをリセットしました", - "workspace.reset.success.description": "ワークスペースはデフォルトブランチと一致しています。", - "workspace.error.stillPreparing": "ワークスペースはまだ準備中です", - "workspace.status.checking": "未マージの変更を確認中...", - "workspace.status.error": "gitステータスを確認できません。", - "workspace.status.clean": "未マージの変更は検出されませんでした。", - "workspace.status.dirty": "このワークスペースで未マージの変更が検出されました。", - "workspace.delete.title": "ワークスペースの削除", - "workspace.delete.confirm": 'ワークスペース "{{name}}" を削除しますか?', - "workspace.delete.button": "ワークスペースを削除", - "workspace.reset.title": "ワークスペースのリセット", - "workspace.reset.confirm": 'ワークスペース "{{name}}" をリセットしますか?', - "workspace.reset.button": "ワークスペースをリセット", - "workspace.reset.archived.none": "アクティブなセッションはアーカイブされません。", - "workspace.reset.archived.one": "1つのセッションがアーカイブされます。", - "workspace.reset.archived.many": "{{count}}個のセッションがアーカイブされます。", - "workspace.reset.note": "これにより、ワークスペースはデフォルトブランチと一致するようにリセットされます。", - "common.open": "開く", - "dialog.releaseNotes.action.getStarted": "始める", - "dialog.releaseNotes.action.next": "次へ", - "dialog.releaseNotes.action.hideFuture": "今後表示しない", - "dialog.releaseNotes.media.alt": "リリースのプレビュー", - "toast.project.reloadFailed.title": "{{project}} の再読み込みに失敗しました", - "error.server.invalidConfiguration": "無効な設定", - "common.moreCountSuffix": " (他 {{count}} 件)", - "common.time.justNow": "たった今", - "common.time.minutesAgo.short": "{{count}} 分前", - "common.time.hoursAgo.short": "{{count}} 時間前", - "common.time.daysAgo.short": "{{count}} 日前", - "settings.providers.connected.environmentDescription": "環境変数から接続されました", - "settings.providers.custom.description": "ベース URL を指定して OpenAI 互換のプロバイダーを追加します。", - - "app.server.unreachable": "{{server}} に到達できませんでした", - "app.server.retrying": "自動的に再試行中...", - "app.server.otherServers": "その他のサーバー", - "dialog.server.add.usernamePlaceholder": "ユーザー名", - "dialog.server.add.passwordPlaceholder": "パスワード", - "server.row.noUsername": "ユーザー名なし", - "session.review.noVcs.createGit.title": "Git リポジトリを作成", - "session.review.noVcs.createGit.description": "このプロジェクトの変更を追跡、レビュー、元に戻す", - "session.review.noVcs.createGit.actionLoading": "Git リポジトリを作成中...", - "session.review.noVcs.createGit.action": "Git リポジトリを作成", - "session.todo.progress": "{{done}} 個中 {{total}} 個の Todo が完了", - "session.question.progress": "{{total}} 問中 {{current}} 問", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "エクスプローラー", - "session.header.open.fileManager": "ファイルマネージャー", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "ターミナル", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "開発パフォーマンス診断", - "debugBar.na": "n/a", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": "セッションページに触れる最後に完了したルート遷移。ルーター開始から安定後の最初の描画まで測定。", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "過去5秒間のローリングフレーム/秒。", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "過去5秒間の最悪フレーム時間。", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "過去5秒間で32msを超えたフレーム。", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "過去5秒間のブロック時間と長時間タスク数。最大タスク: {{max}}。", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "過去5秒間で観測された最悪の入力遅延。", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": - "過去5秒間の概算インタラクション時間。これは INP に似ていますが、公式の Web Vitals INP ではありません。", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "現在のアプリ寿命の累積レイアウトシフト。", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "使用中の JS ヒープ対ヒープ制限。Chromium のみ。", - "debugBar.mem.tip": "使用中の JS ヒープ対ヒープ制限。{{limit}} 中 {{used}}。", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "Space", - "common.key.backspace": "Backspace", - "common.key.enter": "Enter", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "不明", - "error.page.circular": "[循環]", - "error.serverSDK.noServerAvailable": "利用可能なサーバーがありません", - "error.serverSDK.serverNotAvailable": "サーバーが利用できません", - "error.childStore.persistedCacheCreateFailed": "永続キャッシュの作成に失敗しました", - "error.childStore.persistedProjectMetadataCreateFailed": "永続プロジェクトメタデータの作成に失敗しました", - "error.childStore.persistedProjectIconCreateFailed": "永続プロジェクトアイコンの作成に失敗しました", - "error.childStore.storeCreateFailed": "ストアの作成に失敗しました", - "terminal.connectionLost.abnormalClose": "WebSocket が異常終了しました: {{code}}", -} diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts deleted file mode 100644 index 15f1f28013..0000000000 --- a/packages/app/src/i18n/ko.ts +++ /dev/null @@ -1,851 +0,0 @@ -export const dict = { - "command.category.suggested": "추천", - "command.category.view": "보기", - "command.category.project": "프로젝트", - "command.category.provider": "공급자", - "command.category.server": "서버", - "command.category.session": "세션", - "command.category.theme": "테마", - "command.category.language": "언어", - "command.category.file": "파일", - "command.category.context": "컨텍스트", - "command.category.terminal": "터미널", - "command.category.model": "모델", - "command.category.mcp": "MCP", - "command.category.agent": "에이전트", - "command.category.permissions": "권한", - "command.category.workspace": "작업 공간", - "command.category.settings": "설정", - "theme.scheme.system": "시스템", - "theme.scheme.light": "라이트", - "theme.scheme.dark": "다크", - "command.sidebar.toggle": "사이드바 토글", - "command.project.open": "프로젝트 열기", - "command.provider.connect": "공급자 연결", - "command.server.switch": "서버 전환", - "command.settings.open": "설정 열기", - "command.session.previous": "이전 세션", - "command.session.next": "다음 세션", - "command.session.previous.unseen": "이전 읽지 않은 세션", - "command.session.next.unseen": "다음 읽지 않은 세션", - "command.session.archive": "세션 보관", - "command.palette": "명령 팔레트", - "command.theme.cycle": "테마 순환", - "command.theme.set": "테마 사용: {{theme}}", - "command.theme.scheme.cycle": "색상 테마 순환", - "command.theme.scheme.set": "색상 테마 사용: {{scheme}}", - "command.language.cycle": "언어 순환", - "command.language.set": "언어 사용: {{language}}", - "command.session.new": "새 세션", - "command.file.open": "파일 열기", - "command.tab.close": "탭 닫기", - "command.context.addSelection": "선택 영역을 컨텍스트에 추가", - "command.context.addSelection.description": "현재 파일에서 선택한 줄을 추가", - "command.input.focus": "입력창 포커스", - "command.terminal.toggle": "터미널 토글", - "command.fileTree.toggle": "파일 트리 토글", - "command.review.toggle": "검토 토글", - "command.terminal.new": "새 터미널", - "command.terminal.new.description": "새 터미널 탭 생성", - "command.steps.toggle": "단계 토글", - "command.steps.toggle.description": "현재 메시지의 단계 표시/숨기기", - "command.message.previous": "이전 메시지", - "command.message.previous.description": "이전 사용자 메시지로 이동", - "command.message.next": "다음 메시지", - "command.message.next.description": "다음 사용자 메시지로 이동", - "command.model.choose": "모델 선택", - "command.model.choose.description": "다른 모델 선택", - "command.mcp.toggle": "MCP 토글", - "command.mcp.toggle.description": "MCP 토글", - "command.agent.cycle": "에이전트 순환", - "command.agent.cycle.description": "다음 에이전트로 전환", - "command.agent.cycle.reverse": "에이전트 역순환", - "command.agent.cycle.reverse.description": "이전 에이전트로 전환", - "command.model.variant.cycle": "생각 수준 순환", - "command.model.variant.cycle.description": "다음 생각 수준으로 전환", - "command.prompt.mode.shell": "셸", - "command.prompt.mode.normal": "프롬프트", - "command.permissions.autoaccept.enable": "권한 자동 수락", - "command.permissions.autoaccept.disable": "권한 자동 수락 중지", - "command.workspace.toggle": "작업 공간 전환", - "command.workspace.toggle.description": "사이드바에서 다중 작업 공간 활성화 또는 비활성화", - "command.session.undo": "실행 취소", - "command.session.undo.description": "마지막 메시지 실행 취소", - "command.session.redo": "다시 실행", - "command.session.redo.description": "마지막 실행 취소된 메시지 다시 실행", - "command.session.compact": "세션 압축", - "command.session.compact.description": "컨텍스트 크기를 줄이기 위해 세션 요약", - "command.session.fork": "메시지에서 분기", - "command.session.fork.description": "이전 메시지에서 새 세션 생성", - "command.session.share": "세션 공유", - "command.session.share.description": "이 세션을 공유하고 URL을 클립보드에 복사", - "command.session.unshare": "세션 공유 중지", - "command.session.unshare.description": "이 세션 공유 중지", - "palette.search.placeholder": "파일, 명령어 및 세션 검색", - "palette.empty": "결과 없음", - "palette.group.commands": "명령어", - "palette.group.files": "파일", - "dialog.provider.search.placeholder": "공급자 검색", - "dialog.provider.empty": "공급자 없음", - "dialog.provider.group.popular": "인기", - "dialog.provider.group.other": "기타", - "dialog.provider.tag.recommended": "추천", - "dialog.provider.opencode.note": "Claude, GPT, Gemini 등을 포함한 엄선된 모델", - "dialog.provider.opencode.tagline": "신뢰할 수 있는 최적화 모델", - "dialog.provider.opencodeGo.tagline": "모두를 위한 저렴한 구독", - "dialog.provider.anthropic.note": "Claude Pro/Max 또는 API 키로 연결", - "dialog.provider.copilot.note": "Copilot 또는 API 키로 연결", - "dialog.provider.openai.note": "ChatGPT Pro/Plus 또는 API 키로 연결", - "dialog.provider.google.note": "빠르고 구조화된 응답을 위한 Gemini 모델", - "dialog.provider.openrouter.note": "모든 지원 모델을 단일 공급자에서 액세스", - "dialog.provider.vercel.note": "스마트 라우팅을 통한 AI 모델 통합 액세스", - "dialog.model.select.title": "모델 선택", - "dialog.model.search.placeholder": "모델 검색", - "dialog.model.empty": "모델 결과 없음", - "dialog.model.manage": "모델 관리", - "dialog.model.manage.description": "모델 선택기에 표시할 모델 사용자 지정", - "dialog.model.manage.provider.toggle": "모든 {{provider}} 모델 토글", - "dialog.model.unpaid.freeModels.title": "OpenCode에서 제공하는 무료 모델", - "dialog.model.unpaid.addMore.title": "인기 공급자의 모델 추가", - "dialog.provider.viewAll": "더 많은 공급자 보기", - "provider.connect.title": "{{provider}} 연결", - "provider.connect.title.anthropicProMax": "Claude Pro/Max로 로그인", - "provider.connect.selectMethod": "{{provider}} 로그인 방법 선택", - "provider.connect.method.apiKey": "API 키", - "provider.connect.status.inProgress": "인증 진행 중...", - "provider.connect.status.waiting": "인증 대기 중...", - "provider.connect.status.failed": "인증 실패: {{error}}", - "provider.connect.apiKey.description": - "{{provider}} API 키를 입력하여 계정을 연결하고 OpenCode에서 {{provider}} 모델을 사용하세요.", - "provider.connect.apiKey.label": "{{provider}} API 키", - "provider.connect.apiKey.placeholder": "API 키", - "provider.connect.apiKey.required": "API 키가 필요합니다", - "provider.connect.opencodeZen.line1": - "OpenCode Zen은 코딩 에이전트를 위해 최적화된 신뢰할 수 있는 엄선된 모델에 대한 액세스를 제공합니다.", - "provider.connect.opencodeZen.line2": "단일 API 키로 Claude, GPT, Gemini, GLM 등 다양한 모델에 액세스할 수 있습니다.", - "provider.connect.opencodeZen.visit.prefix": "다음 ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": "을 방문하여 API 키를 받으세요.", - "provider.connect.oauth.code.visit.prefix": "다음 ", - "provider.connect.oauth.code.visit.link": "이 링크", - "provider.connect.oauth.code.visit.suffix": - "를 방문하여 인증 코드를 받아 계정을 연결하고 OpenCode에서 {{provider}} 모델을 사용하세요.", - "provider.connect.oauth.code.label": "{{method}} 인증 코드", - "provider.connect.oauth.code.placeholder": "인증 코드", - "provider.connect.oauth.code.required": "인증 코드가 필요합니다", - "provider.connect.oauth.code.invalid": "유효하지 않은 인증 코드", - "provider.connect.oauth.auto.visit.prefix": "다음 ", - "provider.connect.oauth.auto.visit.link": "이 링크", - "provider.connect.oauth.auto.visit.suffix": - "를 방문하고 아래 코드를 입력하여 계정을 연결하고 OpenCode에서 {{provider}} 모델을 사용하세요.", - "provider.connect.oauth.auto.confirmationCode": "확인 코드", - "provider.connect.toast.connected.title": "{{provider}} 연결됨", - "provider.connect.toast.connected.description": "이제 {{provider}} 모델을 사용할 수 있습니다.", - "provider.custom.title": "사용자 지정 공급자", - "provider.custom.description.prefix": "OpenAI 호환 공급자를 구성합니다. ", - "provider.custom.description.link": "공급자 구성 문서", - "provider.custom.description.suffix": "를 참조하세요.", - "provider.custom.field.providerID.label": "공급자 ID", - "provider.custom.field.providerID.placeholder": "myprovider", - "provider.custom.field.providerID.description": "소문자, 숫자, 하이픈 또는 밑줄", - "provider.custom.field.name.label": "표시 이름", - "provider.custom.field.name.placeholder": "내 AI 공급자", - "provider.custom.field.baseURL.label": "기본 URL", - "provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1", - "provider.custom.field.apiKey.label": "API 키", - "provider.custom.field.apiKey.placeholder": "API 키", - "provider.custom.field.apiKey.description": "선택 사항입니다. 헤더를 통해 인증을 관리하는 경우 비워 두세요.", - "provider.custom.models.label": "모델", - "provider.custom.models.id.label": "ID", - "provider.custom.models.id.placeholder": "model-id", - "provider.custom.models.name.label": "이름", - "provider.custom.models.name.placeholder": "표시 이름", - "provider.custom.models.remove": "모델 제거", - "provider.custom.models.add": "모델 추가", - "provider.custom.headers.label": "헤더 (선택 사항)", - "provider.custom.headers.key.label": "헤더", - "provider.custom.headers.key.placeholder": "헤더 이름", - "provider.custom.headers.value.label": "값", - "provider.custom.headers.value.placeholder": "값", - "provider.custom.headers.remove": "헤더 제거", - "provider.custom.headers.add": "헤더 추가", - "provider.custom.error.providerID.required": "공급자 ID가 필요합니다", - "provider.custom.error.providerID.format": "소문자, 숫자, 하이픈 또는 밑줄을 사용하세요", - "provider.custom.error.providerID.exists": "해당 공급자 ID가 이미 존재합니다", - "provider.custom.error.name.required": "표시 이름이 필요합니다", - "provider.custom.error.baseURL.required": "기본 URL이 필요합니다", - "provider.custom.error.baseURL.format": "http:// 또는 https://로 시작해야 합니다", - "provider.custom.error.required": "필수", - "provider.custom.error.duplicate": "중복", - "provider.disconnect.toast.disconnected.title": "{{provider}} 연결 해제됨", - "provider.disconnect.toast.disconnected.description": "{{provider}} 모델을 더 이상 사용할 수 없습니다.", - "model.tag.free": "무료", - "model.tag.latest": "최신", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "텍스트", - "model.input.image": "이미지", - "model.input.audio": "오디오", - "model.input.video": "비디오", - "model.input.pdf": "pdf", - "model.tooltip.allows": "지원: {{inputs}}", - "model.tooltip.reasoning.allowed": "추론 허용", - "model.tooltip.reasoning.none": "추론 없음", - "model.tooltip.context": "컨텍스트 제한 {{limit}}", - "common.search.placeholder": "검색", - "common.goBack": "뒤로 가기", - "common.goForward": "앞으로 가기", - "common.loading": "로딩 중", - "common.loading.ellipsis": "...", - "common.cancel": "취소", - "common.connect": "연결", - "common.disconnect": "연결 해제", - "common.continue": "제출", - "common.submit": "제출", - "common.save": "저장", - "common.saving": "저장 중...", - "common.default": "기본값", - "common.attachment": "첨부 파일", - "prompt.placeholder.shell": "셸 명령어 입력... {{example}}", - "prompt.placeholder.normal": '무엇이든 물어보세요... "{{example}}"', - "prompt.placeholder.simple": "무엇이든 물어보세요...", - "prompt.placeholder.summarizeComments": "댓글 요약…", - "prompt.placeholder.summarizeComment": "댓글 요약…", - "prompt.mode.shell": "셸", - "prompt.mode.normal": "프롬프트", - "prompt.mode.shell.exit": "종료하려면 esc", - "prompt.example.1": "코드베이스의 TODO 수정", - "prompt.example.2": "이 프로젝트의 기술 스택이 무엇인가요?", - "prompt.example.3": "고장 난 테스트 수정", - "prompt.example.4": "인증 작동 방식 설명", - "prompt.example.5": "보안 취약점 찾기 및 수정", - "prompt.example.6": "사용자 서비스에 단위 테스트 추가", - "prompt.example.7": "이 함수를 더 읽기 쉽게 리팩터링", - "prompt.example.8": "이 오류는 무엇을 의미하나요?", - "prompt.example.9": "이 문제 디버깅 도와줘", - "prompt.example.10": "API 문서 생성", - "prompt.example.11": "데이터베이스 쿼리 최적화", - "prompt.example.12": "입력 유효성 검사 추가", - "prompt.example.13": "...를 위한 새 컴포넌트 생성", - "prompt.example.14": "이 프로젝트를 어떻게 배포하나요?", - "prompt.example.15": "모범 사례를 기준으로 내 코드 검토", - "prompt.example.16": "이 함수에 오류 처리 추가", - "prompt.example.17": "이 정규식 패턴 설명", - "prompt.example.18": "이것을 TypeScript로 변환", - "prompt.example.19": "코드베이스 전체에 로깅 추가", - "prompt.example.20": "오래된 종속성은 무엇인가요?", - "prompt.example.21": "마이그레이션 스크립트 작성 도와줘", - "prompt.example.22": "이 엔드포인트에 캐싱 구현", - "prompt.example.23": "이 목록에 페이지네이션 추가", - "prompt.example.24": "...를 위한 CLI 명령어 생성", - "prompt.example.25": "여기서 환경 변수는 어떻게 작동하나요?", - "prompt.popover.emptyResults": "일치하는 결과 없음", - "prompt.popover.emptyCommands": "일치하는 명령어 없음", - "prompt.dropzone.label": "이미지, PDF 또는 텍스트 파일을 이곳에 드롭하세요", - "prompt.dropzone.file.label": "드롭하여 파일 @멘션 추가", - "prompt.slash.badge.custom": "사용자 지정", - "prompt.slash.badge.skill": "스킬", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "활성", - "prompt.context.includeActiveFile": "활성 파일 포함", - "prompt.context.removeActiveFile": "컨텍스트에서 활성 파일 제거", - "prompt.context.removeFile": "컨텍스트에서 파일 제거", - "prompt.action.attachFile": "파일 첨부", - "prompt.attachment.remove": "첨부 파일 제거", - "prompt.action.send": "전송", - "prompt.action.stop": "중지", - "prompt.toast.pasteUnsupported.title": "지원되지 않는 첨부 파일", - "prompt.toast.pasteUnsupported.description": "이미지, PDF 또는 텍스트 파일만 첨부할 수 있습니다.", - "prompt.toast.modelAgentRequired.title": "에이전트 및 모델 선택", - "prompt.toast.modelAgentRequired.description": "프롬프트를 보내기 전에 에이전트와 모델을 선택하세요.", - "prompt.toast.worktreeCreateFailed.title": "작업 트리 생성 실패", - "prompt.toast.sessionCreateFailed.title": "세션 생성 실패", - "prompt.toast.shellSendFailed.title": "셸 명령 전송 실패", - "prompt.toast.commandSendFailed.title": "명령 전송 실패", - "prompt.toast.promptSendFailed.title": "프롬프트 전송 실패", - "prompt.toast.promptSendFailed.description": "세션을 가져올 수 없습니다", - "dialog.mcp.title": "MCP", - "dialog.mcp.description": "{{total}}개 중 {{enabled}}개 활성화됨", - "dialog.mcp.empty": "구성된 MCP 없음", - "dialog.lsp.empty": "파일 유형에서 자동 감지된 LSP", - "dialog.plugins.empty": "opencode.json에 구성된 플러그인", - "mcp.status.connected": "연결됨", - "mcp.status.failed": "실패", - "mcp.status.needs_auth": "인증 필요", - "mcp.auth.clickToAuthenticate": "클릭하여 인증", - "mcp.status.disabled": "비활성화됨", - "dialog.fork.empty": "분기할 메시지 없음", - "dialog.directory.search.placeholder": "폴더 검색", - "dialog.directory.empty": "폴더 없음", - "dialog.directory.action.selectFile": "파일 선택", - "dialog.directory.action.selectFolder": "폴더 선택", - "dialog.directory.root": "루트", - "dialog.directory.parent": "상위 폴더", - "dialog.directory.readError": "이 폴더를 읽을 수 없습니다", - "dialog.server.title": "서버", - "dialog.server.description": "이 앱이 연결할 OpenCode 서버를 전환합니다.", - "dialog.server.search.placeholder": "서버 검색", - "dialog.server.empty": "서버 없음", - "dialog.server.add.title": "서버 추가", - "dialog.server.add.url": "서버 URL", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "서버에 연결할 수 없습니다", - "dialog.server.add.checking": "확인 중...", - "dialog.server.add.button": "서버 추가", - "dialog.server.add.name": "서버 이름 (선택 사항)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "사용자 이름 (선택 사항)", - "dialog.server.add.password": "비밀번호 (선택 사항)", - "dialog.server.edit.title": "서버 편집", - "dialog.server.default.title": "기본 서버", - "dialog.server.default.description": - "로컬 서버를 시작하는 대신 앱 실행 시 이 서버에 연결합니다. 다시 시작해야 합니다.", - "dialog.server.default.none": "선택된 서버 없음", - "dialog.server.default.set": "현재 서버를 기본값으로 설정", - "dialog.server.default.clear": "지우기", - "dialog.server.action.remove": "서버 제거", - "dialog.server.menu.edit": "편집", - "dialog.server.menu.default": "기본값으로 설정", - "dialog.server.menu.defaultRemove": "기본값 제거", - "dialog.server.menu.delete": "삭제", - "dialog.server.current": "현재 서버", - "dialog.server.status.default": "기본값", - "dialog.project.edit.title": "프로젝트 편집", - "dialog.project.edit.name": "이름", - "dialog.project.edit.icon": "아이콘", - "dialog.project.edit.icon.alt": "프로젝트 아이콘", - "dialog.project.edit.icon.hint": "이미지를 클릭하거나 드래그하세요", - "dialog.project.edit.icon.recommended": "권장: 128x128px", - "dialog.project.edit.color": "색상", - "dialog.project.edit.color.select": "{{color}} 색상 선택", - "dialog.project.edit.worktree.startup": "작업 공간 시작 스크립트", - "dialog.project.edit.worktree.startup.description": "새 작업 공간(작업 트리)을 만든 뒤 실행됩니다.", - "dialog.project.edit.worktree.startup.placeholder": "예: bun install", - "context.breakdown.title": "컨텍스트 분석", - "context.breakdown.note": '입력 토큰의 대략적인 분석입니다. "기타"에는 도구 정의 및 오버헤드가 포함됩니다.', - "context.breakdown.system": "시스템", - "context.breakdown.user": "사용자", - "context.breakdown.assistant": "어시스턴트", - "context.breakdown.tool": "도구 호출", - "context.breakdown.other": "기타", - "context.systemPrompt.title": "시스템 프롬프트", - "context.rawMessages.title": "원시 메시지", - "context.stats.session": "세션", - "context.stats.messages": "메시지", - "context.stats.provider": "공급자", - "context.stats.model": "모델", - "context.stats.limit": "컨텍스트 제한", - "context.stats.totalTokens": "총 토큰", - "context.stats.usage": "사용량", - "context.stats.inputTokens": "입력 토큰", - "context.stats.outputTokens": "출력 토큰", - "context.stats.reasoningTokens": "추론 토큰", - "context.stats.cacheTokens": "캐시 토큰 (읽기/쓰기)", - "context.stats.userMessages": "사용자 메시지", - "context.stats.assistantMessages": "어시스턴트 메시지", - "context.stats.totalCost": "총 비용", - "context.stats.sessionCreated": "세션 생성됨", - "context.stats.lastActivity": "최근 활동", - "context.usage.tokens": "토큰", - "context.usage.usage": "사용량", - "context.usage.cost": "비용", - "context.usage.clickToView": "컨텍스트를 보려면 클릭", - "context.usage.view": "컨텍스트 사용량 보기", - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - "toast.language.title": "언어", - "toast.language.description": "{{language}}(으)로 전환됨", - "toast.theme.title": "테마 전환됨", - "toast.scheme.title": "색상 테마", - "toast.workspace.enabled.title": "작업 공간 활성화됨", - "toast.workspace.enabled.description": "이제 사이드바에 여러 작업 트리가 표시됩니다", - "toast.workspace.disabled.title": "작업 공간 비활성화됨", - "toast.workspace.disabled.description": "사이드바에 메인 작업 트리만 표시됩니다", - "toast.permissions.autoaccept.on.title": "권한 자동 수락 중", - "toast.permissions.autoaccept.on.description": "권한 요청이 자동으로 승인됩니다", - "toast.permissions.autoaccept.off.title": "권한 자동 수락 중지됨", - "toast.permissions.autoaccept.off.description": "권한 요청에 승인이 필요합니다", - "toast.model.none.title": "선택된 모델 없음", - "toast.model.none.description": "이 세션을 요약하려면 공급자를 연결하세요", - "toast.file.loadFailed.title": "파일 로드 실패", - "toast.file.listFailed.title": "파일 목록을 불러오지 못했습니다", - "toast.context.noLineSelection.title": "줄 선택 없음", - "toast.context.noLineSelection.description": "먼저 파일 탭에서 줄 범위를 선택하세요.", - "toast.session.share.copyFailed.title": "URL 클립보드 복사 실패", - "toast.session.share.success.title": "세션 공유됨", - "toast.session.share.success.description": "공유 URL이 클립보드에 복사되었습니다!", - "toast.session.share.failed.title": "세션 공유 실패", - "toast.session.share.failed.description": "세션을 공유하는 동안 오류가 발생했습니다", - "toast.session.unshare.success.title": "세션 공유 해제됨", - "toast.session.unshare.success.description": "세션 공유가 성공적으로 해제되었습니다!", - "toast.session.unshare.failed.title": "세션 공유 해제 실패", - "toast.session.unshare.failed.description": "세션 공유를 해제하는 동안 오류가 발생했습니다", - "toast.session.listFailed.title": "{{project}}에 대한 세션을 로드하지 못했습니다", - "toast.update.title": "업데이트 가능", - "toast.update.description": "OpenCode의 새 버전({{version}})을 설치할 수 있습니다.", - "toast.update.action.installRestart": "설치 및 다시 시작", - "toast.update.action.notYet": "나중에", - "error.page.title": "문제가 발생했습니다", - "error.page.description": "애플리케이션을 로드하는 동안 오류가 발생했습니다.", - "error.page.details.label": "오류 세부 정보", - "error.page.action.restart": "다시 시작", - "error.page.action.report": "오류 신고", - "error.page.action.reported": "오류가 신고됨", - "error.page.action.checking": "확인 중...", - "error.page.action.checkUpdates": "업데이트 확인", - "error.page.action.updateTo": "{{version}} 버전으로 업데이트", - "error.page.report.prefix": "이 오류를 OpenCode 팀에 제보해 주세요: ", - "error.page.report.discord": "Discord", - "error.page.version": "버전: {{version}}", - "error.dev.rootNotFound": - "루트 요소를 찾을 수 없습니다. index.html에 추가하는 것을 잊으셨나요? 또는 id 속성의 철자가 틀렸을 수 있습니다.", - "error.serverSync.connectFailed": "서버에 연결할 수 없습니다. `{{url}}`에서 서버가 실행 중인가요?", - "directory.error.invalidUrl": "URL에 유효하지 않은 디렉터리가 있습니다.", - "error.chain.unknown": "알 수 없는 오류", - "error.chain.causedBy": "원인:", - "error.chain.apiError": "API 오류", - "error.chain.status": "상태: {{status}}", - "error.chain.retryable": "재시도 가능: {{retryable}}", - "error.chain.responseBody": "응답 본문:\n{{body}}", - "error.chain.didYouMean": "혹시 {{suggestions}}을(를) 의미하셨나요?", - "error.chain.modelNotFound": "모델을 찾을 수 없음: {{provider}}/{{model}}", - "error.chain.checkConfig": "구성(opencode.json)의 공급자/모델 이름을 확인하세요", - "error.chain.mcpFailed": 'MCP 서버 "{{name}}" 실패. 참고: OpenCode는 아직 MCP 인증을 지원하지 않습니다.', - "error.chain.providerAuthFailed": "공급자 인증 실패 ({{provider}}): {{message}}", - "error.chain.providerInitFailed": '공급자 "{{provider}}" 초기화 실패. 자격 증명과 구성을 확인하세요.', - "error.chain.configJsonInvalid": "{{path}}의 구성 파일이 유효한 JSON(C)가 아닙니다", - "error.chain.configJsonInvalidWithMessage": "{{path}}의 구성 파일이 유효한 JSON(C)가 아닙니다: {{message}}", - "error.chain.configDirectoryTypo": - '{{path}}의 "{{dir}}" 디렉터리가 유효하지 않습니다. 디렉터리 이름을 "{{suggestion}}"으로 변경하거나 제거하세요. 이는 흔한 오타입니다.', - "error.chain.configFrontmatterError": "{{path}}의 frontmatter 파싱 실패:\n{{message}}", - "error.chain.configInvalid": "{{path}}의 구성 파일이 유효하지 않습니다", - "error.chain.configInvalidWithMessage": "{{path}}의 구성 파일이 유효하지 않습니다: {{message}}", - "notification.permission.title": "권한 필요", - "notification.permission.description": "{{projectName}}의 {{sessionTitle}}에서 권한이 필요합니다", - "notification.question.title": "질문", - "notification.question.description": "{{projectName}}의 {{sessionTitle}}에서 질문이 있습니다", - "notification.action.goToSession": "세션으로 이동", - "notification.session.responseReady.title": "응답 준비됨", - "notification.session.error.title": "세션 오류", - "notification.session.error.fallbackDescription": "오류가 발생했습니다", - "home.recentProjects": "최근 프로젝트", - "home.empty.title": "최근 프로젝트 없음", - "home.empty.description": "로컬 프로젝트를 열어 시작하세요", - "session.tab.session": "세션", - "session.tab.review": "검토", - "session.tab.context": "컨텍스트", - "session.panel.reviewAndFiles": "검토 및 파일", - "session.review.filesChanged": "{{count}}개 파일 변경됨", - "session.review.change.one": "변경", - "session.review.change.other": "변경", - "session.review.loadingChanges": "변경 사항 로드 중...", - "session.review.empty": "이 세션에 변경 사항이 아직 없습니다", - "session.review.noVcs": "Git 버전 관리 시스템이 감지되지 않아 변경 사항이 표시되지 않습니다", - "session.review.noSnapshot": "구성에서 스냅샷 추적이 비활성화되어 있어 세션 변경 사항을 사용할 수 없습니다", - "session.review.noChanges": "변경 없음", - "session.files.selectToOpen": "열 파일을 선택하세요", - "session.files.all": "모든 파일", - "session.files.empty": "파일 없음", - "session.files.binaryContent": "바이너리 파일 (내용을 표시할 수 없음)", - "session.messages.renderEarlier": "이전 메시지 렌더링", - "session.messages.loadingEarlier": "이전 메시지 로드 중...", - "session.messages.loadEarlier": "이전 메시지 로드", - "session.messages.loading": "메시지 로드 중...", - "session.messages.jumpToLatest": "최신으로 이동", - "session.context.addToContext": "컨텍스트에 {{selection}} 추가", - "session.todo.title": "할 일", - "session.todo.collapse": "접기", - "session.todo.expand": "펼치기", - "session.followupDock.summary.one": "{{count}}개의 대기 중인 메시지", - "session.followupDock.summary.other": "{{count}}개의 대기 중인 메시지", - "session.followupDock.sendNow": "지금 전송", - "session.followupDock.edit": "편집", - "session.followupDock.collapse": "대기 중인 메시지 접기", - "session.followupDock.expand": "대기 중인 메시지 펼치기", - "session.revertDock.summary.one": "{{count}}개의 롤백된 메시지", - "session.revertDock.summary.other": "{{count}}개의 롤백된 메시지", - "session.revertDock.collapse": "롤백된 메시지 접기", - "session.revertDock.expand": "롤백된 메시지 펼치기", - "session.revertDock.restore": "메시지 복원", - "session.new.title": "무엇이든 만들기", - "session.new.worktree.main": "메인 브랜치", - "session.new.worktree.mainWithBranch": "메인 브랜치 ({{branch}})", - "session.new.worktree.create": "새 작업 트리 생성", - "session.new.lastModified": "최근 수정", - "session.header.search.placeholder": "{{project}} 검색", - "session.header.searchFiles": "파일 검색", - "session.header.openIn": "다음에서 열기", - "session.header.open.action": "{{app}} 열기", - "session.header.open.ariaLabel": "{{app}}에서 열기", - "session.header.open.menu": "열기 옵션", - "session.header.open.copyPath": "경로 복사", - "status.popover.trigger": "상태", - "status.popover.ariaLabel": "서버 구성", - "status.popover.tab.servers": "서버", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "플러그인", - "status.popover.action.manageServers": "서버 관리", - "session.share.popover.title": "웹에 게시", - "session.share.popover.description.shared": "이 세션은 웹에 공개되었습니다. 링크가 있는 누구나 액세스할 수 있습니다.", - "session.share.popover.description.unshared": - "세션을 웹에 공개적으로 공유합니다. 링크가 있는 누구나 액세스할 수 있습니다.", - "session.share.action.share": "공유", - "session.share.action.publish": "게시", - "session.share.action.publishing": "게시 중...", - "session.share.action.unpublish": "게시 취소", - "session.share.action.unpublishing": "게시 취소 중...", - "session.share.action.view": "보기", - "session.share.copy.copied": "복사됨", - "session.share.copy.copyLink": "링크 복사", - "lsp.tooltip.none": "LSP 서버 없음", - "lsp.label.connected": "{{count}} LSP", - "prompt.loading": "프롬프트 로드 중...", - "terminal.loading": "터미널 로드 중...", - "terminal.title": "터미널", - "terminal.title.numbered": "터미널 {{number}}", - "terminal.close": "터미널 닫기", - "terminal.connectionLost.title": "연결 끊김", - "terminal.connectionLost.description": - "터미널 연결이 중단되었습니다. 서버가 재시작하면 이런 일이 발생할 수 있습니다.", - "common.closeTab": "탭 닫기", - "common.dismiss": "닫기", - "common.requestFailed": "요청 실패", - "common.moreOptions": "더 많은 옵션", - "common.learnMore": "더 알아보기", - "common.rename": "이름 바꾸기", - "common.reset": "초기화", - "common.archive": "보관", - "common.delete": "삭제", - "common.close": "닫기", - "common.edit": "편집", - "common.loadMore": "더 불러오기", - "common.key.esc": "ESC", - "sidebar.menu.toggle": "메뉴 토글", - "sidebar.nav.projectsAndSessions": "프로젝트 및 세션", - "sidebar.settings": "설정", - "sidebar.help": "도움말", - "sidebar.workspaces.enable": "작업 공간 활성화", - "sidebar.workspaces.disable": "작업 공간 비활성화", - "sidebar.gettingStarted.title": "시작하기", - "sidebar.gettingStarted.line1": "OpenCode에는 무료 모델이 포함되어 있어 즉시 시작할 수 있습니다.", - "sidebar.gettingStarted.line2": "Claude, GPT, Gemini 등을 포함한 모델을 사용하려면 공급자를 연결하세요.", - "sidebar.project.recentSessions": "최근 세션", - "sidebar.project.viewAllSessions": "모든 세션 보기", - "sidebar.project.clearNotifications": "알림 지우기", - "app.name.desktop": "OpenCode Desktop", - "settings.section.desktop": "데스크톱", - "settings.section.server": "서버", - "settings.tab.general": "일반", - "settings.tab.shortcuts": "단축키", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "WSL 통합", - "settings.desktop.wsl.description": "Windows의 WSL 내부에서 OpenCode 서버를 실행합니다.", - "settings.general.section.appearance": "모양", - "settings.general.section.notifications": "시스템 알림", - "settings.general.section.updates": "업데이트", - "settings.general.section.sounds": "효과음", - "settings.general.section.feed": "피드", - "settings.general.section.display": "디스플레이", - "settings.general.row.language.title": "언어", - "settings.general.row.language.description": "OpenCode 표시 언어 변경", - "settings.general.row.appearance.title": "모양", - "settings.general.row.appearance.description": "기기에서 OpenCode가 보이는 방식 사용자 지정", - "settings.general.row.colorScheme.title": "색상 테마", - "settings.general.row.colorScheme.description": "OpenCode가 시스템, 라이트 또는 다크 테마를 따를지 선택하세요", - "settings.general.row.theme.title": "테마", - "settings.general.row.theme.description": "OpenCode 테마 사용자 지정", - "settings.general.row.font.title": "코드 글꼴", - "settings.general.row.font.description": "코드 블록에 사용되는 글꼴을 사용자 지정", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "UI 글꼴", - "settings.general.row.uiFont.description": "인터페이스 전반에 사용되는 글꼴을 사용자 지정", - "settings.general.row.followup.title": "후속 조치 동작", - "settings.general.row.followup.description": "후속 프롬프트를 즉시 실행할지 대기열에 넣을지 선택하세요", - "settings.general.row.followup.option.queue": "대기열", - "settings.general.row.followup.option.steer": "조종", - "settings.general.row.reasoningSummaries.title": "추론 요약 표시", - "settings.general.row.reasoningSummaries.description": "타임라인에 모델 추론 요약 표시", - "settings.general.row.shellToolPartsExpanded.title": "shell 도구 파트 펼치기", - "settings.general.row.shellToolPartsExpanded.description": - "타임라인에서 기본적으로 shell 도구 파트를 펼친 상태로 표시합니다", - "settings.general.row.editToolPartsExpanded.title": "edit 도구 파트 펼치기", - "settings.general.row.editToolPartsExpanded.description": - "타임라인에서 기본적으로 edit, write, patch 도구 파트를 펼친 상태로 표시합니다", - "settings.general.row.wayland.title": "네이티브 Wayland 사용", - "settings.general.row.wayland.description": "Wayland에서 X11 폴백을 비활성화합니다. 다시 시작해야 합니다.", - "settings.general.row.wayland.tooltip": - "혼합 주사율 모니터가 있는 Linux에서는 네이티브 Wayland가 더 안정적일 수 있습니다.", - "settings.general.row.releaseNotes.title": "릴리스 노트", - "settings.general.row.releaseNotes.description": "업데이트 후 '새 소식' 팝업 표시", - "settings.updates.row.startup.title": "시작 시 업데이트 확인", - "settings.updates.row.startup.description": "OpenCode를 실행할 때 업데이트를 자동으로 확인합니다", - "settings.updates.row.check.title": "업데이트 확인", - "settings.updates.row.check.description": "업데이트를 수동으로 확인하고, 사용 가능하면 설치합니다", - "settings.updates.action.checkNow": "지금 확인", - "settings.updates.action.checking": "확인 중...", - "settings.updates.toast.latest.title": "최신 상태입니다", - "settings.updates.toast.latest.description": "현재 최신 버전의 OpenCode를 사용 중입니다.", - "sound.option.none": "없음", - "sound.option.alert01": "알림 01", - "sound.option.alert02": "알림 02", - "sound.option.alert03": "알림 03", - "sound.option.alert04": "알림 04", - "sound.option.alert05": "알림 05", - "sound.option.alert06": "알림 06", - "sound.option.alert07": "알림 07", - "sound.option.alert08": "알림 08", - "sound.option.alert09": "알림 09", - "sound.option.alert10": "알림 10", - "sound.option.bipbop01": "빕-밥 01", - "sound.option.bipbop02": "빕-밥 02", - "sound.option.bipbop03": "빕-밥 03", - "sound.option.bipbop04": "빕-밥 04", - "sound.option.bipbop05": "빕-밥 05", - "sound.option.bipbop06": "빕-밥 06", - "sound.option.bipbop07": "빕-밥 07", - "sound.option.bipbop08": "빕-밥 08", - "sound.option.bipbop09": "빕-밥 09", - "sound.option.bipbop10": "빕-밥 10", - "sound.option.staplebops01": "스테이플밥스 01", - "sound.option.staplebops02": "스테이플밥스 02", - "sound.option.staplebops03": "스테이플밥스 03", - "sound.option.staplebops04": "스테이플밥스 04", - "sound.option.staplebops05": "스테이플밥스 05", - "sound.option.staplebops06": "스테이플밥스 06", - "sound.option.staplebops07": "스테이플밥스 07", - "sound.option.nope01": "아니오 01", - "sound.option.nope02": "아니오 02", - "sound.option.nope03": "아니오 03", - "sound.option.nope04": "아니오 04", - "sound.option.nope05": "아니오 05", - "sound.option.nope06": "아니오 06", - "sound.option.nope07": "아니오 07", - "sound.option.nope08": "아니오 08", - "sound.option.nope09": "아니오 09", - "sound.option.nope10": "아니오 10", - "sound.option.nope11": "아니오 11", - "sound.option.nope12": "아니오 12", - "sound.option.yup01": "네 01", - "sound.option.yup02": "네 02", - "sound.option.yup03": "네 03", - "sound.option.yup04": "네 04", - "sound.option.yup05": "네 05", - "sound.option.yup06": "네 06", - "settings.general.notifications.agent.title": "에이전트", - "settings.general.notifications.agent.description": "에이전트가 완료되거나 주의가 필요할 때 시스템 알림 표시", - "settings.general.notifications.permissions.title": "권한", - "settings.general.notifications.permissions.description": "권한이 필요할 때 시스템 알림 표시", - "settings.general.notifications.errors.title": "오류", - "settings.general.notifications.errors.description": "오류가 발생했을 때 시스템 알림 표시", - "settings.general.sounds.agent.title": "에이전트", - "settings.general.sounds.agent.description": "에이전트가 완료되거나 주의가 필요할 때 소리 재생", - "settings.general.sounds.permissions.title": "권한", - "settings.general.sounds.permissions.description": "권한이 필요할 때 소리 재생", - "settings.general.sounds.errors.title": "오류", - "settings.general.sounds.errors.description": "오류가 발생했을 때 소리 재생", - "settings.shortcuts.title": "키보드 단축키", - "settings.shortcuts.reset.button": "기본값으로 초기화", - "settings.shortcuts.reset.toast.title": "단축키 초기화됨", - "settings.shortcuts.reset.toast.description": "키보드 단축키가 기본값으로 초기화되었습니다.", - "settings.shortcuts.conflict.title": "단축키가 이미 사용 중임", - "settings.shortcuts.conflict.description": "{{keybind}}은(는) 이미 {{titles}}에 할당되어 있습니다.", - "settings.shortcuts.unassigned": "할당되지 않음", - "settings.shortcuts.pressKeys": "키 누르기", - "settings.shortcuts.search.placeholder": "단축키 검색", - "settings.shortcuts.search.empty": "단축키를 찾을 수 없습니다", - "settings.shortcuts.group.general": "일반", - "settings.shortcuts.group.session": "세션", - "settings.shortcuts.group.navigation": "탐색", - "settings.shortcuts.group.modelAndAgent": "모델 및 에이전트", - "settings.shortcuts.group.terminal": "터미널", - "settings.shortcuts.group.prompt": "프롬프트", - "settings.providers.title": "공급자", - "settings.providers.description": "공급자 설정은 여기서 구성할 수 있습니다.", - "settings.providers.section.connected": "연결된 공급자", - "settings.providers.connected.empty": "연결된 공급자 없음", - "settings.providers.section.popular": "인기 공급자", - "settings.providers.tag.environment": "환경", - "settings.providers.tag.config": "구성", - "settings.providers.tag.custom": "사용자 지정", - "settings.providers.tag.other": "기타", - "settings.models.title": "모델", - "settings.models.description": "모델 설정은 여기서 구성할 수 있습니다.", - "settings.agents.title": "에이전트", - "settings.agents.description": "에이전트 설정은 여기서 구성할 수 있습니다.", - "settings.commands.title": "명령어", - "settings.commands.description": "명령어 설정은 여기서 구성할 수 있습니다.", - "settings.mcp.title": "MCP", - "settings.mcp.description": "MCP 설정은 여기서 구성할 수 있습니다.", - "settings.permissions.title": "권한", - "settings.permissions.description": "서버가 기본적으로 사용할 수 있는 도구를 제어합니다.", - "settings.permissions.section.tools": "도구", - "settings.permissions.toast.updateFailed.title": "권한 업데이트 실패", - "settings.permissions.action.allow": "허용", - "settings.permissions.action.ask": "묻기", - "settings.permissions.action.deny": "거부", - "settings.permissions.tool.read.title": "읽기", - "settings.permissions.tool.read.description": "파일 읽기 (파일 경로와 일치)", - "settings.permissions.tool.edit.title": "편집", - "settings.permissions.tool.edit.description": "파일 수정 (편집, 쓰기, 패치 및 다중 편집 포함)", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "glob 패턴을 사용하여 파일 일치", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "정규식을 사용하여 파일 내용 검색", - "settings.permissions.tool.list.title": "목록", - "settings.permissions.tool.list.description": "디렉터리 내 파일 나열", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "셸 명령어 실행", - "settings.permissions.tool.task.title": "작업", - "settings.permissions.tool.task.description": "하위 에이전트 실행", - "settings.permissions.tool.skill.title": "기술", - "settings.permissions.tool.skill.description": "이름으로 기술 로드", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "언어 서버 쿼리 실행", - "settings.permissions.tool.todowrite.title": "할 일 쓰기", - "settings.permissions.tool.todowrite.description": "할 일 목록 업데이트", - "settings.permissions.tool.webfetch.title": "웹 가져오기", - "settings.permissions.tool.webfetch.description": "URL에서 콘텐츠 가져오기", - "settings.permissions.tool.websearch.title": "웹 검색", - "settings.permissions.tool.websearch.description": "웹 검색", - "settings.permissions.tool.external_directory.title": "외부 디렉터리", - "settings.permissions.tool.external_directory.description": "프로젝트 디렉터리 외부의 파일에 액세스", - "settings.permissions.tool.doom_loop.title": "무한 반복", - "settings.permissions.tool.doom_loop.description": "동일한 입력으로 반복되는 도구 호출 감지", - "session.delete.failed.title": "세션 삭제 실패", - "session.delete.title": "세션 삭제", - "session.delete.confirm": '"{{name}}" 세션을 삭제하시겠습니까?', - "session.delete.button": "세션 삭제", - "workspace.new": "새 작업 공간", - "workspace.type.local": "로컬", - "workspace.type.sandbox": "샌드박스", - "workspace.create.failed.title": "작업 공간 생성 실패", - "workspace.delete.failed.title": "작업 공간 삭제 실패", - "workspace.resetting.title": "작업 공간 재설정 중", - "workspace.resetting.description": "잠시 시간이 걸릴 수 있습니다.", - "workspace.reset.failed.title": "작업 공간 재설정 실패", - "workspace.reset.success.title": "작업 공간 재설정됨", - "workspace.reset.success.description": "작업 공간이 이제 기본 브랜치와 일치합니다.", - "workspace.error.stillPreparing": "작업 공간이 아직 준비 중입니다", - "workspace.status.checking": "병합되지 않은 변경 사항 확인 중...", - "workspace.status.error": "Git 상태를 확인할 수 없습니다.", - "workspace.status.clean": "병합되지 않은 변경 사항이 감지되지 않았습니다.", - "workspace.status.dirty": "이 작업 공간에서 병합되지 않은 변경 사항이 감지되었습니다.", - "workspace.delete.title": "작업 공간 삭제", - "workspace.delete.confirm": '"{{name}}" 작업 공간을 삭제하시겠습니까?', - "workspace.delete.button": "작업 공간 삭제", - "workspace.reset.title": "작업 공간 재설정", - "workspace.reset.confirm": '"{{name}}" 작업 공간을 재설정하시겠습니까?', - "workspace.reset.button": "작업 공간 재설정", - "workspace.reset.archived.none": "활성 세션이 보관되지 않습니다.", - "workspace.reset.archived.one": "1개의 세션이 보관됩니다.", - "workspace.reset.archived.many": "{{count}}개의 세션이 보관됩니다.", - "workspace.reset.note": "이 작업은 작업 공간을 기본 브랜치와 일치하도록 재설정합니다.", - "common.open": "열기", - "dialog.releaseNotes.action.getStarted": "시작하기", - "dialog.releaseNotes.action.next": "다음", - "dialog.releaseNotes.action.hideFuture": "다시 보지 않기", - "dialog.releaseNotes.media.alt": "릴리스 미리보기", - "toast.project.reloadFailed.title": "{{project}} 다시 불러오기 실패", - "error.server.invalidConfiguration": "잘못된 구성", - "common.moreCountSuffix": " (외 {{count}}개)", - "common.time.justNow": "방금 전", - "common.time.minutesAgo.short": "{{count}}분 전", - "common.time.hoursAgo.short": "{{count}}시간 전", - "common.time.daysAgo.short": "{{count}}일 전", - "settings.providers.connected.environmentDescription": "환경 변수에서 연결됨", - "settings.providers.custom.description": "기본 URL로 OpenAI 호환 공급자를 추가합니다.", - - "app.server.unreachable": "{{server}}에 연결할 수 없습니다", - "app.server.retrying": "자동으로 재시도 중...", - "app.server.otherServers": "다른 서버", - "dialog.server.add.usernamePlaceholder": "사용자 이름", - "dialog.server.add.passwordPlaceholder": "비밀번호", - "server.row.noUsername": "사용자 이름 없음", - "session.review.noVcs.createGit.title": "Git 저장소 생성", - "session.review.noVcs.createGit.description": "이 프로젝트의 변경 사항을 추적, 검토 및 실행 취소", - "session.review.noVcs.createGit.actionLoading": "Git 저장소 생성 중...", - "session.review.noVcs.createGit.action": "Git 저장소 생성", - "session.todo.progress": "{{total}}개의 할 일 중 {{done}}개 완료", - "session.question.progress": "{{total}}개의 질문 중 {{current}}개", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "파일 탐색기", - "session.header.open.fileManager": "파일 관리자", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "터미널", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "개발 성능 진단", - "debugBar.na": "해당 없음", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": - "세션 페이지에 닿은 마지막 완료된 라우트 전환. 라우터 시작부터 정착 후 첫 번째 페인트까지 측정됨.", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "지난 5초간의 초당 프레임 수.", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "지난 5초간의 최악의 프레임 시간.", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "지난 5초간 32ms를 초과한 프레임.", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "지난 5초간의 차단된 시간 및 긴 작업 수. 최대 작업: {{max}}.", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "지난 5초간 관찰된 최악의 입력 지연.", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": "지난 5초간의 대략적인 상호작용 지속 시간. 이것은 공식 Web Vitals INP가 아닌 INP와 유사합니다.", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "현재 앱 수명 동안의 누적 레이아웃 이동.", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "사용된 JS 힙 대 힙 제한. Chromium 전용.", - "debugBar.mem.tip": "사용된 JS 힙 대 힙 제한. {{limit}} 중 {{used}}.", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "Space", - "common.key.backspace": "Backspace", - "common.key.enter": "Enter", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "알 수 없음", - "error.page.circular": "[순환]", - "error.serverSDK.noServerAvailable": "사용 가능한 서버 없음", - "error.serverSDK.serverNotAvailable": "서버를 사용할 수 없음", - "error.childStore.persistedCacheCreateFailed": "영구 캐시 생성 실패", - "error.childStore.persistedProjectMetadataCreateFailed": "영구 프로젝트 메타데이터 생성 실패", - "error.childStore.persistedProjectIconCreateFailed": "영구 프로젝트 아이콘 생성 실패", - "error.childStore.storeCreateFailed": "저장소 생성 실패", - "terminal.connectionLost.abnormalClose": "WebSocket이 비정상적으로 닫힘: {{code}}", -} diff --git a/packages/app/src/i18n/no.ts b/packages/app/src/i18n/no.ts deleted file mode 100644 index 8ec11de192..0000000000 --- a/packages/app/src/i18n/no.ts +++ /dev/null @@ -1,939 +0,0 @@ -import { dict as en } from "./en" -type Keys = keyof typeof en - -export const dict = { - "command.category.suggested": "Foreslått", - "command.category.view": "Visning", - "command.category.project": "Prosjekt", - "command.category.provider": "Leverandør", - "command.category.server": "Server", - "command.category.session": "Sesjon", - "command.category.theme": "Tema", - "command.category.language": "Språk", - "command.category.file": "Fil", - "command.category.context": "Kontekst", - "command.category.terminal": "Terminal", - "command.category.model": "Modell", - "command.category.mcp": "MCP", - "command.category.agent": "Agent", - "command.category.permissions": "Tillatelser", - "command.category.workspace": "Arbeidsområde", - "command.category.settings": "Innstillinger", - - "theme.scheme.system": "System", - "theme.scheme.light": "Lys", - "theme.scheme.dark": "Mørk", - - "command.sidebar.toggle": "Veksle sidepanel", - "command.project.open": "Åpne prosjekt", - "command.provider.connect": "Koble til leverandør", - "command.server.switch": "Bytt server", - "command.settings.open": "Åpne innstillinger", - "command.session.previous": "Forrige sesjon", - "command.session.next": "Neste sesjon", - "command.session.previous.unseen": "Forrige uleste økt", - "command.session.next.unseen": "Neste uleste økt", - "command.session.archive": "Arkiver sesjon", - - "command.palette": "Kommandopalett", - - "command.theme.cycle": "Bytt tema", - "command.theme.set": "Bruk tema: {{theme}}", - "command.theme.scheme.cycle": "Bytt fargevalg", - "command.theme.scheme.set": "Bruk fargevalg: {{scheme}}", - - "command.language.cycle": "Bytt språk", - "command.language.set": "Bruk språk: {{language}}", - - "command.session.new": "Ny sesjon", - "command.file.open": "Åpne fil", - "command.tab.close": "Lukk fane", - "command.context.addSelection": "Legg til markering i kontekst", - "command.context.addSelection.description": "Legg til valgte linjer fra gjeldende fil", - "command.input.focus": "Fokuser inndata", - "command.terminal.toggle": "Veksle terminal", - "command.fileTree.toggle": "Veksle filtre", - "command.review.toggle": "Veksle gjennomgang", - "command.terminal.new": "Ny terminal", - "command.terminal.new.description": "Opprett en ny terminalfane", - "command.steps.toggle": "Veksle trinn", - "command.steps.toggle.description": "Vis eller skjul trinn for gjeldende melding", - "command.message.previous": "Forrige melding", - "command.message.previous.description": "Gå til forrige brukermelding", - "command.message.next": "Neste melding", - "command.message.next.description": "Gå til neste brukermelding", - "command.model.choose": "Velg modell", - "command.model.choose.description": "Velg en annen modell", - "command.mcp.toggle": "Veksle MCP-er", - "command.mcp.toggle.description": "Veksle MCP-er", - "command.agent.cycle": "Bytt agent", - "command.agent.cycle.description": "Bytt til neste agent", - "command.agent.cycle.reverse": "Bytt agent bakover", - "command.agent.cycle.reverse.description": "Bytt til forrige agent", - "command.model.variant.cycle": "Bytt tenkeinnsats", - "command.model.variant.cycle.description": "Bytt til neste innsatsnivå", - "command.prompt.mode.shell": "Shell", - "command.prompt.mode.normal": "Prompt", - "command.permissions.autoaccept.enable": "Aksepter tillatelser automatisk", - "command.permissions.autoaccept.disable": "Stopp automatisk akseptering av tillatelser", - "command.workspace.toggle": "Veksle arbeidsområder", - "command.workspace.toggle.description": "Enable or disable multiple workspaces in the sidebar", - "command.session.undo": "Angre", - "command.session.undo.description": "Angre siste melding", - "command.session.redo": "Gjør om", - "command.session.redo.description": "Gjør om siste angrede melding", - "command.session.compact": "Komprimer sesjon", - "command.session.compact.description": "Oppsummer sesjonen for å redusere kontekststørrelsen", - "command.session.fork": "Forgren fra melding", - "command.session.fork.description": "Opprett en ny sesjon fra en tidligere melding", - "command.session.share": "Del sesjon", - "command.session.share.description": "Del denne sesjonen og kopier URL-en til utklippstavlen", - "command.session.unshare": "Slutt å dele sesjon", - "command.session.unshare.description": "Slutt å dele denne sesjonen", - - "palette.search.placeholder": "Søk i filer, kommandoer og sesjoner", - "palette.empty": "Ingen resultater funnet", - "palette.group.commands": "Kommandoer", - "palette.group.files": "Filer", - - "dialog.provider.search.placeholder": "Søk etter leverandører", - "dialog.provider.empty": "Ingen leverandører funnet", - "dialog.provider.group.popular": "Populære", - "dialog.provider.group.other": "Andre", - "dialog.provider.tag.recommended": "Anbefalt", - "dialog.provider.opencode.note": "Utvalgte modeller inkludert Claude, GPT, Gemini og mer", - "dialog.provider.opencode.tagline": "Pålitelige, optimaliserte modeller", - "dialog.provider.opencodeGo.tagline": "Rimelig abonnement for alle", - "dialog.provider.anthropic.note": "Direkte tilgang til Claude-modeller, inkludert Pro og Max", - "dialog.provider.copilot.note": "AI-modeller for kodeassistanse via GitHub Copilot", - "dialog.provider.openai.note": "GPT-modeller for raske, dyktige generelle AI-oppgaver", - "dialog.provider.google.note": "Gemini-modeller for raske, strukturerte svar", - "dialog.provider.openrouter.note": "Tilgang til alle støttede modeller fra én leverandør", - "dialog.provider.vercel.note": "Enhetlig tilgang til AI-modeller med smart ruting", - - "dialog.model.select.title": "Velg modell", - "dialog.model.search.placeholder": "Søk etter modeller", - "dialog.model.empty": "Ingen modellresultater", - "dialog.model.manage": "Administrer modeller", - "dialog.model.manage.description": "Tilpass hvilke modeller som vises i modellvelgeren.", - "dialog.model.manage.provider.toggle": "Veksle alle {{provider}}-modeller", - - "dialog.model.unpaid.freeModels.title": "Gratis modeller levert av OpenCode", - "dialog.model.unpaid.addMore.title": "Legg til flere modeller fra populære leverandører", - - "dialog.provider.viewAll": "Vis flere leverandører", - - "provider.connect.title": "Koble til {{provider}}", - "provider.connect.title.anthropicProMax": "Logg inn med Claude Pro/Max", - "provider.connect.selectMethod": "Velg innloggingsmetode for {{provider}}.", - "provider.connect.method.apiKey": "API-nøkkel", - "provider.connect.status.inProgress": "Autorisering pågår...", - "provider.connect.status.waiting": "Venter på autorisering...", - "provider.connect.status.failed": "Autorisering mislyktes: {{error}}", - "provider.connect.apiKey.description": - "Skriv inn din {{provider}} API-nøkkel for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.", - "provider.connect.apiKey.label": "{{provider}} API-nøkkel", - "provider.connect.apiKey.placeholder": "API-nøkkel", - "provider.connect.apiKey.required": "API-nøkkel er påkrevd", - "provider.connect.opencodeZen.line1": - "OpenCode Zen gir deg tilgang til et utvalg av pålitelige optimaliserte modeller for kodeagenter.", - "provider.connect.opencodeZen.line2": - "Med én enkelt API-nøkkel får du tilgang til modeller som Claude, GPT, Gemini, GLM og flere.", - "provider.connect.opencodeZen.visit.prefix": "Besøk ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " for å hente API-nøkkelen din.", - "provider.connect.oauth.code.visit.prefix": "Besøk ", - "provider.connect.oauth.code.visit.link": "denne lenken", - "provider.connect.oauth.code.visit.suffix": - " for å hente autorisasjonskoden din for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.", - "provider.connect.oauth.code.label": "{{method}} autorisasjonskode", - "provider.connect.oauth.code.placeholder": "Autorisasjonskode", - "provider.connect.oauth.code.required": "Autorisasjonskode er påkrevd", - "provider.connect.oauth.code.invalid": "Ugyldig autorisasjonskode", - "provider.connect.oauth.auto.visit.prefix": "Besøk ", - "provider.connect.oauth.auto.visit.link": "denne lenken", - "provider.connect.oauth.auto.visit.suffix": - " og skriv inn koden nedenfor for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.", - "provider.connect.oauth.auto.confirmationCode": "Bekreftelseskode", - "provider.connect.toast.connected.title": "{{provider}} tilkoblet", - "provider.connect.toast.connected.description": "{{provider}}-modeller er nå tilgjengelige.", - - "provider.custom.title": "Egendefinert leverandør", - "provider.custom.description.prefix": "Konfigurer en OpenAI-kompatibel leverandør. Se ", - "provider.custom.description.link": "dokumentasjon for leverandørkonfigurasjon", - "provider.custom.description.suffix": ".", - "provider.custom.field.providerID.label": "Leverandør-ID", - "provider.custom.field.providerID.placeholder": "minleverandør", - "provider.custom.field.providerID.description": "Små bokstaver, tall, bindestreker eller understreker", - "provider.custom.field.name.label": "Visningsnavn", - "provider.custom.field.name.placeholder": "Min AI-leverandør", - "provider.custom.field.baseURL.label": "Base-URL", - "provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1", - "provider.custom.field.apiKey.label": "API-nøkkel", - "provider.custom.field.apiKey.placeholder": "API-nøkkel", - "provider.custom.field.apiKey.description": "Valgfritt. La stå tomt hvis du administrerer autentisering via headers.", - "provider.custom.models.label": "Modeller", - "provider.custom.models.id.label": "ID", - "provider.custom.models.id.placeholder": "modell-id", - "provider.custom.models.name.label": "Navn", - "provider.custom.models.name.placeholder": "Visningsnavn", - "provider.custom.models.remove": "Fjern modell", - "provider.custom.models.add": "Legg til modell", - "provider.custom.headers.label": "Headers (valgfritt)", - "provider.custom.headers.key.label": "Header", - "provider.custom.headers.key.placeholder": "Header-Navn", - "provider.custom.headers.value.label": "Verdi", - "provider.custom.headers.value.placeholder": "verdi", - "provider.custom.headers.remove": "Fjern header", - "provider.custom.headers.add": "Legg til header", - "provider.custom.error.providerID.required": "Leverandør-ID er påkrevd", - "provider.custom.error.providerID.format": "Bruk små bokstaver, tall, bindestreker eller understreker", - "provider.custom.error.providerID.exists": "Den leverandør-IDen finnes allerede", - "provider.custom.error.name.required": "Visningsnavn er påkrevd", - "provider.custom.error.baseURL.required": "Base-URL er påkrevd", - "provider.custom.error.baseURL.format": "Må starte med http:// eller https://", - "provider.custom.error.required": "Påkrevd", - "provider.custom.error.duplicate": "Duplikat", - - "provider.disconnect.toast.disconnected.title": "{{provider}} frakoblet", - "provider.disconnect.toast.disconnected.description": "Modeller fra {{provider}} er ikke lenger tilgjengelige.", - - "model.tag.free": "Gratis", - "model.tag.latest": "Nyeste", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "tekst", - "model.input.image": "bilde", - "model.input.audio": "lyd", - "model.input.video": "video", - "model.input.pdf": "pdf", - "model.tooltip.allows": "Tillater: {{inputs}}", - "model.tooltip.reasoning.allowed": "Tillater resonnering", - "model.tooltip.reasoning.none": "Ingen resonnering", - "model.tooltip.context": "Kontekstgrense {{limit}}", - - "common.search.placeholder": "Søk", - "common.goBack": "Gå tilbake", - "common.goForward": "Gå frem", - "common.loading": "Laster", - "common.loading.ellipsis": "...", - "common.cancel": "Avbryt", - "common.connect": "Koble til", - "common.disconnect": "Koble fra", - "common.continue": "Send inn", - "common.submit": "Send inn", - "common.save": "Lagre", - "common.saving": "Lagrer...", - "common.default": "Standard", - "common.attachment": "vedlegg", - - "prompt.placeholder.shell": "Skriv inn shell-kommando... {{example}}", - "prompt.placeholder.normal": 'Spør om hva som helst... "{{example}}"', - "prompt.placeholder.simple": "Spør om hva som helst...", - "prompt.placeholder.summarizeComments": "Oppsummer kommentarer…", - "prompt.placeholder.summarizeComment": "Oppsummer kommentar…", - "prompt.mode.shell": "Shell", - "prompt.mode.normal": "Prompt", - "prompt.mode.shell.exit": "ESC for å avslutte", - - "prompt.example.1": "Fiks en TODO i kodebasen", - "prompt.example.2": "Hva er teknologistabelen i dette prosjektet?", - "prompt.example.3": "Fiks ødelagte tester", - "prompt.example.4": "Forklar hvordan autentisering fungerer", - "prompt.example.5": "Finn og fiks sikkerhetssårbarheter", - "prompt.example.6": "Legg til enhetstester for brukerservicen", - "prompt.example.7": "Refaktorer denne funksjonen for bedre lesbarhet", - "prompt.example.8": "Hva betyr denne feilen?", - "prompt.example.9": "Hjelp meg med å feilsøke dette problemet", - "prompt.example.10": "Generer API-dokumentasjon", - "prompt.example.11": "Optimaliser databasespørringer", - "prompt.example.12": "Legg til inputvalidering", - "prompt.example.13": "Lag en ny komponent for...", - "prompt.example.14": "Hvordan deployer jeg dette prosjektet?", - "prompt.example.15": "Gjennomgå koden min for beste praksis", - "prompt.example.16": "Legg til feilhåndtering i denne funksjonen", - "prompt.example.17": "Forklar dette regex-mønsteret", - "prompt.example.18": "Konverter dette til TypeScript", - "prompt.example.19": "Legg til logging i hele kodebasen", - "prompt.example.20": "Hvilke avhengigheter er utdaterte?", - "prompt.example.21": "Hjelp meg med å skrive et migreringsskript", - "prompt.example.22": "Implementer caching for dette endepunktet", - "prompt.example.23": "Legg til paginering i denne listen", - "prompt.example.24": "Lag en CLI-kommando for...", - "prompt.example.25": "Hvordan fungerer miljøvariabler her?", - - "prompt.popover.emptyResults": "Ingen matchende resultater", - "prompt.popover.emptyCommands": "Ingen matchende kommandoer", - "prompt.dropzone.label": "Slipp bilder, PDF-er eller tekstfiler her", - "prompt.dropzone.file.label": "Slipp for å @nevne fil", - "prompt.slash.badge.custom": "egendefinert", - "prompt.slash.badge.skill": "skill", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "aktiv", - "prompt.context.includeActiveFile": "Inkluder aktiv fil", - "prompt.context.removeActiveFile": "Fjern aktiv fil fra kontekst", - "prompt.context.removeFile": "Fjern fil fra kontekst", - "prompt.action.attachFile": "Legg ved fil", - "prompt.attachment.remove": "Fjern vedlegg", - "prompt.action.send": "Send", - "prompt.action.stop": "Stopp", - - "prompt.toast.pasteUnsupported.title": "Ikke støttet vedlegg", - "prompt.toast.pasteUnsupported.description": "Kun bilder, PDF-er eller tekstfiler kan legges ved her.", - "prompt.toast.modelAgentRequired.title": "Velg en agent og modell", - "prompt.toast.modelAgentRequired.description": "Velg en agent og modell før du sender en forespørsel.", - "prompt.toast.worktreeCreateFailed.title": "Kunne ikke opprette worktree", - "prompt.toast.sessionCreateFailed.title": "Kunne ikke opprette sesjon", - "prompt.toast.shellSendFailed.title": "Kunne ikke sende shell-kommando", - "prompt.toast.commandSendFailed.title": "Kunne ikke sende kommando", - "prompt.toast.promptSendFailed.title": "Kunne ikke sende forespørsel", - "prompt.toast.promptSendFailed.description": "Kunne ikke hente økt", - - "dialog.mcp.title": "MCP-er", - "dialog.mcp.description": "{{enabled}} av {{total}} aktivert", - "dialog.mcp.empty": "Ingen MCP-er konfigurert", - - "dialog.lsp.empty": "LSP-er automatisk oppdaget fra filtyper", - "dialog.plugins.empty": "Plugins konfigurert i opencode.json", - - "mcp.status.connected": "tilkoblet", - "mcp.status.failed": "mislyktes", - "mcp.status.needs_auth": "trenger autentisering", - "mcp.auth.clickToAuthenticate": "Klikk for å autentisere", - "mcp.status.disabled": "deaktivert", - - "dialog.fork.empty": "Ingen meldinger å forgrene fra", - - "dialog.directory.search.placeholder": "Søk etter mapper", - "dialog.directory.empty": "Ingen mapper funnet", - "dialog.directory.action.selectFile": "Velg fil", - "dialog.directory.action.selectFolder": "Velg mappe", - "dialog.directory.root": "Rot", - "dialog.directory.parent": "Overordnet", - "dialog.directory.readError": "Kan ikke lese denne mappen", - - "dialog.server.title": "Servere", - "dialog.server.description": "Bytt hvilken OpenCode-server denne appen kobler til.", - "dialog.server.search.placeholder": "Søk etter servere", - "dialog.server.empty": "Ingen servere ennå", - "dialog.server.add.title": "Legg til en server", - "dialog.server.add.url": "Server-URL", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "Kunne ikke koble til server", - "dialog.server.add.checking": "Sjekker...", - "dialog.server.add.button": "Legg til server", - "dialog.server.add.name": "Servernavn (valgfritt)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "Brukernavn (valgfritt)", - "dialog.server.add.password": "Passord (valgfritt)", - "dialog.server.edit.title": "Rediger server", - "dialog.server.default.title": "Standardserver", - "dialog.server.default.description": - "Koble til denne serveren ved oppstart i stedet for å starte en lokal server. Krever omstart.", - "dialog.server.default.none": "Ingen server valgt", - "dialog.server.default.set": "Sett gjeldende server som standard", - "dialog.server.default.clear": "Tøm", - "dialog.server.action.remove": "Fjern server", - - "dialog.server.menu.edit": "Rediger", - "dialog.server.menu.default": "Sett som standard", - "dialog.server.menu.defaultRemove": "Fjern standard", - "dialog.server.menu.delete": "Slett", - "dialog.server.current": "Gjeldende server", - "dialog.server.status.default": "Standard", - - "dialog.project.edit.title": "Rediger prosjekt", - "dialog.project.edit.name": "Navn", - "dialog.project.edit.icon": "Ikon", - "dialog.project.edit.icon.alt": "Prosjektikon", - "dialog.project.edit.icon.hint": "Klikk eller dra et bilde", - "dialog.project.edit.icon.recommended": "Anbefalt: 128x128px", - "dialog.project.edit.color": "Farge", - "dialog.project.edit.color.select": "Velg fargen {{color}}", - "dialog.project.edit.worktree.startup": "Oppstartsskript for arbeidsområde", - "dialog.project.edit.worktree.startup.description": "Kjører etter at et nytt arbeidsområde (worktree) er opprettet.", - "dialog.project.edit.worktree.startup.placeholder": "f.eks. bun install", - - "context.breakdown.title": "Kontekstfordeling", - "context.breakdown.note": 'Omtrentlig fordeling av input-tokens. "Annet" inkluderer verktøydefinisjoner og overhead.', - "context.breakdown.system": "System", - "context.breakdown.user": "Bruker", - "context.breakdown.assistant": "Assistent", - "context.breakdown.tool": "Verktøykall", - "context.breakdown.other": "Annet", - - "context.systemPrompt.title": "Systemprompt", - "context.rawMessages.title": "Rå meldinger", - - "context.stats.session": "Sesjon", - "context.stats.messages": "Meldinger", - "context.stats.provider": "Leverandør", - "context.stats.model": "Modell", - "context.stats.limit": "Kontekstgrense", - "context.stats.totalTokens": "Totalt antall tokens", - "context.stats.usage": "Forbruk", - "context.stats.inputTokens": "Input-tokens", - "context.stats.outputTokens": "Output-tokens", - "context.stats.reasoningTokens": "Resonnerings-tokens", - "context.stats.cacheTokens": "Cache-tokens (les/skriv)", - "context.stats.userMessages": "Brukermeldinger", - "context.stats.assistantMessages": "Assistentmeldinger", - "context.stats.totalCost": "Total kostnad", - "context.stats.sessionCreated": "Sesjon opprettet", - "context.stats.lastActivity": "Siste aktivitet", - - "context.usage.tokens": "Tokens", - "context.usage.usage": "Forbruk", - "context.usage.cost": "Kostnad", - "context.usage.clickToView": "Klikk for å se kontekst", - "context.usage.view": "Se kontekstforbruk", - - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - - "toast.language.title": "Språk", - "toast.language.description": "Byttet til {{language}}", - - "toast.theme.title": "Tema byttet", - "toast.scheme.title": "Fargevalg", - - "toast.workspace.enabled.title": "Arbeidsområder aktivert", - "toast.workspace.enabled.description": "Flere worktrees vises nå i sidefeltet", - "toast.workspace.disabled.title": "Arbeidsområder deaktivert", - "toast.workspace.disabled.description": "Kun hoved-worktree vises i sidefeltet", - - "toast.permissions.autoaccept.on.title": "Aksepterer tillatelser automatisk", - "toast.permissions.autoaccept.on.description": "Forespørsler om tillatelse vil bli godkjent automatisk", - "toast.permissions.autoaccept.off.title": "Stoppet automatisk akseptering av tillatelser", - "toast.permissions.autoaccept.off.description": "Forespørsler om tillatelse vil kreve godkjenning", - - "toast.model.none.title": "Ingen modell valgt", - "toast.model.none.description": "Koble til en leverandør for å oppsummere denne sesjonen", - - "toast.file.loadFailed.title": "Kunne ikke laste fil", - "toast.file.listFailed.title": "Kunne ikke liste filer", - - "toast.context.noLineSelection.title": "Ingen linjevalg", - "toast.context.noLineSelection.description": "Velg først et linjeområde i en filfane.", - - "toast.session.share.copyFailed.title": "Kunne ikke kopiere URL til utklippstavlen", - "toast.session.share.success.title": "Sesjon delt", - "toast.session.share.success.description": "Delings-URL kopiert til utklippstavlen!", - "toast.session.share.failed.title": "Kunne ikke dele sesjon", - "toast.session.share.failed.description": "Det oppstod en feil under deling av sesjonen", - - "toast.session.unshare.success.title": "Deling av sesjon stoppet", - "toast.session.unshare.success.description": "Sesjonen deles ikke lenger!", - "toast.session.unshare.failed.title": "Kunne ikke stoppe deling av sesjon", - "toast.session.unshare.failed.description": "Det oppstod en feil da delingen av sesjonen skulle stoppes", - - "toast.session.listFailed.title": "Kunne ikke laste sesjoner for {{project}}", - - "toast.update.title": "Oppdatering tilgjengelig", - "toast.update.description": "En ny versjon av OpenCode ({{version}}) er nå tilgjengelig for installasjon.", - "toast.update.action.installRestart": "Installer og start på nytt", - "toast.update.action.notYet": "Ikke nå", - - "error.page.title": "Noe gikk galt", - "error.page.description": "Det oppstod en feil under lasting av applikasjonen.", - "error.page.details.label": "Feildetaljer", - "error.page.action.restart": "Start på nytt", - "error.page.action.report": "Rapporter feil", - "error.page.action.reported": "Feil rapportert", - "error.page.action.checking": "Sjekker...", - "error.page.action.checkUpdates": "Se etter oppdateringer", - "error.page.action.updateTo": "Oppdater til {{version}}", - "error.page.report.prefix": "Vennligst rapporter denne feilen til OpenCode-teamet", - "error.page.report.discord": "på Discord", - "error.page.version": "Versjon: {{version}}", - - "error.dev.rootNotFound": - "Rotelement ikke funnet. Glemte du å legge det til i index.html? Eller kanskje id-attributten er feilstavet?", - - "error.serverSync.connectFailed": "Kunne ikke koble til server. Kjører det en server på `{{url}}`?", - "directory.error.invalidUrl": "Invalid directory in URL.", - - "error.chain.unknown": "Ukjent feil", - "error.chain.causedBy": "Forårsaket av:", - "error.chain.apiError": "API-feil", - "error.chain.status": "Status: {{status}}", - "error.chain.retryable": "Kan prøves på nytt: {{retryable}}", - "error.chain.responseBody": "Responsinnhold:\n{{body}}", - "error.chain.didYouMean": "Mente du: {{suggestions}}", - "error.chain.modelNotFound": "Modell ikke funnet: {{provider}}/{{model}}", - "error.chain.checkConfig": "Sjekk leverandør-/modellnavnene i konfigurasjonen din (opencode.json)", - "error.chain.mcpFailed": 'MCP-server "{{name}}" mislyktes. Merk at OpenCode ikke støtter MCP-autentisering ennå.', - "error.chain.providerAuthFailed": "Leverandørautentisering mislyktes ({{provider}}): {{message}}", - "error.chain.providerInitFailed": - 'Kunne ikke initialisere leverandør "{{provider}}". Sjekk legitimasjon og konfigurasjon.', - "error.chain.configJsonInvalid": "Konfigurasjonsfilen på {{path}} er ikke gyldig JSON(C)", - "error.chain.configJsonInvalidWithMessage": "Konfigurasjonsfilen på {{path}} er ikke gyldig JSON(C): {{message}}", - "error.chain.configDirectoryTypo": - 'Mappen "{{dir}}" i {{path}} er ikke gyldig. Gi mappen nytt navn til "{{suggestion}}" eller fjern den. Dette er en vanlig skrivefeil.', - "error.chain.configFrontmatterError": "Kunne ikke analysere frontmatter i {{path}}:\n{{message}}", - "error.chain.configInvalid": "Konfigurasjonsfilen på {{path}} er ugyldig", - "error.chain.configInvalidWithMessage": "Konfigurasjonsfilen på {{path}} er ugyldig: {{message}}", - - "notification.permission.title": "Tillatelse påkrevd", - "notification.permission.description": "{{sessionTitle}} i {{projectName}} trenger tillatelse", - "notification.question.title": "Spørsmål", - "notification.question.description": "{{sessionTitle}} i {{projectName}} har et spørsmål", - "notification.action.goToSession": "Gå til sesjon", - - "notification.session.responseReady.title": "Svar klart", - "notification.session.error.title": "Sesjonsfeil", - "notification.session.error.fallbackDescription": "Det oppstod en feil", - - "home.recentProjects": "Nylige prosjekter", - "home.empty.title": "Ingen nylige prosjekter", - "home.empty.description": "Kom i gang ved å åpne et lokalt prosjekt", - - "session.tab.session": "Sesjon", - "session.tab.review": "Gjennomgang", - "session.tab.context": "Kontekst", - "session.panel.reviewAndFiles": "Gjennomgang og filer", - "session.review.filesChanged": "{{count}} filer endret", - "session.review.change.one": "Endring", - "session.review.change.other": "Endringer", - "session.review.loadingChanges": "Laster endringer...", - "session.review.empty": "Ingen endringer i denne sesjonen ennå", - "session.review.noVcs": "Ingen Git-versjonskontrollsystem oppdaget, endringer vises ikke", - "session.review.noSnapshot": - "Snapshot-sporing er deaktivert i konfigurasjonen, så sesjonsendringer er ikke tilgjengelige", - "session.review.noChanges": "Ingen endringer", - - "session.files.selectToOpen": "Velg en fil å åpne", - "session.files.all": "Alle filer", - "session.files.empty": "Ingen filer", - "session.files.binaryContent": "Binær fil (innhold kan ikke vises)", - - "session.messages.renderEarlier": "Vis tidligere meldinger", - "session.messages.loadingEarlier": "Laster inn tidligere meldinger...", - "session.messages.loadEarlier": "Last inn tidligere meldinger", - "session.messages.loading": "Laster meldinger...", - "session.messages.jumpToLatest": "Hopp til nyeste", - - "session.context.addToContext": "Legg til {{selection}} i kontekst", - "session.todo.title": "Oppgaver", - "session.todo.collapse": "Skjul", - "session.todo.expand": "Utvid", - "session.followupDock.summary.one": "{{count}} melding i kø", - "session.followupDock.summary.other": "{{count}} meldinger i kø", - "session.followupDock.sendNow": "Send nå", - "session.followupDock.edit": "Rediger", - "session.followupDock.collapse": "Skjul meldinger i kø", - "session.followupDock.expand": "Utvid meldinger i kø", - "session.revertDock.summary.one": "{{count}} tilbakestilt melding", - "session.revertDock.summary.other": "{{count}} tilbakestilte meldinger", - "session.revertDock.collapse": "Skjul tilbakestilte meldinger", - "session.revertDock.expand": "Utvid tilbakestilte meldinger", - "session.revertDock.restore": "Gjenopprett melding", - - "session.new.title": "Bygg hva som helst", - "session.new.worktree.main": "Hovedgren", - "session.new.worktree.mainWithBranch": "Hovedgren ({{branch}})", - "session.new.worktree.create": "Opprett nytt worktree", - "session.new.lastModified": "Sist endret", - - "session.header.search.placeholder": "Søk i {{project}}", - "session.header.searchFiles": "Søk etter filer", - "session.header.openIn": "Åpne i", - "session.header.open.action": "Åpne {{app}}", - "session.header.open.ariaLabel": "Åpne i {{app}}", - "session.header.open.menu": "Åpne alternativer", - "session.header.open.copyPath": "Kopier bane", - - "status.popover.trigger": "Status", - "status.popover.ariaLabel": "Serverkonfigurasjoner", - "status.popover.tab.servers": "Servere", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "Plugins", - "status.popover.action.manageServers": "Administrer servere", - - "session.share.popover.title": "Publiser på nett", - "session.share.popover.description.shared": - "Denne sesjonen er offentlig på nettet. Den er tilgjengelig for alle med lenken.", - "session.share.popover.description.unshared": - "Del sesjonen offentlig på nettet. Den vil være tilgjengelig for alle med lenken.", - "session.share.action.share": "Del", - "session.share.action.publish": "Publiser", - "session.share.action.publishing": "Publiserer...", - "session.share.action.unpublish": "Avpubliser", - "session.share.action.unpublishing": "Avpubliserer...", - "session.share.action.view": "Vis", - "session.share.copy.copied": "Kopiert", - "session.share.copy.copyLink": "Kopier lenke", - - "lsp.tooltip.none": "Ingen LSP-servere", - "lsp.label.connected": "{{count}} LSP", - - "prompt.loading": "Laster prompt...", - "terminal.loading": "Laster terminal...", - "terminal.title": "Terminal", - "terminal.title.numbered": "Terminal {{number}}", - "terminal.close": "Lukk terminal", - "terminal.connectionLost.title": "Tilkobling mistet", - "terminal.connectionLost.description": - "Terminalforbindelsen ble avbrutt. Dette kan skje når serveren starter på nytt.", - - "common.closeTab": "Lukk fane", - "common.dismiss": "Avvis", - "common.requestFailed": "Forespørsel mislyktes", - "common.moreOptions": "Flere alternativer", - "common.learnMore": "Lær mer", - "common.rename": "Gi nytt navn", - "common.reset": "Tilbakestill", - "common.archive": "Arkiver", - "common.delete": "Slett", - "common.close": "Lukk", - "common.edit": "Rediger", - "common.loadMore": "Last flere", - "common.key.esc": "ESC", - - "sidebar.menu.toggle": "Veksle meny", - "sidebar.nav.projectsAndSessions": "Prosjekter og sesjoner", - "sidebar.settings": "Innstillinger", - "sidebar.help": "Hjelp", - "sidebar.workspaces.enable": "Aktiver arbeidsområder", - "sidebar.workspaces.disable": "Deaktiver arbeidsområder", - "sidebar.gettingStarted.title": "Kom i gang", - "sidebar.gettingStarted.line1": "OpenCode inkluderer gratis modeller så du kan starte umiddelbart.", - "sidebar.gettingStarted.line2": "Koble til en leverandør for å bruke modeller, inkl. Claude, GPT, Gemini osv.", - "sidebar.project.recentSessions": "Nylige sesjoner", - "sidebar.project.viewAllSessions": "Vis alle sesjoner", - "sidebar.project.clearNotifications": "Fjern varsler", - - "app.name.desktop": "OpenCode Desktop", - - "settings.section.desktop": "Skrivebord", - "settings.section.server": "Server", - "settings.tab.general": "Generelt", - "settings.tab.shortcuts": "Snarveier", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "WSL-integrasjon", - "settings.desktop.wsl.description": "Kjør OpenCode-serveren i WSL på Windows.", - - "settings.general.section.appearance": "Utseende", - "settings.general.section.notifications": "Systemvarsler", - "settings.general.section.updates": "Oppdateringer", - "settings.general.section.sounds": "Lydeffekter", - "settings.general.section.feed": "Feed", - "settings.general.section.display": "Skjerm", - - "settings.general.row.language.title": "Språk", - "settings.general.row.language.description": "Endre visningsspråket for OpenCode", - "settings.general.row.appearance.title": "Utseende", - "settings.general.row.appearance.description": "Tilpass hvordan OpenCode ser ut på enheten din", - "settings.general.row.colorScheme.title": "Fargevalg", - "settings.general.row.colorScheme.description": "Velg om OpenCode skal følge systemets, lyst eller mørkt tema", - "settings.general.row.theme.title": "Tema", - "settings.general.row.theme.description": "Tilpass hvordan OpenCode er tematisert.", - "settings.general.row.font.title": "Kodefont", - "settings.general.row.font.description": "Tilpass skrifttypen som brukes i kodeblokker", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "UI-skrift", - "settings.general.row.uiFont.description": "Tilpass skrifttypen som brukes i hele grensesnittet", - "settings.general.row.followup.title": "Oppfølgingsadferd", - "settings.general.row.followup.description": "Velg om oppfølgingsspørsmål skal kjøres umiddelbart eller vente i kø", - "settings.general.row.followup.option.queue": "Kø", - "settings.general.row.followup.option.steer": "Styr", - "settings.general.row.reasoningSummaries.title": "Vis resonneringssammendrag", - "settings.general.row.reasoningSummaries.description": "Vis sammendrag av modellresonnering i tidslinjen", - "settings.general.row.shellToolPartsExpanded.title": "Utvid shell-verktøydeler", - "settings.general.row.shellToolPartsExpanded.description": "Vis shell-verktøydeler utvidet som standard i tidslinjen", - "settings.general.row.editToolPartsExpanded.title": "Utvid edit-verktøydeler", - "settings.general.row.editToolPartsExpanded.description": - "Vis edit-, write- og patch-verktøydeler utvidet som standard i tidslinjen", - "settings.general.row.wayland.title": "Bruk innebygd Wayland", - "settings.general.row.wayland.description": "Deaktiver X11-fallback på Wayland. Krever omstart.", - "settings.general.row.wayland.tooltip": - "På Linux med skjermer med blandet oppdateringsfrekvens kan innebygd Wayland være mer stabilt.", - - "settings.general.row.releaseNotes.title": "Utgivelsesnotater", - "settings.general.row.releaseNotes.description": 'Vis "Hva er nytt"-vinduer etter oppdateringer', - - "settings.updates.row.startup.title": "Se etter oppdateringer ved oppstart", - "settings.updates.row.startup.description": "Se automatisk etter oppdateringer når OpenCode starter", - "settings.updates.row.check.title": "Se etter oppdateringer", - "settings.updates.row.check.description": "Se etter oppdateringer manuelt og installer hvis tilgjengelig", - "settings.updates.action.checkNow": "Sjekk nå", - "settings.updates.action.checking": "Sjekker...", - "settings.updates.toast.latest.title": "Du er oppdatert", - "settings.updates.toast.latest.description": "Du bruker den nyeste versjonen av OpenCode.", - "sound.option.none": "Ingen", - "sound.option.alert01": "Varsel 01", - "sound.option.alert02": "Varsel 02", - "sound.option.alert03": "Varsel 03", - "sound.option.alert04": "Varsel 04", - "sound.option.alert05": "Varsel 05", - "sound.option.alert06": "Varsel 06", - "sound.option.alert07": "Varsel 07", - "sound.option.alert08": "Varsel 08", - "sound.option.alert09": "Varsel 09", - "sound.option.alert10": "Varsel 10", - "sound.option.bipbop01": "Bip-bop 01", - "sound.option.bipbop02": "Bip-bop 02", - "sound.option.bipbop03": "Bip-bop 03", - "sound.option.bipbop04": "Bip-bop 04", - "sound.option.bipbop05": "Bip-bop 05", - "sound.option.bipbop06": "Bip-bop 06", - "sound.option.bipbop07": "Bip-bop 07", - "sound.option.bipbop08": "Bip-bop 08", - "sound.option.bipbop09": "Bip-bop 09", - "sound.option.bipbop10": "Bip-bop 10", - "sound.option.staplebops01": "Staplebops 01", - "sound.option.staplebops02": "Staplebops 02", - "sound.option.staplebops03": "Staplebops 03", - "sound.option.staplebops04": "Staplebops 04", - "sound.option.staplebops05": "Staplebops 05", - "sound.option.staplebops06": "Staplebops 06", - "sound.option.staplebops07": "Staplebops 07", - "sound.option.nope01": "Nei 01", - "sound.option.nope02": "Nei 02", - "sound.option.nope03": "Nei 03", - "sound.option.nope04": "Nei 04", - "sound.option.nope05": "Nei 05", - "sound.option.nope06": "Nei 06", - "sound.option.nope07": "Nei 07", - "sound.option.nope08": "Nei 08", - "sound.option.nope09": "Nei 09", - "sound.option.nope10": "Nei 10", - "sound.option.nope11": "Nei 11", - "sound.option.nope12": "Nei 12", - "sound.option.yup01": "Ja 01", - "sound.option.yup02": "Ja 02", - "sound.option.yup03": "Ja 03", - "sound.option.yup04": "Ja 04", - "sound.option.yup05": "Ja 05", - "sound.option.yup06": "Ja 06", - - "settings.general.notifications.agent.title": "Agent", - "settings.general.notifications.agent.description": - "Vis systemvarsel når agenten er ferdig eller trenger oppmerksomhet", - "settings.general.notifications.permissions.title": "Tillatelser", - "settings.general.notifications.permissions.description": "Vis systemvarsel når en tillatelse er påkrevd", - "settings.general.notifications.errors.title": "Feil", - "settings.general.notifications.errors.description": "Vis systemvarsel når det oppstår en feil", - - "settings.general.sounds.agent.title": "Agent", - "settings.general.sounds.agent.description": "Spill av lyd når agenten er ferdig eller trenger oppmerksomhet", - "settings.general.sounds.permissions.title": "Tillatelser", - "settings.general.sounds.permissions.description": "Spill av lyd når en tillatelse er påkrevd", - "settings.general.sounds.errors.title": "Feil", - "settings.general.sounds.errors.description": "Spill av lyd når det oppstår en feil", - - "settings.shortcuts.title": "Tastatursnarveier", - "settings.shortcuts.reset.button": "Tilbakestill til standard", - "settings.shortcuts.reset.toast.title": "Snarveier tilbakestilt", - "settings.shortcuts.reset.toast.description": "Tastatursnarveier er tilbakestilt til standard.", - "settings.shortcuts.conflict.title": "Snarvei allerede i bruk", - "settings.shortcuts.conflict.description": "{{keybind}} er allerede tilordnet til {{titles}}.", - "settings.shortcuts.unassigned": "Ikke tilordnet", - "settings.shortcuts.pressKeys": "Trykk taster", - "settings.shortcuts.search.placeholder": "Søk etter snarveier", - "settings.shortcuts.search.empty": "Ingen snarveier funnet", - - "settings.shortcuts.group.general": "Generelt", - "settings.shortcuts.group.session": "Sesjon", - "settings.shortcuts.group.navigation": "Navigasjon", - "settings.shortcuts.group.modelAndAgent": "Modell og agent", - "settings.shortcuts.group.terminal": "Terminal", - "settings.shortcuts.group.prompt": "Prompt", - - "settings.providers.title": "Leverandører", - "settings.providers.description": "Leverandørinnstillinger vil kunne konfigureres her.", - "settings.providers.section.connected": "Tilkoblede leverandører", - "settings.providers.connected.empty": "Ingen tilkoblede leverandører", - "settings.providers.section.popular": "Populære leverandører", - "settings.providers.tag.environment": "Miljø", - "settings.providers.tag.config": "Konfigurasjon", - "settings.providers.tag.custom": "Tilpasset", - "settings.providers.tag.other": "Annet", - "settings.models.title": "Modeller", - "settings.models.description": "Modellinnstillinger vil kunne konfigureres her.", - "settings.agents.title": "Agenter", - "settings.agents.description": "Agentinnstillinger vil kunne konfigureres her.", - "settings.commands.title": "Kommandoer", - "settings.commands.description": "Kommandoinnstillinger vil kunne konfigureres her.", - "settings.mcp.title": "MCP", - "settings.mcp.description": "MCP-innstillinger vil kunne konfigureres her.", - - "settings.permissions.title": "Tillatelser", - "settings.permissions.description": "Kontroller hvilke verktøy serveren kan bruke som standard.", - "settings.permissions.section.tools": "Verktøy", - "settings.permissions.toast.updateFailed.title": "Kunne ikke oppdatere tillatelser", - - "settings.permissions.action.allow": "Tillat", - "settings.permissions.action.ask": "Spør", - "settings.permissions.action.deny": "Avslå", - - "settings.permissions.tool.read.title": "Les", - "settings.permissions.tool.read.description": "Lesing av en fil (matcher filbanen)", - "settings.permissions.tool.edit.title": "Rediger", - "settings.permissions.tool.edit.description": - "Endre filer, inkludert redigeringer, skriving, patcher og multi-redigeringer", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "Match filer ved hjelp av glob-mønstre", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "Søk i filinnhold ved hjelp av regulære uttrykk", - "settings.permissions.tool.list.title": "Liste", - "settings.permissions.tool.list.description": "List filer i en mappe", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "Kjør shell-kommandoer", - "settings.permissions.tool.task.title": "Oppgave", - "settings.permissions.tool.task.description": "Start underagenter", - "settings.permissions.tool.skill.title": "Ferdighet", - "settings.permissions.tool.skill.description": "Last en ferdighet etter navn", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "Kjør språkserverforespørsler", - "settings.permissions.tool.todowrite.title": "Skriv gjøremål", - "settings.permissions.tool.todowrite.description": "Oppdater gjøremålslisten", - "settings.permissions.tool.webfetch.title": "Webhenting", - "settings.permissions.tool.webfetch.description": "Hent innhold fra en URL", - "settings.permissions.tool.websearch.title": "Websøk", - "settings.permissions.tool.websearch.description": "Søk på nettet", - "settings.permissions.tool.external_directory.title": "Ekstern mappe", - "settings.permissions.tool.external_directory.description": "Få tilgang til filer utenfor prosjektmappen", - "settings.permissions.tool.doom_loop.title": "Doom Loop", - "settings.permissions.tool.doom_loop.description": "Oppdager gjentatte verktøykall med identisk input", - - "session.delete.failed.title": "Kunne ikke slette sesjon", - "session.delete.title": "Slett sesjon", - "session.delete.confirm": 'Slette sesjonen "{{name}}"?', - "session.delete.button": "Slett sesjon", - - "workspace.new": "Nytt arbeidsområde", - "workspace.type.local": "lokal", - "workspace.type.sandbox": "sandkasse", - "workspace.create.failed.title": "Kunne ikke opprette arbeidsområde", - "workspace.delete.failed.title": "Kunne ikke slette arbeidsområde", - "workspace.resetting.title": "Tilbakestiller arbeidsområde", - "workspace.resetting.description": "Dette kan ta et minutt.", - "workspace.reset.failed.title": "Kunne ikke tilbakestille arbeidsområde", - "workspace.reset.success.title": "Arbeidsområde tilbakestilt", - "workspace.reset.success.description": "Arbeidsområdet samsvarer nå med standardgrenen.", - "workspace.error.stillPreparing": "Arbeidsområdet klargjøres fortsatt", - "workspace.status.checking": "Sjekker for ikke-sammenslåtte endringer...", - "workspace.status.error": "Kunne ikke bekrefte git-status.", - "workspace.status.clean": "Ingen ikke-sammenslåtte endringer oppdaget.", - "workspace.status.dirty": "Ikke-sammenslåtte endringer oppdaget i dette arbeidsområdet.", - "workspace.delete.title": "Slett arbeidsområde", - "workspace.delete.confirm": 'Slette arbeidsområdet "{{name}}"?', - "workspace.delete.button": "Slett arbeidsområde", - "workspace.reset.title": "Tilbakestill arbeidsområde", - "workspace.reset.confirm": 'Tilbakestille arbeidsområdet "{{name}}"?', - "workspace.reset.button": "Tilbakestill arbeidsområde", - "workspace.reset.archived.none": "Ingen aktive sesjoner vil bli arkivert.", - "workspace.reset.archived.one": "1 sesjon vil bli arkivert.", - "workspace.reset.archived.many": "{{count}} sesjoner vil bli arkivert.", - "workspace.reset.note": "Dette vil tilbakestille arbeidsområdet til å samsvare med standardgrenen.", - "common.open": "Åpne", - "dialog.releaseNotes.action.getStarted": "Kom i gang", - "dialog.releaseNotes.action.next": "Neste", - "dialog.releaseNotes.action.hideFuture": "Ikke vis disse igjen", - "dialog.releaseNotes.media.alt": "Forhåndsvisning av utgivelse", - "toast.project.reloadFailed.title": "Kunne ikke laste inn {{project}} på nytt", - "error.server.invalidConfiguration": "Ugyldig konfigurasjon", - "common.moreCountSuffix": " (+{{count}} mer)", - "common.time.justNow": "Akkurat nå", - "common.time.minutesAgo.short": "{{count}} m siden", - "common.time.hoursAgo.short": "{{count}} t siden", - "common.time.daysAgo.short": "{{count}} d siden", - "settings.providers.connected.environmentDescription": "Koblet til fra miljøvariablene dine", - "settings.providers.custom.description": "Legg til en OpenAI-kompatibel leverandør via basis-URL.", - - "app.server.unreachable": "Kunne ikke nå {{server}}", - "app.server.retrying": "Prøver på nytt automatisk...", - "app.server.otherServers": "Andre servere", - "dialog.server.add.usernamePlaceholder": "brukernavn", - "dialog.server.add.passwordPlaceholder": "passord", - "server.row.noUsername": "inget brukernavn", - "session.review.noVcs.createGit.title": "Opprett et Git-depot", - "session.review.noVcs.createGit.description": "Spor, gjennomgå og angre endringer i dette prosjektet", - "session.review.noVcs.createGit.actionLoading": "Oppretter Git-depot...", - "session.review.noVcs.createGit.action": "Opprett Git-depot", - "session.todo.progress": "{{done}} av {{total}} oppgaver fullført", - "session.question.progress": "{{current}} av {{total}} spørsmål", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "Filutforsker", - "session.header.open.fileManager": "Filbehandler", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "Terminal", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "Utviklingsytelsesdiagnostikk", - "debugBar.na": "i/t", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": - "Siste fullførte ruteovergang som berører en sesjonsside, målt fra ruterstart til første opptegning etter at den har roet seg.", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "Rullende bilder per sekund over de siste 5 sekundene.", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "Verste bildetid over de siste 5 sekundene.", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "Bilder over 32ms i de siste 5 sekundene.", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "Blokkert tid og antall lange oppgaver i de siste 5 sekundene. Maks oppgave: {{max}}.", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "Verste observerte inndataforsinkelse i de siste 5 sekundene.", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": - "Omtrentlig interaksjonsvarighet over de siste 5 sekundene. Dette er INP-lignende, ikke den offisielle Web Vitals INP.", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "Kumulativ layoutforskyvning for gjeldende app-levetid.", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "Brukt JS-heap vs heap-grense. Kun Chromium.", - "debugBar.mem.tip": "Brukt JS-heap vs heap-grense. {{used}} av {{limit}}.", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "Mellomrom", - "common.key.backspace": "Backspace", - "common.key.enter": "Enter", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "ukjent", - "error.page.circular": "[Sirkulær]", - "error.serverSDK.noServerAvailable": "Ingen server tilgjengelig", - "error.serverSDK.serverNotAvailable": "Server ikke tilgjengelig", - "error.childStore.persistedCacheCreateFailed": "Kunne ikke opprette vedvarende hurtigbuffer", - "error.childStore.persistedProjectMetadataCreateFailed": "Kunne ikke opprette vedvarende prosjektmetadata", - "error.childStore.persistedProjectIconCreateFailed": "Kunne ikke opprette vedvarende prosjektikon", - "error.childStore.storeCreateFailed": "Kunne ikke opprette lager", - "terminal.connectionLost.abnormalClose": "WebSocket lukket unormalt: {{code}}", -} satisfies Partial> diff --git a/packages/app/src/i18n/parity.test.ts b/packages/app/src/i18n/parity.test.ts deleted file mode 100644 index 8ad1beb56b..0000000000 --- a/packages/app/src/i18n/parity.test.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { describe, expect, test } from "bun:test" -import { dict as en } from "./en" -import { dict as ar } from "./ar" -import { dict as br } from "./br" -import { dict as bs } from "./bs" -import { dict as da } from "./da" -import { dict as de } from "./de" -import { dict as es } from "./es" -import { dict as fr } from "./fr" -import { dict as ja } from "./ja" -import { dict as ko } from "./ko" -import { dict as no } from "./no" -import { dict as pl } from "./pl" -import { dict as ru } from "./ru" -import { dict as uk } from "./uk" -import { dict as th } from "./th" -import { dict as zh } from "./zh" -import { dict as zht } from "./zht" -import { dict as tr } from "./tr" - -const locales = [ar, br, bs, da, de, es, fr, ja, ko, no, pl, ru, uk, th, tr, zh, zht] -const keys = ["command.session.previous.unseen", "command.session.next.unseen"] as const - -describe("i18n parity", () => { - test("non-English locales translate targeted unseen session keys", () => { - for (const locale of locales) { - for (const key of keys) { - expect(locale[key]).toBeDefined() - expect(locale[key]).not.toBe(en[key]) - } - } - }) -}) diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts deleted file mode 100644 index fcf9927da0..0000000000 --- a/packages/app/src/i18n/pl.ts +++ /dev/null @@ -1,860 +0,0 @@ -export const dict = { - "command.category.suggested": "Sugerowane", - "command.category.view": "Widok", - "command.category.project": "Projekt", - "command.category.provider": "Dostawca", - "command.category.server": "Serwer", - "command.category.session": "Sesja", - "command.category.theme": "Motyw", - "command.category.language": "Język", - "command.category.file": "Plik", - "command.category.context": "Kontekst", - "command.category.terminal": "Terminal", - "command.category.model": "Model", - "command.category.mcp": "MCP", - "command.category.agent": "Agent", - "command.category.permissions": "Uprawnienia", - "command.category.workspace": "Przestrzeń robocza", - "command.category.settings": "Ustawienia", - "theme.scheme.system": "Systemowy", - "theme.scheme.light": "Jasny", - "theme.scheme.dark": "Ciemny", - "command.sidebar.toggle": "Przełącz pasek boczny", - "command.project.open": "Otwórz projekt", - "command.provider.connect": "Połącz dostawcę", - "command.server.switch": "Przełącz serwer", - "command.settings.open": "Otwórz ustawienia", - "command.session.previous": "Poprzednia sesja", - "command.session.next": "Następna sesja", - "command.session.previous.unseen": "Poprzednia nieprzeczytana sesja", - "command.session.next.unseen": "Następna nieprzeczytana sesja", - "command.session.archive": "Zarchiwizuj sesję", - "command.palette": "Paleta poleceń", - "command.theme.cycle": "Przełącz motyw", - "command.theme.set": "Użyj motywu: {{theme}}", - "command.theme.scheme.cycle": "Przełącz schemat kolorów", - "command.theme.scheme.set": "Użyj schematu kolorów: {{scheme}}", - "command.language.cycle": "Przełącz język", - "command.language.set": "Użyj języka: {{language}}", - "command.session.new": "Nowa sesja", - "command.file.open": "Otwórz plik", - "command.tab.close": "Zamknij kartę", - "command.context.addSelection": "Dodaj zaznaczenie do kontekstu", - "command.context.addSelection.description": "Dodaj zaznaczone linie z bieżącego pliku", - "command.input.focus": "Fokus na pole wejściowe", - "command.terminal.toggle": "Przełącz terminal", - "command.fileTree.toggle": "Przełącz drzewo plików", - "command.review.toggle": "Przełącz przegląd", - "command.terminal.new": "Nowy terminal", - "command.terminal.new.description": "Utwórz nową kartę terminala", - "command.steps.toggle": "Przełącz kroki", - "command.steps.toggle.description": "Pokaż lub ukryj kroki dla bieżącej wiadomości", - "command.message.previous": "Poprzednia wiadomość", - "command.message.previous.description": "Przejdź do poprzedniej wiadomości użytkownika", - "command.message.next": "Następna wiadomość", - "command.message.next.description": "Przejdź do następnej wiadomości użytkownika", - "command.model.choose": "Wybierz model", - "command.model.choose.description": "Wybierz inny model", - "command.mcp.toggle": "Przełącz MCP", - "command.mcp.toggle.description": "Przełącz MCP", - "command.agent.cycle": "Przełącz agenta", - "command.agent.cycle.description": "Przełącz na następnego agenta", - "command.agent.cycle.reverse": "Przełącz agenta wstecz", - "command.agent.cycle.reverse.description": "Przełącz na poprzedniego agenta", - "command.model.variant.cycle": "Przełącz wysiłek myślowy", - "command.model.variant.cycle.description": "Przełącz na następny poziom wysiłku", - "command.prompt.mode.shell": "Terminal", - "command.prompt.mode.normal": "Prompt", - "command.permissions.autoaccept.enable": "Automatycznie akceptuj uprawnienia", - "command.permissions.autoaccept.disable": "Zatrzymaj automatyczne akceptowanie uprawnień", - "command.workspace.toggle": "Przełącz przestrzenie robocze", - "command.workspace.toggle.description": "Włącz lub wyłącz wiele przestrzeni roboczych na pasku bocznym", - "command.session.undo": "Cofnij", - "command.session.undo.description": "Cofnij ostatnią wiadomość", - "command.session.redo": "Ponów", - "command.session.redo.description": "Ponów ostatnią cofniętą wiadomość", - "command.session.compact": "Kompaktuj sesję", - "command.session.compact.description": "Podsumuj sesję, aby zmniejszyć rozmiar kontekstu", - "command.session.fork": "Rozwidlij od wiadomości", - "command.session.fork.description": "Utwórz nową sesję od poprzedniej wiadomości", - "command.session.share": "Udostępnij sesję", - "command.session.share.description": "Udostępnij tę sesję i skopiuj URL do schowka", - "command.session.unshare": "Przestań udostępniać sesję", - "command.session.unshare.description": "Zatrzymaj udostępnianie tej sesji", - "palette.search.placeholder": "Szukaj plików, poleceń i sesji", - "palette.empty": "Brak wyników", - "palette.group.commands": "Polecenia", - "palette.group.files": "Pliki", - "dialog.provider.search.placeholder": "Szukaj dostawców", - "dialog.provider.empty": "Nie znaleziono dostawców", - "dialog.provider.group.popular": "Popularne", - "dialog.provider.group.other": "Inne", - "dialog.provider.tag.recommended": "Zalecane", - "dialog.provider.opencode.note": "Wyselekcjonowane modele, w tym Claude, GPT, Gemini i inne", - "dialog.provider.opencode.tagline": "Niezawodne, zoptymalizowane modele", - "dialog.provider.opencodeGo.tagline": "Tania subskrypcja dla każdego", - "dialog.provider.anthropic.note": "Bezpośredni dostęp do modeli Claude, w tym Pro i Max", - "dialog.provider.copilot.note": "Modele AI do pomocy w kodowaniu przez GitHub Copilot", - "dialog.provider.openai.note": "Modele GPT do szybkich i wszechstronnych zadań AI", - "dialog.provider.google.note": "Modele Gemini do szybkich i ustrukturyzowanych odpowiedzi", - "dialog.provider.openrouter.note": "Dostęp do wszystkich obsługiwanych modeli od jednego dostawcy", - "dialog.provider.vercel.note": "Ujednolicony dostęp do modeli AI z inteligentnym routingiem", - "dialog.model.select.title": "Wybierz model", - "dialog.model.search.placeholder": "Szukaj modeli", - "dialog.model.empty": "Brak wyników modelu", - "dialog.model.manage": "Zarządzaj modelami", - "dialog.model.manage.description": "Dostosuj, które modele pojawiają się w wyborze modelu.", - "dialog.model.manage.provider.toggle": "Przełącz wszystkie modele {{provider}}", - "dialog.model.unpaid.freeModels.title": "Darmowe modele dostarczane przez OpenCode", - "dialog.model.unpaid.addMore.title": "Dodaj więcej modeli od popularnych dostawców", - "dialog.provider.viewAll": "Zobacz więcej dostawców", - "provider.connect.title": "Połącz {{provider}}", - "provider.connect.title.anthropicProMax": "Zaloguj się z Claude Pro/Max", - "provider.connect.selectMethod": "Wybierz metodę logowania dla {{provider}}.", - "provider.connect.method.apiKey": "Klucz API", - "provider.connect.status.inProgress": "Autoryzacja w toku...", - "provider.connect.status.waiting": "Oczekiwanie na autoryzację...", - "provider.connect.status.failed": "Autoryzacja nie powiodła się: {{error}}", - "provider.connect.apiKey.description": - "Wprowadź swój klucz API {{provider}}, aby połączyć konto i używać modeli {{provider}} w OpenCode.", - "provider.connect.apiKey.label": "Klucz API {{provider}}", - "provider.connect.apiKey.placeholder": "Klucz API", - "provider.connect.apiKey.required": "Klucz API jest wymagany", - "provider.connect.opencodeZen.line1": - "OpenCode Zen daje dostęp do wybranego zestawu niezawodnych, zoptymalizowanych modeli dla agentów kodujących.", - "provider.connect.opencodeZen.line2": - "Z jednym kluczem API uzyskasz dostęp do modeli takich jak Claude, GPT, Gemini, GLM i więcej.", - "provider.connect.opencodeZen.visit.prefix": "Odwiedź ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": ", aby odebrać swój klucz API.", - "provider.connect.oauth.code.visit.prefix": "Odwiedź ", - "provider.connect.oauth.code.visit.link": "ten link", - "provider.connect.oauth.code.visit.suffix": - ", aby odebrać kod autoryzacyjny, połączyć konto i używać modeli {{provider}} w OpenCode.", - "provider.connect.oauth.code.label": "Kod autoryzacyjny {{method}}", - "provider.connect.oauth.code.placeholder": "Kod autoryzacyjny", - "provider.connect.oauth.code.required": "Kod autoryzacyjny jest wymagany", - "provider.connect.oauth.code.invalid": "Nieprawidłowy kod autoryzacyjny", - "provider.connect.oauth.auto.visit.prefix": "Odwiedź ", - "provider.connect.oauth.auto.visit.link": "ten link", - "provider.connect.oauth.auto.visit.suffix": - " i wprowadź poniższy kod, aby połączyć konto i używać modeli {{provider}} w OpenCode.", - "provider.connect.oauth.auto.confirmationCode": "Kod potwierdzający", - "provider.connect.toast.connected.title": "Połączono {{provider}}", - "provider.connect.toast.connected.description": "Modele {{provider}} są teraz dostępne do użycia.", - "provider.custom.title": "Dostawca niestandardowy", - "provider.custom.description.prefix": "Skonfiguruj dostawcę zgodnego z OpenAI. Zobacz ", - "provider.custom.description.link": "dokumentację konfiguracji dostawcy", - "provider.custom.description.suffix": ".", - "provider.custom.field.providerID.label": "ID dostawcy", - "provider.custom.field.providerID.placeholder": "mojdostawca", - "provider.custom.field.providerID.description": "Małe litery, cyfry, łączniki lub podkreślenia", - "provider.custom.field.name.label": "Nazwa wyświetlana", - "provider.custom.field.name.placeholder": "Mój Dostawca AI", - "provider.custom.field.baseURL.label": "Bazowy URL", - "provider.custom.field.baseURL.placeholder": "https://api.mojdostawca.com/v1", - "provider.custom.field.apiKey.label": "Klucz API", - "provider.custom.field.apiKey.placeholder": "Klucz API", - "provider.custom.field.apiKey.description": - "Opcjonalne. Pozostaw puste, jeśli zarządzasz autoryzacją przez nagłówki.", - "provider.custom.models.label": "Modele", - "provider.custom.models.id.label": "ID", - "provider.custom.models.id.placeholder": "model-id", - "provider.custom.models.name.label": "Nazwa", - "provider.custom.models.name.placeholder": "Nazwa wyświetlana", - "provider.custom.models.remove": "Usuń model", - "provider.custom.models.add": "Dodaj model", - "provider.custom.headers.label": "Nagłówki (opcjonalne)", - "provider.custom.headers.key.label": "Nagłówek", - "provider.custom.headers.key.placeholder": "Nazwa-Naglowka", - "provider.custom.headers.value.label": "Wartość", - "provider.custom.headers.value.placeholder": "wartość", - "provider.custom.headers.remove": "Usuń nagłówek", - "provider.custom.headers.add": "Dodaj nagłówek", - "provider.custom.error.providerID.required": "ID dostawcy jest wymagane", - "provider.custom.error.providerID.format": "Używaj małych liter, cyfr, łączników lub podkreśleń", - "provider.custom.error.providerID.exists": "To ID dostawcy już istnieje", - "provider.custom.error.name.required": "Nazwa wyświetlana jest wymagana", - "provider.custom.error.baseURL.required": "Bazowy URL jest wymagany", - "provider.custom.error.baseURL.format": "Musi zaczynać się od http:// lub https://", - "provider.custom.error.required": "Wymagane", - "provider.custom.error.duplicate": "Duplikat", - "provider.disconnect.toast.disconnected.title": "Rozłączono {{provider}}", - "provider.disconnect.toast.disconnected.description": "Modele {{provider}} nie są już dostępne.", - "model.tag.free": "Darmowy", - "model.tag.latest": "Najnowszy", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "tekst", - "model.input.image": "obraz", - "model.input.audio": "audio", - "model.input.video": "wideo", - "model.input.pdf": "pdf", - "model.tooltip.allows": "Obsługuje: {{inputs}}", - "model.tooltip.reasoning.allowed": "Obsługuje wnioskowanie", - "model.tooltip.reasoning.none": "Brak wnioskowania", - "model.tooltip.context": "Limit kontekstu {{limit}}", - "common.search.placeholder": "Szukaj", - "common.goBack": "Wstecz", - "common.goForward": "Dalej", - "common.loading": "Ładowanie", - "common.loading.ellipsis": "...", - "common.cancel": "Anuluj", - "common.connect": "Połącz", - "common.disconnect": "Rozłącz", - "common.continue": "Prześlij", - "common.submit": "Prześlij", - "common.save": "Zapisz", - "common.saving": "Zapisywanie...", - "common.default": "Domyślny", - "common.attachment": "załącznik", - "prompt.placeholder.shell": "Wpisz polecenie terminala... {{example}}", - "prompt.placeholder.normal": 'Zapytaj o cokolwiek... "{{example}}"', - "prompt.placeholder.simple": "Zapytaj o cokolwiek...", - "prompt.placeholder.summarizeComments": "Podsumuj komentarze…", - "prompt.placeholder.summarizeComment": "Podsumuj komentarz…", - "prompt.mode.shell": "Terminal", - "prompt.mode.normal": "Prompt", - "prompt.mode.shell.exit": "esc aby wyjść", - "prompt.example.1": "Napraw TODO w bazie kodu", - "prompt.example.2": "Jaki jest stos technologiczny tego projektu?", - "prompt.example.3": "Napraw zepsute testy", - "prompt.example.4": "Wyjaśnij jak działa uwierzytelnianie", - "prompt.example.5": "Znajdź i napraw luki w zabezpieczeniach", - "prompt.example.6": "Dodaj testy jednostkowe dla serwisu użytkownika", - "prompt.example.7": "Zrefaktoryzuj tę funkcję, aby była bardziej czytelna", - "prompt.example.8": "Co oznacza ten błąd?", - "prompt.example.9": "Pomóż mi zdebugować ten problem", - "prompt.example.10": "Wygeneruj dokumentację API", - "prompt.example.11": "Zoptymalizuj zapytania do bazy danych", - "prompt.example.12": "Dodaj walidację danych wejściowych", - "prompt.example.13": "Utwórz nowy komponent dla...", - "prompt.example.14": "Jak wdrożyć ten projekt?", - "prompt.example.15": "Sprawdź mój kod pod kątem najlepszych praktyk", - "prompt.example.16": "Dodaj obsługę błędów do tej funkcję", - "prompt.example.17": "Wyjaśnij ten wzorzec regex", - "prompt.example.18": "Przekonwertuj to na TypeScript", - "prompt.example.19": "Dodaj logowanie w całej bazie kodu", - "prompt.example.20": "Które zależności są przestarzałe?", - "prompt.example.21": "Pomóż mi napisać skrypt migracyjny", - "prompt.example.22": "Zaimplementuj cachowanie dla tego punktu końcowego", - "prompt.example.23": "Dodaj stronicowanie do tej listy", - "prompt.example.24": "Utwórz polecenie CLI dla...", - "prompt.example.25": "Jak działają tutaj zmienne środowiskowe?", - "prompt.popover.emptyResults": "Brak pasujących wyników", - "prompt.popover.emptyCommands": "Brak pasujących poleceń", - "prompt.dropzone.label": "Upuść tutaj obrazy, pliki PDF lub pliki tekstowe", - "prompt.dropzone.file.label": "Upuść, aby @wspomnieć plik", - "prompt.slash.badge.custom": "własne", - "prompt.slash.badge.skill": "skill", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "aktywny", - "prompt.context.includeActiveFile": "Dołącz aktywny plik", - "prompt.context.removeActiveFile": "Usuń aktywny plik z kontekstu", - "prompt.context.removeFile": "Usuń plik z kontekstu", - "prompt.action.attachFile": "Załącz plik", - "prompt.attachment.remove": "Usuń załącznik", - "prompt.action.send": "Wyślij", - "prompt.action.stop": "Zatrzymaj", - "prompt.toast.pasteUnsupported.title": "Nieobsługiwany załącznik", - "prompt.toast.pasteUnsupported.description": "Można tutaj załączać tylko obrazy, pliki PDF lub pliki tekstowe.", - "prompt.toast.modelAgentRequired.title": "Wybierz agenta i model", - "prompt.toast.modelAgentRequired.description": "Wybierz agenta i model przed wysłaniem zapytania.", - "prompt.toast.worktreeCreateFailed.title": "Nie udało się utworzyć drzewa roboczego", - "prompt.toast.sessionCreateFailed.title": "Nie udało się utworzyć sesji", - "prompt.toast.shellSendFailed.title": "Nie udało się wysłać polecenia powłoki", - "prompt.toast.commandSendFailed.title": "Nie udało się wysłać polecenia", - "prompt.toast.promptSendFailed.title": "Nie udało się wysłać zapytania", - "prompt.toast.promptSendFailed.description": "Nie udało się pobrać sesji", - "dialog.mcp.title": "MCP", - "dialog.mcp.description": "{{enabled}} z {{total}} włączone", - "dialog.mcp.empty": "Brak skonfigurowanych MCP", - "dialog.lsp.empty": "LSP wykryte automatycznie na podstawie typów plików", - "dialog.plugins.empty": "Wtyczki skonfigurowane w opencode.json", - "mcp.status.connected": "połączono", - "mcp.status.failed": "niepowodzenie", - "mcp.status.needs_auth": "wymaga autoryzacji", - "mcp.auth.clickToAuthenticate": "Kliknij, aby się uwierzytelnić", - "mcp.status.disabled": "wyłączone", - "dialog.fork.empty": "Brak wiadomości do rozwidlenia", - "dialog.directory.search.placeholder": "Szukaj folderów", - "dialog.directory.empty": "Nie znaleziono folderów", - "dialog.directory.action.selectFile": "Wybierz plik", - "dialog.directory.action.selectFolder": "Wybierz folder", - "dialog.directory.root": "Katalog główny", - "dialog.directory.parent": "Nadrzędny", - "dialog.directory.readError": "Nie można odczytać tego folderu", - "dialog.server.title": "Serwery", - "dialog.server.description": "Przełącz serwer OpenCode, z którym łączy się ta aplikacja.", - "dialog.server.search.placeholder": "Szukaj serwerów", - "dialog.server.empty": "Brak serwerów", - "dialog.server.add.title": "Dodaj serwer", - "dialog.server.add.url": "URL serwera", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "Nie można połączyć się z serwerem", - "dialog.server.add.checking": "Sprawdzanie...", - "dialog.server.add.button": "Dodaj serwer", - "dialog.server.add.name": "Nazwa serwera (opcjonalnie)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "Nazwa użytkownika (opcjonalnie)", - "dialog.server.add.password": "Hasło (opcjonalnie)", - "dialog.server.edit.title": "Edytuj serwer", - "dialog.server.default.title": "Domyślny serwer", - "dialog.server.default.description": - "Połącz z tym serwerem przy uruchomieniu aplikacji zamiast uruchamiać lokalny serwer. Wymaga restartu.", - "dialog.server.default.none": "Nie wybrano serwera", - "dialog.server.default.set": "Ustaw bieżący serwer jako domyślny", - "dialog.server.default.clear": "Wyczyść", - "dialog.server.action.remove": "Usuń serwer", - "dialog.server.menu.edit": "Edytuj", - "dialog.server.menu.default": "Ustaw jako domyślny", - "dialog.server.menu.defaultRemove": "Usuń domyślny", - "dialog.server.menu.delete": "Usuń", - "dialog.server.current": "Obecny serwer", - "dialog.server.status.default": "Domyślny", - "dialog.project.edit.title": "Edytuj projekt", - "dialog.project.edit.name": "Nazwa", - "dialog.project.edit.icon": "Ikona", - "dialog.project.edit.icon.alt": "Ikona projektu", - "dialog.project.edit.icon.hint": "Kliknij lub przeciągnij obraz", - "dialog.project.edit.icon.recommended": "Zalecane: 128x128px", - "dialog.project.edit.color": "Kolor", - "dialog.project.edit.color.select": "Wybierz kolor {{color}}", - "dialog.project.edit.worktree.startup": "Skrypt uruchamiania przestrzeni roboczej", - "dialog.project.edit.worktree.startup.description": "Runs after creating a new workspace (worktree).", - "dialog.project.edit.worktree.startup.placeholder": "np. bun install", - "context.breakdown.title": "Podział kontekstu", - "context.breakdown.note": 'Przybliżony podział tokenów wejściowych. "Inne" obejmuje definicje narzędzi i narzut.', - "context.breakdown.system": "System", - "context.breakdown.user": "Użytkownik", - "context.breakdown.assistant": "Asystent", - "context.breakdown.tool": "Wywołania narzędzi", - "context.breakdown.other": "Inne", - "context.systemPrompt.title": "Prompt systemowy", - "context.rawMessages.title": "Surowe wiadomości", - "context.stats.session": "Sesja", - "context.stats.messages": "Wiadomości", - "context.stats.provider": "Dostawca", - "context.stats.model": "Model", - "context.stats.limit": "Limit kontekstu", - "context.stats.totalTokens": "Całkowita liczba tokenów", - "context.stats.usage": "Użycie", - "context.stats.inputTokens": "Tokeny wejściowe", - "context.stats.outputTokens": "Tokeny wyjściowe", - "context.stats.reasoningTokens": "Tokeny wnioskowania", - "context.stats.cacheTokens": "Tokeny pamięci podręcznej (odczyt/zapis)", - "context.stats.userMessages": "Wiadomości użytkownika", - "context.stats.assistantMessages": "Wiadomości asystenta", - "context.stats.totalCost": "Całkowity koszt", - "context.stats.sessionCreated": "Utworzono sesję", - "context.stats.lastActivity": "Ostatnia aktywność", - "context.usage.tokens": "Tokeny", - "context.usage.usage": "Użycie", - "context.usage.cost": "Koszt", - "context.usage.clickToView": "Kliknij, aby zobaczyć kontekst", - "context.usage.view": "Pokaż użycie kontekstu", - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - "toast.language.title": "Język", - "toast.language.description": "Przełączono na {{language}}", - "toast.theme.title": "Przełączono motyw", - "toast.scheme.title": "Schemat kolorów", - "toast.workspace.enabled.title": "Przestrzenie robocze włączone", - "toast.workspace.enabled.description": "Kilka worktree jest teraz wyświetlanych na pasku bocznym", - "toast.workspace.disabled.title": "Przestrzenie robocze wyłączone", - "toast.workspace.disabled.description": "Tylko główny worktree jest wyświetlany na pasku bocznym", - "toast.permissions.autoaccept.on.title": "Automatyczne akceptowanie uprawnień", - "toast.permissions.autoaccept.on.description": "Żądania uprawnień będą automatycznie zatwierdzane", - "toast.permissions.autoaccept.off.title": "Zatrzymano automatyczne akceptowanie uprawnień", - "toast.permissions.autoaccept.off.description": "Żądania uprawnień będą wymagały zatwierdzenia", - "toast.model.none.title": "Nie wybrano modelu", - "toast.model.none.description": "Połącz dostawcę, aby podsumować tę sesję", - "toast.file.loadFailed.title": "Nie udało się załadować pliku", - "toast.file.listFailed.title": "Nie udało się wyświetlić listy plików", - "toast.context.noLineSelection.title": "Brak zaznaczenia linii", - "toast.context.noLineSelection.description": "Najpierw wybierz zakres linii w zakładce pliku.", - "toast.session.share.copyFailed.title": "Nie udało się skopiować URL do schowka", - "toast.session.share.success.title": "Sesja udostępniona", - "toast.session.share.success.description": "Link udostępniania skopiowany do schowka!", - "toast.session.share.failed.title": "Nie udało się udostępnić sesji", - "toast.session.share.failed.description": "Wystąpił błąd podczas udostępniania sesji", - "toast.session.unshare.success.title": "Zatrzymano udostępnianie sesji", - "toast.session.unshare.success.description": "Udostępnianie sesji zostało pomyślnie zatrzymane!", - "toast.session.unshare.failed.title": "Nie udało się zatrzymać udostępniania sesji", - "toast.session.unshare.failed.description": "Wystąpił błąd podczas zatrzymywania udostępniania sesji", - "toast.session.listFailed.title": "Nie udało się załadować sesji dla {{project}}", - "toast.update.title": "Dostępna aktualizacja", - "toast.update.description": "Nowa wersja OpenCode ({{version}}) jest teraz dostępna do instalacji.", - "toast.update.action.installRestart": "Zainstaluj i zrestartuj", - "toast.update.action.notYet": "Jeszcze nie", - "error.page.title": "Coś poszło nie tak", - "error.page.description": "Wystąpił błąd podczas ładowania aplikacji.", - "error.page.details.label": "Szczegóły błędu", - "error.page.action.restart": "Restartuj", - "error.page.action.report": "Zgłoś błąd", - "error.page.action.reported": "Błąd zgłoszony", - "error.page.action.checking": "Sprawdzanie...", - "error.page.action.checkUpdates": "Sprawdź aktualizacje", - "error.page.action.updateTo": "Zaktualizuj do {{version}}", - "error.page.report.prefix": "Proszę zgłosić ten błąd do zespołu OpenCode", - "error.page.report.discord": "na Discordzie", - "error.page.version": "Wersja: {{version}}", - "error.dev.rootNotFound": - "Nie znaleziono elementu głównego. Czy zapomniałeś dodać go do swojego index.html? A może atrybut id został błędnie wpisany?", - "error.serverSync.connectFailed": "Nie można połączyć się z serwerem. Czy serwer działa pod adresem `{{url}}`?", - "directory.error.invalidUrl": "Nieprawidłowy katalog w URL.", - "error.chain.unknown": "Nieznany błąd", - "error.chain.causedBy": "Spowodowany przez:", - "error.chain.apiError": "Błąd API", - "error.chain.status": "Status: {{status}}", - "error.chain.retryable": "Można ponowić: {{retryable}}", - "error.chain.responseBody": "Treść odpowiedzi:\n{{body}}", - "error.chain.didYouMean": "Czy miałeś na myśli: {{suggestions}}", - "error.chain.modelNotFound": "Model nie znaleziony: {{provider}}/{{model}}", - "error.chain.checkConfig": "Sprawdź swoją konfigurację (opencode.json) nazwy dostawców/modeli", - "error.chain.mcpFailed": 'MCP server "{{name}}" failed. Note, OpenCode does not support MCP authentication yet.', - "error.chain.providerAuthFailed": "Uwierzytelnianie dostawcy nie powiodło się ({{provider}}): {{message}}", - "error.chain.providerInitFailed": - 'Nie udało się zainicjować dostawcy "{{provider}}". Sprawdź poświadczenia i konfigurację.', - "error.chain.configJsonInvalid": "Plik konfiguracyjny w {{path}} nie jest poprawnym JSON(C)", - "error.chain.configJsonInvalidWithMessage": "Plik konfiguracyjny w {{path}} nie jest poprawnym JSON(C): {{message}}", - "error.chain.configDirectoryTypo": - 'Katalog "{{dir}}" w {{path}} jest nieprawidłowy. Zmień nazwę katalogu na "{{suggestion}}" lub usuń go. To częsta literówka.', - "error.chain.configFrontmatterError": "Nie udało się przetworzyć frontmatter w {{path}}:\n{{message}}", - "error.chain.configInvalid": "Plik konfiguracyjny w {{path}} jest nieprawidłowy", - "error.chain.configInvalidWithMessage": "Plik konfiguracyjny w {{path}} jest nieprawidłowy: {{message}}", - "notification.permission.title": "Wymagane uprawnienie", - "notification.permission.description": "{{sessionTitle}} w {{projectName}} potrzebuje uprawnienia", - "notification.question.title": "Pytanie", - "notification.question.description": "{{sessionTitle}} w {{projectName}} ma pytanie", - "notification.action.goToSession": "Przejdź do sesji", - "notification.session.responseReady.title": "Odpowiedź gotowa", - "notification.session.error.title": "Błąd sesji", - "notification.session.error.fallbackDescription": "Wystąpił błąd", - "home.recentProjects": "Ostatnie projekty", - "home.empty.title": "Brak ostatnich projektów", - "home.empty.description": "Zacznij od otwarcia lokalnego projektu", - "session.tab.session": "Sesja", - "session.tab.review": "Przegląd", - "session.tab.context": "Kontekst", - "session.panel.reviewAndFiles": "Przegląd i pliki", - "session.review.filesChanged": "Zmieniono {{count}} plików", - "session.review.change.one": "Zmiana", - "session.review.change.other": "Zmiany", - "session.review.loadingChanges": "Ładowanie zmian...", - "session.review.empty": "Brak zmian w tej sesji", - "session.review.noVcs": "Nie wykryto systemu kontroli wersji Git, zmiany nie są wyświetlane", - "session.review.noSnapshot": "Śledzenie migawek jest wyłączone w konfiguracji, więc zmiany w sesji są niedostępne", - "session.review.noChanges": "Brak zmian", - "session.files.selectToOpen": "Wybierz plik do otwarcia", - "session.files.all": "Wszystkie pliki", - "session.files.empty": "Brak plików", - "session.files.binaryContent": "Plik binarny (zawartość nie może być wyświetlona)", - "session.messages.renderEarlier": "Renderuj wcześniejsze wiadomości", - "session.messages.loadingEarlier": "Ładowanie wcześniejszych wiadomości...", - "session.messages.loadEarlier": "Załaduj wcześniejsze wiadomości", - "session.messages.loading": "Ładowanie wiadomości...", - "session.messages.jumpToLatest": "Przejdź do najnowszych", - "session.context.addToContext": "Dodaj {{selection}} do kontekstu", - "session.todo.title": "Zadania", - "session.todo.collapse": "Zwiń", - "session.todo.expand": "Rozwiń", - "session.followupDock.summary.one": "{{count}} wiadomość w kolejce", - "session.followupDock.summary.other": "{{count}} wiadomości w kolejce", - "session.followupDock.sendNow": "Wyślij teraz", - "session.followupDock.edit": "Edytuj", - "session.followupDock.collapse": "Zwiń wiadomości w kolejce", - "session.followupDock.expand": "Rozwiń wiadomości w kolejce", - "session.revertDock.summary.one": "{{count}} cofnięta wiadomość", - "session.revertDock.summary.other": "{{count}} cofnięte wiadomości", - "session.revertDock.collapse": "Zwiń cofnięte wiadomości", - "session.revertDock.expand": "Rozwiń cofnięte wiadomości", - "session.revertDock.restore": "Przywróć wiadomość", - "session.new.title": "Zbuduj cokolwiek", - "session.new.worktree.main": "Główna gałąź", - "session.new.worktree.mainWithBranch": "Główna gałąź ({{branch}})", - "session.new.worktree.create": "Utwórz nowe drzewo robocze", - "session.new.lastModified": "Ostatnio zmodyfikowano", - "session.header.search.placeholder": "Szukaj {{project}}", - "session.header.searchFiles": "Szukaj plików", - "session.header.openIn": "Otwórz w", - "session.header.open.action": "Otwórz {{app}}", - "session.header.open.ariaLabel": "Otwórz w {{app}}", - "session.header.open.menu": "Opcje otwierania", - "session.header.open.copyPath": "Kopiuj ścieżkę", - "status.popover.trigger": "Status", - "status.popover.ariaLabel": "Konfiguracje serwerów", - "status.popover.tab.servers": "Serwery", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "Wtyczki", - "status.popover.action.manageServers": "Zarządzaj serwerami", - "session.share.popover.title": "Opublikuj w sieci", - "session.share.popover.description.shared": - "Ta sesja jest publiczna w sieci. Jest dostępna dla każdego, kto posiada link.", - "session.share.popover.description.unshared": - "Udostępnij sesję publicznie w sieci. Będzie dostępna dla każdego, kto posiada link.", - "session.share.action.share": "Udostępnij", - "session.share.action.publish": "Opublikuj", - "session.share.action.publishing": "Publikowanie...", - "session.share.action.unpublish": "Cofnij publikację", - "session.share.action.unpublishing": "Cofanie publikacji...", - "session.share.action.view": "Widok", - "session.share.copy.copied": "Skopiowano", - "session.share.copy.copyLink": "Kopiuj link", - "lsp.tooltip.none": "Brak serwerów LSP", - "lsp.label.connected": "{{count}} LSP", - "prompt.loading": "Ładowanie promptu...", - "terminal.loading": "Ładowanie terminala...", - "terminal.title": "Terminal", - "terminal.title.numbered": "Terminal {{number}}", - "terminal.close": "Zamknij terminal", - "terminal.connectionLost.title": "Utracono połączenie", - "terminal.connectionLost.description": - "Połączenie z terminalem zostało przerwane. Może się to zdarzyć przy restarcie serwera.", - "common.closeTab": "Zamknij kartę", - "common.dismiss": "Odrzuć", - "common.requestFailed": "Żądanie nie powiodło się", - "common.moreOptions": "Więcej opcji", - "common.learnMore": "Dowiedz się więcej", - "common.rename": "Zmień nazwę", - "common.reset": "Resetuj", - "common.archive": "Archiwizuj", - "common.delete": "Usuń", - "common.close": "Zamknij", - "common.edit": "Edytuj", - "common.loadMore": "Załaduj więcej", - "common.key.esc": "ESC", - "sidebar.menu.toggle": "Przełącz menu", - "sidebar.nav.projectsAndSessions": "Projekty i sesje", - "sidebar.settings": "Ustawienia", - "sidebar.help": "Pomoc", - "sidebar.workspaces.enable": "Włącz przestrzenie robocze", - "sidebar.workspaces.disable": "Wyłącz przestrzenie robocze", - "sidebar.gettingStarted.title": "Pierwsze kroki", - "sidebar.gettingStarted.line1": "OpenCode zawiera darmowe modele, więc możesz zacząć od razu.", - "sidebar.gettingStarted.line2": "Połącz dowolnego dostawcę, aby używać modeli, w tym Claude, GPT, Gemini itp.", - "sidebar.project.recentSessions": "Ostatnie sesje", - "sidebar.project.viewAllSessions": "Zobacz wszystkie sesje", - "sidebar.project.clearNotifications": "Wyczyść powiadomienia", - "app.name.desktop": "OpenCode Desktop", - "settings.section.desktop": "Pulpit", - "settings.section.server": "Serwer", - "settings.tab.general": "Ogólne", - "settings.tab.shortcuts": "Skróty", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "WSL integration", - "settings.desktop.wsl.description": "Run the OpenCode server inside WSL on Windows.", - "settings.general.section.appearance": "Wygląd", - "settings.general.section.notifications": "Powiadomienia systemowe", - "settings.general.section.updates": "Aktualizacje", - "settings.general.section.sounds": "Efekty dźwiękowe", - "settings.general.section.feed": "Kanał", - "settings.general.section.display": "Ekran", - "settings.general.row.language.title": "Język", - "settings.general.row.language.description": "Zmień język wyświetlania dla OpenCode", - "settings.general.row.appearance.title": "Wygląd", - "settings.general.row.appearance.description": "Dostosuj wygląd OpenCode na swoim urządzeniu", - "settings.general.row.colorScheme.title": "Schemat kolorów", - "settings.general.row.colorScheme.description": - "Wybierz, czy OpenCode ma używać motywu systemowego, jasnego czy ciemnego", - "settings.general.row.theme.title": "Motyw", - "settings.general.row.theme.description": "Dostosuj motyw OpenCode.", - "settings.general.row.font.title": "Czcionka kodu", - "settings.general.row.font.description": "Dostosuj czcionkę używaną w blokach kodu", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "Czcionka interfejsu", - "settings.general.row.uiFont.description": "Dostosuj czcionkę używaną w całym interfejsie", - "settings.general.row.followup.title": "Zachowanie kontynuacji", - "settings.general.row.followup.description": "Wybierz, czy kontynuacja ma być natychmiastowa, czy czekać w kolejce", - "settings.general.row.followup.option.queue": "Kolejka", - "settings.general.row.followup.option.steer": "Sterowanie", - "settings.general.row.reasoningSummaries.title": "Pokaż podsumowania wnioskowania", - "settings.general.row.reasoningSummaries.description": "Wyświetlaj podsumowania wnioskowania modelu na osi czasu", - "settings.general.row.shellToolPartsExpanded.title": "Rozwijaj elementy narzędzia shell", - "settings.general.row.shellToolPartsExpanded.description": - "Domyślnie pokazuj rozwinięte elementy narzędzia shell na osi czasu", - "settings.general.row.editToolPartsExpanded.title": "Rozwijaj elementy narzędzia edit", - "settings.general.row.editToolPartsExpanded.description": - "Domyślnie pokazuj rozwinięte elementy narzędzi edit, write i patch na osi czasu", - "settings.general.row.wayland.title": "Użyj natywnego Wayland", - "settings.general.row.wayland.description": "Wyłącz fallback X11 na Wayland. Wymaga restartu.", - "settings.general.row.wayland.tooltip": - "Na Linuxie z monitorami o różnym odświeżaniu, natywny Wayland może być bardziej stabilny.", - "settings.general.row.releaseNotes.title": "Informacje o wydaniu", - "settings.general.row.releaseNotes.description": 'Pokazuj wyskakujące okna "Co nowego" po aktualizacjach', - "settings.updates.row.startup.title": "Sprawdzaj aktualizacje przy uruchomieniu", - "settings.updates.row.startup.description": "Automatycznie sprawdzaj aktualizacje podczas uruchamiania OpenCode", - "settings.updates.row.check.title": "Sprawdź aktualizacje", - "settings.updates.row.check.description": "Ręcznie sprawdź aktualizacje i zainstaluj, jeśli są dostępne", - "settings.updates.action.checkNow": "Sprawdź teraz", - "settings.updates.action.checking": "Sprawdzanie...", - "settings.updates.toast.latest.title": "Masz najnowszą wersję", - "settings.updates.toast.latest.description": "Korzystasz z najnowszej wersji OpenCode.", - "sound.option.none": "Brak", - "sound.option.alert01": "Alert 01", - "sound.option.alert02": "Alert 02", - "sound.option.alert03": "Alert 03", - "sound.option.alert04": "Alert 04", - "sound.option.alert05": "Alert 05", - "sound.option.alert06": "Alert 06", - "sound.option.alert07": "Alert 07", - "sound.option.alert08": "Alert 08", - "sound.option.alert09": "Alert 09", - "sound.option.alert10": "Alert 10", - "sound.option.bipbop01": "Bip-bop 01", - "sound.option.bipbop02": "Bip-bop 02", - "sound.option.bipbop03": "Bip-bop 03", - "sound.option.bipbop04": "Bip-bop 04", - "sound.option.bipbop05": "Bip-bop 05", - "sound.option.bipbop06": "Bip-bop 06", - "sound.option.bipbop07": "Bip-bop 07", - "sound.option.bipbop08": "Bip-bop 08", - "sound.option.bipbop09": "Bip-bop 09", - "sound.option.bipbop10": "Bip-bop 10", - "sound.option.staplebops01": "Staplebops 01", - "sound.option.staplebops02": "Staplebops 02", - "sound.option.staplebops03": "Staplebops 03", - "sound.option.staplebops04": "Staplebops 04", - "sound.option.staplebops05": "Staplebops 05", - "sound.option.staplebops06": "Staplebops 06", - "sound.option.staplebops07": "Staplebops 07", - "sound.option.nope01": "Nope 01", - "sound.option.nope02": "Nope 02", - "sound.option.nope03": "Nope 03", - "sound.option.nope04": "Nope 04", - "sound.option.nope05": "Nope 05", - "sound.option.nope06": "Nope 06", - "sound.option.nope07": "Nope 07", - "sound.option.nope08": "Nope 08", - "sound.option.nope09": "Nope 09", - "sound.option.nope10": "Nope 10", - "sound.option.nope11": "Nope 11", - "sound.option.nope12": "Nope 12", - "sound.option.yup01": "Yup 01", - "sound.option.yup02": "Yup 02", - "sound.option.yup03": "Yup 03", - "sound.option.yup04": "Yup 04", - "sound.option.yup05": "Yup 05", - "sound.option.yup06": "Yup 06", - "settings.general.notifications.agent.title": "Agent", - "settings.general.notifications.agent.description": - "Pokaż powiadomienie systemowe, gdy agent zakończy pracę lub wymaga uwagi", - "settings.general.notifications.permissions.title": "Uprawnienia", - "settings.general.notifications.permissions.description": - "Pokaż powiadomienie systemowe, gdy wymagane jest uprawnienie", - "settings.general.notifications.errors.title": "Błędy", - "settings.general.notifications.errors.description": "Pokaż powiadomienie systemowe, gdy wystąpi błąd", - "settings.general.sounds.agent.title": "Agent", - "settings.general.sounds.agent.description": "Odtwórz dźwięk, gdy agent zakończy pracę lub wymaga uwagi", - "settings.general.sounds.permissions.title": "Uprawnienia", - "settings.general.sounds.permissions.description": "Odtwórz dźwięk, gdy wymagane jest uprawnienie", - "settings.general.sounds.errors.title": "Błędy", - "settings.general.sounds.errors.description": "Odtwórz dźwięk, gdy wystąpi błąd", - "settings.shortcuts.title": "Skróty klawiszowe", - "settings.shortcuts.reset.button": "Przywróć domyślne", - "settings.shortcuts.reset.toast.title": "Zresetowano skróty", - "settings.shortcuts.reset.toast.description": "Skróty klawiszowe zostały przywrócone do ustawień domyślnych.", - "settings.shortcuts.conflict.title": "Skrót już w użyciu", - "settings.shortcuts.conflict.description": "{{keybind}} jest już przypisany do {{titles}}.", - "settings.shortcuts.unassigned": "Nieprzypisany", - "settings.shortcuts.pressKeys": "Naciśnij klawisze", - "settings.shortcuts.search.placeholder": "Szukaj skrótów", - "settings.shortcuts.search.empty": "Nie znaleziono skrótów", - "settings.shortcuts.group.general": "Ogólne", - "settings.shortcuts.group.session": "Sesja", - "settings.shortcuts.group.navigation": "Nawigacja", - "settings.shortcuts.group.modelAndAgent": "Model i agent", - "settings.shortcuts.group.terminal": "Terminal", - "settings.shortcuts.group.prompt": "Prompt", - "settings.providers.title": "Dostawcy", - "settings.providers.description": "Ustawienia dostawców będą tutaj konfigurowalne.", - "settings.providers.section.connected": "Połączeni dostawcy", - "settings.providers.connected.empty": "Brak połączonych dostawców", - "settings.providers.section.popular": "Popularni dostawcy", - "settings.providers.tag.environment": "Środowisko", - "settings.providers.tag.config": "Konfiguracja", - "settings.providers.tag.custom": "Niestandardowe", - "settings.providers.tag.other": "Inne", - "settings.models.title": "Modele", - "settings.models.description": "Ustawienia modeli będą tutaj konfigurowalne.", - "settings.agents.title": "Agenci", - "settings.agents.description": "Ustawienia agentów będą tutaj konfigurowalne.", - "settings.commands.title": "Polecenia", - "settings.commands.description": "Ustawienia poleceń będą tutaj konfigurowalne.", - "settings.mcp.title": "MCP", - "settings.mcp.description": "Ustawienia MCP będą tutaj konfigurowalne.", - "settings.permissions.title": "Uprawnienia", - "settings.permissions.description": "Kontroluj, jakich narzędzi serwer może używać domyślnie.", - "settings.permissions.section.tools": "Narzędzia", - "settings.permissions.toast.updateFailed.title": "Nie udało się zaktualizować uprawnień", - "settings.permissions.action.allow": "Zezwól", - "settings.permissions.action.ask": "Pytaj", - "settings.permissions.action.deny": "Odmów", - "settings.permissions.tool.read.title": "Odczyt", - "settings.permissions.tool.read.description": "Odczyt pliku (pasuje do ścieżki pliku)", - "settings.permissions.tool.edit.title": "Edycja", - "settings.permissions.tool.edit.description": "Modyfikacja plików, w tym edycje, zapisy, łatki i multi-edycje", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "Dopasowywanie plików za pomocą wzorców glob", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "Przeszukiwanie zawartości plików za pomocą wyrażeń regularnych", - "settings.permissions.tool.list.title": "Lista", - "settings.permissions.tool.list.description": "Wyświetlanie listy plików w katalogu", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "Uruchamianie poleceń powłoki", - "settings.permissions.tool.task.title": "Zadanie", - "settings.permissions.tool.task.description": "Uruchamianie pod-agentów", - "settings.permissions.tool.skill.title": "Umiejętność", - "settings.permissions.tool.skill.description": "Ładowanie umiejętności według nazwy", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "Uruchamianie zapytań serwera językowego", - "settings.permissions.tool.todowrite.title": "Zapis Todo", - "settings.permissions.tool.todowrite.description": "Aktualizacja listy zadań", - "settings.permissions.tool.webfetch.title": "Pobieranie z sieci", - "settings.permissions.tool.webfetch.description": "Pobieranie zawartości z adresu URL", - "settings.permissions.tool.websearch.title": "Wyszukiwanie w sieci", - "settings.permissions.tool.websearch.description": "Przeszukiwanie sieci", - "settings.permissions.tool.external_directory.title": "Katalog zewnętrzny", - "settings.permissions.tool.external_directory.description": "Dostęp do plików poza katalogiem projektu", - "settings.permissions.tool.doom_loop.title": "Zapętlenie", - "settings.permissions.tool.doom_loop.description": "Wykrywanie powtarzających się wywołań narzędzi (doom loop)", - "session.delete.failed.title": "Nie udało się usunąć sesji", - "session.delete.title": "Usuń sesję", - "session.delete.confirm": 'Usunąć sesję "{{name}}"?', - "session.delete.button": "Usuń sesję", - "workspace.new": "Nowa przestrzeń robocza", - "workspace.type.local": "lokalna", - "workspace.type.sandbox": "piaskownica", - "workspace.create.failed.title": "Nie udało się utworzyć przestrzeni roboczej", - "workspace.delete.failed.title": "Nie udało się usunąć przestrzeni roboczej", - "workspace.resetting.title": "Resetowanie przestrzeni roboczej", - "workspace.resetting.description": "To może potrwać minutę.", - "workspace.reset.failed.title": "Nie udało się zresetować przestrzeni roboczej", - "workspace.reset.success.title": "Przestrzeń robocza zresetowana", - "workspace.reset.success.description": "Przestrzeń robocza odpowiada teraz domyślnej gałęzi.", - "workspace.error.stillPreparing": "Przestrzeń robocza jest wciąż przygotowywana", - "workspace.status.checking": "Sprawdzanie niezscalonych zmian...", - "workspace.status.error": "Nie można zweryfikować statusu git.", - "workspace.status.clean": "Nie wykryto niezscalonych zmian.", - "workspace.status.dirty": "Wykryto niezscalone zmiany w tej przestrzeni roboczej.", - "workspace.delete.title": "Usuń przestrzeń roboczą", - "workspace.delete.confirm": 'Usunąć przestrzeń roboczą "{{name}}"?', - "workspace.delete.button": "Usuń przestrzeń roboczą", - "workspace.reset.title": "Resetuj przestrzeń roboczą", - "workspace.reset.confirm": 'Zresetować przestrzeń roboczą "{{name}}"?', - "workspace.reset.button": "Resetuj przestrzeń roboczą", - "workspace.reset.archived.none": "Żadne aktywne sesje nie zostaną zarchiwizowane.", - "workspace.reset.archived.one": "1 sesja zostanie zarchiwizowana.", - "workspace.reset.archived.many": "{{count}} sesji zostanie zarchiwizowanych.", - "workspace.reset.note": "To zresetuje przestrzeń roboczą, aby odpowiadała domyślnej gałęzi.", - "common.open": "Otwórz", - "dialog.releaseNotes.action.getStarted": "Rozpocznij", - "dialog.releaseNotes.action.next": "Dalej", - "dialog.releaseNotes.action.hideFuture": "Nie pokazuj tego w przyszłości", - "dialog.releaseNotes.media.alt": "Podgląd wydania", - "toast.project.reloadFailed.title": "Nie udało się ponownie wczytać {{project}}", - "error.server.invalidConfiguration": "Nieprawidłowa konfiguracja", - "common.moreCountSuffix": " (jeszcze {{count}})", - "common.time.justNow": "Przed chwilą", - "common.time.minutesAgo.short": "{{count}} min temu", - "common.time.hoursAgo.short": "{{count}} godz. temu", - "common.time.daysAgo.short": "{{count}} dni temu", - "settings.providers.connected.environmentDescription": "Połączono ze zmiennymi środowiskowymi", - "settings.providers.custom.description": "Dodaj dostawcę zgodnego z OpenAI poprzez podstawowy URL.", - - "app.server.unreachable": "Nie można połączyć z {{server}}", - "app.server.retrying": "Ponawianie automatycznie...", - "app.server.otherServers": "Inne serwery", - "dialog.server.add.usernamePlaceholder": "nazwa użytkownika", - "dialog.server.add.passwordPlaceholder": "hasło", - "server.row.noUsername": "brak nazwy użytkownika", - "session.review.noVcs.createGit.title": "Utwórz repozytorium Git", - "session.review.noVcs.createGit.description": "Śledź, przeglądaj i cofaj zmiany w tym projekcie", - "session.review.noVcs.createGit.actionLoading": "Tworzenie repozytorium Git...", - "session.review.noVcs.createGit.action": "Utwórz repozytorium Git", - "session.todo.progress": "Ukończono {{done}} z {{total}} zadań", - "session.question.progress": "{{current}} z {{total}} pytań", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "Eksplorator plików", - "session.header.open.fileManager": "Menedżer plików", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "Terminal", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "Diagnostyka wydajności deweloperskiej", - "debugBar.na": "n.d.", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": - "Ostatnie zakończone przejście trasy dotykające strony sesji, mierzone od startu routera do pierwszego odrysowania po ustaleniu.", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "Średnia liczba klatek na sekundę w ciągu ostatnich 5 sekund.", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "Najgorszy czas klatki w ciągu ostatnich 5 sekund.", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "Klatki powyżej 32ms w ciągu ostatnich 5 sekund.", - "debugBar.long.label": "LONG", - "debugBar.long.tip": - "Zablokowany czas i liczba długich zadań w ciągu ostatnich 5 sekund. Maksymalne zadanie: {{max}}.", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "Najgorsze zaobserwowane opóźnienie wejścia w ciągu ostatnich 5 sekund.", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": - "Przybliżony czas trwania interakcji w ciągu ostatnich 5 sekund. Jest to podobne do INP, a nie oficjalne Web Vitals INP.", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "Skumulowane przesunięcie układu dla bieżącego czasu życia aplikacji.", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "Użyta sterta JS vs limit sterty. Tylko Chromium.", - "debugBar.mem.tip": "Użyta sterta JS vs limit sterty. {{used}} z {{limit}}.", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "Spacja", - "common.key.backspace": "Backspace", - "common.key.enter": "Enter", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "nieznany", - "error.page.circular": "[Cykliczne]", - "error.serverSDK.noServerAvailable": "Brak dostępnego serwera", - "error.serverSDK.serverNotAvailable": "Serwer niedostępny", - "error.childStore.persistedCacheCreateFailed": "Nie udało się utworzyć trwałej pamięci podręcznej", - "error.childStore.persistedProjectMetadataCreateFailed": "Nie udało się utworzyć trwałych metadanych projektu", - "error.childStore.persistedProjectIconCreateFailed": "Nie udało się utworzyć trwałej ikony projektu", - "error.childStore.storeCreateFailed": "Nie udało się utworzyć magazynu", - "terminal.connectionLost.abnormalClose": "WebSocket zamknięty nieprawidłowo: {{code}}", -} diff --git a/packages/app/src/i18n/ru.ts b/packages/app/src/i18n/ru.ts deleted file mode 100644 index b2f58b101b..0000000000 --- a/packages/app/src/i18n/ru.ts +++ /dev/null @@ -1,941 +0,0 @@ -export const dict = { - "command.category.suggested": "Предложено", - "command.category.view": "Просмотр", - "command.category.project": "Проект", - "command.category.provider": "Провайдер", - "command.category.server": "Сервер", - "command.category.session": "Сессия", - "command.category.theme": "Тема", - "command.category.language": "Язык", - "command.category.file": "Файл", - "command.category.context": "Контекст", - "command.category.terminal": "Терминал", - "command.category.model": "Модель", - "command.category.mcp": "MCP", - "command.category.agent": "Агент", - "command.category.permissions": "Разрешения", - "command.category.workspace": "Рабочее пространство", - "command.category.settings": "Настройки", - - "theme.scheme.system": "Системная", - "theme.scheme.light": "Светлая", - "theme.scheme.dark": "Тёмная", - - "command.sidebar.toggle": "Переключить боковую панель", - "command.project.open": "Открыть проект", - "command.provider.connect": "Подключить провайдера", - "command.server.switch": "Переключить сервер", - "command.settings.open": "Открыть настройки", - "command.session.previous": "Предыдущая сессия", - "command.session.next": "Следующая сессия", - "command.session.previous.unseen": "Предыдущая непрочитанная сессия", - "command.session.next.unseen": "Следующая непрочитанная сессия", - "command.session.archive": "Архивировать сессию", - - "command.palette": "Палитра команд", - - "command.theme.cycle": "Цикл тем", - "command.theme.set": "Использовать тему: {{theme}}", - "command.theme.scheme.cycle": "Цикл цветовой схемы", - "command.theme.scheme.set": "Использовать цветовую схему: {{scheme}}", - - "command.language.cycle": "Цикл языков", - "command.language.set": "Использовать язык: {{language}}", - - "command.session.new": "Новая сессия", - "command.file.open": "Открыть файл", - "command.tab.close": "Закрыть вкладку", - "command.context.addSelection": "Добавить выделение в контекст", - "command.context.addSelection.description": "Добавить выбранные строки из текущего файла", - "command.input.focus": "Фокус на поле ввода", - "command.terminal.toggle": "Переключить терминал", - "command.fileTree.toggle": "Переключить дерево файлов", - "command.review.toggle": "Переключить обзор", - "command.terminal.new": "Новый терминал", - "command.terminal.new.description": "Создать новую вкладку терминала", - "command.steps.toggle": "Переключить шаги", - "command.steps.toggle.description": "Показать или скрыть шаги для текущего сообщения", - "command.message.previous": "Предыдущее сообщение", - "command.message.previous.description": "Перейти к предыдущему сообщению пользователя", - "command.message.next": "Следующее сообщение", - "command.message.next.description": "Перейти к следующему сообщению пользователя", - "command.model.choose": "Выбрать модель", - "command.model.choose.description": "Выбрать другую модель", - "command.mcp.toggle": "Переключить MCP", - "command.mcp.toggle.description": "Переключить MCP", - "command.agent.cycle": "Цикл агентов", - "command.agent.cycle.description": "Переключиться к следующему агенту", - "command.agent.cycle.reverse": "Цикл агентов назад", - "command.agent.cycle.reverse.description": "Переключиться к предыдущему агенту", - "command.model.variant.cycle": "Цикл режимов мышления", - "command.model.variant.cycle.description": "Переключиться к следующему уровню усилий", - "command.prompt.mode.shell": "Оболочка", - "command.prompt.mode.normal": "Промпт", - "command.permissions.autoaccept.enable": "Автоматически принимать разрешения", - "command.permissions.autoaccept.disable": "Остановить автоматическое принятие разрешений", - "command.workspace.toggle": "Переключить рабочие пространства", - "command.workspace.toggle.description": "Включить или отключить несколько рабочих пространств в боковой панели", - "command.session.undo": "Отменить", - "command.session.undo.description": "Отменить последнее сообщение", - "command.session.redo": "Повторить", - "command.session.redo.description": "Повторить отменённое сообщение", - "command.session.compact": "Сжать сессию", - "command.session.compact.description": "Сократить сессию для уменьшения размера контекста", - "command.session.fork": "Создать ответвление", - "command.session.fork.description": "Создать новую сессию из сообщения", - "command.session.share": "Поделиться сессией", - "command.session.share.description": "Поделиться сессией и скопировать URL в буфер обмена", - "command.session.unshare": "Отменить публикацию", - "command.session.unshare.description": "Прекратить публикацию сессии", - - "palette.search.placeholder": "Поиск файлов, команд и сессий", - "palette.empty": "Ничего не найдено", - "palette.group.commands": "Команды", - "palette.group.files": "Файлы", - - "dialog.provider.search.placeholder": "Поиск провайдеров", - "dialog.provider.empty": "Провайдеры не найдены", - "dialog.provider.group.popular": "Популярные", - "dialog.provider.group.other": "Другие", - "dialog.provider.tag.recommended": "Рекомендуемые", - "dialog.provider.opencode.note": "Отобранные модели, включая Claude, GPT, Gemini и другие", - "dialog.provider.opencode.tagline": "Надежные оптимизированные модели", - "dialog.provider.opencodeGo.tagline": "Доступная подписка для всех", - "dialog.provider.anthropic.note": "Прямой доступ к моделям Claude, включая Pro и Max", - "dialog.provider.copilot.note": "ИИ-модели для помощи в кодировании через GitHub Copilot", - "dialog.provider.openai.note": "Модели GPT для быстрых и мощных задач общего ИИ", - "dialog.provider.google.note": "Модели Gemini для быстрых и структурированных ответов", - "dialog.provider.openrouter.note": "Доступ ко всем поддерживаемым моделям через одного провайдера", - "dialog.provider.vercel.note": "Единый доступ к ИИ-моделям с умной маршрутизацией", - - "dialog.model.select.title": "Выбрать модель", - "dialog.model.search.placeholder": "Поиск моделей", - "dialog.model.empty": "Модели не найдены", - "dialog.model.manage": "Управление моделями", - "dialog.model.manage.description": "Настройте какие модели появляются в выборе модели", - "dialog.model.manage.provider.toggle": "Переключить все модели {{provider}}", - - "dialog.model.unpaid.freeModels.title": "Бесплатные модели от OpenCode", - "dialog.model.unpaid.addMore.title": "Добавьте больше моделей от популярных провайдеров", - - "dialog.provider.viewAll": "Показать больше провайдеров", - - "provider.connect.title": "Подключить {{provider}}", - "provider.connect.title.anthropicProMax": "Войти с помощью Claude Pro/Max", - "provider.connect.selectMethod": "Выберите способ входа для {{provider}}.", - "provider.connect.method.apiKey": "API ключ", - "provider.connect.status.inProgress": "Авторизация...", - "provider.connect.status.waiting": "Ожидание авторизации...", - "provider.connect.status.failed": "Ошибка авторизации: {{error}}", - "provider.connect.apiKey.description": - "Введите ваш API ключ {{provider}} для подключения аккаунта и использования моделей {{provider}} в OpenCode.", - "provider.connect.apiKey.label": "{{provider}} API ключ", - "provider.connect.apiKey.placeholder": "API ключ", - "provider.connect.apiKey.required": "API ключ обязателен", - "provider.connect.opencodeZen.line1": - "OpenCode Zen даёт вам доступ к отобранным надёжным оптимизированным моделям для агентов программирования.", - "provider.connect.opencodeZen.line2": - "С одним API ключом вы получите доступ к таким моделям как Claude, GPT, Gemini, GLM и другим.", - "provider.connect.opencodeZen.visit.prefix": "Посетите ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " чтобы получить ваш API ключ.", - "provider.connect.oauth.code.visit.prefix": "Посетите ", - "provider.connect.oauth.code.visit.link": "эту ссылку", - "provider.connect.oauth.code.visit.suffix": - " чтобы получить код авторизации для подключения аккаунта и использования моделей {{provider}} в OpenCode.", - "provider.connect.oauth.code.label": "{{method}} код авторизации", - "provider.connect.oauth.code.placeholder": "Код авторизации", - "provider.connect.oauth.code.required": "Код авторизации обязателен", - "provider.connect.oauth.code.invalid": "Неверный код авторизации", - "provider.connect.oauth.auto.visit.prefix": "Посетите ", - "provider.connect.oauth.auto.visit.link": "эту ссылку", - "provider.connect.oauth.auto.visit.suffix": - " и введите код ниже для подключения аккаунта и использования моделей {{provider}} в OpenCode.", - "provider.connect.oauth.auto.confirmationCode": "Код подтверждения", - "provider.connect.toast.connected.title": "{{provider}} подключён", - "provider.connect.toast.connected.description": "Модели {{provider}} теперь доступны.", - - "provider.custom.title": "Пользовательский провайдер", - "provider.custom.description.prefix": "Настройте OpenAI-совместимого провайдера. См. ", - "provider.custom.description.link": "документацию по настройке провайдера", - "provider.custom.description.suffix": ".", - "provider.custom.field.providerID.label": "ID провайдера", - "provider.custom.field.providerID.placeholder": "myprovider", - "provider.custom.field.providerID.description": "Строчные буквы, цифры, дефисы или подчёркивания", - "provider.custom.field.name.label": "Отображаемое имя", - "provider.custom.field.name.placeholder": "Мой AI провайдер", - "provider.custom.field.baseURL.label": "Базовый URL", - "provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1", - "provider.custom.field.apiKey.label": "API ключ", - "provider.custom.field.apiKey.placeholder": "API ключ", - "provider.custom.field.apiKey.description": - "Необязательно. Оставьте пустым, если управляете авторизацией через заголовки.", - "provider.custom.models.label": "Модели", - "provider.custom.models.id.label": "ID", - "provider.custom.models.id.placeholder": "model-id", - "provider.custom.models.name.label": "Имя", - "provider.custom.models.name.placeholder": "Отображаемое имя", - "provider.custom.models.remove": "Удалить модель", - "provider.custom.models.add": "Добавить модель", - "provider.custom.headers.label": "Заголовки (необязательно)", - "provider.custom.headers.key.label": "Заголовок", - "provider.custom.headers.key.placeholder": "Header-Name", - "provider.custom.headers.value.label": "Значение", - "provider.custom.headers.value.placeholder": "значение", - "provider.custom.headers.remove": "Удалить заголовок", - "provider.custom.headers.add": "Добавить заголовок", - "provider.custom.error.providerID.required": "Требуется ID провайдера", - "provider.custom.error.providerID.format": "Используйте строчные буквы, цифры, дефисы или подчёркивания", - "provider.custom.error.providerID.exists": "Такой ID провайдера уже существует", - "provider.custom.error.name.required": "Требуется отображаемое имя", - "provider.custom.error.baseURL.required": "Требуется базовый URL", - "provider.custom.error.baseURL.format": "Должен начинаться с http:// или https://", - "provider.custom.error.required": "Обязательно", - "provider.custom.error.duplicate": "Дубликат", - - "provider.disconnect.toast.disconnected.title": "{{provider}} отключён", - "provider.disconnect.toast.disconnected.description": "Модели {{provider}} больше недоступны.", - "model.tag.free": "Бесплатно", - "model.tag.latest": "Последняя", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "текст", - "model.input.image": "изображение", - "model.input.audio": "аудио", - "model.input.video": "видео", - "model.input.pdf": "pdf", - "model.tooltip.allows": "Разрешено: {{inputs}}", - "model.tooltip.reasoning.allowed": "Разрешает рассуждение", - "model.tooltip.reasoning.none": "Без рассуждения", - "model.tooltip.context": "Лимит контекста {{limit}}", - - "common.search.placeholder": "Поиск", - "common.goBack": "Назад", - "common.goForward": "Вперёд", - "common.loading": "Загрузка", - "common.loading.ellipsis": "...", - "common.cancel": "Отмена", - "common.connect": "Подключить", - "common.disconnect": "Отключить", - "common.continue": "Отправить", - "common.submit": "Отправить", - "common.save": "Сохранить", - "common.saving": "Сохранение...", - "common.default": "По умолчанию", - "common.attachment": "вложение", - - "prompt.placeholder.shell": "Введите команду оболочки... {{example}}", - "prompt.placeholder.normal": 'Спросите что угодно... "{{example}}"', - "prompt.placeholder.simple": "Спросите что угодно...", - "prompt.placeholder.summarizeComments": "Суммировать комментарии…", - "prompt.placeholder.summarizeComment": "Суммировать комментарий…", - "prompt.mode.shell": "Оболочка", - "prompt.mode.normal": "Промпт", - "prompt.mode.shell.exit": "esc для выхода", - - "prompt.example.1": "Исправить TODO в коде", - "prompt.example.2": "Какой технологический стек этого проекта?", - "prompt.example.3": "Исправить сломанные тесты", - "prompt.example.4": "Объясни как работает аутентификация", - "prompt.example.5": "Найти и исправить уязвимости безопасности", - "prompt.example.6": "Добавить юнит-тесты для сервиса пользователя", - "prompt.example.7": "Рефакторить эту функцию для лучшей читаемости", - "prompt.example.8": "Что означает эта ошибка?", - "prompt.example.9": "Помоги мне отладить эту проблему", - "prompt.example.10": "Сгенерировать документацию API", - "prompt.example.11": "Оптимизировать запросы к базе данных", - "prompt.example.12": "Добавить валидацию ввода", - "prompt.example.13": "Создать новый компонент для...", - "prompt.example.14": "Как развернуть этот проект?", - "prompt.example.15": "Проверь мой код на лучшие практики", - "prompt.example.16": "Добавить обработку ошибок в эту функцию", - "prompt.example.17": "Объясни этот паттерн regex", - "prompt.example.18": "Конвертировать это в TypeScript", - "prompt.example.19": "Добавить логирование по всему проекту", - "prompt.example.20": "Какие зависимости устарели?", - "prompt.example.21": "Помоги написать скрипт миграции", - "prompt.example.22": "Реализовать кэширование для этой конечной точки", - "prompt.example.23": "Добавить пагинацию в этот список", - "prompt.example.24": "Создать CLI команду для...", - "prompt.example.25": "Как работают переменные окружения здесь?", - - "prompt.popover.emptyResults": "Нет совпадений", - "prompt.popover.emptyCommands": "Нет совпадающих команд", - "prompt.dropzone.label": "Перетащите сюда изображения, PDF или текстовые файлы", - "prompt.dropzone.file.label": "Отпустите для @упоминания файла", - "prompt.slash.badge.custom": "своё", - "prompt.slash.badge.skill": "навык", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "активно", - "prompt.context.includeActiveFile": "Включить активный файл", - "prompt.context.removeActiveFile": "Удалить активный файл из контекста", - "prompt.context.removeFile": "Удалить файл из контекста", - "prompt.action.attachFile": "Прикрепить файл", - "prompt.attachment.remove": "Удалить вложение", - "prompt.action.send": "Отправить", - "prompt.action.stop": "Остановить", - - "prompt.toast.pasteUnsupported.title": "Неподдерживаемое вложение", - "prompt.toast.pasteUnsupported.description": "Здесь можно прикрепить только изображения, PDF или текстовые файлы.", - "prompt.toast.modelAgentRequired.title": "Выберите агента и модель", - "prompt.toast.modelAgentRequired.description": "Выберите агента и модель перед отправкой запроса.", - "prompt.toast.worktreeCreateFailed.title": "Не удалось создать worktree", - "prompt.toast.sessionCreateFailed.title": "Не удалось создать сессию", - "prompt.toast.shellSendFailed.title": "Не удалось отправить команду оболочки", - "prompt.toast.commandSendFailed.title": "Не удалось отправить команду", - "prompt.toast.promptSendFailed.title": "Не удалось отправить запрос", - "prompt.toast.promptSendFailed.description": "Не удалось получить сессию", - - "dialog.mcp.title": "MCP", - "dialog.mcp.description": "{{enabled}} из {{total}} включено", - "dialog.mcp.empty": "MCP не настроены", - - "dialog.lsp.empty": "LSP автоматически обнаружены по типам файлов", - "dialog.plugins.empty": "Плагины настроены в opencode.json", - - "mcp.status.connected": "подключено", - "mcp.status.failed": "ошибка", - "mcp.status.needs_auth": "требуется авторизация", - "mcp.auth.clickToAuthenticate": "Нажмите, чтобы авторизоваться", - "mcp.status.disabled": "отключено", - - "dialog.fork.empty": "Нет сообщений для ответвления", - - "dialog.directory.search.placeholder": "Поиск папок", - "dialog.directory.empty": "Папки не найдены", - "dialog.directory.action.selectFile": "Выбрать файл", - "dialog.directory.action.selectFolder": "Выбрать папку", - "dialog.directory.root": "Корень", - "dialog.directory.parent": "Родительская папка", - "dialog.directory.readError": "Не удалось прочитать эту папку", - - "dialog.server.title": "Серверы", - "dialog.server.description": "Переключите сервер OpenCode к которому подключается приложение.", - "dialog.server.search.placeholder": "Поиск серверов", - "dialog.server.empty": "Серверов пока нет", - "dialog.server.add.title": "Добавить сервер", - "dialog.server.add.url": "URL сервера", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "Не удалось подключиться к серверу", - "dialog.server.add.checking": "Проверка...", - "dialog.server.add.button": "Добавить сервер", - "dialog.server.add.name": "Имя сервера (необязательно)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "Имя пользователя (необязательно)", - "dialog.server.add.password": "Пароль (необязательно)", - "dialog.server.edit.title": "Редактировать сервер", - "dialog.server.default.title": "Сервер по умолчанию", - "dialog.server.default.description": - "Подключаться к этому серверу при запуске приложения вместо запуска локального сервера. Требуется перезапуск.", - "dialog.server.default.none": "Сервер не выбран", - "dialog.server.default.set": "Установить текущий сервер по умолчанию", - "dialog.server.default.clear": "Очистить", - "dialog.server.action.remove": "Удалить сервер", - - "dialog.server.menu.edit": "Редактировать", - "dialog.server.menu.default": "Сделать по умолчанию", - "dialog.server.menu.defaultRemove": "Удалить по умолчанию", - "dialog.server.menu.delete": "Удалить", - "dialog.server.current": "Текущий сервер", - "dialog.server.status.default": "По умолч.", - - "dialog.project.edit.title": "Редактировать проект", - "dialog.project.edit.name": "Название", - "dialog.project.edit.icon": "Иконка", - "dialog.project.edit.icon.alt": "Иконка проекта", - "dialog.project.edit.icon.hint": "Нажмите или перетащите изображение", - "dialog.project.edit.icon.recommended": "Рекомендуется: 128x128px", - "dialog.project.edit.color": "Цвет", - "dialog.project.edit.color.select": "Выбрать цвет {{color}}", - - "dialog.project.edit.worktree.startup": "Скрипт запуска рабочего пространства", - "dialog.project.edit.worktree.startup.description": - "Запускается после создания нового рабочего пространства (worktree).", - "dialog.project.edit.worktree.startup.placeholder": "например, bun install", - "context.breakdown.title": "Разбивка контекста", - "context.breakdown.note": - 'Приблизительная разбивка входных токенов. "Другое" включает определения инструментов и накладные расходы.', - "context.breakdown.system": "Система", - "context.breakdown.user": "Пользователь", - "context.breakdown.assistant": "Ассистент", - "context.breakdown.tool": "Вызовы инструментов", - "context.breakdown.other": "Другое", - - "context.systemPrompt.title": "Системный промпт", - "context.rawMessages.title": "Исходные сообщения", - - "context.stats.session": "Сессия", - "context.stats.messages": "Сообщения", - "context.stats.provider": "Провайдер", - "context.stats.model": "Модель", - "context.stats.limit": "Лимит контекста", - "context.stats.totalTokens": "Всего токенов", - "context.stats.usage": "Использование", - "context.stats.inputTokens": "Входные токены", - "context.stats.outputTokens": "Выходные токены", - "context.stats.reasoningTokens": "Токены рассуждения", - "context.stats.cacheTokens": "Токены кэша (чтение/запись)", - "context.stats.userMessages": "Сообщения пользователя", - "context.stats.assistantMessages": "Сообщения ассистента", - "context.stats.totalCost": "Общая стоимость", - "context.stats.sessionCreated": "Сессия создана", - "context.stats.lastActivity": "Последняя активность", - - "context.usage.tokens": "Токены", - "context.usage.usage": "Использование", - "context.usage.cost": "Стоимость", - "context.usage.clickToView": "Нажмите для просмотра контекста", - "context.usage.view": "Показать использование контекста", - - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - - "toast.language.title": "Язык", - "toast.language.description": "Переключено на {{language}}", - - "toast.theme.title": "Тема переключена", - "toast.scheme.title": "Цветовая схема", - - "toast.permissions.autoaccept.on.title": "Разрешения принимаются автоматически", - "toast.permissions.autoaccept.on.description": "Запросы на разрешения будут одобряться автоматически", - "toast.permissions.autoaccept.off.title": "Автоматическое принятие разрешений остановлено", - "toast.permissions.autoaccept.off.description": "Запросы на разрешения будут требовать одобрения", - - "toast.workspace.enabled.title": "Рабочие пространства включены", - "toast.workspace.enabled.description": "В боковой панели теперь отображаются несколько рабочих деревьев", - "toast.workspace.disabled.title": "Рабочие пространства отключены", - "toast.workspace.disabled.description": "В боковой панели отображается только главное рабочее дерево", - - "toast.model.none.title": "Модель не выбрана", - "toast.model.none.description": "Подключите провайдера для суммаризации сессии", - - "toast.file.loadFailed.title": "Не удалось загрузить файл", - - "toast.file.listFailed.title": "Не удалось получить список файлов", - "toast.context.noLineSelection.title": "Нет выделения строк", - "toast.context.noLineSelection.description": "Сначала выберите диапазон строк во вкладке файла.", - "toast.session.share.copyFailed.title": "Не удалось скопировать URL в буфер обмена", - "toast.session.share.success.title": "Сессия опубликована", - "toast.session.share.success.description": "URL скопирован в буфер обмена!", - "toast.session.share.failed.title": "Не удалось опубликовать сессию", - "toast.session.share.failed.description": "Произошла ошибка при публикации сессии", - - "toast.session.unshare.success.title": "Публикация отменена", - "toast.session.unshare.success.description": "Публикация успешно отменена!", - "toast.session.unshare.failed.title": "Не удалось отменить публикацию", - "toast.session.unshare.failed.description": "Произошла ошибка при отмене публикации", - - "toast.session.listFailed.title": "Не удалось загрузить сессии для {{project}}", - - "toast.update.title": "Доступно обновление", - "toast.update.description": "Новая версия OpenCode ({{version}}) доступна для установки.", - "toast.update.action.installRestart": "Установить и перезапустить", - "toast.update.action.notYet": "Пока нет", - - "error.page.title": "Что-то пошло не так", - "error.page.description": "Произошла ошибка при загрузке приложения.", - "error.page.details.label": "Детали ошибки", - "error.page.action.restart": "Перезапустить", - "error.page.action.report": "Сообщить об ошибке", - "error.page.action.reported": "Об ошибке сообщено", - "error.page.action.checking": "Проверка...", - "error.page.action.checkUpdates": "Проверить обновления", - "error.page.action.updateTo": "Обновить до {{version}}", - "error.page.report.prefix": "Пожалуйста, сообщите об этой ошибке команде OpenCode", - "error.page.report.discord": "в Discord", - "error.page.version": "Версия: {{version}}", - - "error.dev.rootNotFound": - "Корневой элемент не найден. Вы забыли добавить его в index.html? Или, может быть, атрибут id был написан неправильно?", - - "error.serverSync.connectFailed": "Не удалось подключиться к серверу. Запущен ли сервер по адресу `{{url}}`?", - "directory.error.invalidUrl": "Недопустимая директория в URL.", - - "error.chain.unknown": "Неизвестная ошибка", - "error.chain.causedBy": "Причина:", - "error.chain.apiError": "Ошибка API", - "error.chain.status": "Статус: {{status}}", - "error.chain.retryable": "Повторная попытка: {{retryable}}", - "error.chain.responseBody": "Тело ответа:\n{{body}}", - "error.chain.didYouMean": "Возможно, вы имели в виду: {{suggestions}}", - "error.chain.modelNotFound": "Модель не найдена: {{provider}}/{{model}}", - "error.chain.checkConfig": "Проверьте названия провайдера/модели в конфиге (opencode.json)", - "error.chain.mcpFailed": - 'MCP сервер "{{name}}" завершился с ошибкой. Обратите внимание, что OpenCode пока не поддерживает MCP авторизацию.', - "error.chain.providerAuthFailed": "Ошибка аутентификации провайдера ({{provider}}): {{message}}", - "error.chain.providerInitFailed": - 'Не удалось инициализировать провайдера "{{provider}}". Проверьте учётные данные и конфигурацию.', - "error.chain.configJsonInvalid": "Конфигурационный файл по адресу {{path}} не является валидным JSON(C)", - "error.chain.configJsonInvalidWithMessage": - "Конфигурационный файл по адресу {{path}} не является валидным JSON(C): {{message}}", - "error.chain.configDirectoryTypo": - 'Папка "{{dir}}" в {{path}} невалидна. Переименуйте папку в "{{suggestion}}" или удалите её. Это распространённая опечатка.', - "error.chain.configFrontmatterError": "Не удалось разобрать frontmatter в {{path}}:\n{{message}}", - "error.chain.configInvalid": "Конфигурационный файл по адресу {{path}} невалиден", - "error.chain.configInvalidWithMessage": "Конфигурационный файл по адресу {{path}} невалиден: {{message}}", - - "notification.permission.title": "Требуется разрешение", - "notification.permission.description": "{{sessionTitle}} в {{projectName}} требуется разрешение", - "notification.question.title": "Вопрос", - "notification.question.description": "У {{sessionTitle}} в {{projectName}} есть вопрос", - "notification.action.goToSession": "Перейти к сессии", - - "notification.session.responseReady.title": "Ответ готов", - "notification.session.error.title": "Ошибка сессии", - "notification.session.error.fallbackDescription": "Произошла ошибка", - - "home.recentProjects": "Недавние проекты", - "home.empty.title": "Нет недавних проектов", - "home.empty.description": "Начните с открытия локального проекта", - - "session.tab.session": "Сессия", - "session.tab.review": "Обзор", - "session.tab.context": "Контекст", - "session.panel.reviewAndFiles": "Обзор и файлы", - "session.review.filesChanged": "{{count}} файлов изменено", - "session.review.change.one": "Изменение", - "session.review.change.other": "Изменения", - "session.review.loadingChanges": "Загрузка изменений...", - "session.review.empty": "Изменений в этой сессии пока нет", - "session.review.noVcs": "Система контроля версий Git не обнаружена, изменения не отображаются", - "session.review.noSnapshot": "Отслеживание снимков отключено в настройках, поэтому изменения сессии недоступны", - "session.review.noChanges": "Нет изменений", - "session.files.selectToOpen": "Выберите файл, чтобы открыть", - "session.files.all": "Все файлы", - "session.files.empty": "Нет файлов", - "session.files.binaryContent": "Двоичный файл (содержимое не может быть отображено)", - "session.messages.renderEarlier": "Показать предыдущие сообщения", - "session.messages.loadingEarlier": "Загрузка предыдущих сообщений...", - "session.messages.loadEarlier": "Загрузить предыдущие сообщения", - "session.messages.loading": "Загрузка сообщений...", - "session.messages.jumpToLatest": "Перейти к последнему", - - "session.context.addToContext": "Добавить {{selection}} в контекст", - "session.todo.title": "Задачи", - "session.todo.collapse": "Свернуть", - "session.todo.expand": "Развернуть", - "session.followupDock.summary.one": "{{count}} сообщение в очереди", - "session.followupDock.summary.other": "{{count}} сообщений в очереди", - "session.followupDock.sendNow": "Отправить сейчас", - "session.followupDock.edit": "Редактировать", - "session.followupDock.collapse": "Свернуть сообщения в очереди", - "session.followupDock.expand": "Развернуть сообщения в очереди", - "session.revertDock.summary.one": "{{count}} сообщение возвращено", - "session.revertDock.summary.other": "{{count}} сообщений возвращено", - "session.revertDock.collapse": "Свернуть возвращённые сообщения", - "session.revertDock.expand": "Развернуть возвращённые сообщения", - "session.revertDock.restore": "Восстановить сообщение", - - "session.new.title": "Создавайте что угодно", - "session.new.worktree.main": "Основная ветка", - "session.new.worktree.mainWithBranch": "Основная ветка ({{branch}})", - "session.new.worktree.create": "Создать новый worktree", - "session.new.lastModified": "Последнее изменение", - - "session.header.search.placeholder": "Поиск {{project}}", - "session.header.searchFiles": "Поиск файлов", - "session.header.openIn": "Открыть в", - "session.header.open.action": "Открыть {{app}}", - "session.header.open.ariaLabel": "Открыть в {{app}}", - "session.header.open.menu": "Варианты открытия", - "session.header.open.copyPath": "Копировать путь", - - "status.popover.trigger": "Статус", - "status.popover.ariaLabel": "Настройки серверов", - "status.popover.tab.servers": "Серверы", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "Плагины", - "status.popover.action.manageServers": "Управлять серверами", - - "session.share.popover.title": "Опубликовать в интернете", - "session.share.popover.description.shared": - "Эта сессия общедоступна. Доступ к ней может получить любой, у кого есть ссылка.", - "session.share.popover.description.unshared": - "Опубликуйте сессию в интернете. Доступ к ней сможет получить любой, у кого есть ссылка.", - "session.share.action.share": "Поделиться", - "session.share.action.publish": "Опубликовать", - "session.share.action.publishing": "Публикация...", - "session.share.action.unpublish": "Отменить публикацию", - "session.share.action.unpublishing": "Отмена публикации...", - "session.share.action.view": "Посмотреть", - "session.share.copy.copied": "Скопировано", - "session.share.copy.copyLink": "Копировать ссылку", - - "lsp.tooltip.none": "Нет LSP серверов", - "lsp.label.connected": "{{count}} LSP", - - "prompt.loading": "Загрузка запроса...", - "terminal.loading": "Загрузка терминала...", - "terminal.title": "Терминал", - "terminal.title.numbered": "Терминал {{number}}", - "terminal.close": "Закрыть терминал", - "terminal.connectionLost.title": "Соединение потеряно", - "terminal.connectionLost.description": - "Соединение с терминалом прервано. Это может произойти при перезапуске сервера.", - - "common.closeTab": "Закрыть вкладку", - "common.dismiss": "Закрыть", - "common.requestFailed": "Запрос не выполнен", - "common.moreOptions": "Дополнительные опции", - "common.learnMore": "Подробнее", - "common.rename": "Переименовать", - "common.reset": "Сбросить", - "common.archive": "Архивировать", - "common.delete": "Удалить", - "common.close": "Закрыть", - "common.edit": "Редактировать", - "common.loadMore": "Загрузить ещё", - "common.key.esc": "ESC", - - "sidebar.menu.toggle": "Переключить меню", - "sidebar.nav.projectsAndSessions": "Проекты и сессии", - "sidebar.settings": "Настройки", - "sidebar.help": "Помощь", - "sidebar.workspaces.enable": "Включить рабочие пространства", - "sidebar.workspaces.disable": "Отключить рабочие пространства", - "sidebar.gettingStarted.title": "Начало работы", - "sidebar.gettingStarted.line1": "OpenCode включает бесплатные модели, чтобы вы могли начать сразу.", - "sidebar.gettingStarted.line2": - "Подключите любого провайдера для использования моделей, включая Claude, GPT, Gemini и др.", - "sidebar.project.recentSessions": "Недавние сессии", - "sidebar.project.viewAllSessions": "Посмотреть все сессии", - "sidebar.project.clearNotifications": "Очистить уведомления", - - "app.name.desktop": "OpenCode Desktop", - "settings.section.desktop": "Приложение", - "settings.section.server": "Сервер", - "settings.tab.general": "Основные", - "settings.tab.shortcuts": "Горячие клавиши", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "Интеграция с WSL", - "settings.desktop.wsl.description": "Запускать сервер OpenCode внутри WSL на Windows.", - - "settings.general.section.appearance": "Внешний вид", - "settings.general.section.notifications": "Системные уведомления", - "settings.general.section.updates": "Обновления", - "settings.general.section.sounds": "Звуковые эффекты", - "settings.general.section.feed": "Лента", - "settings.general.section.display": "Дисплей", - - "settings.general.row.language.title": "Язык", - "settings.general.row.language.description": "Изменить язык отображения OpenCode", - "settings.general.row.appearance.title": "Внешний вид", - "settings.general.row.appearance.description": "Настройте как OpenCode выглядит на вашем устройстве", - "settings.general.row.colorScheme.title": "Цветовая схема", - "settings.general.row.colorScheme.description": "Выберите, следует ли OpenCode системной, светлой или тёмной теме", - "settings.general.row.theme.title": "Тема", - "settings.general.row.theme.description": "Настройте оформление OpenCode.", - "settings.general.row.font.title": "Шрифт кода", - "settings.general.row.font.description": "Настройте шрифт, используемый в блоках кода", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "Шрифт интерфейса", - "settings.general.row.uiFont.description": "Настройте шрифт, используемый во всем интерфейсе", - "settings.general.row.followup.title": "Поведение уточняющих вопросов", - "settings.general.row.followup.description": - "Выберите, отправлять ли уточняющие вопросы сразу или помещать их в очередь", - "settings.general.row.followup.option.queue": "Очередь", - "settings.general.row.followup.option.steer": "Направлять", - "settings.general.row.reasoningSummaries.title": "Показывать сводки рассуждений", - "settings.general.row.reasoningSummaries.description": "Отображать сводки рассуждений модели в ленте", - - "settings.general.row.shellToolPartsExpanded.title": "Разворачивать элементы инструмента shell", - "settings.general.row.shellToolPartsExpanded.description": - "Показывать элементы инструмента shell в ленте развернутыми по умолчанию", - "settings.general.row.editToolPartsExpanded.title": "Разворачивать элементы инструмента edit", - "settings.general.row.editToolPartsExpanded.description": - "Показывать элементы инструментов edit, write и patch в ленте развернутыми по умолчанию", - "settings.general.row.wayland.title": "Использовать нативный Wayland", - "settings.general.row.wayland.description": "Отключить X11 fallback на Wayland. Требуется перезапуск.", - "settings.general.row.wayland.tooltip": - "На Linux с мониторами разной частоты обновления нативный Wayland может быть стабильнее.", - - "settings.general.row.releaseNotes.title": "Примечания к выпуску", - "settings.general.row.releaseNotes.description": 'Показывать всплывающие окна "Что нового" после обновлений', - - "settings.updates.row.startup.title": "Проверять обновления при запуске", - "settings.updates.row.startup.description": "Автоматически проверять обновления при запуске OpenCode", - "settings.updates.row.check.title": "Проверить обновления", - "settings.updates.row.check.description": "Проверить обновления вручную и установить, если доступны", - "settings.updates.action.checkNow": "Проверить сейчас", - "settings.updates.action.checking": "Проверка...", - "settings.updates.toast.latest.title": "У вас последняя версия", - "settings.updates.toast.latest.description": "Вы используете последнюю версию OpenCode.", - "sound.option.none": "Нет", - "sound.option.alert01": "Alert 01", - "sound.option.alert02": "Alert 02", - "sound.option.alert03": "Alert 03", - "sound.option.alert04": "Alert 04", - "sound.option.alert05": "Alert 05", - "sound.option.alert06": "Alert 06", - "sound.option.alert07": "Alert 07", - "sound.option.alert08": "Alert 08", - "sound.option.alert09": "Alert 09", - "sound.option.alert10": "Alert 10", - "sound.option.bipbop01": "Bip-bop 01", - "sound.option.bipbop02": "Bip-bop 02", - "sound.option.bipbop03": "Bip-bop 03", - "sound.option.bipbop04": "Bip-bop 04", - "sound.option.bipbop05": "Bip-bop 05", - "sound.option.bipbop06": "Bip-bop 06", - "sound.option.bipbop07": "Bip-bop 07", - "sound.option.bipbop08": "Bip-bop 08", - "sound.option.bipbop09": "Bip-bop 09", - "sound.option.bipbop10": "Bip-bop 10", - "sound.option.staplebops01": "Staplebops 01", - "sound.option.staplebops02": "Staplebops 02", - "sound.option.staplebops03": "Staplebops 03", - "sound.option.staplebops04": "Staplebops 04", - "sound.option.staplebops05": "Staplebops 05", - "sound.option.staplebops06": "Staplebops 06", - "sound.option.staplebops07": "Staplebops 07", - "sound.option.nope01": "Nope 01", - "sound.option.nope02": "Nope 02", - "sound.option.nope03": "Nope 03", - "sound.option.nope04": "Nope 04", - "sound.option.nope05": "Nope 05", - "sound.option.nope06": "Nope 06", - "sound.option.nope07": "Nope 07", - "sound.option.nope08": "Nope 08", - "sound.option.nope09": "Nope 09", - "sound.option.nope10": "Nope 10", - "sound.option.nope11": "Nope 11", - "sound.option.nope12": "Nope 12", - "sound.option.yup01": "Yup 01", - "sound.option.yup02": "Yup 02", - "sound.option.yup03": "Yup 03", - "sound.option.yup04": "Yup 04", - "sound.option.yup05": "Yup 05", - "sound.option.yup06": "Yup 06", - - "settings.general.notifications.agent.title": "Агент", - "settings.general.notifications.agent.description": - "Показывать системное уведомление когда агент завершён или требует внимания", - "settings.general.notifications.permissions.title": "Разрешения", - "settings.general.notifications.permissions.description": - "Показывать системное уведомление когда требуется разрешение", - "settings.general.notifications.errors.title": "Ошибки", - "settings.general.notifications.errors.description": "Показывать системное уведомление когда происходит ошибка", - - "settings.general.sounds.agent.title": "Агент", - "settings.general.sounds.agent.description": "Воспроизводить звук когда агент завершён или требует внимания", - "settings.general.sounds.permissions.title": "Разрешения", - "settings.general.sounds.permissions.description": "Воспроизводить звук когда требуется разрешение", - "settings.general.sounds.errors.title": "Ошибки", - "settings.general.sounds.errors.description": "Воспроизводить звук когда происходит ошибка", - - "settings.shortcuts.title": "Горячие клавиши", - "settings.shortcuts.reset.button": "Сбросить к умолчаниям", - "settings.shortcuts.reset.toast.title": "Горячие клавиши сброшены", - "settings.shortcuts.reset.toast.description": "Горячие клавиши были сброшены к значениям по умолчанию.", - "settings.shortcuts.conflict.title": "Сочетание уже используется", - "settings.shortcuts.conflict.description": "{{keybind}} уже назначено для {{titles}}.", - "settings.shortcuts.unassigned": "Не назначено", - "settings.shortcuts.pressKeys": "Нажмите клавиши", - "settings.shortcuts.search.placeholder": "Поиск горячих клавиш", - "settings.shortcuts.search.empty": "Горячие клавиши не найдены", - - "settings.shortcuts.group.general": "Основные", - "settings.shortcuts.group.session": "Сессия", - "settings.shortcuts.group.navigation": "Навигация", - "settings.shortcuts.group.modelAndAgent": "Модель и агент", - "settings.shortcuts.group.terminal": "Терминал", - "settings.shortcuts.group.prompt": "Запрос", - - "settings.providers.title": "Провайдеры", - "settings.providers.description": "Настройки провайдеров будут доступны здесь.", - "settings.providers.section.connected": "Подключённые провайдеры", - "settings.providers.connected.empty": "Нет подключённых провайдеров", - "settings.providers.section.popular": "Популярные провайдеры", - "settings.providers.tag.environment": "Среда", - "settings.providers.tag.config": "Конфигурация", - "settings.providers.tag.custom": "Пользовательский", - "settings.providers.tag.other": "Другое", - "settings.models.title": "Модели", - "settings.models.description": "Настройки моделей будут доступны здесь.", - "settings.agents.title": "Агенты", - "settings.agents.description": "Настройки агентов будут доступны здесь.", - "settings.commands.title": "Команды", - "settings.commands.description": "Настройки команд будут доступны здесь.", - "settings.mcp.title": "MCP", - "settings.mcp.description": "Настройки MCP будут доступны здесь.", - - "settings.permissions.title": "Разрешения", - "settings.permissions.description": "Контролируйте какие инструменты сервер может использовать по умолчанию.", - "settings.permissions.section.tools": "Инструменты", - "settings.permissions.toast.updateFailed.title": "Не удалось обновить разрешения", - - "settings.permissions.action.allow": "Разрешить", - "settings.permissions.action.ask": "Спрашивать", - "settings.permissions.action.deny": "Запретить", - - "settings.permissions.tool.read.title": "Чтение", - "settings.permissions.tool.read.description": "Чтение файла (по совпадению пути)", - "settings.permissions.tool.edit.title": "Редактирование", - "settings.permissions.tool.edit.description": - "Изменение файлов, включая редактирование, запись, патчи и мульти-редактирование", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "Сопоставление файлов по паттернам glob", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "Поиск по содержимому файлов с использованием регулярных выражений", - "settings.permissions.tool.list.title": "List", - "settings.permissions.tool.list.description": "Список файлов в директории", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "Запуск команд оболочки", - "settings.permissions.tool.task.title": "Task", - "settings.permissions.tool.task.description": "Запуск подагентов", - "settings.permissions.tool.skill.title": "Skill", - "settings.permissions.tool.skill.description": "Загрузка навыка по имени", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "Запросы к языковому серверу", - "settings.permissions.tool.todowrite.title": "Todo Write", - "settings.permissions.tool.todowrite.description": "Обновление списка задач", - "settings.permissions.tool.webfetch.title": "Web Fetch", - "settings.permissions.tool.webfetch.description": "Получение контента по URL", - "settings.permissions.tool.websearch.title": "Web Search", - "settings.permissions.tool.websearch.description": "Поиск в интернете", - "settings.permissions.tool.external_directory.title": "Внешняя директория", - "settings.permissions.tool.external_directory.description": "Доступ к файлам вне директории проекта", - "settings.permissions.tool.doom_loop.title": "Doom Loop", - "settings.permissions.tool.doom_loop.description": - "Обнаружение повторяющихся вызовов инструментов с одинаковыми входными данными", - - "session.delete.failed.title": "Не удалось удалить сессию", - "session.delete.title": "Удалить сессию", - "session.delete.confirm": 'Удалить сессию "{{name}}"?', - "session.delete.button": "Удалить сессию", - - "workspace.new": "Новое рабочее пространство", - "workspace.type.local": "локальное", - "workspace.type.sandbox": "песочница", - "workspace.create.failed.title": "Не удалось создать рабочее пространство", - "workspace.delete.failed.title": "Не удалось удалить рабочее пространство", - "workspace.resetting.title": "Сброс рабочего пространства", - "workspace.resetting.description": "Это может занять минуту.", - "workspace.reset.failed.title": "Не удалось сбросить рабочее пространство", - "workspace.reset.success.title": "Рабочее пространство сброшено", - "workspace.reset.success.description": "Рабочее пространство теперь соответствует ветке по умолчанию.", - "workspace.error.stillPreparing": "Рабочее пространство всё ещё подготавливается", - "workspace.status.checking": "Проверка незафиксированных изменений...", - "workspace.status.error": "Не удалось проверить статус git.", - "workspace.status.clean": "Незафиксированных изменений не обнаружено.", - "workspace.status.dirty": "В этом рабочем пространстве обнаружены незафиксированные изменения.", - "workspace.delete.title": "Удалить рабочее пространство", - "workspace.delete.confirm": 'Удалить рабочее пространство "{{name}}"?', - "workspace.delete.button": "Удалить рабочее пространство", - "workspace.reset.title": "Сбросить рабочее пространство", - "workspace.reset.confirm": 'Сбросить рабочее пространство "{{name}}"?', - "workspace.reset.button": "Сбросить рабочее пространство", - "workspace.reset.archived.none": "Активные сессии не будут архивированы.", - "workspace.reset.archived.one": "1 сессия будет архивирована.", - "workspace.reset.archived.many": "{{count}} сессий будет архивировано.", - "workspace.reset.note": "Это сбросит рабочее пространство до соответствия ветке по умолчанию.", - "common.open": "Открыть", - "dialog.releaseNotes.action.getStarted": "Начать", - "dialog.releaseNotes.action.next": "Далее", - "dialog.releaseNotes.action.hideFuture": "Больше не показывать", - "dialog.releaseNotes.media.alt": "Превью релиза", - "toast.project.reloadFailed.title": "Не удалось перезагрузить {{project}}", - "error.server.invalidConfiguration": "Недопустимая конфигурация", - "common.moreCountSuffix": " (ещё {{count}})", - "common.time.justNow": "Только что", - "common.time.minutesAgo.short": "{{count}} мин назад", - "common.time.hoursAgo.short": "{{count}} ч назад", - "common.time.daysAgo.short": "{{count}} д назад", - "settings.providers.connected.environmentDescription": "Подключено из ваших переменных окружения", - "settings.providers.custom.description": "Добавить провайдера, совместимого с OpenAI, по базовому URL.", - - "app.server.unreachable": "Не удалось связаться с {{server}}", - "app.server.retrying": "Автоматическая повторная попытка...", - "app.server.otherServers": "Другие серверы", - "dialog.server.add.usernamePlaceholder": "имя пользователя", - "dialog.server.add.passwordPlaceholder": "пароль", - "server.row.noUsername": "нет имени пользователя", - "session.review.noVcs.createGit.title": "Создать репозиторий Git", - "session.review.noVcs.createGit.description": "Отслеживайте, просматривайте и отменяйте изменения в этом проекте", - "session.review.noVcs.createGit.actionLoading": "Создание репозитория Git...", - "session.review.noVcs.createGit.action": "Создать репозиторий Git", - "session.todo.progress": "Выполнено {{done}} из {{total}} задач", - "session.question.progress": "{{current}} из {{total}} вопросов", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "Проводник", - "session.header.open.fileManager": "Файловый менеджер", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "Терминал", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "Диагностика производительности разработки", - "debugBar.na": "н/д", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": - "Последний завершенный переход маршрута, затрагивающий страницу сеанса, измеренный от запуска маршрутизатора до первой отрисовки после стабилизации.", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "Скользящая частота кадров в секунду за последние 5 секунд.", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "Худшее время кадра за последние 5 секунд.", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "Кадры более 32 мс за последние 5 секунд.", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "Заблокированное время и количество длинных задач за последние 5 секунд. Макс. задача: {{max}}.", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "Худшая наблюдаемая задержка ввода за последние 5 секунд.", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": - "Приблизительная продолжительность взаимодействия за последние 5 секунд. Это похоже на INP, а не официальный Web Vitals INP.", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "Кумулятивный сдвиг макета за текущее время жизни приложения.", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "Используемая куча JS по сравнению с лимитом кучи. Только Chromium.", - "debugBar.mem.tip": "Используемая куча JS по сравнению с лимитом кучи. {{used}} из {{limit}}.", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "Пробел", - "common.key.backspace": "Backspace", - "common.key.enter": "Enter", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "неизвестно", - "error.page.circular": "[Циклично]", - "error.serverSDK.noServerAvailable": "Нет доступного сервера", - "error.serverSDK.serverNotAvailable": "Сервер недоступен", - "error.childStore.persistedCacheCreateFailed": "Не удалось создать постоянный кэш", - "error.childStore.persistedProjectMetadataCreateFailed": "Не удалось создать постоянные метаданные проекта", - "error.childStore.persistedProjectIconCreateFailed": "Не удалось создать постоянный значок проекта", - "error.childStore.storeCreateFailed": "Не удалось создать хранилище", - "terminal.connectionLost.abnormalClose": "WebSocket закрыт аварийно: {{code}}", -} diff --git a/packages/app/src/i18n/th.ts b/packages/app/src/i18n/th.ts deleted file mode 100644 index d066f3c616..0000000000 --- a/packages/app/src/i18n/th.ts +++ /dev/null @@ -1,928 +0,0 @@ -export const dict = { - "command.category.suggested": "แนะนำ", - "command.category.view": "มุมมอง", - "command.category.project": "โปรเจกต์", - "command.category.provider": "ผู้ให้บริการ", - "command.category.server": "เซิร์ฟเวอร์", - "command.category.session": "เซสชัน", - "command.category.theme": "ธีม", - "command.category.language": "ภาษา", - "command.category.file": "ไฟล์", - "command.category.context": "บริบท", - "command.category.terminal": "เทอร์มินัล", - "command.category.model": "โมเดล", - "command.category.mcp": "MCP", - "command.category.agent": "เอเจนต์", - "command.category.permissions": "สิทธิ์", - "command.category.workspace": "พื้นที่ทำงาน", - "command.category.settings": "การตั้งค่า", - - "theme.scheme.system": "ระบบ", - "theme.scheme.light": "สว่าง", - "theme.scheme.dark": "มืด", - - "command.sidebar.toggle": "สลับแถบข้าง", - "command.project.open": "เปิดโปรเจกต์", - "command.provider.connect": "เชื่อมต่อผู้ให้บริการ", - "command.server.switch": "สลับเซิร์ฟเวอร์", - "command.settings.open": "เปิดการตั้งค่า", - "command.session.previous": "เซสชันก่อนหน้า", - "command.session.next": "เซสชันถัดไป", - "command.session.previous.unseen": "เซสชันที่ยังไม่ได้อ่านก่อนหน้า", - "command.session.next.unseen": "เซสชันที่ยังไม่ได้อ่านถัดไป", - "command.session.archive": "จัดเก็บเซสชัน", - - "command.palette": "คำสั่งค้นหา", - - "command.theme.cycle": "เปลี่ยนธีม", - "command.theme.set": "ใช้ธีม: {{theme}}", - "command.theme.scheme.cycle": "เปลี่ยนโทนสี", - "command.theme.scheme.set": "ใช้โทนสี: {{scheme}}", - - "command.language.cycle": "เปลี่ยนภาษา", - "command.language.set": "ใช้ภาษา: {{language}}", - - "command.session.new": "เซสชันใหม่", - "command.file.open": "เปิดไฟล์", - "command.tab.close": "ปิดแท็บ", - "command.context.addSelection": "เพิ่มส่วนที่เลือกไปยังบริบท", - "command.context.addSelection.description": "เพิ่มบรรทัดที่เลือกจากไฟล์ปัจจุบัน", - "command.input.focus": "โฟกัสช่องป้อนข้อมูล", - "command.terminal.toggle": "สลับเทอร์มินัล", - "command.fileTree.toggle": "สลับต้นไม้ไฟล์", - "command.review.toggle": "สลับการตรวจสอบ", - "command.terminal.new": "เทอร์มินัลใหม่", - "command.terminal.new.description": "สร้างแท็บเทอร์มินัลใหม่", - "command.steps.toggle": "สลับขั้นตอน", - "command.steps.toggle.description": "แสดงหรือซ่อนขั้นตอนสำหรับข้อความปัจจุบัน", - "command.message.previous": "ข้อความก่อนหน้า", - "command.message.previous.description": "ไปที่ข้อความผู้ใช้ก่อนหน้า", - "command.message.next": "ข้อความถัดไป", - "command.message.next.description": "ไปที่ข้อความผู้ใช้ถัดไป", - "command.model.choose": "เลือกโมเดล", - "command.model.choose.description": "เลือกโมเดลอื่น", - "command.mcp.toggle": "สลับ MCPs", - "command.mcp.toggle.description": "สลับ MCPs", - "command.agent.cycle": "เปลี่ยนเอเจนต์", - "command.agent.cycle.description": "สลับไปยังเอเจนต์ถัดไป", - "command.agent.cycle.reverse": "เปลี่ยนเอเจนต์ย้อนกลับ", - "command.agent.cycle.reverse.description": "สลับไปยังเอเจนต์ก่อนหน้า", - "command.model.variant.cycle": "เปลี่ยนความพยายามในการคิด", - "command.model.variant.cycle.description": "สลับไปยังระดับความพยายามถัดไป", - "command.prompt.mode.shell": "เชลล์", - "command.prompt.mode.normal": "พรอมต์", - "command.permissions.autoaccept.enable": "ยอมรับสิทธิ์โดยอัตโนมัติ", - "command.permissions.autoaccept.disable": "หยุดยอมรับสิทธิ์โดยอัตโนมัติ", - "command.workspace.toggle": "สลับพื้นที่ทำงาน", - "command.workspace.toggle.description": "เปิดหรือปิดใช้งานพื้นที่ทำงานหลายรายการในแถบด้านข้าง", - "command.session.undo": "ยกเลิก", - "command.session.undo.description": "ยกเลิกข้อความล่าสุด", - "command.session.redo": "ทำซ้ำ", - "command.session.redo.description": "ทำซ้ำข้อความที่ถูกยกเลิกล่าสุด", - "command.session.compact": "บีบอัดเซสชัน", - "command.session.compact.description": "สรุปเซสชันเพื่อลดขนาดบริบท", - "command.session.fork": "แตกแขนงจากข้อความ", - "command.session.fork.description": "สร้างเซสชันใหม่จากข้อความก่อนหน้า", - "command.session.share": "แชร์เซสชัน", - "command.session.share.description": "แชร์เซสชันนี้และคัดลอก URL ไปยังคลิปบอร์ด", - "command.session.unshare": "ยกเลิกการแชร์เซสชัน", - "command.session.unshare.description": "หยุดการแชร์เซสชันนี้", - - "palette.search.placeholder": "ค้นหาไฟล์ คำสั่ง และเซสชัน", - "palette.empty": "ไม่พบผลลัพธ์", - "palette.group.commands": "คำสั่ง", - "palette.group.files": "ไฟล์", - - "dialog.provider.search.placeholder": "ค้นหาผู้ให้บริการ", - "dialog.provider.empty": "ไม่พบผู้ให้บริการ", - "dialog.provider.group.popular": "ยอดนิยม", - "dialog.provider.group.other": "อื่น ๆ", - "dialog.provider.tag.recommended": "แนะนำ", - "dialog.provider.opencode.note": "โมเดลที่คัดสรร รวมถึง Claude, GPT, Gemini และอื่น ๆ", - "dialog.provider.opencode.tagline": "โมเดลที่เชื่อถือได้และปรับให้เหมาะสม", - "dialog.provider.opencodeGo.tagline": "การสมัครสมาชิกราคาประหยัดสำหรับทุกคน", - "dialog.provider.anthropic.note": "เข้าถึงโมเดล Claude โดยตรง รวมถึง Pro และ Max", - "dialog.provider.copilot.note": "โมเดล AI สำหรับการช่วยเหลือในการเขียนโค้ดผ่าน GitHub Copilot", - "dialog.provider.openai.note": "โมเดล GPT สำหรับงาน AI ทั่วไปที่รวดเร็วและมีความสามารถ", - "dialog.provider.google.note": "โมเดล Gemini สำหรับการตอบสนองที่รวดเร็วและมีโครงสร้าง", - "dialog.provider.openrouter.note": "เข้าถึงโมเดลที่รองรับทั้งหมดจากผู้ให้บริการเดียว", - "dialog.provider.vercel.note": "การเข้าถึงโมเดล AI แบบรวมด้วยการกำหนดเส้นทางอัจฉริยะ", - - "dialog.model.select.title": "เลือกโมเดล", - "dialog.model.search.placeholder": "ค้นหาโมเดล", - "dialog.model.empty": "ไม่พบผลลัพธ์โมเดล", - "dialog.model.manage": "จัดการโมเดล", - "dialog.model.manage.description": "ปรับแต่งโมเดลที่จะปรากฏในตัวเลือกโมเดล", - "dialog.model.manage.provider.toggle": "สลับโมเดลทั้งหมดของ {{provider}}", - - "dialog.model.unpaid.freeModels.title": "โมเดลฟรีที่จัดหาให้โดย OpenCode", - "dialog.model.unpaid.addMore.title": "เพิ่มโมเดลเพิ่มเติมจากผู้ให้บริการยอดนิยม", - - "dialog.provider.viewAll": "แสดงผู้ให้บริการเพิ่มเติม", - - "provider.connect.title": "เชื่อมต่อ {{provider}}", - "provider.connect.title.anthropicProMax": "เข้าสู่ระบบด้วย Claude Pro/Max", - "provider.connect.selectMethod": "เลือกวิธีการเข้าสู่ระบบสำหรับ {{provider}}", - "provider.connect.method.apiKey": "คีย์ API", - "provider.connect.status.inProgress": "กำลังอนุญาต...", - "provider.connect.status.waiting": "รอการอนุญาต...", - "provider.connect.status.failed": "การอนุญาตล้มเหลว: {{error}}", - "provider.connect.apiKey.description": - "ป้อนคีย์ API ของ {{provider}} เพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน OpenCode", - "provider.connect.apiKey.label": "คีย์ API ของ {{provider}}", - "provider.connect.apiKey.placeholder": "คีย์ API", - "provider.connect.apiKey.required": "ต้องใช้คีย์ API", - "provider.connect.opencodeZen.line1": - "OpenCode Zen ให้คุณเข้าถึงชุดโมเดลที่เชื่อถือได้และปรับแต่งแล้วสำหรับเอเจนต์การเขียนโค้ด", - "provider.connect.opencodeZen.line2": - "ด้วยคีย์ API เดียวคุณจะได้รับการเข้าถึงโมเดล เช่น Claude, GPT, Gemini, GLM และอื่น ๆ", - "provider.connect.opencodeZen.visit.prefix": "เยี่ยมชม ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " เพื่อรวบรวมคีย์ API ของคุณ", - "provider.connect.oauth.code.visit.prefix": "เยี่ยมชม ", - "provider.connect.oauth.code.visit.link": "ลิงก์นี้", - "provider.connect.oauth.code.visit.suffix": - " เพื่อรวบรวมรหัสการอนุญาตของคุณเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน OpenCode", - "provider.connect.oauth.code.label": "รหัสการอนุญาต {{method}}", - "provider.connect.oauth.code.placeholder": "รหัสการอนุญาต", - "provider.connect.oauth.code.required": "ต้องใช้รหัสการอนุญาต", - "provider.connect.oauth.code.invalid": "รหัสการอนุญาตไม่ถูกต้อง", - "provider.connect.oauth.auto.visit.prefix": "เยี่ยมชม ", - "provider.connect.oauth.auto.visit.link": "ลิงก์นี้", - "provider.connect.oauth.auto.visit.suffix": - " และป้อนรหัสด้านล่างเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน OpenCode", - "provider.connect.oauth.auto.confirmationCode": "รหัสยืนยัน", - "provider.connect.toast.connected.title": "{{provider}} ที่เชื่อมต่อแล้ว", - "provider.connect.toast.connected.description": "โมเดล {{provider}} พร้อมใช้งานแล้ว", - - "provider.custom.title": "ผู้ให้บริการที่กำหนดเอง", - "provider.custom.description.prefix": "กำหนดค่าผู้ให้บริการที่เข้ากันได้กับ OpenAI ดู ", - "provider.custom.description.link": "เอกสารการกำหนดค่าผู้ให้บริการ", - "provider.custom.description.suffix": ".", - "provider.custom.field.providerID.label": "รหัสผู้ให้บริการ", - "provider.custom.field.providerID.placeholder": "myprovider", - "provider.custom.field.providerID.description": "ตัวอักษรพิมพ์เล็ก ตัวเลข ยัติภังค์ หรือขีดล่าง", - "provider.custom.field.name.label": "ชื่อที่แสดง", - "provider.custom.field.name.placeholder": "My AI Provider", - "provider.custom.field.baseURL.label": "URL พื้นฐาน", - "provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1", - "provider.custom.field.apiKey.label": "คีย์ API", - "provider.custom.field.apiKey.placeholder": "คีย์ API", - "provider.custom.field.apiKey.description": "ไม่บังคับ เว้นว่างไว้หากคุณจัดการการยืนยันตัวตนผ่านส่วนหัว", - "provider.custom.models.label": "โมเดล", - "provider.custom.models.id.label": "รหัส", - "provider.custom.models.id.placeholder": "model-id", - "provider.custom.models.name.label": "ชื่อ", - "provider.custom.models.name.placeholder": "ชื่อที่แสดง", - "provider.custom.models.remove": "ลบโมเดล", - "provider.custom.models.add": "เพิ่มโมเดล", - "provider.custom.headers.label": "ส่วนหัว (ไม่บังคับ)", - "provider.custom.headers.key.label": "ส่วนหัว", - "provider.custom.headers.key.placeholder": "Header-Name", - "provider.custom.headers.value.label": "ค่า", - "provider.custom.headers.value.placeholder": "ค่า", - "provider.custom.headers.remove": "ลบส่วนหัว", - "provider.custom.headers.add": "เพิ่มส่วนหัว", - "provider.custom.error.providerID.required": "ต้องระบุรหัสผู้ให้บริการ", - "provider.custom.error.providerID.format": "ใช้ตัวอักษรพิมพ์เล็ก ตัวเลข ยัติภังค์ หรือขีดล่าง", - "provider.custom.error.providerID.exists": "รหัสผู้ให้บริการนั้นมีอยู่แล้ว", - "provider.custom.error.name.required": "ต้องระบุชื่อที่แสดง", - "provider.custom.error.baseURL.required": "ต้องระบุ URL พื้นฐาน", - "provider.custom.error.baseURL.format": "ต้องขึ้นต้นด้วย http:// หรือ https://", - "provider.custom.error.required": "จำเป็น", - "provider.custom.error.duplicate": "ซ้ำ", - - "provider.disconnect.toast.disconnected.title": "{{provider}} ที่ยกเลิกการเชื่อมต่อแล้ว", - "provider.disconnect.toast.disconnected.description": "โมเดล {{provider}} ไม่พร้อมใช้งานอีกต่อไป", - - "model.tag.free": "ฟรี", - "model.tag.latest": "ล่าสุด", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "ข้อความ", - "model.input.image": "รูปภาพ", - "model.input.audio": "เสียง", - "model.input.video": "วิดีโอ", - "model.input.pdf": "PDF", - "model.tooltip.allows": "อนุญาต: {{inputs}}", - "model.tooltip.reasoning.allowed": "อนุญาตการใช้เหตุผล", - "model.tooltip.reasoning.none": "ไม่มีการใช้เหตุผล", - "model.tooltip.context": "ขีดจำกัดบริบท {{limit}}", - - "common.search.placeholder": "ค้นหา", - "common.goBack": "ย้อนกลับ", - "common.goForward": "นำทางไปข้างหน้า", - "common.loading": "กำลังโหลด", - "common.loading.ellipsis": "...", - "common.cancel": "ยกเลิก", - "common.connect": "เชื่อมต่อ", - "common.disconnect": "ยกเลิกการเชื่อมต่อ", - "common.continue": "ส่ง", - "common.submit": "ส่ง", - "common.save": "บันทึก", - "common.saving": "กำลังบันทึก...", - "common.default": "ค่าเริ่มต้น", - "common.attachment": "ไฟล์แนบ", - - "prompt.placeholder.shell": "ป้อนคำสั่งเชลล์... {{example}}", - "prompt.placeholder.normal": 'ถามอะไรก็ได้... "{{example}}"', - "prompt.placeholder.simple": "ถามอะไรก็ได้...", - "prompt.placeholder.summarizeComments": "สรุปความคิดเห็น…", - "prompt.placeholder.summarizeComment": "สรุปความคิดเห็น…", - "prompt.mode.shell": "เชลล์", - "prompt.mode.normal": "พรอมต์", - "prompt.mode.shell.exit": "กด esc เพื่อออก", - - "prompt.example.1": "แก้ไข TODO ในโค้ดเบส", - "prompt.example.2": "เทคโนโลยีของโปรเจกต์นี้คืออะไร?", - "prompt.example.3": "แก้ไขการทดสอบที่เสีย", - "prompt.example.4": "อธิบายวิธีการทำงานของการตรวจสอบสิทธิ์", - "prompt.example.5": "ค้นหาและแก้ไขช่องโหว่ความปลอดภัย", - "prompt.example.6": "เพิ่มการทดสอบหน่วยสำหรับบริการผู้ใช้", - "prompt.example.7": "ปรับโครงสร้างฟังก์ชันนี้ให้อ่านง่ายขึ้น", - "prompt.example.8": "ข้อผิดพลาดนี้หมายความว่าอะไร?", - "prompt.example.9": "ช่วยฉันดีบักปัญหานี้", - "prompt.example.10": "สร้างเอกสาร API", - "prompt.example.11": "ปรับปรุงการสืบค้นฐานข้อมูล", - "prompt.example.12": "เพิ่มการตรวจสอบข้อมูลนำเข้า", - "prompt.example.13": "สร้างคอมโพเนนต์ใหม่สำหรับ...", - "prompt.example.14": "ฉันจะทำให้โปรเจกต์นี้ทำงานได้อย่างไร?", - "prompt.example.15": "ตรวจสอบโค้ดของฉันเพื่อแนวทางปฏิบัติที่ดีที่สุด", - "prompt.example.16": "เพิ่มการจัดการข้อผิดพลาดในฟังก์ชันนี้", - "prompt.example.17": "อธิบายรูปแบบ regex นี้", - "prompt.example.18": "แปลงสิ่งนี้เป็น TypeScript", - "prompt.example.19": "เพิ่มการบันทึกทั่วทั้งโค้ดเบส", - "prompt.example.20": "มีการพึ่งพาอะไรที่ล้าสมัยอยู่?", - "prompt.example.21": "ช่วยฉันเขียนสคริปต์การย้ายข้อมูล", - "prompt.example.22": "ใช้งานแคชสำหรับจุดสิ้นสุดนี้", - "prompt.example.23": "เพิ่มการแบ่งหน้าในรายการนี้", - "prompt.example.24": "สร้างคำสั่ง CLI สำหรับ...", - "prompt.example.25": "ตัวแปรสภาพแวดล้อมทำงานอย่างไรที่นี่?", - - "prompt.popover.emptyResults": "ไม่พบผลลัพธ์ที่ตรงกัน", - "prompt.popover.emptyCommands": "ไม่พบคำสั่งที่ตรงกัน", - "prompt.dropzone.label": "ลากรูปภาพ, PDF หรือไฟล์ข้อความมาวางที่นี่", - "prompt.dropzone.file.label": "วางเพื่อ @กล่าวถึงไฟล์", - "prompt.slash.badge.custom": "กำหนดเอง", - "prompt.slash.badge.skill": "ทักษะ", - "prompt.slash.badge.mcp": "MCP", - "prompt.context.active": "ใช้งานอยู่", - "prompt.context.includeActiveFile": "รวมไฟล์ที่ใช้งานอยู่", - "prompt.context.removeActiveFile": "เอาไฟล์ที่ใช้งานอยู่ออกจากบริบท", - "prompt.context.removeFile": "เอาไฟล์ออกจากบริบท", - "prompt.action.attachFile": "แนบไฟล์", - "prompt.attachment.remove": "เอาไฟล์แนบออก", - "prompt.action.send": "ส่ง", - "prompt.action.stop": "หยุด", - - "prompt.toast.pasteUnsupported.title": "ไฟล์แนบที่ไม่รองรับ", - "prompt.toast.pasteUnsupported.description": "แนบได้เฉพาะรูปภาพ, PDF หรือไฟล์ข้อความเท่านั้น", - "prompt.toast.modelAgentRequired.title": "เลือกเอเจนต์และโมเดล", - "prompt.toast.modelAgentRequired.description": "เลือกเอเจนต์และโมเดลก่อนส่งพร้อมท์", - "prompt.toast.worktreeCreateFailed.title": "ไม่สามารถสร้าง worktree", - "prompt.toast.sessionCreateFailed.title": "ไม่สามารถสร้างเซสชัน", - "prompt.toast.shellSendFailed.title": "ไม่สามารถส่งคำสั่งเชลล์", - "prompt.toast.commandSendFailed.title": "ไม่สามารถส่งคำสั่ง", - "prompt.toast.promptSendFailed.title": "ไม่สามารถส่งพร้อมท์", - "prompt.toast.promptSendFailed.description": "ไม่สามารถดึงเซสชันได้", - - "dialog.mcp.title": "MCPs", - "dialog.mcp.description": "{{enabled}} จาก {{total}} ที่เปิดใช้งาน", - "dialog.mcp.empty": "ไม่มี MCP ที่กำหนดค่า", - - "dialog.lsp.empty": "LSPs ตรวจจับอัตโนมัติจากประเภทไฟล์", - "dialog.plugins.empty": "ปลั๊กอินที่กำหนดค่าใน opencode.json", - - "mcp.status.connected": "เชื่อมต่อแล้ว", - "mcp.status.failed": "ล้มเหลว", - "mcp.status.needs_auth": "ต้องการการตรวจสอบสิทธิ์", - "mcp.auth.clickToAuthenticate": "คลิกเพื่อยืนยันตัวตน", - "mcp.status.disabled": "ปิดใช้งาน", - - "dialog.fork.empty": "ไม่มีข้อความให้แตกแขนง", - - "dialog.directory.search.placeholder": "ค้นหาโฟลเดอร์", - "dialog.directory.empty": "ไม่พบโฟลเดอร์", - "dialog.directory.action.selectFile": "เลือกไฟล์", - "dialog.directory.action.selectFolder": "เลือกโฟลเดอร์", - "dialog.directory.root": "ราก", - "dialog.directory.parent": "โฟลเดอร์หลัก", - "dialog.directory.readError": "ไม่สามารถอ่านโฟลเดอร์นี้ได้", - - "dialog.server.title": "เซิร์ฟเวอร์", - "dialog.server.description": "สลับเซิร์ฟเวอร์ OpenCode ที่แอปนี้เชื่อมต่อด้วย", - "dialog.server.search.placeholder": "ค้นหาเซิร์ฟเวอร์", - "dialog.server.empty": "ยังไม่มีเซิร์ฟเวอร์", - "dialog.server.add.title": "เพิ่มเซิร์ฟเวอร์", - "dialog.server.add.url": "URL เซิร์ฟเวอร์", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์", - "dialog.server.add.checking": "กำลังตรวจสอบ...", - "dialog.server.add.button": "เพิ่มเซิร์ฟเวอร์", - "dialog.server.add.name": "ชื่อเซิร์ฟเวอร์ (ไม่บังคับ)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "ชื่อผู้ใช้ (ไม่บังคับ)", - "dialog.server.add.password": "รหัสผ่าน (ไม่บังคับ)", - "dialog.server.edit.title": "แก้ไขเซิร์ฟเวอร์", - "dialog.server.default.title": "เซิร์ฟเวอร์เริ่มต้น", - "dialog.server.default.description": - "เชื่อมต่อกับเซิร์ฟเวอร์นี้เมื่อเปิดแอปแทนการเริ่มเซิร์ฟเวอร์ในเครื่อง ต้องรีสตาร์ท", - "dialog.server.default.none": "ไม่ได้เลือกเซิร์ฟเวอร์", - "dialog.server.default.set": "ตั้งเซิร์ฟเวอร์ปัจจุบันเป็นค่าเริ่มต้น", - "dialog.server.default.clear": "ล้าง", - "dialog.server.action.remove": "เอาเซิร์ฟเวอร์ออก", - - "dialog.server.menu.edit": "แก้ไข", - "dialog.server.menu.default": "ตั้งเป็นค่าเริ่มต้น", - "dialog.server.menu.defaultRemove": "เอาค่าเริ่มต้นออก", - "dialog.server.menu.delete": "ลบ", - "dialog.server.current": "เซิร์ฟเวอร์ปัจจุบัน", - "dialog.server.status.default": "ค่าเริ่มต้น", - - "dialog.project.edit.title": "แก้ไขโปรเจกต์", - "dialog.project.edit.name": "ชื่อ", - "dialog.project.edit.icon": "ไอคอน", - "dialog.project.edit.icon.alt": "ไอคอนโปรเจกต์", - "dialog.project.edit.icon.hint": "คลิกหรือลากรูปภาพ", - "dialog.project.edit.icon.recommended": "แนะนำ: 128x128px", - "dialog.project.edit.color": "สี", - "dialog.project.edit.color.select": "เลือกสี {{color}}", - "dialog.project.edit.worktree.startup": "สคริปต์เริ่มต้นพื้นที่ทำงาน", - "dialog.project.edit.worktree.startup.description": "ทำงานหลังจากสร้างพื้นที่ทำงานใหม่ (worktree)", - "dialog.project.edit.worktree.startup.placeholder": "เช่น bun install", - - "context.breakdown.title": "การแบ่งบริบท", - "context.breakdown.note": 'การแบ่งโดยประมาณของโทเค็นนำเข้า "อื่น ๆ" รวมถึงคำนิยามเครื่องมือและโอเวอร์เฮด', - "context.breakdown.system": "ระบบ", - "context.breakdown.user": "ผู้ใช้", - "context.breakdown.assistant": "ผู้ช่วย", - "context.breakdown.tool": "การเรียกเครื่องมือ", - "context.breakdown.other": "อื่น ๆ", - - "context.systemPrompt.title": "พร้อมท์ระบบ", - "context.rawMessages.title": "ข้อความดิบ", - - "context.stats.session": "เซสชัน", - "context.stats.messages": "ข้อความ", - "context.stats.provider": "ผู้ให้บริการ", - "context.stats.model": "โมเดล", - "context.stats.limit": "ขีดจำกัดบริบท", - "context.stats.totalTokens": "โทเค็นทั้งหมด", - "context.stats.usage": "การใช้งาน", - "context.stats.inputTokens": "โทเค็นนำเข้า", - "context.stats.outputTokens": "โทเค็นส่งออก", - "context.stats.reasoningTokens": "โทเค็นการใช้เหตุผล", - "context.stats.cacheTokens": "โทเค็นแคช (อ่าน/เขียน)", - "context.stats.userMessages": "ข้อความผู้ใช้", - "context.stats.assistantMessages": "ข้อความผู้ช่วย", - "context.stats.totalCost": "ต้นทุนทั้งหมด", - "context.stats.sessionCreated": "สร้างเซสชันเมื่อ", - "context.stats.lastActivity": "กิจกรรมล่าสุด", - - "context.usage.tokens": "โทเค็น", - "context.usage.usage": "การใช้งาน", - "context.usage.cost": "ต้นทุน", - "context.usage.clickToView": "คลิกเพื่อดูบริบท", - "context.usage.view": "ดูการใช้บริบท", - - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - - "toast.language.title": "ภาษา", - "toast.language.description": "สลับไปที่ {{language}}", - - "toast.theme.title": "สลับธีมแล้ว", - "toast.scheme.title": "โทนสี", - - "toast.workspace.enabled.title": "เปิดใช้งานพื้นที่ทำงานแล้ว", - "toast.workspace.enabled.description": "ตอนนี้จะแสดง worktree หลายรายการในแถบด้านข้าง", - "toast.workspace.disabled.title": "ปิดใช้งานพื้นที่ทำงานแล้ว", - "toast.workspace.disabled.description": "จะแสดงเฉพาะ worktree หลักในแถบด้านข้าง", - - "toast.permissions.autoaccept.on.title": "กำลังยอมรับสิทธิ์โดยอัตโนมัติ", - "toast.permissions.autoaccept.on.description": "คำขอสิทธิ์จะได้รับการอนุมัติโดยอัตโนมัติ", - "toast.permissions.autoaccept.off.title": "หยุดยอมรับสิทธิ์โดยอัตโนมัติแล้ว", - "toast.permissions.autoaccept.off.description": "คำขอสิทธิ์จะต้องได้รับการอนุมัติ", - - "toast.model.none.title": "ไม่ได้เลือกโมเดล", - "toast.model.none.description": "เชื่อมต่อผู้ให้บริการเพื่อสรุปเซสชันนี้", - - "toast.file.loadFailed.title": "ไม่สามารถโหลดไฟล์", - "toast.file.listFailed.title": "ไม่สามารถแสดงรายการไฟล์", - - "toast.context.noLineSelection.title": "ไม่มีการเลือกบรรทัด", - "toast.context.noLineSelection.description": "เลือกช่วงบรรทัดในแท็บไฟล์ก่อน", - - "toast.session.share.copyFailed.title": "ไม่สามารถคัดลอก URL ไปยังคลิปบอร์ด", - "toast.session.share.success.title": "แชร์เซสชันแล้ว", - "toast.session.share.success.description": "คัดลอก URL แชร์ไปยังคลิปบอร์ดแล้ว!", - "toast.session.share.failed.title": "ไม่สามารถแชร์เซสชัน", - "toast.session.share.failed.description": "เกิดข้อผิดพลาดระหว่างการแชร์เซสชัน", - - "toast.session.unshare.success.title": "ยกเลิกการแชร์เซสชันแล้ว", - "toast.session.unshare.success.description": "ยกเลิกการแชร์เซสชันสำเร็จ!", - "toast.session.unshare.failed.title": "ไม่สามารถยกเลิกการแชร์เซสชัน", - "toast.session.unshare.failed.description": "เกิดข้อผิดพลาดระหว่างการยกเลิกการแชร์เซสชัน", - - "toast.session.listFailed.title": "ไม่สามารถโหลดเซสชันสำหรับ {{project}}", - - "toast.update.title": "มีการอัปเดต", - "toast.update.description": "เวอร์ชันใหม่ของ OpenCode ({{version}}) พร้อมใช้งานสำหรับติดตั้ง", - "toast.update.action.installRestart": "ติดตั้งและรีสตาร์ท", - "toast.update.action.notYet": "ยังไม่", - - "error.page.title": "เกิดข้อผิดพลาด", - "error.page.description": "เกิดข้อผิดพลาดระหว่างการโหลดแอปพลิเคชัน", - "error.page.details.label": "รายละเอียดข้อผิดพลาด", - "error.page.action.restart": "รีสตาร์ท", - "error.page.action.report": "รายงานข้อผิดพลาด", - "error.page.action.reported": "รายงานข้อผิดพลาดแล้ว", - "error.page.action.checking": "กำลังตรวจสอบ...", - "error.page.action.checkUpdates": "ตรวจสอบการอัปเดต", - "error.page.action.updateTo": "อัปเดตเป็น {{version}}", - "error.page.report.prefix": "โปรดรายงานข้อผิดพลาดนี้ให้ทีม OpenCode", - "error.page.report.discord": "บน Discord", - "error.page.version": "เวอร์ชัน: {{version}}", - - "error.dev.rootNotFound": "ไม่พบองค์ประกอบรูท คุณลืมเพิ่มใน index.html หรือบางทีแอตทริบิวต์ id อาจสะกดผิด?", - - "error.serverSync.connectFailed": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ มีเซิร์ฟเวอร์ทำงานอยู่ที่ `{{url}}` หรือไม่?", - "directory.error.invalidUrl": "ไดเรกทอรีใน URL ไม่ถูกต้อง", - - "error.chain.unknown": "ข้อผิดพลาดที่ไม่รู้จัก", - "error.chain.causedBy": "สาเหตุ:", - "error.chain.apiError": "ข้อผิดพลาด API", - "error.chain.status": "สถานะ: {{status}}", - "error.chain.retryable": "สามารถลองใหม่: {{retryable}}", - "error.chain.responseBody": "เนื้อหาการตอบสนอง:\n{{body}}", - "error.chain.didYouMean": "คุณหมายถึง: {{suggestions}}", - "error.chain.modelNotFound": "ไม่พบโมเดล: {{provider}}/{{model}}", - "error.chain.checkConfig": "ตรวจสอบการกำหนดค่าของคุณ (opencode.json) ชื่อผู้ให้บริการ/โมเดล", - "error.chain.mcpFailed": 'เซิร์ฟเวอร์ MCP "{{name}}" ล้มเหลว โปรดทราบว่า OpenCode ยังไม่รองรับการตรวจสอบสิทธิ์ MCP', - "error.chain.providerAuthFailed": "การตรวจสอบสิทธิ์ผู้ให้บริการล้มเหลว ({{provider}}): {{message}}", - "error.chain.providerInitFailed": 'ไม่สามารถเริ่มต้นผู้ให้บริการ "{{provider}}" ตรวจสอบข้อมูลรับรองและการกำหนดค่า', - "error.chain.configJsonInvalid": "ไฟล์กำหนดค่าที่ {{path}} ไม่ใช่ JSON(C) ที่ถูกต้อง", - "error.chain.configJsonInvalidWithMessage": "ไฟล์กำหนดค่าที่ {{path}} ไม่ใช่ JSON(C) ที่ถูกต้อง: {{message}}", - "error.chain.configDirectoryTypo": - 'ไดเรกทอรี "{{dir}}" ใน {{path}} ไม่ถูกต้อง เปลี่ยนชื่อไดเรกทอรีเป็น "{{suggestion}}" หรือเอาออก นี่เป็นการสะกดผิดทั่วไป', - "error.chain.configFrontmatterError": "ไม่สามารถแยกวิเคราะห์ frontmatter ใน {{path}}:\n{{message}}", - "error.chain.configInvalid": "ไฟล์กำหนดค่าที่ {{path}} ไม่ถูกต้อง", - "error.chain.configInvalidWithMessage": "ไฟล์กำหนดค่าที่ {{path}} ไม่ถูกต้อง: {{message}}", - - "notification.permission.title": "ต้องการสิทธิ์", - "notification.permission.description": "{{sessionTitle}} ใน {{projectName}} ต้องการสิทธิ์", - "notification.question.title": "คำถาม", - "notification.question.description": "{{sessionTitle}} ใน {{projectName}} มีคำถาม", - "notification.action.goToSession": "ไปที่เซสชัน", - - "notification.session.responseReady.title": "การตอบสนองพร้อม", - "notification.session.error.title": "ข้อผิดพลาดเซสชัน", - "notification.session.error.fallbackDescription": "เกิดข้อผิดพลาด", - - "home.recentProjects": "โปรเจกต์ล่าสุด", - "home.empty.title": "ไม่มีโปรเจกต์ล่าสุด", - "home.empty.description": "เริ่มต้นโดยเปิดโปรเจกต์ในเครื่อง", - - "session.tab.session": "เซสชัน", - "session.tab.review": "ตรวจสอบ", - "session.tab.context": "บริบท", - "session.panel.reviewAndFiles": "ตรวจสอบและไฟล์", - "session.review.filesChanged": "{{count}} ไฟล์ที่เปลี่ยนแปลง", - "session.review.change.one": "การเปลี่ยนแปลง", - "session.review.change.other": "การเปลี่ยนแปลง", - "session.review.loadingChanges": "กำลังโหลดการเปลี่ยนแปลง...", - "session.review.empty": "ยังไม่มีการเปลี่ยนแปลงในเซสชันนี้", - "session.review.noVcs": "ไม่ตรวจพบระบบควบคุมเวอร์ชัน Git การเปลี่ยนแปลงจะไม่แสดง", - "session.review.noSnapshot": "การติดตามสแนปชอตถูกปิดใช้งานในการกำหนดค่า ดังนั้นการเปลี่ยนแปลงเซสชันจึงไม่พร้อมใช้งาน", - "session.review.noChanges": "ไม่มีการเปลี่ยนแปลง", - - "session.files.selectToOpen": "เลือกไฟล์เพื่อเปิด", - "session.files.empty": "ไม่มีไฟล์", - "session.files.all": "ไฟล์ทั้งหมด", - "session.files.binaryContent": "ไฟล์ไบนารี (ไม่สามารถแสดงเนื้อหาได้)", - - "session.messages.renderEarlier": "แสดงข้อความก่อนหน้า", - "session.messages.loadingEarlier": "กำลังโหลดข้อความก่อนหน้า...", - "session.messages.loadEarlier": "โหลดข้อความก่อนหน้า", - "session.messages.loading": "กำลังโหลดข้อความ...", - "session.messages.jumpToLatest": "ไปที่ล่าสุด", - - "session.context.addToContext": "เพิ่ม {{selection}} ไปยังบริบท", - "session.todo.title": "สิ่งที่ต้องทำ", - "session.todo.collapse": "ย่อ", - "session.todo.expand": "ขยาย", - "session.followupDock.summary.one": "{{count}} ข้อความในคิว", - "session.followupDock.summary.other": "{{count}} ข้อความในคิว", - "session.followupDock.sendNow": "ส่งทันที", - "session.followupDock.edit": "แก้ไข", - "session.followupDock.collapse": "ย่อข้อความในคิว", - "session.followupDock.expand": "ขยายข้อความในคิว", - "session.revertDock.summary.one": "{{count}} ข้อความที่ถูกย้อนกลับ", - "session.revertDock.summary.other": "{{count}} ข้อความที่ถูกย้อนกลับ", - "session.revertDock.collapse": "ย่อข้อความที่ถูกย้อนกลับ", - "session.revertDock.expand": "ขยายข้อความที่ถูกย้อนกลับ", - "session.revertDock.restore": "กู้คืนข้อความ", - - "session.new.title": "สร้างอะไรก็ได้", - "session.new.worktree.main": "สาขาหลัก", - "session.new.worktree.mainWithBranch": "สาขาหลัก ({{branch}})", - "session.new.worktree.create": "สร้าง worktree ใหม่", - "session.new.lastModified": "แก้ไขล่าสุด", - - "session.header.search.placeholder": "ค้นหา {{project}}", - "session.header.searchFiles": "ค้นหาไฟล์", - "session.header.openIn": "เปิดใน", - "session.header.open.action": "เปิด {{app}}", - "session.header.open.ariaLabel": "เปิดใน {{app}}", - "session.header.open.menu": "ตัวเลือกการเปิด", - "session.header.open.copyPath": "คัดลอกเส้นทาง", - - "status.popover.trigger": "สถานะ", - "status.popover.ariaLabel": "การกำหนดค่าเซิร์ฟเวอร์", - "status.popover.tab.servers": "เซิร์ฟเวอร์", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "ปลั๊กอิน", - "status.popover.action.manageServers": "จัดการเซิร์ฟเวอร์", - - "session.share.popover.title": "เผยแพร่บนเว็บ", - "session.share.popover.description.shared": "เซสชันนี้เป็นสาธารณะบนเว็บ สามารถเข้าถึงได้โดยผู้ที่มีลิงก์", - "session.share.popover.description.unshared": "แชร์เซสชันสาธารณะบนเว็บ จะเข้าถึงได้โดยผู้ที่มีลิงก์", - "session.share.action.share": "แชร์", - "session.share.action.publish": "เผยแพร่", - "session.share.action.publishing": "กำลังเผยแพร่...", - "session.share.action.unpublish": "ยกเลิกการเผยแพร่", - "session.share.action.unpublishing": "กำลังยกเลิกการเผยแพร่...", - "session.share.action.view": "ดู", - "session.share.copy.copied": "คัดลอกแล้ว", - "session.share.copy.copyLink": "คัดลอกลิงก์", - - "lsp.tooltip.none": "ไม่มีเซิร์ฟเวอร์ LSP", - "lsp.label.connected": "{{count}} LSP", - - "prompt.loading": "กำลังโหลดพร้อมท์...", - "terminal.loading": "กำลังโหลดเทอร์มินัล...", - "terminal.title": "เทอร์มินัล", - "terminal.title.numbered": "เทอร์มินัล {{number}}", - "terminal.close": "ปิดเทอร์มินัล", - "terminal.connectionLost.title": "การเชื่อมต่อขาดหาย", - "terminal.connectionLost.description": "การเชื่อมต่อเทอร์มินัลถูกขัดจังหวะ อาจเกิดขึ้นเมื่อเซิร์ฟเวอร์รีสตาร์ท", - - "common.closeTab": "ปิดแท็บ", - "common.dismiss": "ปิด", - "common.requestFailed": "คำขอล้มเหลว", - "common.moreOptions": "ตัวเลือกเพิ่มเติม", - "common.learnMore": "เรียนรู้เพิ่มเติม", - "common.rename": "เปลี่ยนชื่อ", - "common.reset": "รีเซ็ต", - "common.archive": "จัดเก็บ", - "common.delete": "ลบ", - "common.close": "ปิด", - "common.edit": "แก้ไข", - "common.loadMore": "โหลดเพิ่มเติม", - "common.key.esc": "ESC", - - "sidebar.menu.toggle": "สลับเมนู", - "sidebar.nav.projectsAndSessions": "โปรเจกต์และเซสชัน", - "sidebar.settings": "การตั้งค่า", - "sidebar.help": "ช่วยเหลือ", - "sidebar.workspaces.enable": "เปิดใช้งานพื้นที่ทำงาน", - "sidebar.workspaces.disable": "ปิดใช้งานพื้นที่ทำงาน", - "sidebar.gettingStarted.title": "เริ่มต้นใช้งาน", - "sidebar.gettingStarted.line1": "OpenCode รวมถึงโมเดลฟรีเพื่อให้คุณเริ่มต้นได้ทันที", - "sidebar.gettingStarted.line2": "เชื่อมต่อผู้ให้บริการใด ๆ เพื่อใช้โมเดล รวมถึง Claude, GPT, Gemini ฯลฯ", - "sidebar.project.recentSessions": "เซสชันล่าสุด", - "sidebar.project.viewAllSessions": "ดูเซสชันทั้งหมด", - "sidebar.project.clearNotifications": "ล้างการแจ้งเตือน", - - "app.name.desktop": "OpenCode Desktop", - - "settings.section.desktop": "เดสก์ท็อป", - "settings.section.server": "เซิร์ฟเวอร์", - "settings.tab.general": "ทั่วไป", - "settings.tab.shortcuts": "ทางลัด", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "การรวม WSL", - "settings.desktop.wsl.description": "เรียกใช้เซิร์ฟเวอร์ OpenCode ภายใน WSL บน Windows", - - "settings.general.section.appearance": "รูปลักษณ์", - "settings.general.section.notifications": "การแจ้งเตือนระบบ", - "settings.general.section.updates": "การอัปเดต", - "settings.general.section.sounds": "เสียงเอฟเฟกต์", - "settings.general.section.feed": "ฟีด", - "settings.general.section.display": "การแสดงผล", - - "settings.general.row.language.title": "ภาษา", - "settings.general.row.language.description": "เปลี่ยนภาษาที่แสดงสำหรับ OpenCode", - "settings.general.row.appearance.title": "รูปลักษณ์", - "settings.general.row.appearance.description": "ปรับแต่งวิธีการที่ OpenCode มีลักษณะบนอุปกรณ์ของคุณ", - "settings.general.row.colorScheme.title": "โทนสี", - "settings.general.row.colorScheme.description": "เลือกว่าจะให้ OpenCode ใช้ธีมตามระบบ สว่าง หรือมืด", - "settings.general.row.theme.title": "ธีม", - "settings.general.row.theme.description": "ปรับแต่งวิธีการที่ OpenCode มีธีม", - "settings.general.row.font.title": "ฟอนต์โค้ด", - "settings.general.row.font.description": "ปรับแต่งฟอนต์ที่ใช้ในบล็อกโค้ด", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "ฟอนต์ UI", - "settings.general.row.uiFont.description": "ปรับแต่งฟอนต์ที่ใช้ทั่วทั้งอินเทอร์เฟซ", - "settings.general.row.followup.title": "พฤติกรรมการติดตามผล", - "settings.general.row.followup.description": "เลือกว่าจะให้พร้อมท์ติดตามผลทำงานทันทีหรือรอในคิว", - "settings.general.row.followup.option.queue": "คิว", - "settings.general.row.followup.option.steer": "นำทาง", - "settings.general.row.reasoningSummaries.title": "แสดงสรุปการใช้เหตุผล", - "settings.general.row.reasoningSummaries.description": "แสดงสรุปการใช้เหตุผลของโมเดลในไทม์ไลน์", - "settings.general.row.shellToolPartsExpanded.title": "ขยายส่วนเครื่องมือ shell", - "settings.general.row.shellToolPartsExpanded.description": "แสดงส่วนเครื่องมือ shell แบบขยายตามค่าเริ่มต้นในไทม์ไลน์", - "settings.general.row.editToolPartsExpanded.title": "ขยายส่วนเครื่องมือ edit", - "settings.general.row.editToolPartsExpanded.description": - "แสดงส่วนเครื่องมือ edit, write และ patch แบบขยายตามค่าเริ่มต้นในไทม์ไลน์", - "settings.general.row.wayland.title": "ใช้ Wayland แบบเนทีฟ", - "settings.general.row.wayland.description": "ปิดใช้งาน X11 fallback บน Wayland ต้องรีสตาร์ท", - "settings.general.row.wayland.tooltip": "บน Linux ที่มีจอภาพรีเฟรชเรตแบบผสม Wayland แบบเนทีฟอาจเสถียรกว่า", - - "settings.general.row.releaseNotes.title": "บันทึกการอัปเดต", - "settings.general.row.releaseNotes.description": "แสดงป๊อปอัพ What's New หลังจากอัปเดต", - - "settings.updates.row.startup.title": "ตรวจสอบการอัปเดตเมื่อเริ่มต้น", - "settings.updates.row.startup.description": "ตรวจสอบการอัปเดตโดยอัตโนมัติเมื่อ OpenCode เปิดใช้งาน", - "settings.updates.row.check.title": "ตรวจสอบการอัปเดต", - "settings.updates.row.check.description": "ตรวจสอบการอัปเดตด้วยตนเองและติดตั้งหากมี", - "settings.updates.action.checkNow": "ตรวจสอบทันที", - "settings.updates.action.checking": "กำลังตรวจสอบ...", - "settings.updates.toast.latest.title": "คุณเป็นเวอร์ชันล่าสุดแล้ว", - "settings.updates.toast.latest.description": "คุณกำลังใช้งาน OpenCode เวอร์ชันล่าสุด", - - "sound.option.none": "ไม่มี", - "sound.option.alert01": "เสียงเตือน 01", - "sound.option.alert02": "เสียงเตือน 02", - "sound.option.alert03": "เสียงเตือน 03", - "sound.option.alert04": "เสียงเตือน 04", - "sound.option.alert05": "เสียงเตือน 05", - "sound.option.alert06": "เสียงเตือน 06", - "sound.option.alert07": "เสียงเตือน 07", - "sound.option.alert08": "เสียงเตือน 08", - "sound.option.alert09": "เสียงเตือน 09", - "sound.option.alert10": "เสียงเตือน 10", - "sound.option.bipbop01": "Bip-bop 01", - "sound.option.bipbop02": "Bip-bop 02", - "sound.option.bipbop03": "Bip-bop 03", - "sound.option.bipbop04": "Bip-bop 04", - "sound.option.bipbop05": "Bip-bop 05", - "sound.option.bipbop06": "Bip-bop 06", - "sound.option.bipbop07": "Bip-bop 07", - "sound.option.bipbop08": "Bip-bop 08", - "sound.option.bipbop09": "Bip-bop 09", - "sound.option.bipbop10": "Bip-bop 10", - "sound.option.staplebops01": "Staplebops 01", - "sound.option.staplebops02": "Staplebops 02", - "sound.option.staplebops03": "Staplebops 03", - "sound.option.staplebops04": "Staplebops 04", - "sound.option.staplebops05": "Staplebops 05", - "sound.option.staplebops06": "Staplebops 06", - "sound.option.staplebops07": "Staplebops 07", - "sound.option.nope01": "Nope 01", - "sound.option.nope02": "Nope 02", - "sound.option.nope03": "Nope 03", - "sound.option.nope04": "Nope 04", - "sound.option.nope05": "Nope 05", - "sound.option.nope06": "Nope 06", - "sound.option.nope07": "Nope 07", - "sound.option.nope08": "Nope 08", - "sound.option.nope09": "Nope 09", - "sound.option.nope10": "Nope 10", - "sound.option.nope11": "Nope 11", - "sound.option.nope12": "Nope 12", - "sound.option.yup01": "Yup 01", - "sound.option.yup02": "Yup 02", - "sound.option.yup03": "Yup 03", - "sound.option.yup04": "Yup 04", - "sound.option.yup05": "Yup 05", - "sound.option.yup06": "Yup 06", - - "settings.general.notifications.agent.title": "เอเจนต์", - "settings.general.notifications.agent.description": "แสดงการแจ้งเตือนระบบเมื่อเอเจนต์เสร็จสิ้นหรือต้องการความสนใจ", - "settings.general.notifications.permissions.title": "สิทธิ์", - "settings.general.notifications.permissions.description": "แสดงการแจ้งเตือนระบบเมื่อต้องการสิทธิ์", - "settings.general.notifications.errors.title": "ข้อผิดพลาด", - "settings.general.notifications.errors.description": "แสดงการแจ้งเตือนระบบเมื่อเกิดข้อผิดพลาด", - - "settings.general.sounds.agent.title": "เอเจนต์", - "settings.general.sounds.agent.description": "เล่นเสียงเมื่อเอเจนต์เสร็จสิ้นหรือต้องการความสนใจ", - "settings.general.sounds.permissions.title": "สิทธิ์", - "settings.general.sounds.permissions.description": "เล่นเสียงเมื่อต้องการสิทธิ์", - "settings.general.sounds.errors.title": "ข้อผิดพลาด", - "settings.general.sounds.errors.description": "เล่นเสียงเมื่อเกิดข้อผิดพลาด", - - "settings.shortcuts.title": "ทางลัดแป้นพิมพ์", - "settings.shortcuts.reset.button": "รีเซ็ตเป็นค่าเริ่มต้น", - "settings.shortcuts.reset.toast.title": "รีเซ็ตทางลัดแล้ว", - "settings.shortcuts.reset.toast.description": "รีเซ็ตทางลัดแป้นพิมพ์เป็นค่าเริ่มต้นแล้ว", - "settings.shortcuts.conflict.title": "ทางลัดใช้งานอยู่แล้ว", - "settings.shortcuts.conflict.description": "{{keybind}} ถูกกำหนดให้กับ {{titles}} แล้ว", - "settings.shortcuts.unassigned": "ไม่ได้กำหนด", - "settings.shortcuts.pressKeys": "กดปุ่ม", - "settings.shortcuts.search.placeholder": "ค้นหาทางลัด", - "settings.shortcuts.search.empty": "ไม่พบทางลัด", - - "settings.shortcuts.group.general": "ทั่วไป", - "settings.shortcuts.group.session": "เซสชัน", - "settings.shortcuts.group.navigation": "การนำทาง", - "settings.shortcuts.group.modelAndAgent": "โมเดลและเอเจนต์", - "settings.shortcuts.group.terminal": "เทอร์มินัล", - "settings.shortcuts.group.prompt": "พร้อมท์", - - "settings.providers.title": "ผู้ให้บริการ", - "settings.providers.description": "การตั้งค่าผู้ให้บริการจะสามารถกำหนดค่าได้ที่นี่", - "settings.providers.section.connected": "ผู้ให้บริการที่เชื่อมต่อ", - "settings.providers.connected.empty": "ไม่มีผู้ให้บริการที่เชื่อมต่อ", - "settings.providers.section.popular": "ผู้ให้บริการยอดนิยม", - "settings.providers.tag.environment": "สภาพแวดล้อม", - "settings.providers.tag.config": "กำหนดค่า", - "settings.providers.tag.custom": "กำหนดเอง", - "settings.providers.tag.other": "อื่น ๆ", - "settings.models.title": "โมเดล", - "settings.models.description": "การตั้งค่าโมเดลจะสามารถกำหนดค่าได้ที่นี่", - "settings.agents.title": "เอเจนต์", - "settings.agents.description": "การตั้งค่าเอเจนต์จะสามารถกำหนดค่าได้ที่นี่", - "settings.commands.title": "คำสั่ง", - "settings.commands.description": "การตั้งค่าคำสั่งจะสามารถกำหนดค่าได้ที่นี่", - "settings.mcp.title": "MCP", - "settings.mcp.description": "การตั้งค่า MCP จะสามารถกำหนดค่าได้ที่นี่", - - "settings.permissions.title": "สิทธิ์", - "settings.permissions.description": "ควบคุมเครื่องมือที่เซิร์ฟเวอร์สามารถใช้โดยค่าเริ่มต้น", - "settings.permissions.section.tools": "เครื่องมือ", - "settings.permissions.toast.updateFailed.title": "ไม่สามารถอัปเดตสิทธิ์", - - "settings.permissions.action.allow": "อนุญาต", - "settings.permissions.action.ask": "ถาม", - "settings.permissions.action.deny": "ปฏิเสธ", - - "settings.permissions.tool.read.title": "อ่าน", - "settings.permissions.tool.read.description": "อ่านไฟล์ (ตรงกับเส้นทางไฟล์)", - "settings.permissions.tool.edit.title": "แก้ไข", - "settings.permissions.tool.edit.description": "แก้ไขไฟล์ รวมถึงการแก้ไข เขียน แพตช์ และแก้ไขหลายรายการ", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "จับคู่ไฟล์โดยใช้รูปแบบ glob", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "ค้นหาเนื้อหาไฟล์โดยใช้นิพจน์ทั่วไป", - "settings.permissions.tool.list.title": "รายการ", - "settings.permissions.tool.list.description": "แสดงรายการไฟล์ภายในไดเรกทอรี", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "เรียกใช้คำสั่งเชลล์", - "settings.permissions.tool.task.title": "งาน", - "settings.permissions.tool.task.description": "เปิดเอเจนต์ย่อย", - "settings.permissions.tool.skill.title": "ทักษะ", - "settings.permissions.tool.skill.description": "โหลดทักษะตามชื่อ", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "เรียกใช้การสืบค้นเซิร์ฟเวอร์ภาษา", - "settings.permissions.tool.todowrite.title": "เขียนรายการงาน", - "settings.permissions.tool.todowrite.description": "อัปเดตรายการงาน", - "settings.permissions.tool.webfetch.title": "ดึงข้อมูลจากเว็บ", - "settings.permissions.tool.webfetch.description": "ดึงเนื้อหาจาก URL", - "settings.permissions.tool.websearch.title": "ค้นหาเว็บ", - "settings.permissions.tool.websearch.description": "ค้นหาบนเว็บ", - "settings.permissions.tool.external_directory.title": "ไดเรกทอรีภายนอก", - "settings.permissions.tool.external_directory.description": "เข้าถึงไฟล์นอกไดเรกทอรีโปรเจกต์", - "settings.permissions.tool.doom_loop.title": "Doom Loop", - "settings.permissions.tool.doom_loop.description": "ตรวจจับการเรียกเครื่องมือซ้ำด้วยข้อมูลนำเข้าเหมือนกัน", - - "session.delete.failed.title": "ไม่สามารถลบเซสชัน", - "session.delete.title": "ลบเซสชัน", - "session.delete.confirm": 'ลบเซสชัน "{{name}}" หรือไม่?', - "session.delete.button": "ลบเซสชัน", - - "workspace.new": "พื้นที่ทำงานใหม่", - "workspace.type.local": "ในเครื่อง", - "workspace.type.sandbox": "แซนด์บ็อกซ์", - "workspace.create.failed.title": "ไม่สามารถสร้างพื้นที่ทำงาน", - "workspace.delete.failed.title": "ไม่สามารถลบพื้นที่ทำงาน", - "workspace.resetting.title": "กำลังรีเซ็ตพื้นที่ทำงาน", - "workspace.resetting.description": "อาจใช้เวลาประมาณหนึ่งนาที", - "workspace.reset.failed.title": "ไม่สามารถรีเซ็ตพื้นที่ทำงาน", - "workspace.reset.success.title": "รีเซ็ตพื้นที่ทำงานแล้ว", - "workspace.reset.success.description": "พื้นที่ทำงานตรงกับสาขาเริ่มต้นแล้ว", - "workspace.error.stillPreparing": "พื้นที่ทำงานกำลังเตรียมอยู่", - "workspace.status.checking": "กำลังตรวจสอบการเปลี่ยนแปลงที่ไม่ได้ผสาน...", - "workspace.status.error": "ไม่สามารถตรวจสอบสถานะ git", - "workspace.status.clean": "ไม่ตรวจพบการเปลี่ยนแปลงที่ไม่ได้ผสาน", - "workspace.status.dirty": "ตรวจพบการเปลี่ยนแปลงที่ไม่ได้ผสานในพื้นที่ทำงานนี้", - "workspace.delete.title": "ลบพื้นที่ทำงาน", - "workspace.delete.confirm": 'ลบพื้นที่ทำงาน "{{name}}" หรือไม่?', - "workspace.delete.button": "ลบพื้นที่ทำงาน", - "workspace.reset.title": "รีเซ็ตพื้นที่ทำงาน", - "workspace.reset.confirm": 'รีเซ็ตพื้นที่ทำงาน "{{name}}" หรือไม่?', - "workspace.reset.button": "รีเซ็ตพื้นที่ทำงาน", - "workspace.reset.archived.none": "ไม่มีเซสชันที่ใช้งานอยู่จะถูกจัดเก็บ", - "workspace.reset.archived.one": "1 เซสชันจะถูกจัดเก็บ", - "workspace.reset.archived.many": "{{count}} เซสชันจะถูกจัดเก็บ", - "workspace.reset.note": "สิ่งนี้จะรีเซ็ตพื้นที่ทำงานให้ตรงกับสาขาเริ่มต้น", - "common.open": "เปิด", - "dialog.releaseNotes.action.getStarted": "เริ่มต้น", - "dialog.releaseNotes.action.next": "ถัดไป", - "dialog.releaseNotes.action.hideFuture": "ไม่ต้องแสดงสิ่งนี้อีกในอนาคต", - "dialog.releaseNotes.media.alt": "ตัวอย่างรุ่น", - "toast.project.reloadFailed.title": "ไม่สามารถโหลด {{project}} ใหม่ได้", - "error.server.invalidConfiguration": "การกำหนดค่าไม่ถูกต้อง", - "common.moreCountSuffix": " (เพิ่มอีก {{count}})", - "common.time.justNow": "เมื่อสักครู่นี้", - "common.time.minutesAgo.short": "{{count}} นาทีที่แล้ว", - "common.time.hoursAgo.short": "{{count}} ชม. ที่แล้ว", - "common.time.daysAgo.short": "{{count}} วันที่แล้ว", - "settings.providers.connected.environmentDescription": "เชื่อมต่อจากตัวแปรสภาพแวดล้อมของคุณ", - "settings.providers.custom.description": "เพิ่มผู้ให้บริการที่รองรับ OpenAI ด้วย URL หลัก", - - "app.server.unreachable": "ไม่สามารถติดต่อ {{server}}", - "app.server.retrying": "กำลังลองใหม่โดยอัตโนมัติ...", - "app.server.otherServers": "เซิร์ฟเวอร์อื่น ๆ", - "dialog.server.add.usernamePlaceholder": "ชื่อผู้ใช้", - "dialog.server.add.passwordPlaceholder": "รหัสผ่าน", - "server.row.noUsername": "ไม่มีชื่อผู้ใช้", - "session.review.noVcs.createGit.title": "สร้าง Git repository", - "session.review.noVcs.createGit.description": "ติดตาม ตรวจสอบ และเลิกทำสิ่งเปลี่ยนแปลงในโปรเจกต์นี้", - "session.review.noVcs.createGit.actionLoading": "กำลังสร้าง Git repository...", - "session.review.noVcs.createGit.action": "สร้าง Git repository", - "session.todo.progress": "เสร็จสิ้น {{done}} จาก {{total}} รายการ", - "session.question.progress": "{{current}} จาก {{total}} คำถาม", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "File Explorer", - "session.header.open.fileManager": "File Manager", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "Terminal", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "การวินิจฉัยประสิทธิภาพการพัฒนา", - "debugBar.na": "n/a", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": - "การเปลี่ยนเส้นทางที่เสร็จสมบูรณ์ล่าสุดที่สัมผัสหน้าเซสชัน วัดจากจุดเริ่มต้นเราเตอร์จนถึงการวาดครั้งแรกหลังจากที่นิ่ง", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "เฟรมต่อวินาทีแบบต่อเนื่องในช่วง 5 วินาทีที่ผ่านมา", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "เวลาเฟรมที่แย่ที่สุดในช่วง 5 วินาทีที่ผ่านมา", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "เฟรมที่เกิน 32ms ในช่วง 5 วินาทีที่ผ่านมา", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "เวลาที่ถูกบล็อกและจำนวนงานยาวในช่วง 5 วินาทีที่ผ่านมา งานสูงสุด: {{max}}", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "ความล่าช้าในการป้อนข้อมูลที่แย่ที่สุดที่สังเกตได้ในช่วง 5 วินาทีที่ผ่านมา", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": - "ระยะเวลาการโต้ตอบโดยประมาณในช่วง 5 วินาทีที่ผ่านมา นี่เป็นเหมือน INP ไม่ใช่ Web Vitals INP อย่างเป็นทางการ", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "การเลื่อนเลย์เอาต์สะสมสำหรับอายุการใช้งานของแอปปัจจุบัน", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "JS heap ที่ใช้เทียบกับขีดจำกัด heap เฉพาะ Chromium", - "debugBar.mem.tip": "JS heap ที่ใช้เทียบกับขีดจำกัด heap {{used}} จาก {{limit}}", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "Space", - "common.key.backspace": "Backspace", - "common.key.enter": "Enter", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "ไม่ทราบ", - "error.page.circular": "[วงกลม]", - "error.serverSDK.noServerAvailable": "ไม่มีเซิร์ฟเวอร์", - "error.serverSDK.serverNotAvailable": "เซิร์ฟเวอร์ไม่พร้อมใช้งาน", - "error.childStore.persistedCacheCreateFailed": "ไม่สามารถสร้างแคชถาวร", - "error.childStore.persistedProjectMetadataCreateFailed": "ไม่สามารถสร้างเมตาดาต้าโปรเจกต์ถาวร", - "error.childStore.persistedProjectIconCreateFailed": "ไม่สามารถสร้างไอคอนโปรเจกต์ถาวร", - "error.childStore.storeCreateFailed": "ไม่สามารถสร้างที่เก็บ", - "terminal.connectionLost.abnormalClose": "WebSocket ปิดอย่างผิดปกติ: {{code}}", -} diff --git a/packages/app/src/i18n/tr.ts b/packages/app/src/i18n/tr.ts deleted file mode 100644 index 9053173599..0000000000 --- a/packages/app/src/i18n/tr.ts +++ /dev/null @@ -1,946 +0,0 @@ -import { dict as en } from "./en" - -type Keys = keyof typeof en - -export const dict = { - "command.category.suggested": "Önerilen", - "command.category.view": "Görünüm", - "command.category.project": "Proje", - "command.category.provider": "Sağlayıcı", - "command.category.server": "Sunucu", - "command.category.session": "Oturum", - "command.category.theme": "Tema", - "command.category.language": "Dil", - "command.category.file": "Dosya", - "command.category.context": "Bağlam", - "command.category.terminal": "Terminal", - "command.category.model": "Model", - "command.category.mcp": "MCP", - "command.category.agent": "Ajan", - "command.category.permissions": "İzinler", - "command.category.workspace": "Çalışma Alanı", - "command.category.settings": "Ayarlar", - - "theme.scheme.system": "Sistem", - "theme.scheme.light": "Açık", - "theme.scheme.dark": "Koyu", - - "command.sidebar.toggle": "Kenar çubuğunu aç/kapat", - "command.project.open": "Proje aç", - "command.provider.connect": "Sağlayıcı bağla", - "command.server.switch": "Sunucu değiştir", - "command.settings.open": "Ayarları aç", - "command.session.previous": "Önceki oturum", - "command.session.next": "Sonraki oturum", - "command.session.previous.unseen": "Önceki okunmamış oturum", - "command.session.next.unseen": "Sonraki okunmamış oturum", - "command.session.archive": "Oturumu arşivle", - - "command.palette": "Komut paleti", - - "command.theme.cycle": "Tema değiştir", - "command.theme.set": "Tema kullan: {{theme}}", - "command.theme.scheme.cycle": "Renk şemasını değiştir", - "command.theme.scheme.set": "Renk şeması kullan: {{scheme}}", - - "command.language.cycle": "Dil değiştir", - "command.language.set": "Dil kullan: {{language}}", - - "command.session.new": "Yeni oturum", - "command.file.open": "Dosya aç", - "command.tab.close": "Sekmeyi kapat", - "command.context.addSelection": "Seçimi bağlama ekle", - "command.context.addSelection.description": "Mevcut dosyadan seçili satırları ekle", - "command.input.focus": "Girişi odakla", - "command.terminal.toggle": "Terminali aç/kapat", - "command.fileTree.toggle": "Dosya ağacını aç/kapat", - "command.review.toggle": "İncelemeyi aç/kapat", - "command.terminal.new": "Yeni terminal", - "command.terminal.new.description": "Yeni bir terminal sekmesi oluştur", - "command.steps.toggle": "Adımları aç/kapat", - "command.steps.toggle.description": "Mevcut mesaj için adımları göster veya gizle", - "command.message.previous": "Önceki mesaj", - "command.message.previous.description": "Önceki kullanıcı mesajına git", - "command.message.next": "Sonraki mesaj", - "command.message.next.description": "Sonraki kullanıcı mesajına git", - "command.model.choose": "Model seç", - "command.model.choose.description": "Farklı bir model seç", - "command.mcp.toggle": "MCP'leri aç/kapat", - "command.mcp.toggle.description": "MCP'leri aç/kapat", - "command.agent.cycle": "Ajan değiştir", - "command.agent.cycle.description": "Sonraki ajana geç", - "command.agent.cycle.reverse": "Ajanı geri değiştir", - "command.agent.cycle.reverse.description": "Önceki ajana geç", - "command.model.variant.cycle": "Düşünme eforu değiştir", - "command.model.variant.cycle.description": "Sonraki efor seviyesine geç", - "command.prompt.mode.shell": "Kabuk", - "command.prompt.mode.normal": "Komut", - "command.permissions.autoaccept.enable": "Düzenlemeleri otomatik kabul et", - "command.permissions.autoaccept.disable": "Otomatik kabulü durdur", - "command.workspace.toggle": "Çalışma alanlarını aç/kapat", - "command.workspace.toggle.description": "Kenar çubuğunda birden fazla çalışma alanını göster veya gizle", - "command.session.undo": "Geri al", - "command.session.undo.description": "Son mesajı geri al", - "command.session.redo": "Yinele", - "command.session.redo.description": "Son geri alınan mesajı yinele", - "command.session.compact": "Oturumu sıkıştır", - "command.session.compact.description": "Bağlam boyutunu azaltmak için oturumu özetle", - "command.session.fork": "Mesajdan dallandır", - "command.session.fork.description": "Önceki bir mesajdan yeni oturum oluştur", - "command.session.share": "Oturumu paylaş", - "command.session.share.description": "Bu oturumu paylaş ve URL'yi panoya kopyala", - "command.session.unshare": "Paylaşımı kaldır", - "command.session.unshare.description": "Bu oturumun paylaşımını durdur", - - "palette.search.placeholder": "Dosya, komut ve oturum ara", - "palette.empty": "Sonuç bulunamadı", - "palette.group.commands": "Komutlar", - "palette.group.files": "Dosyalar", - - "dialog.provider.search.placeholder": "Sağlayıcı ara", - "dialog.provider.empty": "Sağlayıcı bulunamadı", - "dialog.provider.group.popular": "Popüler", - "dialog.provider.group.other": "Diğer", - "dialog.provider.tag.recommended": "Önerilen", - "dialog.provider.opencode.note": "Claude, GPT, Gemini ve daha fazlasını içeren seçilmiş modeller", - "dialog.provider.opencode.tagline": "Güvenilir optimize edilmiş modeller", - "dialog.provider.opencodeGo.tagline": "Herkes için düşük maliyetli abonelik", - "dialog.provider.anthropic.note": "Pro ve Max dahil Claude modellerine doğrudan erişim", - "dialog.provider.copilot.note": "GitHub Copilot üzerinden kodlama yardımı için yapay zekâ modelleri", - "dialog.provider.openai.note": "Hızlı ve yetenekli genel yapay zekâ görevleri için GPT modelleri", - "dialog.provider.google.note": "Hızlı ve yapılandırılmış yanıtlar için Gemini modelleri", - "dialog.provider.openrouter.note": "Tek bir sağlayıcıdan tüm desteklenen modellere eriş", - "dialog.provider.vercel.note": "Akıllı yönlendirme ile yapay zekâ modellerine birleşik erişim", - - "dialog.model.select.title": "Model seç", - "dialog.model.search.placeholder": "Model ara", - "dialog.model.empty": "Model sonucu yok", - "dialog.model.manage": "Modelleri yönet", - "dialog.model.manage.description": "Model seçicide hangi modellerin görüneceğini özelleştirin.", - "dialog.model.manage.provider.toggle": "Tüm {{provider}} modellerini aç/kapat", - - "dialog.model.unpaid.freeModels.title": "OpenCode tarafından sunulan ücretsiz modeller", - "dialog.model.unpaid.addMore.title": "Popüler sağlayıcılardan daha fazla model ekleyin", - - "dialog.provider.viewAll": "Daha fazla sağlayıcı göster", - - "provider.connect.title": "{{provider}} bağla", - "provider.connect.title.anthropicProMax": "Claude Pro/Max ile giriş yap", - "provider.connect.selectMethod": "{{provider}} için giriş yöntemini seçin.", - "provider.connect.method.apiKey": "API anahtarı", - "provider.connect.status.inProgress": "Yetkilendirme devam ediyor...", - "provider.connect.status.waiting": "Yetkilendirme bekleniyor...", - "provider.connect.status.failed": "Yetkilendirme başarısız: {{error}}", - "provider.connect.apiKey.description": - "{{provider}} hesabınızı bağlamak ve OpenCode'da {{provider}} modellerini kullanmak için {{provider}} API anahtarınızı girin.", - "provider.connect.apiKey.label": "{{provider}} API anahtarı", - "provider.connect.apiKey.placeholder": "API anahtarı", - "provider.connect.apiKey.required": "API anahtarı gerekli", - "provider.connect.opencodeZen.line1": - "OpenCode Zen, kodlama ajanları için seçilmiş güvenilir optimize edilmiş modellere erişim sağlar.", - "provider.connect.opencodeZen.line2": - "Tek bir API anahtarıyla Claude, GPT, Gemini, GLM ve daha fazlası gibi modellere erişebilirsiniz.", - "provider.connect.opencodeZen.visit.prefix": "", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " adresini ziyaret ederek API anahtarınızı alın.", - "provider.connect.oauth.code.visit.prefix": - "Hesabınızı bağlamak ve OpenCode'da {{provider}} modellerini kullanmak için ", - "provider.connect.oauth.code.visit.link": "bu bağlantıya", - "provider.connect.oauth.code.visit.suffix": " tıklayarak yetkilendirme kodunuzu alın.", - "provider.connect.oauth.code.label": "{{method}} yetkilendirme kodu", - "provider.connect.oauth.code.placeholder": "Yetkilendirme kodu", - "provider.connect.oauth.code.required": "Yetkilendirme kodu gerekli", - "provider.connect.oauth.code.invalid": "Geçersiz yetkilendirme kodu", - "provider.connect.oauth.auto.visit.prefix": "", - "provider.connect.oauth.auto.visit.link": "Bu bağlantıya", - "provider.connect.oauth.auto.visit.suffix": - " tıklayarak aşağıdaki kodu girin ve hesabınızı bağlayarak OpenCode'da {{provider}} modellerini kullanın.", - "provider.connect.oauth.auto.confirmationCode": "Onay kodu", - "provider.connect.toast.connected.title": "{{provider}} bağlandı", - "provider.connect.toast.connected.description": "{{provider}} modelleri artık kullanımda.", - - "provider.custom.title": "Özel sağlayıcı", - "provider.custom.description.prefix": "OpenAI uyumlu bir sağlayıcı yapılandırın. ", - "provider.custom.description.link": "Sağlayıcı yapılandırma dökümanları", - "provider.custom.description.suffix": " sayfasına bakın.", - "provider.custom.field.providerID.label": "Sağlayıcı kimlik", - "provider.custom.field.providerID.placeholder": "saglayicim", - "provider.custom.field.providerID.description": "Küçük harfler, rakamlar, tire veya alt çizgi", - "provider.custom.field.name.label": "Görünen ad", - "provider.custom.field.name.placeholder": "Yapay Zekâ Sağlayıcım", - "provider.custom.field.baseURL.label": "Temel URL", - "provider.custom.field.baseURL.placeholder": "https://api.saglayicim.com/v1", - "provider.custom.field.apiKey.label": "API anahtarı", - "provider.custom.field.apiKey.placeholder": "API anahtarı", - "provider.custom.field.apiKey.description": - "İsteğe bağlı. Kimlik doğrulamayı başlıklar ile yönetiyorsanız boş bırakın.", - "provider.custom.models.label": "Modeller", - "provider.custom.models.id.label": "Kimlik", - "provider.custom.models.id.placeholder": "model-kimlik", - "provider.custom.models.name.label": "Ad", - "provider.custom.models.name.placeholder": "Görünen Ad", - "provider.custom.models.remove": "Modeli kaldır", - "provider.custom.models.add": "Model ekle", - "provider.custom.headers.label": "Başlıklar (isteğe bağlı)", - "provider.custom.headers.key.label": "Başlık", - "provider.custom.headers.key.placeholder": "Başlık-Adı", - "provider.custom.headers.value.label": "Değer", - "provider.custom.headers.value.placeholder": "değer", - "provider.custom.headers.remove": "Başlığı kaldır", - "provider.custom.headers.add": "Başlık ekle", - "provider.custom.error.providerID.required": "Sağlayıcı kimlik gerekli", - "provider.custom.error.providerID.format": "Küçük harf, rakam, tire veya alt çizgi kullanın", - "provider.custom.error.providerID.exists": "Bu sağlayıcı kimlik zaten mevcut", - "provider.custom.error.name.required": "Görünen ad gerekli", - "provider.custom.error.baseURL.required": "Temel URL gerekli", - "provider.custom.error.baseURL.format": "http:// veya https:// ile başlamalı", - "provider.custom.error.required": "Gerekli", - "provider.custom.error.duplicate": "Tekrar", - - "provider.disconnect.toast.disconnected.title": "{{provider}} bağlantısı kesildi", - "provider.disconnect.toast.disconnected.description": "{{provider}} modelleri artık kullanılabilir değil.", - - "model.tag.free": "Ücretsiz", - "model.tag.latest": "En yeni", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "metin", - "model.input.image": "görsel", - "model.input.audio": "ses", - "model.input.video": "video", - "model.input.pdf": "pdf", - "model.tooltip.allows": "Kabul eder: {{inputs}}", - "model.tooltip.reasoning.allowed": "Akıl yürütme destekler", - "model.tooltip.reasoning.none": "Akıl yürütme yok", - "model.tooltip.context": "Bağlam limiti {{limit}}", - - "common.search.placeholder": "Ara", - "common.goBack": "Geri git", - "common.goForward": "İleri git", - "common.loading": "Yükleniyor", - "common.loading.ellipsis": "...", - "common.cancel": "İptal", - "common.connect": "Bağlan", - "common.disconnect": "Bağlantı Kes", - "common.continue": "Gönder", - "common.submit": "Gönder", - "common.save": "Kaydet", - "common.saving": "Kaydediliyor...", - "common.default": "Varsayılan", - "common.attachment": "ek", - - "prompt.placeholder.shell": "Kabuk komutu girin... {{example}}", - "prompt.placeholder.normal": 'Bir şeyler sorun... "{{example}}"', - "prompt.placeholder.simple": "Bir şeyler sorun...", - "prompt.placeholder.summarizeComments": "Yorumları özetle…", - "prompt.placeholder.summarizeComment": "Yorumu özetle…", - "prompt.mode.shell": "Kabuk", - "prompt.mode.normal": "Komut", - "prompt.mode.shell.exit": "çıkmak için esc", - - "prompt.example.1": "Kod tabanındaki bir TODO'yu düzelt", - "prompt.example.2": "Bu projenin teknoloji yığını nedir?", - "prompt.example.3": "Bozuk testleri düzelt", - "prompt.example.4": "Kimlik doğrulamanın nasıl çalıştığını açıkla", - "prompt.example.5": "Güvenlik açıkları bul ve düzelt", - "prompt.example.6": "Kullanıcı servisi için birim testleri ekle", - "prompt.example.7": "Bu fonksiyonu daha okunabilir hale getir", - "prompt.example.8": "Bu hata ne anlama geliyor?", - "prompt.example.9": "Bu sorunu ayıklamama yardım et", - "prompt.example.10": "API dokümantasyonu oluştur", - "prompt.example.11": "Veritabanı sorgularını optimize et", - "prompt.example.12": "Girdi doğrulama ekle", - "prompt.example.13": "İçin yeni bir bileşen oluştur...", - "prompt.example.14": "Bu projeyi nasıl dağıtabilirim?", - "prompt.example.15": "Kodumu en iyi uygulamalar için incele", - "prompt.example.16": "Bu fonksiyona hata yönetimi ekle", - "prompt.example.17": "Bu regex kalıbını açıkla", - "prompt.example.18": "Bunu TypeScript'e dönüştür", - "prompt.example.19": "Kod tabanı boyunca loglama ekle", - "prompt.example.20": "Hangi bağımlılıklar güncellenmemiş?", - "prompt.example.21": "Bir göç betiği yazmama yardım et", - "prompt.example.22": "Bu uç nokta için önbellekleme uygula", - "prompt.example.23": "Bu listeye sayfalama ekle", - "prompt.example.24": "İçin bir CLI komutu oluştur...", - "prompt.example.25": "Ortam değişkenleri burada nasıl çalışıyor?", - - "prompt.popover.emptyResults": "Eşleşen sonuç yok", - "prompt.popover.emptyCommands": "Eşleşen komut yok", - "prompt.dropzone.label": "Resimleri, PDF'leri veya metin dosyalarını buraya bırakın", - "prompt.dropzone.file.label": "@bahsetmek için dosyayı bırakın", - "prompt.slash.badge.custom": "özel", - "prompt.slash.badge.skill": "beceri", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "aktif", - "prompt.context.includeActiveFile": "Aktif dosyayı dahil et", - "prompt.context.removeActiveFile": "Aktif dosyayı bağlamdan çıkar", - "prompt.context.removeFile": "Dosyayı bağlamdan çıkar", - "prompt.action.attachFile": "Dosya ekle", - "prompt.attachment.remove": "Eki kaldır", - "prompt.action.send": "Gönder", - "prompt.action.stop": "Durdur", - - "prompt.toast.pasteUnsupported.title": "Desteklenmeyen ek", - "prompt.toast.pasteUnsupported.description": "Buraya yalnızca resimler, PDF'ler veya metin dosyaları eklenebilir.", - "prompt.toast.modelAgentRequired.title": "Bir ajan ve model seçin", - "prompt.toast.modelAgentRequired.description": "Komut göndermeden önce bir ajan ve model seçin.", - "prompt.toast.worktreeCreateFailed.title": "Çalışma ağacı oluşturulamadı", - "prompt.toast.sessionCreateFailed.title": "Oturum oluşturulamadı", - "prompt.toast.shellSendFailed.title": "Kabuk komutu gönderilemedi", - "prompt.toast.commandSendFailed.title": "Komut gönderilemedi", - "prompt.toast.promptSendFailed.title": "Komut gönderilemedi", - "prompt.toast.promptSendFailed.description": "Oturum alınamadı", - - "dialog.mcp.title": "MCP'ler", - "dialog.mcp.description": "{{total}} içerisinden {{enabled}} etkin", - "dialog.mcp.empty": "Yapılandırılmış MCP yok", - - "dialog.lsp.empty": "LSP'ler dosya türlerinden otomatik algılanır", - "dialog.plugins.empty": "Eklentiler opencode.json içinde yapılandırılır", - - "mcp.status.connected": "bağlı", - "mcp.status.failed": "başarısız", - "mcp.status.needs_auth": "kimlik doğrulama gerekli", - "mcp.auth.clickToAuthenticate": "Kimlik doğrulamak için tıklayın", - "mcp.status.disabled": "devre dışı", - - "dialog.fork.empty": "Dallandırılacak mesaj yok", - - "dialog.directory.search.placeholder": "Klasör ara", - "dialog.directory.empty": "Klasör bulunamadı", - "dialog.directory.action.selectFile": "Dosya seç", - "dialog.directory.action.selectFolder": "Klasör seç", - "dialog.directory.root": "Kök", - "dialog.directory.parent": "Üst klasör", - "dialog.directory.readError": "Bu klasör okunamıyor", - - "dialog.server.title": "Sunucular", - "dialog.server.description": "Bu uygulamanın hangi OpenCode sunucusuna bağlanacağını değiştirin.", - "dialog.server.search.placeholder": "Sunucu ara", - "dialog.server.empty": "Henüz sunucu yok", - "dialog.server.add.title": "Sunucu ekle", - "dialog.server.add.url": "Sunucu URL'si", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "Sunucuya bağlanılamadı", - "dialog.server.add.checking": "Kontrol ediliyor...", - "dialog.server.add.button": "Sunucu ekle", - "dialog.server.add.name": "Sunucu adı (isteğe bağlı)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "Kullanıcı adı (isteğe bağlı)", - "dialog.server.add.password": "Şifre (isteğe bağlı)", - "dialog.server.edit.title": "Sunucuyu düzenle", - "dialog.server.default.title": "Varsayılan sunucu", - "dialog.server.default.description": - "Uygulama başlatıldığında yerel sunucu başlatmak yerine bu sunucuya bağlan. Yeniden başlatma gerektirir.", - "dialog.server.default.none": "Sunucu seçilmedi", - "dialog.server.default.set": "Mevcut sunucuyu varsayılan olarak ayarla", - "dialog.server.default.clear": "Temizle", - "dialog.server.action.remove": "Sunucuyu kaldır", - - "dialog.server.menu.edit": "Düzenle", - "dialog.server.menu.default": "Varsayılan olarak ayarla", - "dialog.server.menu.defaultRemove": "Varsayılanı kaldır", - "dialog.server.menu.delete": "Sil", - "dialog.server.current": "Mevcut Sunucu", - "dialog.server.status.default": "Varsayılan", - - "dialog.project.edit.title": "Projeyi düzenle", - "dialog.project.edit.name": "Ad", - "dialog.project.edit.icon": "Simge", - "dialog.project.edit.icon.alt": "Proje simgesi", - "dialog.project.edit.icon.hint": "Tıkla veya bir görsel sürükle", - "dialog.project.edit.icon.recommended": "Önerilen: 128x128px", - "dialog.project.edit.color": "Renk", - "dialog.project.edit.color.select": "{{color}} rengini seç", - "dialog.project.edit.worktree.startup": "Çalışma alanı başlatma betiği", - "dialog.project.edit.worktree.startup.description": "Yeni bir çalışma alanı (worktree) oluşturduktan sonra çalışır.", - "dialog.project.edit.worktree.startup.placeholder": "örneğin bun install", - - "context.breakdown.title": "Bağlam Dökümü", - "context.breakdown.note": 'Girdi tokenlerinin yaklaşık dökümü. "Diğer" araç tanımları ve ek yükleri içerir.', - "context.breakdown.system": "Sistem", - "context.breakdown.user": "Kullanıcı", - "context.breakdown.assistant": "Asistan", - "context.breakdown.tool": "Araç Çağrıları", - "context.breakdown.other": "Diğer", - - "context.systemPrompt.title": "Sistem Komutu", - "context.rawMessages.title": "Ham mesajlar", - - "context.stats.session": "Oturum", - "context.stats.messages": "Mesajlar", - "context.stats.provider": "Sağlayıcı", - "context.stats.model": "Model", - "context.stats.limit": "Bağlam Limiti", - "context.stats.totalTokens": "Toplam Token", - "context.stats.usage": "Kullanım", - "context.stats.inputTokens": "Girdi Tokenleri", - "context.stats.outputTokens": "Çıktı Tokenleri", - "context.stats.reasoningTokens": "Akıl Yürütme Tokenleri", - "context.stats.cacheTokens": "Önbellek Tokenleri (okuma/yazma)", - "context.stats.userMessages": "Kullanıcı Mesajları", - "context.stats.assistantMessages": "Asistan Mesajları", - "context.stats.totalCost": "Toplam Maliyet", - "context.stats.sessionCreated": "Oturum Oluşturulma", - "context.stats.lastActivity": "Son Etkinlik", - - "context.usage.tokens": "Tokenler", - "context.usage.usage": "Kullanım", - "context.usage.cost": "Maliyet", - "context.usage.clickToView": "Bağlamı görüntüle", - "context.usage.view": "Bağlam kullanımını görüntüle", - - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - - "toast.language.title": "Dil", - "toast.language.description": "{{language}} diline geçildi", - - "toast.theme.title": "Tema değiştirildi", - "toast.scheme.title": "Renk şeması", - - "toast.workspace.enabled.title": "Çalışma alanları etkinleştirildi", - "toast.workspace.enabled.description": "Kenar çubuğunda birden fazla çalışma ağacı gösterilecek", - "toast.workspace.disabled.title": "Çalışma alanları devre dışı bırakıldı", - "toast.workspace.disabled.description": "Kenar çubuğunda yalnızca ana çalışma ağacı gösterilecek", - - "toast.permissions.autoaccept.on.title": "Düzenlemeler otomatik kabul ediliyor", - "toast.permissions.autoaccept.on.description": "Düzenleme ve yazma izinleri otomatik olarak onaylanacak", - "toast.permissions.autoaccept.off.title": "Otomatik kabul durduruldu", - "toast.permissions.autoaccept.off.description": "Düzenleme ve yazma izinleri onay gerektirecek", - - "toast.model.none.title": "Model seçilmedi", - "toast.model.none.description": "Bu oturumu özetlemek için bir sağlayıcı bağlayın", - - "toast.file.loadFailed.title": "Dosya yüklenemedi", - "toast.file.listFailed.title": "Dosyalar listelenemedi", - - "toast.context.noLineSelection.title": "Satır seçimi yok", - "toast.context.noLineSelection.description": "Önce bir dosya sekmesinde satır aralığı seçin.", - - "toast.session.share.copyFailed.title": "URL panoya kopyalanamadı", - "toast.session.share.success.title": "Oturum paylaşıldı", - "toast.session.share.success.description": "Paylaşım URL'si panoya kopyalandı!", - "toast.session.share.failed.title": "Oturum paylaşılamadı", - "toast.session.share.failed.description": "Oturum paylaşılırken bir hata oluştu", - - "toast.session.unshare.success.title": "Oturum paylaşımı kaldırıldı", - "toast.session.unshare.success.description": "Oturum paylaşımı başarıyla kaldırıldı!", - "toast.session.unshare.failed.title": "Oturum paylaşımı kaldırılamadı", - "toast.session.unshare.failed.description": "Oturum paylaşımı kaldırılırken bir hata oluştu", - - "toast.session.listFailed.title": "{{project}} için oturumlar yüklenemedi", - - "toast.update.title": "Güncelleme mevcut", - "toast.update.description": "OpenCode'un yeni bir sürümü ({{version}}) yüklemeye hazır.", - "toast.update.action.installRestart": "Yükle ve yeniden başlat", - "toast.update.action.notYet": "Şimdi değil", - - "error.page.title": "Bir şeyler yanlış gitti", - "error.page.description": "Uygulama yüklenirken bir hata oluştu.", - "error.page.details.label": "Hata Detayları", - "error.page.action.restart": "Yeniden Başlat", - "error.page.action.report": "Hatayı Bildir", - "error.page.action.reported": "Hata Bildirildi", - "error.page.action.checking": "Kontrol ediliyor...", - "error.page.action.checkUpdates": "Güncellemeleri kontrol et", - "error.page.action.updateTo": "{{version}} sürümüne güncelle", - "error.page.report.prefix": "Lütfen bu hatayı OpenCode ekibine bildirin", - "error.page.report.discord": "Discord üzerinden", - "error.page.version": "Sürüm: {{version}}", - - "error.dev.rootNotFound": - "Kök eleman bulunamadı. index.html dosyanıza eklemeyi unuttunuz mu? Ya da id özelliği yanlış mı yazıldı?", - - "error.serverSync.connectFailed": "Sunucuya bağlanılamadı. `{{url}}` adresinde çalışan bir sunucu var mı?", - "directory.error.invalidUrl": "URL'de geçersiz dizin.", - - "error.chain.unknown": "Bilinmeyen hata", - "error.chain.causedBy": "Nedeni:", - "error.chain.apiError": "API hatası", - "error.chain.status": "Durum: {{status}}", - "error.chain.retryable": "Yeniden denenebilir: {{retryable}}", - "error.chain.responseBody": "Yanıt gövdesi:\n{{body}}", - "error.chain.didYouMean": "Bunu mu demek istediniz: {{suggestions}}", - "error.chain.modelNotFound": "Model bulunamadı: {{provider}}/{{model}}", - "error.chain.checkConfig": "Yapılandırma dosyanızı (opencode.json) sağlayıcı/model adlarını kontrol edin", - "error.chain.mcpFailed": - 'MCP sunucusu "{{name}}" başarısız oldu. Not: OpenCode henüz MCP kimlik doğrulamasını desteklemiyor.', - "error.chain.providerAuthFailed": "Sağlayıcı kimlik doğrulaması başarısız ({{provider}}): {{message}}", - "error.chain.providerInitFailed": - '"{{provider}}" sağlayıcısı başlatılamadı. Kimlik bilgilerini ve yapılandırmayı kontrol edin.', - "error.chain.configJsonInvalid": "{{path}} adresindeki yapılandırma dosyası geçerli JSON(C) değil", - "error.chain.configJsonInvalidWithMessage": - "{{path}} adresindeki yapılandırma dosyası geçerli JSON(C) değil: {{message}}", - "error.chain.configDirectoryTypo": - '"{{dir}}" dizini {{path}} içinde geçerli değil. Dizini "{{suggestion}}" olarak yeniden adlandırın veya kaldırın. Bu yaygın bir yazım hatasıdır.', - "error.chain.configFrontmatterError": "{{path}} içindeki ön bilgi ayrıştırılamadı:\n{{message}}", - "error.chain.configInvalid": "{{path}} adresindeki yapılandırma dosyası geçersiz", - "error.chain.configInvalidWithMessage": "{{path}} adresindeki yapılandırma dosyası geçersiz: {{message}}", - - "notification.permission.title": "İzin gerekli", - "notification.permission.description": "{{projectName}} içindeki {{sessionTitle}} izin gerektiriyor", - "notification.question.title": "Soru", - "notification.question.description": "{{projectName}} içindeki {{sessionTitle}} bir soru soruyor", - "notification.action.goToSession": "Oturuma git", - - "notification.session.responseReady.title": "Yanıt hazır", - "notification.session.error.title": "Oturum hatası", - "notification.session.error.fallbackDescription": "Bir hata oluştu", - - "home.recentProjects": "Son projeler", - "home.empty.title": "Son proje yok", - "home.empty.description": "Yerel bir proje açarak başlayın", - - "session.tab.session": "Oturum", - "session.tab.review": "İnceleme", - "session.tab.context": "Bağlam", - "session.panel.reviewAndFiles": "İnceleme ve dosyalar", - "session.review.filesChanged": "{{count}} Dosya Değişti", - "session.review.change.one": "Değişiklik", - "session.review.change.other": "Değişiklik", - "session.review.loadingChanges": "Değişiklikler yükleniyor...", - "session.review.empty": "Bu oturumda henüz değişiklik yok", - "session.review.noVcs": "Git VCS algılanamadı, oturum değişiklikleri tespit edilemeyecek", - "session.review.noSnapshot": - "Yapılandırmada anlık görüntü takibi devre dışı bırakıldı, bu nedenle oturum değişiklikleri kullanılamıyor", - "session.review.noChanges": "Değişiklik yok", - - "session.files.selectToOpen": "Açmak için bir dosya seçin", - "session.files.all": "Tüm dosyalar", - "session.files.empty": "Dosya yok", - "session.files.binaryContent": "İkili dosya (içerik görüntülenemiyor)", - - "session.messages.renderEarlier": "Önceki mesajları göster", - "session.messages.loadingEarlier": "Önceki mesajlar yükleniyor...", - "session.messages.loadEarlier": "Önceki mesajları yükle", - "session.messages.loading": "Mesajlar yükleniyor...", - "session.messages.jumpToLatest": "En sona atla", - - "session.context.addToContext": "{{selection}} bağlama ekle", - "session.todo.title": "Görevler", - "session.todo.collapse": "Daralt", - "session.todo.expand": "Genişlet", - "session.followupDock.summary.one": "{{count}} sıradaki mesaj", - "session.followupDock.summary.other": "{{count}} sıradaki mesaj", - "session.followupDock.sendNow": "Şimdi gönder", - "session.followupDock.edit": "Düzenle", - "session.followupDock.collapse": "Sıradaki mesajları daralt", - "session.followupDock.expand": "Sıradaki mesajları genişlet", - "session.revertDock.summary.one": "{{count}} geri alınan mesaj", - "session.revertDock.summary.other": "{{count}} geri alınan mesaj", - "session.revertDock.collapse": "Geri alınan mesajları daralt", - "session.revertDock.expand": "Geri alınan mesajları genişlet", - "session.revertDock.restore": "Mesajı geri yükle", - - "session.new.title": "İstediğini yap", - "session.new.worktree.main": "Ana dal", - "session.new.worktree.mainWithBranch": "Ana dal ({{branch}})", - "session.new.worktree.create": "Yeni çalışma ağacı oluştur", - "session.new.lastModified": "Son değişiklik", - - "session.header.search.placeholder": "{{project}} ara", - "session.header.searchFiles": "Dosya ara", - "session.header.openIn": "Aç", - "session.header.open.action": "{{app}} ile aç", - "session.header.open.ariaLabel": "{{app}} ile aç", - "session.header.open.menu": "Açma seçenekleri", - "session.header.open.copyPath": "Yolu kopyala", - - "status.popover.trigger": "Durum", - "status.popover.ariaLabel": "Sunucu yapılandırmaları", - "status.popover.tab.servers": "Sunucular", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "Eklentiler", - "status.popover.action.manageServers": "Sunucuları yönet", - - "session.share.popover.title": "Web'de yayınla", - "session.share.popover.description.shared": "Bu oturum web'de herkese açıktır. Bağlantıya sahip herkes erişebilir.", - "session.share.popover.description.unshared": - "Oturumu web'de herkese açık olarak paylaşın. Bağlantıya sahip herkes erişebilecek.", - "session.share.action.share": "Paylaş", - "session.share.action.publish": "Yayınla", - "session.share.action.publishing": "Yayınlanıyor...", - "session.share.action.unpublish": "Yayından kaldır", - "session.share.action.unpublishing": "Yayından kaldırılıyor...", - "session.share.action.view": "Görüntüle", - "session.share.copy.copied": "Kopyalandı", - "session.share.copy.copyLink": "Bağlantı kopyala", - - "lsp.tooltip.none": "LSP sunucusu yok", - "lsp.label.connected": "{{count}} LSP", - - "prompt.loading": "Komut yükleniyor...", - "terminal.loading": "Terminal yükleniyor...", - "terminal.title": "Terminal", - "terminal.title.numbered": "Terminal {{number}}", - "terminal.close": "Terminali kapat", - "terminal.connectionLost.title": "Bağlantı Kesildi", - "terminal.connectionLost.description": - "Terminal bağlantısı kesildi. Bu durum sunucu yeniden başladığında oluşabilir.", - - "common.closeTab": "Sekmeyi kapat", - "common.dismiss": "Kapat", - "common.requestFailed": "İstek başarısız", - "common.moreOptions": "Daha fazla seçenek", - "common.learnMore": "Daha fazla bilgi", - "common.rename": "Yeniden adlandır", - "common.reset": "Sıfırla", - "common.archive": "Arşivle", - "common.delete": "Sil", - "common.close": "Kapat", - "common.edit": "Düzenle", - "common.loadMore": "Daha fazla yükle", - "common.key.esc": "ESC", - - "sidebar.menu.toggle": "Menüyü aç/kapat", - "sidebar.nav.projectsAndSessions": "Projeler ve oturumlar", - "sidebar.settings": "Ayarlar", - "sidebar.help": "Yardım", - "sidebar.workspaces.enable": "Çalışma alanlarını etkinleştir", - "sidebar.workspaces.disable": "Çalışma alanlarını devre dışı bırak", - "sidebar.gettingStarted.title": "Başlarken", - "sidebar.gettingStarted.line1": "OpenCode ücretsiz modeller içerir, böylece hemen başlayabilirsiniz.", - "sidebar.gettingStarted.line2": "Claude, GPT, Gemini vb. modelleri kullanmak için herhangi bir sağlayıcı bağlayın.", - "sidebar.project.recentSessions": "Son oturumlar", - "sidebar.project.viewAllSessions": "Tüm oturumları görüntüle", - "sidebar.project.clearNotifications": "Bildirimleri temizle", - - "app.name.desktop": "OpenCode Masaüstü", - - "settings.section.desktop": "Masaüstü", - "settings.section.server": "Sunucu", - "settings.tab.general": "Genel", - "settings.tab.shortcuts": "Kısayollar", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "WSL entegrasyonu", - "settings.desktop.wsl.description": "OpenCode sunucusunu Windows'ta WSL içinde çalıştırın.", - - "settings.general.section.appearance": "Görünüm", - "settings.general.section.notifications": "Sistem bildirimleri", - "settings.general.section.updates": "Güncellemeler", - "settings.general.section.sounds": "Ses efektleri", - "settings.general.section.feed": "Akış", - "settings.general.section.display": "Ekran", - - "settings.general.row.language.title": "Dil", - "settings.general.row.language.description": "OpenCode'un görünüm dilini değiştirin", - "settings.general.row.appearance.title": "Görünüm", - "settings.general.row.appearance.description": "OpenCode'un cihazınızdaki görünümünü özelleştirin", - "settings.general.row.colorScheme.title": "Renk şeması", - "settings.general.row.colorScheme.description": - "OpenCode'un sistem, açık veya koyu temayı takip etip etmeyeceğini seçin", - "settings.general.row.theme.title": "Tema", - "settings.general.row.theme.description": "OpenCode'un temasını özelleştirin.", - "settings.general.row.font.title": "Kod Yazı Tipi", - "settings.general.row.font.description": "Kod bloklarında kullanılan yazı tipini özelleştirin", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "Arayüz Yazı Tipi", - "settings.general.row.uiFont.description": "Arayüz genelinde kullanılan yazı tipini özelleştirin", - "settings.general.row.followup.title": "Takip davranışı", - "settings.general.row.followup.description": - "Takip komutlarının hemen yönlendirilmesini mi yoksa sırada beklemesini mi istediğinizi seçin", - "settings.general.row.followup.option.queue": "Sıra", - "settings.general.row.followup.option.steer": "Yönlendir", - "settings.general.row.reasoningSummaries.title": "Akıl yürütme özetlerini göster", - "settings.general.row.reasoningSummaries.description": "Zaman çizelgesinde model akıl yürütme özetlerini görüntüle", - "settings.general.row.shellToolPartsExpanded.title": "Kabuk araç bileşenlerini genişlet", - "settings.general.row.shellToolPartsExpanded.description": - "Zaman çizelgesinde kabuk araç bileşenlerini varsayılan olarak genişletilmiş göster", - "settings.general.row.editToolPartsExpanded.title": "Düzenleme araç bileşenlerini genişlet", - "settings.general.row.editToolPartsExpanded.description": - "Zaman çizelgesinde düzenleme, yazma ve yama araç bileşenlerini varsayılan olarak genişletilmiş göster", - - "settings.general.row.wayland.title": "Yerel Wayland kullan", - "settings.general.row.wayland.description": - "Wayland'da X11 geri dönüşünü devre dışı bırak. Yeniden başlatma gerektirir.", - "settings.general.row.wayland.tooltip": - "Karışık yenileme hızlı monitörlere sahip Linux'ta yerel Wayland daha kararlı olabilir.", - - "settings.general.row.releaseNotes.title": "Sürüm notları", - "settings.general.row.releaseNotes.description": "Güncellemelerden sonra Yenilikler bildirimlerini göster", - - "settings.updates.row.startup.title": "Başlangıçta güncellemeleri kontrol et", - "settings.updates.row.startup.description": "OpenCode başladığında otomatik güncelleme kontrolü yap", - "settings.updates.row.check.title": "Güncellemeleri kontrol et", - "settings.updates.row.check.description": "Elle güncelleme kontrolü yap ve varsa yükle", - "settings.updates.action.checkNow": "Şimdi kontrol et", - "settings.updates.action.checking": "Kontrol ediliyor...", - "settings.updates.toast.latest.title": "Güncelsiniz", - "settings.updates.toast.latest.description": "OpenCode'un en son sürümünü kullanıyorsunuz.", - - "sound.option.none": "Yok", - "sound.option.alert01": "Uyarı 01", - "sound.option.alert02": "Uyarı 02", - "sound.option.alert03": "Uyarı 03", - "sound.option.alert04": "Uyarı 04", - "sound.option.alert05": "Uyarı 05", - "sound.option.alert06": "Uyarı 06", - "sound.option.alert07": "Uyarı 07", - "sound.option.alert08": "Uyarı 08", - "sound.option.alert09": "Uyarı 09", - "sound.option.alert10": "Uyarı 10", - "sound.option.bipbop01": "Bip-bop 01", - "sound.option.bipbop02": "Bip-bop 02", - "sound.option.bipbop03": "Bip-bop 03", - "sound.option.bipbop04": "Bip-bop 04", - "sound.option.bipbop05": "Bip-bop 05", - "sound.option.bipbop06": "Bip-bop 06", - "sound.option.bipbop07": "Bip-bop 07", - "sound.option.bipbop08": "Bip-bop 08", - "sound.option.bipbop09": "Bip-bop 09", - "sound.option.bipbop10": "Bip-bop 10", - "sound.option.staplebops01": "Staplebops 01", - "sound.option.staplebops02": "Staplebops 02", - "sound.option.staplebops03": "Staplebops 03", - "sound.option.staplebops04": "Staplebops 04", - "sound.option.staplebops05": "Staplebops 05", - "sound.option.staplebops06": "Staplebops 06", - "sound.option.staplebops07": "Staplebops 07", - "sound.option.nope01": "Hayır 01", - "sound.option.nope02": "Hayır 02", - "sound.option.nope03": "Hayır 03", - "sound.option.nope04": "Hayır 04", - "sound.option.nope05": "Hayır 05", - "sound.option.nope06": "Hayır 06", - "sound.option.nope07": "Hayır 07", - "sound.option.nope08": "Hayır 08", - "sound.option.nope09": "Hayır 09", - "sound.option.nope10": "Hayır 10", - "sound.option.nope11": "Hayır 11", - "sound.option.nope12": "Hayır 12", - "sound.option.yup01": "Evet 01", - "sound.option.yup02": "Evet 02", - "sound.option.yup03": "Evet 03", - "sound.option.yup04": "Evet 04", - "sound.option.yup05": "Evet 05", - "sound.option.yup06": "Evet 06", - - "settings.general.notifications.agent.title": "Ajan", - "settings.general.notifications.agent.description": - "Ajan tamamlandığında veya dikkat gerektirdiğinde sistem bildirimi göster", - "settings.general.notifications.permissions.title": "İzinler", - "settings.general.notifications.permissions.description": "İzin gerektiğinde sistem bildirimi göster", - "settings.general.notifications.errors.title": "Hatalar", - "settings.general.notifications.errors.description": "Hata oluştuğunda sistem bildirimi göster", - - "settings.general.sounds.agent.title": "Ajan", - "settings.general.sounds.agent.description": "Ajan tamamlandığında veya dikkat gerektirdiğinde ses çal", - "settings.general.sounds.permissions.title": "İzinler", - "settings.general.sounds.permissions.description": "İzin gerektiğinde ses çal", - "settings.general.sounds.errors.title": "Hatalar", - "settings.general.sounds.errors.description": "Hata oluştuğunda ses çal", - - "settings.shortcuts.title": "Klavye kısayolları", - "settings.shortcuts.reset.button": "Varsayılanlara sıfırla", - "settings.shortcuts.reset.toast.title": "Kısayollar sıfırlandı", - "settings.shortcuts.reset.toast.description": "Klavye kısayolları varsayılanlara sıfırlandı.", - "settings.shortcuts.conflict.title": "Kısayol zaten kullanılıyor", - "settings.shortcuts.conflict.description": "{{keybind}} zaten {{titles}} için atanmış.", - "settings.shortcuts.unassigned": "Atanmamış", - "settings.shortcuts.pressKeys": "Tuşlara basın", - "settings.shortcuts.search.placeholder": "Kısayol ara", - "settings.shortcuts.search.empty": "Kısayol bulunamadı", - - "settings.shortcuts.group.general": "Genel", - "settings.shortcuts.group.session": "Oturum", - "settings.shortcuts.group.navigation": "Gezinme", - "settings.shortcuts.group.modelAndAgent": "Model ve ajan", - "settings.shortcuts.group.terminal": "Terminal", - "settings.shortcuts.group.prompt": "Komut", - - "settings.providers.title": "Sağlayıcılar", - "settings.providers.description": "Sağlayıcı ayarları burada yapılandırılabilecek.", - "settings.providers.section.connected": "Bağlı sağlayıcılar", - "settings.providers.connected.empty": "Bağlı sağlayıcı yok", - "settings.providers.section.popular": "Popüler sağlayıcılar", - "settings.providers.tag.environment": "Ortam", - "settings.providers.tag.config": "Yapılandırma", - "settings.providers.tag.custom": "Özel", - "settings.providers.tag.other": "Diğer", - "settings.models.title": "Modeller", - "settings.models.description": "Model ayarları burada yapılandırılabilecek.", - "settings.agents.title": "Ajanlar", - "settings.agents.description": "Ajan ayarları burada yapılandırılabilecek.", - "settings.commands.title": "Komutlar", - "settings.commands.description": "Komut ayarları burada yapılandırılabilecek.", - "settings.mcp.title": "MCP", - "settings.mcp.description": "MCP ayarları burada yapılandırılabilecek.", - - "settings.permissions.title": "İzinler", - "settings.permissions.description": "Sunucunun varsayılan olarak hangi araçları kullanabileceğini kontrol edin.", - "settings.permissions.section.tools": "Araçlar", - "settings.permissions.toast.updateFailed.title": "İzinler güncellenemedi", - - "settings.permissions.action.allow": "İzin Ver", - "settings.permissions.action.ask": "Sor", - "settings.permissions.action.deny": "Reddet", - - "settings.permissions.tool.read.title": "Oku", - "settings.permissions.tool.read.description": "Bir dosyayı okuma (dosya yoluyla eşleşir)", - "settings.permissions.tool.edit.title": "Düzenle", - "settings.permissions.tool.edit.description": "Düzenleme, yazma, yama ve çoklu düzenleme dahil dosyaları değiştir", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "Glob kalıpları kullanarak dosyaları eşle", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "Düzenli ifadeler kullanarak dosya içerikleri ara", - "settings.permissions.tool.list.title": "Listele", - "settings.permissions.tool.list.description": "Bir dizindeki dosyaları listele", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "Kabuk komutları çalıştır", - "settings.permissions.tool.task.title": "Görev", - "settings.permissions.tool.task.description": "Alt ajanlar başlat", - "settings.permissions.tool.skill.title": "Beceri", - "settings.permissions.tool.skill.description": "Ada göre bir beceri yükle", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "Dil sunucusu sorguları çalıştır", - "settings.permissions.tool.todowrite.title": "Görev Yaz", - "settings.permissions.tool.todowrite.description": "Görev listesini güncelle", - "settings.permissions.tool.webfetch.title": "Web Getir", - "settings.permissions.tool.webfetch.description": "Bir URL'den içerik getir", - "settings.permissions.tool.websearch.title": "Web Ara", - "settings.permissions.tool.websearch.description": "Web'de ara", - "settings.permissions.tool.external_directory.title": "Harici Dizin", - "settings.permissions.tool.external_directory.description": "Proje dizini dışındaki dosyalara eriş", - "settings.permissions.tool.doom_loop.title": "Sonsuz Döngü", - "settings.permissions.tool.doom_loop.description": "Aynı girdiyle tekrarlanan araç çağrılarını algıla", - - "session.delete.failed.title": "Oturum silinemedi", - "session.delete.title": "Oturumu sil", - "session.delete.confirm": '"{{name}}" oturumu silinsin mi?', - "session.delete.button": "Oturumu sil", - - "workspace.new": "Yeni çalışma alanı", - "workspace.type.local": "yerel", - "workspace.type.sandbox": "sandbox", - "workspace.create.failed.title": "Çalışma alanı oluşturulamadı", - "workspace.delete.failed.title": "Çalışma alanı silinemedi", - "workspace.resetting.title": "Çalışma alanı sıfırlanıyor", - "workspace.resetting.description": "Bu bir dakika sürebilir.", - "workspace.reset.failed.title": "Çalışma alanı sıfırlanamadı", - "workspace.reset.success.title": "Çalışma alanı sıfırlandı", - "workspace.reset.success.description": "Çalışma alanı artık varsayılan dalla eşleşiyor.", - "workspace.error.stillPreparing": "Çalışma alanı hâlâ hazırlanıyor", - "workspace.status.checking": "Birleşmemiş değişiklikler kontrol ediliyor...", - "workspace.status.error": "Git durumu doğrulanamadı.", - "workspace.status.clean": "Birleşmemiş değişiklik algılanmadı.", - "workspace.status.dirty": "Bu çalışma alanında birleşmemiş değişiklikler algılandı.", - "workspace.delete.title": "Çalışma alanını sil", - "workspace.delete.confirm": '"{{name}}" çalışma alanı silinsin mi?', - "workspace.delete.button": "Çalışma alanını sil", - "workspace.reset.title": "Çalışma alanını sıfırla", - "workspace.reset.confirm": '"{{name}}" çalışma alanı sıfırlansın mı?', - "workspace.reset.button": "Çalışma alanını sıfırla", - "workspace.reset.archived.none": "Arşivlenecek aktif oturum yok.", - "workspace.reset.archived.one": "1 oturum arşivlenecek.", - "workspace.reset.archived.many": "{{count}} oturum arşivlenecek.", - "workspace.reset.note": "Bu işlem çalışma alanını varsayılan dalla eşleşecek şekilde sıfırlayacak.", - "common.open": "Aç", - "dialog.releaseNotes.action.getStarted": "Başla", - "dialog.releaseNotes.action.next": "İleri", - "dialog.releaseNotes.action.hideFuture": "Bunu gelecekte bir daha gösterme", - "dialog.releaseNotes.media.alt": "Sürüm önizlemesi", - "toast.project.reloadFailed.title": "{{project}} yeniden yüklenemedi", - "error.server.invalidConfiguration": "Geçersiz yapılandırma", - "common.moreCountSuffix": " (+{{count}} daha)", - "common.time.justNow": "Şimdi", - "common.time.minutesAgo.short": "{{count}}dk önce", - "common.time.hoursAgo.short": "{{count}}sa önce", - "common.time.daysAgo.short": "{{count}}g önce", - "settings.providers.connected.environmentDescription": "Ortam değişkenlerinizden bağlandı", - "settings.providers.custom.description": "Temel URL üzerinden OpenAI uyumlu bir sağlayıcı ekleyin.", - - "app.server.unreachable": "{{server}} sunucusuna ulaşılamadı", - "app.server.retrying": "Otomatik olarak tekrar deneniyor...", - "app.server.otherServers": "Diğer sunucular", - "dialog.server.add.usernamePlaceholder": "kullanıcı adı", - "dialog.server.add.passwordPlaceholder": "parola", - "server.row.noUsername": "kullanıcı adı yok", - "session.review.noVcs.createGit.title": "Git deposu oluştur", - "session.review.noVcs.createGit.description": "Bu projedeki değişiklikleri takip et, incele ve geri al", - "session.review.noVcs.createGit.actionLoading": "Git deposu oluşturuluyor...", - "session.review.noVcs.createGit.action": "Git deposu oluştur", - "session.todo.progress": "{{total}} görevin {{done}} tanesi tamamlandı", - "session.question.progress": "{{total}} sorunun {{current}} tanesi", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "Dosya Gezgini", - "session.header.open.fileManager": "Dosya Yöneticisi", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "Terminal", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "Geliştirme performansı teşhisi", - "debugBar.na": "yok", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": - "Yönlendirici başlangıcından yerleşme sonrası ilk boyamaya kadar ölçülen, bir oturum sayfasına dokunan son tamamlanmış rota geçişi.", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "Son 5 saniyedeki kayan saniye başına kare sayısı.", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "Son 5 saniyedeki en kötü kare süresi.", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "Son 5 saniyede 32ms üzerindeki kareler.", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "Son 5 saniyedeki engellenen süre ve uzun görev sayısı. Maksimum görev: {{max}}.", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "Son 5 saniyede gözlemlenen en kötü giriş gecikmesi.", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": "Son 5 saniyedeki yaklaşık etkileşim süresi. Bu INP benzeridir, resmi Web Vitals INP değildir.", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "Mevcut uygulama ömrü için kümülatif düzen kayması.", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "Kullanılan JS yığını vs yığın sınırı. Yalnızca Chromium.", - "debugBar.mem.tip": "Kullanılan JS yığını vs yığın sınırı. {{limit}} içinde {{used}}.", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "Boşluk", - "common.key.backspace": "Geri", - "common.key.enter": "Enter", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "bilinmiyor", - "error.page.circular": "[Döngüsel]", - "error.serverSDK.noServerAvailable": "Sunucu yok", - "error.serverSDK.serverNotAvailable": "Sunucu mevcut değil", - "error.childStore.persistedCacheCreateFailed": "Kalıcı önbellek oluşturulamadı", - "error.childStore.persistedProjectMetadataCreateFailed": "Kalıcı proje meta verileri oluşturulamadı", - "error.childStore.persistedProjectIconCreateFailed": "Kalıcı proje simgesi oluşturulamadı", - "error.childStore.storeCreateFailed": "Depo oluşturulamadı", - "terminal.connectionLost.abnormalClose": "WebSocket anormal şekilde kapandı: {{code}}", -} satisfies Partial> diff --git a/packages/app/src/i18n/uk.ts b/packages/app/src/i18n/uk.ts deleted file mode 100644 index d875766e88..0000000000 --- a/packages/app/src/i18n/uk.ts +++ /dev/null @@ -1,970 +0,0 @@ -export const dict = { - "command.category.suggested": "Рекомендовані", - "command.category.view": "Вигляд", - "command.category.project": "Проєкт", - "command.category.provider": "Провайдер", - "command.category.server": "Сервер", - "command.category.session": "Сесія", - "command.category.theme": "Тема", - "command.category.language": "Мова", - "command.category.file": "Файл", - "command.category.context": "Контекст", - "command.category.terminal": "Термінал", - "command.category.model": "Модель", - "command.category.mcp": "MCP", - "command.category.agent": "Агент", - "command.category.permissions": "Дозволи", - "command.category.workspace": "Робоча область", - "command.category.settings": "Налаштування", - - "theme.scheme.system": "Системна", - "theme.scheme.light": "Світла", - "theme.scheme.dark": "Темна", - - "command.sidebar.toggle": "Перемкнути бічну панель", - "command.project.open": "Відкрити проєкт", - "command.project.previous": "Попередній проєкт", - "command.project.next": "Наступний проєкт", - "command.project.index": "Перемкнути на проєкт {{index}}", - "command.provider.connect": "Підключити провайдера", - "command.server.switch": "Перемкнути сервер", - "command.settings.open": "Відкрити налаштування", - "command.session.previous": "Попередня сесія", - "command.session.next": "Наступна сесія", - "command.session.previous.unseen": "Попередня непрочитана сесія", - "command.session.next.unseen": "Наступна непрочитана сесія", - "command.session.archive": "Архівувати сесію", - - "command.palette": "Палітра команд", - - "command.theme.cycle": "Перемкнути тему", - "command.theme.set": "Використати тему: {{theme}}", - "command.theme.scheme.cycle": "Перемкнути кольорову схему", - "command.theme.scheme.set": "Використати кольорову схему: {{scheme}}", - - "command.language.cycle": "Перемкнути мову", - "command.language.set": "Використати мову: {{language}}", - - "command.session.new": "Нова сесія", - "command.file.open": "Відкрити файл", - "command.tab.close": "Закрити вкладку", - "command.context.addSelection": "Додати виділення до контексту", - "command.context.addSelection.description": "Додати вибрані рядки з поточного файлу", - "command.input.focus": "Фокус на полі введення", - "command.terminal.toggle": "Перемкнути термінал", - "command.fileTree.toggle": "Перемкнути дерево файлів", - "command.review.toggle": "Перемкнути огляд", - "command.terminal.new": "Новий термінал", - "command.terminal.new.description": "Створити нову вкладку термінала", - "command.steps.toggle": "Перемкнути кроки", - "command.steps.toggle.description": "Показати або приховати кроки для поточного повідомлення", - "command.message.previous": "Попереднє повідомлення", - "command.message.previous.description": "Перейти до попереднього повідомлення користувача", - "command.message.next": "Наступне повідомлення", - "command.message.next.description": "Перейти до наступного повідомлення користувача", - "command.model.choose": "Вибрати модель", - "command.model.choose.description": "Вибрати іншу модель", - "command.mcp.toggle": "Перемкнути MCP", - "command.mcp.toggle.description": "Перемкнути MCP", - "command.agent.cycle": "Перемкнути агента", - "command.agent.cycle.description": "Перемкнути на наступного агента", - "command.agent.cycle.reverse": "Перемкнути агента в зворотному напрямку", - "command.agent.cycle.reverse.description": "Перемкнути на попереднього агента", - "command.model.variant.cycle": "Перемкнути рівень мислення", - "command.model.variant.cycle.description": "Перемкнути на наступний рівень зусилля", - "command.prompt.mode.shell": "Команда", - "command.prompt.mode.normal": "Запит", - "command.permissions.autoaccept.enable": "Автоматично приймати дозволи", - "command.permissions.autoaccept.disable": "Зупинити автоматичне прийняття дозволів", - "command.workspace.toggle": "Перемкнути робочі області", - "command.workspace.toggle.description": "Увімкнути або вимкнути декілька робочих областей на бічній панелі", - "command.session.undo": "Скасувати", - "command.session.undo.description": "Скасувати останнє повідомлення", - "command.session.redo": "Повторити", - "command.session.redo.description": "Повторити останнє скасоване повідомлення", - "command.session.compact": "Стиснути сесію", - "command.session.compact.description": "Підсумувати сесію, щоб зменшити розмір контексту", - "command.session.fork": "Відгалузити від повідомлення", - "command.session.fork.description": "Створити нову сесію з попереднього повідомлення", - "command.session.share": "Поділитися сесією", - "command.session.share.description": "Поділитися цією сесією та скопіювати URL у буфер обміну", - "command.session.unshare": "Припинити поширення сесії", - "command.session.unshare.description": "Припинити поширення цієї сесії", - - "palette.search.placeholder": "Пошук файлів, команд і сесій", - "palette.empty": "Результатів не знайдено", - "palette.group.commands": "Команди", - "palette.group.files": "Файли", - - "dialog.provider.search.placeholder": "Пошук провайдерів", - "dialog.provider.empty": "Провайдерів не знайдено", - "dialog.provider.group.popular": "Популярні", - "dialog.provider.group.other": "Інші", - "dialog.provider.tag.recommended": "Рекомендовані", - "dialog.provider.opencode.note": "Відібрані моделі, включаючи Claude, GPT, Gemini та інші", - "dialog.provider.opencode.tagline": "Надійні оптимізовані моделі", - "dialog.provider.opencodeGo.tagline": "Недорога підписка для всіх", - "dialog.provider.anthropic.note": "Прямий доступ до моделей Claude, включаючи Pro та Max", - "dialog.provider.copilot.note": "Моделі AI для допомоги в кодуванні через GitHub Copilot", - "dialog.provider.openai.note": "Моделі GPT для швидких і універсальних завдань AI", - "dialog.provider.google.note": "Моделі Gemini для швидких структурованих відповідей", - "dialog.provider.openrouter.note": "Доступ до всіх підтримуваних моделей від одного провайдера", - "dialog.provider.vercel.note": "Уніфікований доступ до моделей AI з інтелектуальною маршрутизацією", - - "dialog.model.select.title": "Вибрати модель", - "dialog.model.search.placeholder": "Пошук моделей", - "dialog.model.empty": "Немає результатів моделей", - "dialog.model.manage": "Керувати моделями", - "dialog.model.manage.description": "Налаштуйте, які моделі відображатимуться у виборі моделей.", - "dialog.model.manage.provider.toggle": "Перемкнути всі моделі {{provider}}", - - "dialog.model.unpaid.freeModels.title": "Безкоштовні моделі від OpenCode", - "dialog.model.unpaid.addMore.title": "Додати більше моделей від популярних провайдерів", - - "dialog.provider.viewAll": "Показати більше провайдерів", - - "provider.connect.title": "Підключити {{provider}}", - "provider.connect.title.anthropicProMax": "Увійти з Claude Pro/Max", - "provider.connect.selectMethod": "Виберіть спосіб входу для {{provider}}.", - "provider.connect.method.apiKey": "Ключ API", - "provider.connect.status.inProgress": "Авторизація виконується...", - "provider.connect.status.waiting": "Очікування авторизації...", - "provider.connect.status.failed": "Авторизація не вдалася: {{error}}", - "provider.connect.apiKey.description": - "Введіть ключ API {{provider}}, щоб підключити обліковий запис і використовувати моделі {{provider}} у OpenCode.", - "provider.connect.apiKey.label": "Ключ API {{provider}}", - "provider.connect.apiKey.placeholder": "Ключ API", - "provider.connect.apiKey.required": "Ключ API обов'язковий", - "provider.connect.opencodeZen.line1": - "OpenCode Zen надає доступ до відібраного набору надійних оптимізованих моделей для агентів кодування.", - "provider.connect.opencodeZen.line2": - "З одним ключем API ви отримаєте доступ до таких моделей, як Claude, GPT, Gemini, GLM та інших.", - "provider.connect.opencodeZen.visit.prefix": "Відвідайте ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": ", щоб отримати ключ API.", - "provider.connect.oauth.code.visit.prefix": "Відвідайте ", - "provider.connect.oauth.code.visit.link": "це посилання", - "provider.connect.oauth.code.visit.suffix": - ", щоб отримати код авторизації, підключити обліковий запис і використовувати моделі {{provider}} у OpenCode.", - "provider.connect.oauth.code.label": "Код авторизації {{method}}", - "provider.connect.oauth.code.placeholder": "Код авторизації", - "provider.connect.oauth.code.required": "Код авторизації обов'язковий", - "provider.connect.oauth.code.invalid": "Недійсний код авторизації", - "provider.connect.oauth.auto.visit.prefix": "Відвідайте ", - "provider.connect.oauth.auto.visit.link": "це посилання", - "provider.connect.oauth.auto.visit.suffix": - " і введіть код нижче, щоб підключити обліковий запис і використовувати моделі {{provider}} у OpenCode.", - "provider.connect.oauth.auto.confirmationCode": "Код підтвердження", - "provider.connect.toast.connected.title": "{{provider}} підключено", - "provider.connect.toast.connected.description": "Моделі {{provider}} тепер доступні для використання.", - - "provider.custom.title": "Користувацький провайдер", - "provider.custom.description.prefix": "Налаштуйте провайдера, сумісного з OpenAI. Перегляньте ", - "provider.custom.description.link": "документацію з налаштування провайдера", - "provider.custom.description.suffix": ".", - "provider.custom.field.providerID.label": "ID провайдера", - "provider.custom.field.providerID.placeholder": "myprovider", - "provider.custom.field.providerID.description": "Малі літери, цифри, дефіси або підкреслення", - "provider.custom.field.name.label": "Відображувана назва", - "provider.custom.field.name.placeholder": "Мій AI Провайдер", - "provider.custom.field.baseURL.label": "Базовий URL", - "provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1", - "provider.custom.field.apiKey.label": "Ключ API", - "provider.custom.field.apiKey.placeholder": "Ключ API", - "provider.custom.field.apiKey.description": - "Необов'язково. Залиште порожнім, якщо ви керуєте авторизацією через заголовки.", - "provider.custom.models.label": "Моделі", - "provider.custom.models.id.label": "ID", - "provider.custom.models.id.placeholder": "model-id", - "provider.custom.models.name.label": "Назва", - "provider.custom.models.name.placeholder": "Відображувана назва", - "provider.custom.models.remove": "Видалити модель", - "provider.custom.models.add": "Додати модель", - "provider.custom.headers.label": "Заголовки (необов'язково)", - "provider.custom.headers.key.label": "Заголовок", - "provider.custom.headers.key.placeholder": "Назва-Заголовка", - "provider.custom.headers.value.label": "Значення", - "provider.custom.headers.value.placeholder": "значення", - "provider.custom.headers.remove": "Видалити заголовок", - "provider.custom.headers.add": "Додати заголовок", - "provider.custom.error.providerID.required": "ID провайдера обов'язкове", - "provider.custom.error.providerID.format": "Використовуйте малі літери, цифри, дефіси або підкреслення", - "provider.custom.error.providerID.exists": "ID провайдера вже існує", - "provider.custom.error.name.required": "Відображувана назва обов'язкова", - "provider.custom.error.baseURL.required": "Базовий URL обов'язковий", - "provider.custom.error.baseURL.format": "Має починатися з http:// або https://", - "provider.custom.error.required": "Обов'язково", - "provider.custom.error.duplicate": "Дублікат", - - "provider.disconnect.toast.disconnected.title": "{{provider}} відключено", - "provider.disconnect.toast.disconnected.description": "Моделі {{provider}} більше недоступні.", - - "model.tag.free": "Безкоштовно", - "model.tag.latest": "Остання", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "текст", - "model.input.image": "зображення", - "model.input.audio": "аудіо", - "model.input.video": "відео", - "model.input.pdf": "pdf", - "model.tooltip.allows": "Дозволяє: {{inputs}}", - "model.tooltip.reasoning.allowed": "Підтримує мислення", - "model.tooltip.reasoning.none": "Без мислення", - "model.tooltip.context": "Ліміт контексту {{limit}}", - - "common.search.placeholder": "Пошук", - "common.goBack": "Назад", - "common.goForward": "Вперед", - "common.loading": "Завантаження", - "common.loading.ellipsis": "...", - "common.cancel": "Скасувати", - "common.open": "Відкрити", - "common.connect": "Підключити", - "common.disconnect": "Відключити", - "common.continue": "Продовжити", - "common.submit": "Надіслати", - "common.save": "Зберегти", - "common.saving": "Збереження...", - "common.default": "За замовчуванням", - "common.attachment": "вкладення", - - "prompt.placeholder.shell": "Введіть команду термінала... {{example}}", - "prompt.placeholder.normal": 'Запитайте що завгодно... "{{example}}"', - "prompt.placeholder.simple": "Запитайте що завгодно...", - "prompt.placeholder.summarizeComments": "Підсумувати коментарі…", - "prompt.placeholder.summarizeComment": "Підсумувати коментар…", - "prompt.mode.shell": "Команда", - "prompt.mode.normal": "Запит", - "prompt.mode.shell.exit": "esc для виходу", - "session.child.promptDisabled": "Сесії підагентів не можна надсилати запити.", - "session.child.backToParent": "Назад до основної сесії.", - - "prompt.example.1": "Виправити TODO у коді", - "prompt.example.2": "Який технологічний стек цього проєкту?", - "prompt.example.3": "Виправити зламані тести", - "prompt.example.4": "Пояснити, як працює автентифікація", - "prompt.example.5": "Знайти та виправити вразливості безпеки", - "prompt.example.6": "Додати модульні тести для сервісу користувача", - "prompt.example.7": "Рефакторити цю функцію, щоб зробити її більш читабельною", - "prompt.example.8": "Що означає ця помилка?", - "prompt.example.9": "Допоможіть мені налагодити цю проблему", - "prompt.example.10": "Згенерувати документацію API", - "prompt.example.11": "Оптимізувати запити до бази даних", - "prompt.example.12": "Додати валідацію введення", - "prompt.example.13": "Створити новий компонент для...", - "prompt.example.14": "Як розгорнути цей проєкт?", - "prompt.example.15": "Перевірити мій код на відповідність найкращим практикам", - "prompt.example.16": "Додати обробку помилок до цієї функції", - "prompt.example.17": "Пояснити цей регулярний вираз", - "prompt.example.18": "Конвертувати це в TypeScript", - "prompt.example.19": "Додати логування по всьому коду", - "prompt.example.20": "Які залежності застарілі?", - "prompt.example.21": "Допоможіть написати скрипт міграції", - "prompt.example.22": "Реалізувати кешування для цього ендпоінта", - "prompt.example.23": "Додати посторінкову навігацію до цього списку", - "prompt.example.24": "Створити команду CLI для...", - "prompt.example.25": "Як тут працюють змінні середовища?", - - "prompt.popover.emptyResults": "Немає відповідних результатів", - "prompt.popover.emptyCommands": "Немає відповідних команд", - "prompt.dropzone.label": "Перетягніть сюди зображення, PDF або текстові файли", - "prompt.dropzone.file.label": "Перетягніть, щоб @згадати файл", - "prompt.slash.badge.custom": "користувацький", - "prompt.slash.badge.skill": "навичка", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "активний", - "prompt.context.includeActiveFile": "Включити активний файл", - "prompt.context.removeActiveFile": "Видалити активний файл з контексту", - "prompt.context.removeFile": "Видалити файл з контексту", - "prompt.action.attachFile": "Додати файли", - "prompt.attachment.remove": "Видалити вкладення", - "prompt.action.send": "Надіслати", - "prompt.action.stop": "Зупинити", - - "prompt.toast.pasteUnsupported.title": "Непідтримуване вкладення", - "prompt.toast.pasteUnsupported.description": "Сюди можна прикріплювати лише зображення, PDF або текстові файли.", - "prompt.toast.modelAgentRequired.title": "Виберіть агента та модель", - "prompt.toast.modelAgentRequired.description": "Виберіть агента та модель перед надсиланням запиту.", - "prompt.toast.worktreeCreateFailed.title": "Не вдалося створити робоче дерево", - "prompt.toast.sessionCreateFailed.title": "Не вдалося створити сесію", - "prompt.toast.shellSendFailed.title": "Не вдалося надіслати команду термінала", - "prompt.toast.commandSendFailed.title": "Не вдалося надіслати команду", - "prompt.toast.promptSendFailed.title": "Не вдалося надіслати запит", - "prompt.toast.promptSendFailed.description": "Не вдалося отримати сесію", - - "dialog.mcp.title": "MCP", - "dialog.mcp.description": "{{enabled}} з {{total}} увімкнено", - "dialog.mcp.empty": "MCP не налаштовано", - - "dialog.lsp.empty": "LSP автоматично виявлені за типами файлів", - "dialog.plugins.empty": "Плагіни налаштовані в opencode.json", - - "mcp.status.connected": "підключено", - "mcp.status.failed": "помилка", - "mcp.status.needs_auth": "потрібна авторизація", - "mcp.status.disabled": "вимкнено", - "mcp.auth.clickToAuthenticate": "Натисніть для автентифікації", - - "dialog.fork.empty": "Немає повідомлень для відгалуження", - - "dialog.directory.search.placeholder": "Пошук папок", - "dialog.directory.empty": "Папок не знайдено", - "dialog.directory.action.selectFile": "Вибрати файл", - "dialog.directory.action.selectFolder": "Вибрати папку", - "dialog.directory.root": "Корінь", - "dialog.directory.parent": "Батьківська папка", - "dialog.directory.readError": "Не вдалося прочитати цю папку", - - "app.server.unreachable": "Не вдалося досягти {{server}}", - "app.server.retrying": "Автоматичне повторення...", - "app.server.otherServers": "Інші сервери", - - "dialog.server.title": "Сервери", - "dialog.server.description": "Перемкніть сервер OpenCode, до якого підключається ця програма.", - "dialog.server.search.placeholder": "Пошук серверів", - "dialog.server.empty": "Ще немає серверів", - "dialog.server.add.title": "Додати сервер", - "dialog.server.add.url": "Адреса сервера", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "Не вдалося підключитися до сервера", - "dialog.server.add.checking": "Перевірка...", - "dialog.server.add.button": "Додати сервер", - "dialog.server.add.name": "Назва сервера (необов'язково)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "Ім'я користувача (необов'язково)", - "dialog.server.add.usernamePlaceholder": "ім'я користувача", - "dialog.server.add.password": "Пароль (необов'язково)", - "dialog.server.add.passwordPlaceholder": "пароль", - "dialog.server.edit.title": "Редагувати сервер", - "dialog.server.default.title": "Сервер за замовчуванням", - "dialog.server.default.description": - "Підключатися до цього сервера під час запуску програми замість запуску локального сервера. Потребує перезапуску.", - "dialog.server.default.none": "Сервер не вибрано", - "dialog.server.default.set": "Встановити поточний сервер як сервер за замовчуванням", - "dialog.server.default.clear": "Очистити", - "dialog.server.action.remove": "Видалити сервер", - - "dialog.server.menu.edit": "Редагувати", - "dialog.server.menu.default": "Встановити за замовчуванням", - "dialog.server.menu.defaultRemove": "Видалити за замовчуванням", - "dialog.server.menu.delete": "Видалити", - "dialog.server.current": "Поточний сервер", - "dialog.server.status.default": "За замовчуванням", - "server.row.noUsername": "без імені користувача", - - "dialog.project.edit.title": "Редагувати проєкт", - "dialog.project.edit.name": "Назва", - "dialog.project.edit.icon": "Іконка", - "dialog.project.edit.icon.alt": "Іконка проєкту", - "dialog.project.edit.icon.hint": "Натисніть або перетягніть зображення", - "dialog.project.edit.icon.recommended": "Рекомендовано: 128x128px", - "dialog.project.edit.color": "Колір", - "dialog.project.edit.color.select": "Вибрати колір {{color}}", - "dialog.project.edit.worktree.startup": "Скрипт запуску робочої області", - "dialog.project.edit.worktree.startup.description": "Виконується після створення нової робочої області (worktree).", - "dialog.project.edit.worktree.startup.placeholder": "напр. bun install", - - "dialog.releaseNotes.action.getStarted": "Розпочати", - "dialog.releaseNotes.action.next": "Далі", - "dialog.releaseNotes.action.hideFuture": "Не показувати це в майбутньому", - "dialog.releaseNotes.media.alt": "Попередній перегляд релізу", - - "context.breakdown.title": "Розподіл контексту", - "context.breakdown.note": - 'Приблизний розподіл вхідних токенів. "Інше" включає визначення інструментів і накладні витрати.', - "context.breakdown.system": "Система", - "context.breakdown.user": "Користувач", - "context.breakdown.assistant": "Асистент", - "context.breakdown.tool": "Виклики інструментів", - "context.breakdown.other": "Інше", - - "context.systemPrompt.title": "Системний запит", - "context.rawMessages.title": "Сировинні повідомлення", - - "context.stats.session": "Сесія", - "context.stats.messages": "Повідомлення", - "context.stats.provider": "Провайдер", - "context.stats.model": "Модель", - "context.stats.limit": "Ліміт контексту", - "context.stats.totalTokens": "Всього токенів", - "context.stats.usage": "Використання", - "context.stats.inputTokens": "Вхідні токени", - "context.stats.outputTokens": "Вихідні токени", - "context.stats.reasoningTokens": "Токени мислення", - "context.stats.cacheTokens": "Токени кешу (читання/запис)", - "context.stats.userMessages": "Повідомлення користувача", - "context.stats.assistantMessages": "Повідомлення асистента", - "context.stats.totalCost": "Загальна вартість", - "context.stats.sessionCreated": "Сесію створено", - "context.stats.lastActivity": "Остання активність", - - "context.usage.tokens": "Токени", - "context.usage.usage": "Використання", - "context.usage.cost": "Вартість", - "context.usage.clickToView": "Натисніть, щоб переглянути контекст", - "context.usage.view": "Переглянути використання контексту", - - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.uk": "Українська", - "language.th": "ไทย", - "language.tr": "Türkçe", - - "toast.language.title": "Мова", - "toast.language.description": "Перемкнено на {{language}}", - - "toast.theme.title": "Тему змінено", - "toast.scheme.title": "Кольорова схема", - - "toast.workspace.enabled.title": "Робочі області увімкнено", - "toast.workspace.enabled.description": "Кілька робочих дерев тепер відображаються на бічній панелі", - "toast.workspace.disabled.title": "Робочі області вимкнено", - "toast.workspace.disabled.description": "Тільки головне робоче дерево відображається на бічній панелі", - - "toast.permissions.autoaccept.on.title": "Автоматичне прийняття дозволів", - "toast.permissions.autoaccept.on.description": "Запити дозволів будуть автоматично схвалюватися", - "toast.permissions.autoaccept.off.title": "Автоматичне прийняття дозволів зупинено", - "toast.permissions.autoaccept.off.description": "Запити дозволів вимагатимуть схвалення", - - "toast.model.none.title": "Модель не вибрано", - "toast.model.none.description": "Підключіть провайдера, щоб підсумувати цю сесію", - - "toast.file.loadFailed.title": "Не вдалося завантажити файл", - "toast.file.listFailed.title": "Не вдалося отримати список файлів", - - "toast.context.noLineSelection.title": "Не вибрано рядків", - "toast.context.noLineSelection.description": "Спочатку виберіть діапазон рядків у вкладці файлу.", - - "toast.session.share.copyFailed.title": "Не вдалося скопіювати URL у буфер обміну", - "toast.session.share.success.title": "Сесію опубліковано", - "toast.session.share.success.description": "Посилання скопійовано в буфер обміну!", - "toast.session.share.failed.title": "Не вдалося опублікувати сесію", - "toast.session.share.failed.description": "Під час публікації сесії сталася помилка", - - "toast.session.unshare.success.title": "Поширення сесії припинено", - "toast.session.unshare.success.description": "Поширення сесії успішно припинено!", - "toast.session.unshare.failed.title": "Не вдалося припинити поширення сесії", - "toast.session.unshare.failed.description": "Під час припинення поширення сесії сталася помилка", - - "toast.session.listFailed.title": "Не вдалося завантажити сесії для {{project}}", - "toast.project.reloadFailed.title": "Не вдалося перезавантажити {{project}}", - - "toast.update.title": "Доступне оновлення", - "toast.update.description": "Нова версія OpenCode ({{version}}) тепер доступна для встановлення.", - "toast.update.action.installRestart": "Встановити та перезапустити", - "toast.update.action.notYet": "Не зараз", - - "error.page.title": "Щось пішло не так", - "error.page.description": "Під час завантаження програми сталася помилка.", - "error.page.details.label": "Деталі помилки", - "error.page.action.restart": "Перезапустити", - "error.page.action.report": "Повідомити про помилку", - "error.page.action.reported": "Помилку повідомлено", - "error.page.action.checking": "Перевірка...", - "error.page.action.checkUpdates": "Перевірити оновлення", - "error.page.action.updateTo": "Оновити до {{version}}", - "error.page.circular": "[Циклічне]", - "error.page.report.prefix": "Будь ласка, повідомте про цю помилку команді OpenCode", - "error.page.report.discord": "на Discord", - "error.page.version": "Версія: {{version}}", - - "error.dev.rootNotFound": - "Кореневий елемент не знайдено. Ви забули додати його до index.html? Або, можливо, атрибут id було написано з помилкою?", - - "error.serverSync.connectFailed": "Не вдалося підключитися до сервера. Чи працює сервер за адресою `{{url}}`?", - "error.serverSDK.noServerAvailable": "Сервер недоступний", - "error.serverSDK.serverNotAvailable": "Сервер недоступний", - "error.childStore.persistedCacheCreateFailed": "Не вдалося створити постійний кеш", - "error.childStore.persistedProjectMetadataCreateFailed": "Не вдалося створити постійні метадані проєкту", - "error.childStore.persistedProjectIconCreateFailed": "Не вдалося створити постійну іконку проєкту", - "error.childStore.storeCreateFailed": "Не вдалося створити сховище", - "directory.error.invalidUrl": "Недійсний каталог у URL.", - - "error.chain.unknown": "Невідома помилка", - "error.server.invalidConfiguration": "Недійсна конфігурація", - "error.chain.causedBy": "Причина:", - "error.chain.apiError": "Помилка API", - "error.chain.status": "Статус: {{status}}", - "error.chain.retryable": "Повторювано: {{retryable}}", - "error.chain.responseBody": "Тіло відповіді:\n{{body}}", - "error.chain.didYouMean": "Можливо, ви мали на увазі: {{suggestions}}", - "error.chain.modelNotFound": "Модель не знайдено: {{provider}}/{{model}}", - "error.chain.checkConfig": "Перевірте назви провайдерів/моделей у конфігурації (opencode.json)", - "error.chain.mcpFailed": - 'Сервер MCP "{{name}}" не працює. Зверніть увагу, OpenCode ще не підтримує автентифікацію MCP.', - "error.chain.providerAuthFailed": "Автентифікація провайдера не вдалася ({{provider}}): {{message}}", - "error.chain.providerInitFailed": - 'Не вдалося ініціалізувати провайдера "{{provider}}". Перевірте облікові дані та конфігурацію.', - "error.chain.configJsonInvalid": "Файл конфігурації {{path}} не є дійсним JSON(C)", - "error.chain.configJsonInvalidWithMessage": "Файл конфігурації {{path}} не є дійсним JSON(C): {{message}}", - "error.chain.configDirectoryTypo": - 'Каталог "{{dir}}" у {{path}} недійсний. Перейменуйте каталог на "{{suggestion}}" або видаліть його. Це поширена помилка.', - "error.chain.configFrontmatterError": "Не вдалося розібрати frontmatter у {{path}}:\n{{message}}", - "error.chain.configInvalid": "Файл конфігурації {{path}} недійсний", - "error.chain.configInvalidWithMessage": "Файл конфігурації {{path}} недійсний: {{message}}", - - "notification.permission.title": "Потрібен дозвіл", - "notification.permission.description": "{{sessionTitle}} у {{projectName}} потребує дозволу", - "notification.question.title": "Запитання", - "notification.question.description": "{{sessionTitle}} у {{projectName}} має запитання", - "notification.action.goToSession": "Перейти до сесії", - - "notification.session.responseReady.title": "Відповідь готова", - "notification.session.error.title": "Помилка сесії", - "notification.session.error.fallbackDescription": "Сталася помилка", - - "home.recentProjects": "Нещодавні проєкти", - "home.empty.title": "Немає нещодавніх проєктів", - "home.empty.description": "Почніть, відкривши локальний проєкт", - - "session.tab.session": "Сесія", - "session.tab.review": "Огляд", - "session.tab.context": "Контекст", - "session.panel.reviewAndFiles": "Огляд і файли", - "session.review.filesChanged": "Змінено файлів: {{count}}", - "session.review.change.one": "Зміна", - "session.review.change.other": "Зміни", - "session.review.loadingChanges": "Завантаження змін...", - "session.review.empty": "У цій сесії ще немає змін", - "session.review.noVcs": "Систему контролю версій Git не виявлено, зміни не відображаються", - "session.review.noVcs.createGit.title": "Створити Git-репозиторій", - "session.review.noVcs.createGit.description": "Відстежуйте, переглядайте та скасовуйте зміни в цьому проєкті", - "session.review.noVcs.createGit.actionLoading": "Створення Git-репозиторію...", - "session.review.noVcs.createGit.action": "Створити Git-репозиторій", - "session.review.noSnapshot": "Відстеження знімків вимкнено в конфігурації, тому зміни сесії недоступні", - "session.review.noChanges": "Немає змін", - "session.review.noUncommittedChanges": "Ще немає незафіксованих змін", - "session.review.noBranchChanges": "Ще немає змін у гілці", - - "session.files.selectToOpen": "Виберіть файл для відкриття", - "session.files.all": "Усі файли", - "session.files.empty": "Немає файлів", - "session.files.binaryContent": "Бінарний файл (вміст не може бути відображено)", - - "session.messages.renderEarlier": "Відобразити раніші повідомлення", - "session.messages.loadingEarlier": "Завантаження раніших повідомлень...", - "session.messages.loadEarlier": "Завантажити раніші повідомлення", - "session.messages.loading": "Завантаження повідомлень...", - "session.messages.jumpToLatest": "Перейти до останніх", - - "session.context.addToContext": "Додати {{selection}} до контексту", - "session.todo.title": "Завдання", - "session.todo.collapse": "Згорнути", - "session.todo.expand": "Розгорнути", - "session.todo.progress": "Виконано {{done}} з {{total}} завдань", - "session.question.progress": "{{current}} з {{total}} запитань", - "session.followupDock.summary.one": "{{count}} повідомлення в черзі", - "session.followupDock.summary.other": "{{count}} повідомлень у черзі", - "session.followupDock.sendNow": "Надіслати зараз", - "session.followupDock.edit": "Редагувати", - "session.followupDock.collapse": "Згорнути повідомлення в черзі", - "session.followupDock.expand": "Розгорнути повідомлення в черзі", - "session.revertDock.summary.one": "{{count}} скасоване повідомлення", - "session.revertDock.summary.other": "{{count}} скасованих повідомлень", - "session.revertDock.collapse": "Згорнути скасовані повідомлення", - "session.revertDock.expand": "Розгорнути скасовані повідомлення", - "session.revertDock.restore": "Відновити повідомлення", - - "session.new.title": "Створити що завгодно", - "session.new.worktree.main": "Основна гілка", - "session.new.worktree.mainWithBranch": "Основна гілка ({{branch}})", - "session.new.worktree.create": "Створити нове робоче дерево", - "session.new.lastModified": "Востаннє змінено", - - "session.header.search.placeholder": "Пошук {{project}}", - "session.header.searchFiles": "Пошук файлів", - "session.header.openIn": "Відкрити в", - "session.header.open.action": "Відкрити {{app}}", - "session.header.open.ariaLabel": "Відкрити в {{app}}", - "session.header.open.menu": "Параметри відкриття", - "session.header.open.copyPath": "Копіювати шлях", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "Провідник файлів", - "session.header.open.fileManager": "Файловий менеджер", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "Термінал", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - - "status.popover.trigger": "Статус", - "status.popover.ariaLabel": "Конфігурації серверів", - "status.popover.tab.servers": "Сервери", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "Плагіни", - "status.popover.action.manageServers": "Керувати серверами", - - "session.share.popover.title": "Опублікувати в інтернеті", - "session.share.popover.description.shared": - "Ця сесія є публічною в інтернеті. Вона доступна будь-кому за посиланням.", - "session.share.popover.description.unshared": - "Опублікуйте сесію публічно в інтернеті. Вона буде доступна будь-кому за посиланням.", - "session.share.action.share": "Поділитися", - "session.share.action.publish": "Опублікувати", - "session.share.action.publishing": "Публікація...", - "session.share.action.unpublish": "Скасувати публікацію", - "session.share.action.unpublishing": "Скасування публікації...", - "session.share.action.view": "Переглянути", - "session.share.copy.copied": "Скопійовано", - "session.share.copy.copyLink": "Копіювати посилання", - - "lsp.tooltip.none": "Немає серверів LSP", - "lsp.label.connected": "{{count}} LSP", - - "prompt.loading": "Завантаження запиту...", - "terminal.loading": "Завантаження термінала...", - "terminal.title": "Термінал", - "terminal.title.numbered": "Термінал {{number}}", - "terminal.close": "Закрити термінал", - "terminal.connectionLost.title": "З'єднання втрачено", - "terminal.connectionLost.abnormalClose": "WebSocket закрито аномально: {{code}}", - "terminal.connectionLost.description": - "З'єднання з терміналом було перервано. Це може статися під час перезапуску сервера.", - - "common.closeTab": "Закрити вкладку", - "common.dismiss": "Відхилити", - "common.moreCountSuffix": " (ще {{count}})", - "common.requestFailed": "Запит не виконано", - "common.moreOptions": "Більше опцій", - "common.learnMore": "Дізнатися більше", - "common.rename": "Перейменувати", - "common.reset": "Скинути", - "common.archive": "Архівувати", - "common.delete": "Видалити", - "common.close": "Закрити", - "common.edit": "Редагувати", - "common.loadMore": "Завантажити більше", - "common.key.esc": "ESC", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "Пробіл", - "common.key.backspace": "Backspace", - "common.key.enter": "Enter", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "невідомо", - - "common.time.justNow": "Щойно", - "common.time.minutesAgo.short": "{{count}} хв тому", - "common.time.hoursAgo.short": "{{count}} год тому", - "common.time.daysAgo.short": "{{count}} дн тому", - - "sidebar.menu.toggle": "Перемкнути меню", - "sidebar.nav.projectsAndSessions": "Проєкти та сесії", - "sidebar.settings": "Налаштування", - "sidebar.help": "Довідка", - "sidebar.workspaces.enable": "Увімкнути робочі області", - "sidebar.workspaces.disable": "Вимкнути робочі області", - "sidebar.gettingStarted.title": "Початок роботи", - "sidebar.gettingStarted.line1": "OpenCode містить безкоштовні моделі, тому ви можете почати негайно.", - "sidebar.gettingStarted.line2": - "Підключіть будь-якого провайдера, щоб використовувати моделі, включаючи Claude, GPT, Gemini тощо.", - "sidebar.project.recentSessions": "Нещодавні сесії", - "sidebar.project.viewAllSessions": "Переглянути всі сесії", - "sidebar.project.clearNotifications": "Очистити сповіщення", - "sidebar.empty.title": "Немає відкритих проєктів", - "sidebar.empty.description": "Відкрийте проєкт, щоб почати", - - "debugBar.ariaLabel": "Діагностика продуктивності розробки", - "debugBar.na": "н/д", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": - "Останній завершений перехід маршруту, що торкається сторінки сесії, виміряний від запуску маршрутизатора до першого відображення після стабілізації.", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "Поточна кількість кадрів за секунду за останні 5 секунд.", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "Найгірший час кадру за останні 5 секунд.", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "Кадри понад 32 мс за останні 5 секунд.", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "Заблокований час і кількість довгих завдань за останні 5 секунд. Макс. завдання: {{max}}.", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "Найгірша спостережувана затримка введення за останні 5 секунд.", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": - "Приблизна тривалість взаємодії за останні 5 секунд. Це схоже на INP, а не на офіційний Web Vitals INP.", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "Сукупний зсув макета за весь час роботи програми.", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "Використана купа JS проти ліміту купи. Тільки Chromium.", - "debugBar.mem.tip": "Використана купа JS проти ліміту купи. {{used}} з {{limit}}.", - - "app.name.desktop": "OpenCode Desktop", - - "settings.section.desktop": "Робочий стіл", - "settings.section.server": "Сервер", - "settings.tab.general": "Загальні", - "settings.tab.shortcuts": "Скорочення", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "Інтеграція WSL", - "settings.desktop.wsl.description": "Запускати сервер OpenCode всередині WSL на Windows.", - - "settings.general.section.appearance": "Зовнішній вигляд", - "settings.general.section.advanced": "Додатково", - "settings.general.section.notifications": "Системні сповіщення", - "settings.general.section.updates": "Оновлення", - "settings.general.section.sounds": "Звукові ефекти", - "settings.general.section.feed": "Стрічка", - "settings.general.section.display": "Дисплей", - - "settings.general.row.language.title": "Мова", - "settings.general.row.language.description": "Змінити мову інтерфейсу OpenCode", - "settings.general.row.shell.title": "Командна оболонка термінала", - "settings.general.row.shell.description": - "Виберіть оболонку для термінала. Сумісні оболонки також використовуються для викликів інструментів агента.", - "settings.general.row.shell.autoDefault": "Авто (за замовчуванням)", - "settings.general.row.shell.terminalOnly": "тільки термінал", - "settings.general.row.appearance.title": "Зовнішній вигляд", - "settings.general.row.appearance.description": "Налаштуйте вигляд OpenCode на вашому пристрої", - "settings.general.row.colorScheme.title": "Кольорова схема", - "settings.general.row.colorScheme.description": "Виберіть, чи OpenCode використовує системну, світлу або темну тему", - "settings.general.row.theme.title": "Тема", - "settings.general.row.theme.description": "Налаштуйте тему OpenCode.", - "settings.general.row.font.title": "Шрифт коду", - "settings.general.row.font.description": "Налаштуйте шрифт, який використовується в блоках коду", - "settings.general.row.terminalFont.title": "Шрифт термінала", - "settings.general.row.terminalFont.description": "Налаштуйте шрифт, який використовується в терміналі", - "settings.general.row.uiFont.title": "Шрифт інтерфейсу", - "settings.general.row.uiFont.description": "Налаштуйте шрифт, який використовується в інтерфейсі", - "settings.general.row.followup.title": "Поведінка продовження", - "settings.general.row.followup.description": "Виберіть, чи продовження виконується негайно, чи чекає в черзі", - "settings.general.row.followup.option.queue": "Черга", - "settings.general.row.followup.option.steer": "Керування", - "settings.general.row.showFileTree.title": "Дерево файлів", - "settings.general.row.showFileTree.description": "Показувати панель дерева файлів у сесіях", - "settings.general.row.showNavigation.title": "Елементи навігації", - "settings.general.row.showNavigation.description": "Показувати кнопки назад і вперед у заголовку робочого столу", - "settings.general.row.showSearch.title": "Палітра команд", - "settings.general.row.showSearch.description": "Показувати кнопку пошуку та палітри команд у заголовку", - "settings.general.row.showTerminal.title": "Термінал", - "settings.general.row.showTerminal.description": "Показувати кнопку термінала в заголовку робочого столу", - "settings.general.row.showStatus.title": "Статус сервера", - "settings.general.row.showStatus.description": "Показувати кнопку статусу сервера в заголовку", - "settings.general.row.reasoningSummaries.title": "Показувати підсумки мислення", - "settings.general.row.reasoningSummaries.description": "Відображати підсумки мислення моделі на часовій шкалі", - "settings.general.row.shellToolPartsExpanded.title": "Розгортати частини інструменту оболонки", - "settings.general.row.shellToolPartsExpanded.description": - "Показувати частини інструменту оболонки розгорнутими за замовчуванням на часовій шкалі", - "settings.general.row.editToolPartsExpanded.title": "Розгортати частини інструменту редагування", - "settings.general.row.editToolPartsExpanded.description": - "Показувати частини інструментів редагування, запису та патчів розгорнутими за замовчуванням на часовій шкалі", - - "settings.general.row.wayland.title": "Використовувати нативний Wayland", - "settings.general.row.wayland.description": "Вимкнути резервний X11 на Wayland. Потребує перезапуску.", - "settings.general.row.wayland.tooltip": - "На Linux з моніторами з різною частотою оновлення нативний Wayland може бути більш стабільним.", - - "settings.general.row.releaseNotes.title": "Нотатки до релізу", - "settings.general.row.releaseNotes.description": 'Показувати спливаючі вікна "Що нового" після оновлень', - - "settings.updates.row.startup.title": "Перевіряти оновлення під час запуску", - "settings.updates.row.startup.description": "Автоматично перевіряти наявність оновлень під час запуску OpenCode", - "settings.updates.row.check.title": "Перевірити оновлення", - "settings.updates.row.check.description": "Вручну перевірити наявність оновлень і встановити, якщо доступні", - "settings.updates.action.checkNow": "Перевірити зараз", - "settings.updates.action.checking": "Перевірка...", - "settings.updates.toast.latest.title": "У вас актуальна версія", - "settings.updates.toast.latest.description": "Ви використовуєте останню версію OpenCode.", - "sound.option.none": "Немає", - "sound.option.alert01": "Alert 01", - "sound.option.alert02": "Alert 02", - "sound.option.alert03": "Alert 03", - "sound.option.alert04": "Alert 04", - "sound.option.alert05": "Alert 05", - "sound.option.alert06": "Alert 06", - "sound.option.alert07": "Alert 07", - "sound.option.alert08": "Alert 08", - "sound.option.alert09": "Alert 09", - "sound.option.alert10": "Alert 10", - "sound.option.bipbop01": "Bip-bop 01", - "sound.option.bipbop02": "Bip-bop 02", - "sound.option.bipbop03": "Bip-bop 03", - "sound.option.bipbop04": "Bip-bop 04", - "sound.option.bipbop05": "Bip-bop 05", - "sound.option.bipbop06": "Bip-bop 06", - "sound.option.bipbop07": "Bip-bop 07", - "sound.option.bipbop08": "Bip-bop 08", - "sound.option.bipbop09": "Bip-bop 09", - "sound.option.bipbop10": "Bip-bop 10", - "sound.option.staplebops01": "Staplebops 01", - "sound.option.staplebops02": "Staplebops 02", - "sound.option.staplebops03": "Staplebops 03", - "sound.option.staplebops04": "Staplebops 04", - "sound.option.staplebops05": "Staplebops 05", - "sound.option.staplebops06": "Staplebops 06", - "sound.option.staplebops07": "Staplebops 07", - "sound.option.nope01": "Nope 01", - "sound.option.nope02": "Nope 02", - "sound.option.nope03": "Nope 03", - "sound.option.nope04": "Nope 04", - "sound.option.nope05": "Nope 05", - "sound.option.nope06": "Nope 06", - "sound.option.nope07": "Nope 07", - "sound.option.nope08": "Nope 08", - "sound.option.nope09": "Nope 09", - "sound.option.nope10": "Nope 10", - "sound.option.nope11": "Nope 11", - "sound.option.nope12": "Nope 12", - "sound.option.yup01": "Yup 01", - "sound.option.yup02": "Yup 02", - "sound.option.yup03": "Yup 03", - "sound.option.yup04": "Yup 04", - "sound.option.yup05": "Yup 05", - "sound.option.yup06": "Yup 06", - - "settings.general.notifications.agent.title": "Агент", - "settings.general.notifications.agent.description": - "Показувати системне сповіщення, коли агент завершує роботу або потребує уваги", - "settings.general.notifications.permissions.title": "Дозволи", - "settings.general.notifications.permissions.description": "Показувати системне сповіщення, коли потрібен дозвіл", - "settings.general.notifications.errors.title": "Помилки", - "settings.general.notifications.errors.description": "Показувати системне сповіщення, коли виникає помилка", - - "settings.general.sounds.agent.title": "Агент", - "settings.general.sounds.agent.description": "Відтворювати звук, коли агент завершує роботу або потребує уваги", - "settings.general.sounds.permissions.title": "Дозволи", - "settings.general.sounds.permissions.description": "Відтворювати звук, коли потрібен дозвіл", - "settings.general.sounds.errors.title": "Помилки", - "settings.general.sounds.errors.description": "Відтворювати звук, коли виникає помилка", - - "settings.shortcuts.title": "Скорочення клавіш", - "settings.shortcuts.reset.button": "Скинути до стандартних", - "settings.shortcuts.reset.toast.title": "Скорочення скинуто", - "settings.shortcuts.reset.toast.description": "Скорочення клавіш були скинуті до стандартних.", - "settings.shortcuts.conflict.title": "Скорочення вже використовується", - "settings.shortcuts.conflict.description": "{{keybind}} вже призначено для {{titles}}.", - "settings.shortcuts.unassigned": "Не призначено", - "settings.shortcuts.pressKeys": "Натисніть клавіші", - "settings.shortcuts.search.placeholder": "Пошук скорочень", - "settings.shortcuts.search.empty": "Скорочень не знайдено", - - "settings.shortcuts.group.general": "Загальні", - "settings.shortcuts.group.session": "Сесія", - "settings.shortcuts.group.navigation": "Навігація", - "settings.shortcuts.group.modelAndAgent": "Модель та агент", - "settings.shortcuts.group.terminal": "Термінал", - "settings.shortcuts.group.prompt": "Запит", - - "settings.providers.title": "Провайдери", - "settings.providers.description": "Налаштування провайдерів будуть доступні тут.", - "settings.providers.section.connected": "Підключені провайдери", - "settings.providers.connected.empty": "Немає підключених провайдерів", - "settings.providers.connected.environmentDescription": "Підключено зі змінних середовища", - "settings.providers.section.popular": "Популярні провайдери", - "settings.providers.custom.description": "Додайте провайдера, сумісного з OpenAI, за базовим URL.", - "settings.providers.tag.environment": "Середовище", - "settings.providers.tag.config": "Конфігурація", - "settings.providers.tag.custom": "Користувацький", - "settings.providers.tag.other": "Інше", - "settings.models.title": "Моделі", - "settings.models.description": "Налаштування моделей будуть доступні тут.", - "settings.agents.title": "Агенти", - "settings.agents.description": "Налаштування агентів будуть доступні тут.", - "settings.commands.title": "Команди", - "settings.commands.description": "Налаштування команд будуть доступні тут.", - "settings.mcp.title": "MCP", - "settings.mcp.description": "Налаштування MCP будуть доступні тут.", - - "settings.permissions.title": "Дозволи", - "settings.permissions.description": "Керуйте тим, які інструменти сервер може використовувати за замовчуванням.", - "settings.permissions.section.tools": "Інструменти", - "settings.permissions.toast.updateFailed.title": "Не вдалося оновити дозволи", - - "settings.permissions.action.allow": "Дозволити", - "settings.permissions.action.ask": "Запитувати", - "settings.permissions.action.deny": "Заборонити", - - "settings.permissions.tool.read.title": "Читання", - "settings.permissions.tool.read.description": "Читання файлу (відповідає шляху файлу)", - "settings.permissions.tool.edit.title": "Редагування", - "settings.permissions.tool.edit.description": "Зміна файлів, включаючи редагування, запис і патчі", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "Зіставлення файлів за допомогою glob-шаблонів", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "Пошук вмісту файлів за допомогою регулярних виразів", - "settings.permissions.tool.list.title": "Список", - "settings.permissions.tool.list.description": "Список файлів у каталозі", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "Запуск команд оболонки", - "settings.permissions.tool.task.title": "Завдання", - "settings.permissions.tool.task.description": "Запуск підагентів", - "settings.permissions.tool.skill.title": "Навичка", - "settings.permissions.tool.skill.description": "Завантаження навички за назвою", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "Виконання запитів мовного сервера", - "settings.permissions.tool.todowrite.title": "Todo Write", - "settings.permissions.tool.todowrite.description": "Оновлення списку завдань", - "settings.permissions.tool.webfetch.title": "Web Fetch", - "settings.permissions.tool.webfetch.description": "Отримання вмісту з URL", - "settings.permissions.tool.websearch.title": "Web Search", - "settings.permissions.tool.websearch.description": "Пошук в інтернеті", - "settings.permissions.tool.external_directory.title": "Зовнішній каталог", - "settings.permissions.tool.external_directory.description": "Доступ до файлів за межами каталогу проєкту", - "settings.permissions.tool.doom_loop.title": "Цикл приреченості", - "settings.permissions.tool.doom_loop.description": - "Виявлення повторюваних викликів інструментів з однаковими вхідними даними", - - "session.delete.failed.title": "Не вдалося видалити сесію", - "session.delete.title": "Видалити сесію", - "session.delete.confirm": 'Видалити сесію "{{name}}"?', - "session.delete.button": "Видалити сесію", - - "workspace.new": "Нова робоча область", - "workspace.type.local": "локальна", - "workspace.type.sandbox": "пісочниця", - "workspace.create.failed.title": "Не вдалося створити робочу область", - "workspace.delete.failed.title": "Не вдалося видалити робочу область", - "workspace.resetting.title": "Скидання робочої області", - "workspace.resetting.description": "Це може зайняти хвилину.", - "workspace.reset.failed.title": "Не вдалося скинути робочу область", - "workspace.reset.success.title": "Робочу область скинуто", - "workspace.reset.success.description": "Робоча область тепер відповідає гілці за замовчуванням.", - "workspace.error.stillPreparing": "Робоча область все ще готується", - "workspace.status.checking": "Перевірка незлитих змін...", - "workspace.status.error": "Не вдалося перевірити статус git.", - "workspace.status.clean": "Незлитих змін не виявлено.", - "workspace.status.dirty": "Виявлено незлиті зміни в цій робочій області.", - "workspace.delete.title": "Видалити робочу область", - "workspace.delete.confirm": 'Видалити робочу область "{{name}}"?', - "workspace.delete.button": "Видалити робочу область", - "workspace.reset.title": "Скинути робочу область", - "workspace.reset.confirm": 'Скинути робочу область "{{name}}"?', - "workspace.reset.button": "Скинути робочу область", - "workspace.reset.archived.none": "Жодна активна сесія не буде заархівована.", - "workspace.reset.archived.one": "1 сесію буде заархівовано.", - "workspace.reset.archived.many": "{{count}} сесій буде заархівовано.", - "workspace.reset.note": "Це скине робочу область, щоб вона відповідала гілці за замовчуванням.", -} diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts deleted file mode 100644 index 15d873ee04..0000000000 --- a/packages/app/src/i18n/zh.ts +++ /dev/null @@ -1,936 +0,0 @@ -import { dict as en } from "./en" - -type Keys = keyof typeof en - -export const dict = { - "command.category.suggested": "建议", - "command.category.view": "视图", - "command.category.project": "项目", - "command.category.provider": "提供商", - "command.category.server": "服务器", - "command.category.session": "会话", - "command.category.theme": "主题", - "command.category.language": "语言", - "command.category.file": "文件", - "command.category.context": "上下文", - "command.category.terminal": "终端", - "command.category.model": "模型", - "command.category.mcp": "MCP", - "command.category.agent": "智能体", - "command.category.permissions": "权限", - "command.category.workspace": "工作区", - "command.category.settings": "设置", - - "theme.scheme.system": "系统", - "theme.scheme.light": "浅色", - "theme.scheme.dark": "深色", - - "command.sidebar.toggle": "切换侧边栏", - - "command.project.open": "打开项目", - - "command.provider.connect": "连接提供商", - - "command.server.switch": "切换服务器", - - "command.settings.open": "打开设置", - - "command.session.previous": "上一个会话", - "command.session.next": "下一个会话", - "command.session.previous.unseen": "上一个未读会话", - "command.session.next.unseen": "下一个未读会话", - "command.session.archive": "归档会话", - - "command.palette": "命令面板", - - "command.theme.cycle": "切换主题", - "command.theme.set": "使用主题:{{theme}}", - "command.theme.scheme.cycle": "切换配色方案", - "command.theme.scheme.set": "使用配色方案:{{scheme}}", - - "command.language.cycle": "切换语言", - "command.language.set": "使用语言:{{language}}", - - "command.session.new": "新建会话", - - "command.file.open": "打开文件", - - "command.tab.close": "关闭标签页", - - "command.context.addSelection": "将所选内容添加到上下文", - "command.context.addSelection.description": "添加当前文件中选中的行", - - "command.input.focus": "聚焦输入框", - - "command.terminal.toggle": "切换终端", - - "command.fileTree.toggle": "切换文件树", - - "command.review.toggle": "切换审查", - - "command.terminal.new": "新建终端", - "command.terminal.new.description": "创建新的终端标签页", - - "command.steps.toggle": "切换步骤", - "command.steps.toggle.description": "显示或隐藏当前消息的步骤", - - "command.message.previous": "上一条消息", - "command.message.previous.description": "跳转到上一条用户消息", - "command.message.next": "下一条消息", - "command.message.next.description": "跳转到下一条用户消息", - - "command.model.choose": "选择模型", - "command.model.choose.description": "选择不同的模型", - - "command.mcp.toggle": "切换 MCPs", - "command.mcp.toggle.description": "切换 MCPs", - - "command.agent.cycle": "切换智能体", - "command.agent.cycle.description": "切换到下一个智能体", - "command.agent.cycle.reverse": "反向切换智能体", - "command.agent.cycle.reverse.description": "切换到上一个智能体", - - "command.model.variant.cycle": "切换思考强度", - "command.model.variant.cycle.description": "切换到下一个强度等级", - - "command.prompt.mode.shell": "Shell", - "command.prompt.mode.normal": "Prompt", - - "command.permissions.autoaccept.enable": "自动接受权限", - "command.permissions.autoaccept.disable": "停止自动接受权限", - - "command.workspace.toggle": "切换工作区", - "command.workspace.toggle.description": "在侧边栏启用或禁用多个工作区", - - "command.session.undo": "撤销", - "command.session.undo.description": "撤销上一条消息", - "command.session.redo": "重做", - "command.session.redo.description": "重做上一条撤销的消息", - "command.session.compact": "精简会话", - "command.session.compact.description": "总结会话以减少上下文大小", - "command.session.fork": "从消息分叉", - "command.session.fork.description": "从之前的消息创建新会话", - "command.session.share": "分享会话", - "command.session.share.description": "分享此会话并将链接复制到剪贴板", - "command.session.unshare": "取消分享会话", - "command.session.unshare.description": "停止分享此会话", - - "palette.search.placeholder": "搜索文件、命令和会话", - "palette.empty": "未找到结果", - "palette.group.commands": "命令", - "palette.group.files": "文件", - - "dialog.provider.search.placeholder": "搜索提供商", - "dialog.provider.empty": "未找到提供商", - "dialog.provider.group.popular": "热门", - "dialog.provider.group.other": "其他", - "dialog.provider.tag.recommended": "推荐", - "dialog.provider.opencode.note": "使用 OpenCode Zen 或 API 密钥连接", - "dialog.provider.opencode.tagline": "可靠的优化模型", - "dialog.provider.opencodeGo.tagline": "适合所有人的低成本订阅", - "dialog.provider.anthropic.note": "使用 Claude Pro/Max 或 API 密钥连接", - "dialog.provider.copilot.note": "使用 Copilot 或 API 密钥连接", - "dialog.provider.openai.note": "使用 ChatGPT Pro/Plus 或 API 密钥连接", - "dialog.provider.google.note": "使用 Google 账号或 API 密钥连接", - "dialog.provider.openrouter.note": "使用 OpenRouter 账号或 API 密钥连接", - "dialog.provider.vercel.note": "使用 Vercel 账号或 API 密钥连接", - - "dialog.model.select.title": "选择模型", - "dialog.model.search.placeholder": "搜索模型", - "dialog.model.empty": "未找到模型", - "dialog.model.manage": "管理模型", - "dialog.model.manage.description": "自定义模型选择器中显示的模型。", - "dialog.model.manage.provider.toggle": "切换所有 {{provider}} 模型", - "dialog.model.unpaid.freeModels.title": "OpenCode 提供的免费模型", - "dialog.model.unpaid.addMore.title": "从热门提供商添加更多模型", - - "dialog.provider.viewAll": "查看更多提供商", - - "provider.connect.title": "连接 {{provider}}", - "provider.connect.title.anthropicProMax": "使用 Claude Pro/Max 登录", - "provider.connect.selectMethod": "选择 {{provider}} 的登录方式。", - "provider.connect.method.apiKey": "API 密钥", - "provider.connect.status.inProgress": "正在授权...", - "provider.connect.status.waiting": "等待授权...", - "provider.connect.status.failed": "授权失败:{{error}}", - "provider.connect.apiKey.description": - "输入你的 {{provider}} API 密钥以连接帐户,并在 OpenCode 中使用 {{provider}} 模型。", - "provider.connect.apiKey.label": "{{provider}} API 密钥", - "provider.connect.apiKey.placeholder": "API 密钥", - "provider.connect.apiKey.required": "API 密钥为必填项", - "provider.connect.opencodeZen.line1": "OpenCode Zen 为你提供一组精选的可靠优化模型,用于代码智能体。", - "provider.connect.opencodeZen.line2": "只需一个 API 密钥,你就能使用 Claude、GPT、Gemini、GLM 等模型。", - "provider.connect.opencodeZen.visit.prefix": "访问 ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " 获取你的 API 密钥。", - "provider.connect.oauth.code.visit.prefix": "访问 ", - "provider.connect.oauth.code.visit.link": "此链接", - "provider.connect.oauth.code.visit.suffix": " 获取授权码,以连接你的帐户并在 OpenCode 中使用 {{provider}} 模型。", - "provider.connect.oauth.code.label": "{{method}} 授权码", - "provider.connect.oauth.code.placeholder": "授权码", - "provider.connect.oauth.code.required": "授权码为必填项", - "provider.connect.oauth.code.invalid": "授权码无效", - "provider.connect.oauth.auto.visit.prefix": "访问 ", - "provider.connect.oauth.auto.visit.link": "此链接", - "provider.connect.oauth.auto.visit.suffix": " 并输入以下代码,以连接你的帐户并在 OpenCode 中使用 {{provider}} 模型。", - "provider.connect.oauth.auto.confirmationCode": "确认码", - "provider.connect.toast.connected.title": "{{provider}} 已连接", - "provider.connect.toast.connected.description": "现在可以使用 {{provider}} 模型了。", - - "provider.custom.title": "自定义提供商", - "provider.custom.description.prefix": "配置与 OpenAI 兼容的提供商。请查看", - "provider.custom.description.link": "提供商配置文档", - "provider.custom.description.suffix": "。", - "provider.custom.field.providerID.label": "提供商 ID", - "provider.custom.field.providerID.placeholder": "myprovider", - "provider.custom.field.providerID.description": "使用小写字母、数字、连字符或下划线", - "provider.custom.field.name.label": "显示名称", - "provider.custom.field.name.placeholder": "我的 AI 提供商", - "provider.custom.field.baseURL.label": "基础 URL", - "provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1", - "provider.custom.field.apiKey.label": "API 密钥", - "provider.custom.field.apiKey.placeholder": "API 密钥", - "provider.custom.field.apiKey.description": "可选。如果你通过请求头管理认证,可留空。", - "provider.custom.models.label": "模型", - "provider.custom.models.id.label": "ID", - "provider.custom.models.id.placeholder": "model-id", - "provider.custom.models.name.label": "名称", - "provider.custom.models.name.placeholder": "显示名称", - "provider.custom.models.remove": "移除模型", - "provider.custom.models.add": "添加模型", - "provider.custom.headers.label": "请求头(可选)", - "provider.custom.headers.key.label": "请求头", - "provider.custom.headers.key.placeholder": "Header-Name", - "provider.custom.headers.value.label": "值", - "provider.custom.headers.value.placeholder": "value", - "provider.custom.headers.remove": "移除请求头", - "provider.custom.headers.add": "添加请求头", - "provider.custom.error.providerID.required": "提供商 ID 为必填项", - "provider.custom.error.providerID.format": "请使用小写字母、数字、连字符或下划线", - "provider.custom.error.providerID.exists": "该提供商 ID 已存在", - "provider.custom.error.name.required": "显示名称为必填项", - "provider.custom.error.baseURL.required": "基础 URL 为必填项", - "provider.custom.error.baseURL.format": "必须以 http:// 或 https:// 开头", - "provider.custom.error.required": "必填", - "provider.custom.error.duplicate": "重复", - - "provider.disconnect.toast.disconnected.title": "{{provider}} 已断开连接", - "provider.disconnect.toast.disconnected.description": "{{provider}} 模型已不再可用。", - - "model.tag.free": "免费", - "model.tag.latest": "最新", - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "文本", - "model.input.image": "图像", - "model.input.audio": "音频", - "model.input.video": "视频", - "model.input.pdf": "pdf", - "model.tooltip.allows": "支持:{{inputs}}", - "model.tooltip.reasoning.allowed": "支持推理", - "model.tooltip.reasoning.none": "不支持推理", - "model.tooltip.context": "上下文上限 {{limit}}", - - "common.search.placeholder": "搜索", - "common.goBack": "返回", - "common.goForward": "前进", - "common.loading": "加载中", - "common.loading.ellipsis": "...", - "common.cancel": "取消", - "common.connect": "连接", - "common.disconnect": "断开连接", - "common.continue": "提交", - "common.submit": "提交", - "common.save": "保存", - "common.saving": "保存中...", - "common.default": "默认", - "common.attachment": "附件", - - "prompt.placeholder.shell": "输入 shell 命令... {{example}}", - "prompt.placeholder.normal": '随便问点什么... "{{example}}"', - "prompt.placeholder.simple": "随便问点什么...", - "prompt.placeholder.summarizeComments": "总结评论…", - "prompt.placeholder.summarizeComment": "总结该评论…", - "prompt.mode.shell": "Shell", - "prompt.mode.normal": "Prompt", - "prompt.mode.shell.exit": "按 esc 退出", - "prompt.example.1": "修复代码库中的一个 TODO", - "prompt.example.2": "这个项目的技术栈是什么?", - "prompt.example.3": "修复失败的测试", - "prompt.example.4": "解释认证是如何工作的", - "prompt.example.5": "查找并修复安全漏洞", - "prompt.example.6": "为用户服务添加单元测试", - "prompt.example.7": "重构这个函数,让它更易读", - "prompt.example.8": "这个错误是什么意思?", - "prompt.example.9": "帮我调试这个问题", - "prompt.example.10": "生成 API 文档", - "prompt.example.11": "优化数据库查询", - "prompt.example.12": "添加输入校验", - "prompt.example.13": "创建一个新的组件用于...", - "prompt.example.14": "我该如何部署这个项目?", - "prompt.example.15": "审查我的代码并给出最佳实践建议", - "prompt.example.16": "为这个函数添加错误处理", - "prompt.example.17": "解释这个正则表达式", - "prompt.example.18": "把它转换成 TypeScript", - "prompt.example.19": "在整个代码库中添加日志", - "prompt.example.20": "哪些依赖已经过期?", - "prompt.example.21": "帮我写一个迁移脚本", - "prompt.example.22": "为这个接口实现缓存", - "prompt.example.23": "给这个列表添加分页", - "prompt.example.24": "创建一个 CLI 命令用于...", - "prompt.example.25": "这里的环境变量是怎么工作的?", - "prompt.popover.emptyResults": "没有匹配的结果", - "prompt.popover.emptyCommands": "没有匹配的命令", - "prompt.dropzone.label": "将图片、PDF 或文本文件拖放到此处", - "prompt.dropzone.file.label": "拖放以 @提及文件", - "prompt.slash.badge.custom": "自定义", - "prompt.slash.badge.skill": "技能", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "当前", - "prompt.context.includeActiveFile": "包含当前文件", - "prompt.context.removeActiveFile": "从上下文移除活动文件", - "prompt.context.removeFile": "从上下文移除文件", - "prompt.action.attachFile": "附加文件", - "prompt.attachment.remove": "移除附件", - "prompt.action.send": "发送", - "prompt.action.stop": "停止", - "prompt.toast.pasteUnsupported.title": "不支持的附件", - "prompt.toast.pasteUnsupported.description": "此处仅能附加图片、PDF 或文本文件。", - "prompt.toast.modelAgentRequired.title": "请选择智能体和模型", - "prompt.toast.modelAgentRequired.description": "发送提示前请先选择智能体和模型。", - "prompt.toast.worktreeCreateFailed.title": "创建工作树失败", - "prompt.toast.sessionCreateFailed.title": "创建会话失败", - "prompt.toast.shellSendFailed.title": "发送 shell 命令失败", - "prompt.toast.commandSendFailed.title": "发送命令失败", - "prompt.toast.promptSendFailed.title": "发送提示失败", - "prompt.toast.promptSendFailed.description": "无法获取会话", - - "dialog.mcp.title": "MCPs", - "dialog.mcp.description": "已启用 {{enabled}} / {{total}}", - "dialog.mcp.empty": "未配置 MCPs", - - "dialog.lsp.empty": "已从文件类型自动检测到 LSPs", - - "dialog.plugins.empty": "在 opencode.json 中配置的插件", - - "mcp.status.connected": "已连接", - "mcp.status.failed": "失败", - "mcp.status.needs_auth": "需要授权", - "mcp.auth.clickToAuthenticate": "点击进行授权", - "mcp.status.disabled": "已禁用", - - "dialog.fork.empty": "没有可用于分叉的消息", - - "dialog.directory.search.placeholder": "搜索文件夹", - "dialog.directory.empty": "未找到文件夹", - "dialog.directory.action.selectFile": "选择文件", - "dialog.directory.action.selectFolder": "选择文件夹", - "dialog.directory.root": "根目录", - "dialog.directory.parent": "上级目录", - "dialog.directory.readError": "无法读取此文件夹", - - "dialog.server.title": "服务器", - "dialog.server.description": "切换此应用连接的 OpenCode 服务器。", - "dialog.server.search.placeholder": "搜索服务器", - "dialog.server.empty": "暂无服务器", - "dialog.server.add.title": "添加服务器", - "dialog.server.add.url": "服务器 URL", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "无法连接到服务器", - "dialog.server.add.checking": "检查中...", - "dialog.server.add.button": "添加服务器", - "dialog.server.add.name": "服务器名称(可选)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "用户名(可选)", - "dialog.server.add.password": "密码(可选)", - "dialog.server.edit.title": "编辑服务器", - "dialog.server.default.title": "默认服务器", - "dialog.server.default.description": "应用启动时连接此服务器,而不是启动本地服务器。需要重启。", - "dialog.server.default.none": "未选择服务器", - "dialog.server.default.set": "将当前服务器设为默认", - "dialog.server.default.clear": "清除", - "dialog.server.action.remove": "移除服务器", - "dialog.server.menu.edit": "编辑", - "dialog.server.menu.default": "设为默认", - "dialog.server.menu.defaultRemove": "取消默认", - "dialog.server.menu.delete": "删除", - "dialog.server.current": "当前服务器", - "dialog.server.status.default": "默认", - - "dialog.project.edit.title": "编辑项目", - "dialog.project.edit.name": "名称", - "dialog.project.edit.icon": "图标", - "dialog.project.edit.icon.alt": "项目图标", - "dialog.project.edit.icon.hint": "点击或拖拽图片", - "dialog.project.edit.icon.recommended": "建议:128x128px", - "dialog.project.edit.color": "颜色", - "dialog.project.edit.color.select": "选择{{color}}颜色", - "dialog.project.edit.worktree.startup": "工作区启动脚本", - "dialog.project.edit.worktree.startup.description": "在创建新的工作区 (worktree) 后运行。", - "dialog.project.edit.worktree.startup.placeholder": "例如 bun install", - - "context.breakdown.title": "上下文拆分", - "context.breakdown.note": "输入 token 的大致拆分。“其他”包含工具定义和开销。", - "context.breakdown.system": "系统", - "context.breakdown.user": "用户", - "context.breakdown.assistant": "助手", - "context.breakdown.tool": "工具调用", - "context.breakdown.other": "其他", - "context.systemPrompt.title": "系统提示词", - "context.rawMessages.title": "原始消息", - "context.stats.session": "会话", - "context.stats.messages": "消息数", - "context.stats.provider": "提供商", - "context.stats.model": "模型", - "context.stats.limit": "上下文限制", - "context.stats.totalTokens": "总 token", - "context.stats.usage": "使用率", - "context.stats.inputTokens": "输入 token", - "context.stats.outputTokens": "输出 token", - "context.stats.reasoningTokens": "推理 token", - "context.stats.cacheTokens": "缓存 token(读/写)", - "context.stats.userMessages": "用户消息", - "context.stats.assistantMessages": "助手消息", - "context.stats.totalCost": "总成本", - "context.stats.sessionCreated": "创建时间", - "context.stats.lastActivity": "最后活动", - "context.usage.tokens": "Token", - "context.usage.usage": "使用率", - "context.usage.cost": "成本", - "context.usage.clickToView": "点击查看上下文", - "context.usage.view": "查看上下文用量", - - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - - "toast.language.title": "语言", - "toast.language.description": "已切换到{{language}}", - "toast.theme.title": "主题已切换", - "toast.scheme.title": "颜色方案", - "toast.workspace.enabled.title": "工作区已启用", - "toast.workspace.enabled.description": "侧边栏现在显示多个工作树", - "toast.workspace.disabled.title": "工作区已禁用", - "toast.workspace.disabled.description": "侧边栏只显示主工作树", - "toast.permissions.autoaccept.on.title": "正在自动接受权限", - "toast.permissions.autoaccept.on.description": "权限请求将被自动批准", - "toast.permissions.autoaccept.off.title": "已停止自动接受权限", - "toast.permissions.autoaccept.off.description": "权限请求将需要批准", - "toast.model.none.title": "未选择模型", - "toast.model.none.description": "请先连接提供商以总结此会话", - "toast.file.loadFailed.title": "加载文件失败", - "toast.file.listFailed.title": "列出文件失败", - "toast.context.noLineSelection.title": "未选择行", - "toast.context.noLineSelection.description": "请先在文件标签中选择行范围。", - "toast.session.share.copyFailed.title": "无法复制链接到剪贴板", - "toast.session.share.success.title": "会话已分享", - "toast.session.share.success.description": "分享链接已复制到剪贴板", - "toast.session.share.failed.title": "分享会话失败", - "toast.session.share.failed.description": "分享会话时发生错误", - "toast.session.unshare.success.title": "已取消分享会话", - "toast.session.unshare.success.description": "会话已成功取消分享", - "toast.session.unshare.failed.title": "取消分享失败", - "toast.session.unshare.failed.description": "取消分享会话时发生错误", - "toast.session.listFailed.title": "无法加载 {{project}} 的会话", - "toast.update.title": "有可用更新", - "toast.update.description": "OpenCode 有新版本 ({{version}}) 可安装。", - "toast.update.action.installRestart": "安装并重启", - "toast.update.action.notYet": "稍后", - - "error.page.title": "出了点问题", - "error.page.description": "加载应用程序时发生错误。", - "error.page.details.label": "错误详情", - "error.page.action.restart": "重启", - "error.page.action.report": "上报错误", - "error.page.action.reported": "错误已上报", - "error.page.action.checking": "检查中...", - "error.page.action.checkUpdates": "检查更新", - "error.page.action.updateTo": "更新到 {{version}}", - "error.page.report.prefix": "请将此错误报告给 OpenCode 团队", - "error.page.report.discord": "在 Discord 上", - "error.page.version": "版本:{{version}}", - "error.dev.rootNotFound": "未找到根元素。你是不是忘了把它添加到 index.html?或者 id 属性拼写错了?", - "error.serverSync.connectFailed": "无法连接到服务器。是否有服务器正在 `{{url}}` 运行?", - - "directory.error.invalidUrl": "URL 中的目录无效。", - - "error.chain.unknown": "未知错误", - "error.chain.causedBy": "原因:", - "error.chain.apiError": "API 错误", - "error.chain.status": "状态:{{status}}", - "error.chain.retryable": "可重试:{{retryable}}", - "error.chain.responseBody": "响应内容:\n{{body}}", - "error.chain.didYouMean": "你是不是想输入:{{suggestions}}", - "error.chain.modelNotFound": "未找到模型:{{provider}}/{{model}}", - "error.chain.checkConfig": "请检查你的配置 (opencode.json) 中的 provider/model 名称", - "error.chain.mcpFailed": 'MCP 服务器 "{{name}}" 启动失败。注意: OpenCode 暂不支持 MCP 认证。', - "error.chain.providerAuthFailed": "提供商认证失败({{provider}}):{{message}}", - "error.chain.providerInitFailed": '无法初始化提供商 "{{provider}}"。请检查凭据和配置。', - "error.chain.configJsonInvalid": "配置文件 {{path}} 不是有效的 JSON(C)", - "error.chain.configJsonInvalidWithMessage": "配置文件 {{path}} 不是有效的 JSON(C):{{message}}", - "error.chain.configDirectoryTypo": - '{{path}} 中的目录 "{{dir}}" 无效。请将目录重命名为 "{{suggestion}}" 或移除它。这是一个常见拼写错误。', - "error.chain.configFrontmatterError": "无法解析 {{path}} 中的 frontmatter:\n{{message}}", - "error.chain.configInvalid": "配置文件 {{path}} 无效", - "error.chain.configInvalidWithMessage": "配置文件 {{path}} 无效:{{message}}", - - "notification.permission.title": "需要权限", - "notification.permission.description": "{{sessionTitle}}({{projectName}})需要权限", - "notification.question.title": "问题", - "notification.question.description": "{{sessionTitle}}({{projectName}})有一个问题", - "notification.action.goToSession": "前往会话", - "notification.session.responseReady.title": "回复已就绪", - "notification.session.error.title": "会话错误", - "notification.session.error.fallbackDescription": "发生错误", - - "home.recentProjects": "最近项目", - "home.empty.title": "没有最近项目", - "home.empty.description": "通过打开本地项目开始使用", - "home.title": "主页", - "home.projects": "项目", - "home.project.add": "添加项目", - "home.sessions.search.placeholder": "搜索会话", - "home.sessions.search.placeholder.scoped": "在 {{scope}} 中搜索会话", - "home.sessions.search.sessions": "会话", - "home.sessions.search.noResults": "未找到与 {{query}} 相关的会话", - "home.sessions.empty": "这里还没有内容", - "home.sessions.empty.description": "创建一个会话以开始。", - "home.sessions.group.today": "今天", - "home.sessions.group.yesterday": "昨天", - "home.sessions.group.older": "更早", - - "session.tab.session": "会话", - "session.tab.review": "审查", - "session.tab.context": "上下文", - "session.panel.reviewAndFiles": "审查和文件", - "session.review.filesChanged": "{{count}} 个文件变更", - "session.review.change.one": "更改", - "session.review.change.other": "更改", - "session.review.loadingChanges": "正在加载更改...", - "session.review.empty": "此会话暂无更改", - "session.review.noVcs": "未检测到 Git 版本控制系统,无法显示更改", - "session.review.noSnapshot": "配置中已禁用快照跟踪,因此会话更改不可用", - "session.review.noChanges": "无更改", - "session.files.selectToOpen": "选择要打开的文件", - "session.files.all": "所有文件", - "session.files.empty": "无文件", - "session.files.binaryContent": "二进制文件(无法显示内容)", - "session.messages.renderEarlier": "显示更早的消息", - "session.messages.loadingEarlier": "正在加载更早的消息...", - "session.messages.loadEarlier": "加载更早的消息", - "session.messages.loading": "正在加载消息...", - "session.messages.jumpToLatest": "跳转到最新", - "session.context.addToContext": "将 {{selection}} 添加到上下文", - "session.todo.title": "待办事项", - "session.todo.collapse": "折叠", - "session.todo.expand": "展开", - "session.followupDock.summary.one": "{{count}} 条排队消息", - "session.followupDock.summary.other": "{{count}} 条排队消息", - "session.followupDock.sendNow": "立即发送", - "session.followupDock.edit": "编辑", - "session.followupDock.collapse": "折叠排队消息", - "session.followupDock.expand": "展开排队消息", - "session.revertDock.summary.one": "{{count}} 条已回滚消息", - "session.revertDock.summary.other": "{{count}} 条已回滚消息", - "session.revertDock.collapse": "折叠已回滚消息", - "session.revertDock.expand": "展开已回滚消息", - "session.revertDock.restore": "恢复消息", - "session.new.title": "构建任何东西", - "session.new.worktree.main": "主分支", - "session.new.worktree.mainWithBranch": "主分支({{branch}})", - "session.new.worktree.create": "创建新的 worktree", - "session.new.lastModified": "最后修改", - "session.header.search.placeholder": "搜索 {{project}}", - "session.header.searchFiles": "搜索文件", - "session.header.openIn": "打开方式", - "session.header.open.action": "打开 {{app}}", - "session.header.open.ariaLabel": "在 {{app}} 中打开", - "session.header.open.menu": "打开选项", - "session.header.open.copyPath": "复制路径", - - "status.popover.trigger": "状态", - "status.popover.ariaLabel": "服务器配置", - "status.popover.tab.servers": "服务器", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "插件", - "status.popover.action.manageServers": "管理服务器", - - "session.share.popover.title": "发布到网页", - "session.share.popover.description.shared": "此会话已在网页上公开。任何拥有链接的人都可以访问。", - "session.share.popover.description.unshared": "在网页上公开分享此会话。任何拥有链接的人都可以访问。", - "session.share.action.share": "分享", - "session.share.action.publish": "发布", - "session.share.action.publishing": "正在发布...", - "session.share.action.unpublish": "取消发布", - "session.share.action.unpublishing": "正在取消发布...", - "session.share.action.view": "查看", - "session.share.copy.copied": "已复制", - "session.share.copy.copyLink": "复制链接", - - "lsp.tooltip.none": "没有 LSP 服务器", - "lsp.label.connected": "{{count}} LSP", - - "prompt.loading": "正在加载提示...", - - "terminal.loading": "正在加载终端...", - "terminal.title": "终端", - "terminal.title.numbered": "终端 {{number}}", - "terminal.close": "关闭终端", - "terminal.connectionLost.title": "连接已丢失", - "terminal.connectionLost.description": "终端连接已中断。这可能发生在服务器重启时。", - - "common.closeTab": "关闭标签页", - "common.dismiss": "忽略", - "common.requestFailed": "请求失败", - "common.moreOptions": "更多选项", - "common.learnMore": "了解更多", - "common.rename": "重命名", - "common.reset": "重置", - "common.archive": "归档", - "common.delete": "删除", - "common.close": "关闭", - "common.edit": "编辑", - "common.loadMore": "加载更多", - "common.key.esc": "ESC", - - "sidebar.menu.toggle": "切换菜单", - "sidebar.nav.projectsAndSessions": "项目和会话", - "sidebar.settings": "设置", - "sidebar.help": "帮助", - "sidebar.workspaces.enable": "启用工作区", - "sidebar.workspaces.disable": "禁用工作区", - "sidebar.gettingStarted.title": "入门", - "sidebar.gettingStarted.line1": "OpenCode 提供免费模型,你可以立即开始使用。", - "sidebar.gettingStarted.line2": "连接任意提供商即可使用更多模型,如 Claude、GPT、Gemini 等。", - "sidebar.project.recentSessions": "最近会话", - "sidebar.project.viewAllSessions": "查看全部会话", - "sidebar.project.clearNotifications": "清除通知", - - "app.name.desktop": "OpenCode Desktop", - - "settings.section.desktop": "桌面", - "settings.section.server": "服务器", - - "settings.tab.general": "通用", - "settings.tab.shortcuts": "快捷键", - - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "WSL 集成", - "settings.desktop.wsl.description": "在 Windows 的 WSL 环境中运行 OpenCode 服务器。", - - "settings.general.section.appearance": "外观", - "settings.general.section.notifications": "系统通知", - "settings.general.section.updates": "更新", - "settings.general.section.sounds": "音效", - "settings.general.section.feed": "动态", - "settings.general.section.display": "显示", - "settings.general.row.language.title": "语言", - "settings.general.row.language.description": "更改 OpenCode 的显示语言", - "settings.general.row.appearance.title": "外观", - "settings.general.row.appearance.description": "自定义 OpenCode 在你的设备上的外观", - "settings.general.row.colorScheme.title": "配色方案", - "settings.general.row.colorScheme.description": "选择 OpenCode 跟随系统、浅色或深色主题", - "settings.general.row.theme.title": "主题", - "settings.general.row.theme.description": "自定义 OpenCode 的主题。", - "settings.general.row.font.title": "代码字体", - "settings.general.row.font.description": "自定义代码块使用的字体", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "界面字体", - "settings.general.row.uiFont.description": "自定义整个界面使用的字体", - "settings.general.row.followup.title": "跟进消息行为", - "settings.general.row.followup.description": "选择跟进提示是立即引导还是在队列中等待", - "settings.general.row.followup.option.queue": "排队", - "settings.general.row.followup.option.steer": "引导", - "settings.general.row.reasoningSummaries.title": "显示推理摘要", - "settings.general.row.reasoningSummaries.description": "在时间线中显示模型推理摘要", - "settings.general.row.shellToolPartsExpanded.title": "展开 shell 工具部分", - "settings.general.row.shellToolPartsExpanded.description": "默认在时间线中展开 shell 工具部分", - "settings.general.row.editToolPartsExpanded.title": "展开编辑工具部分", - "settings.general.row.editToolPartsExpanded.description": "默认在时间线中展开 edit、write 和 patch 工具部分", - "settings.general.row.wayland.title": "使用原生 Wayland", - "settings.general.row.wayland.description": "在 Wayland 上禁用 X11 回退。需要重启。", - "settings.general.row.wayland.tooltip": "在混合刷新率显示器的 Linux 系统上,原生 Wayland 可能更稳定。", - "settings.general.row.releaseNotes.title": "发行说明", - "settings.general.row.releaseNotes.description": "更新后显示“新功能”弹窗", - - "settings.updates.row.startup.title": "启动时检查更新", - "settings.updates.row.startup.description": "在 OpenCode 启动时自动检查更新", - "settings.updates.row.check.title": "检查更新", - "settings.updates.row.check.description": "手动检查更新并在有更新时安装", - "settings.updates.action.checkNow": "立即检查", - "settings.updates.action.checking": "正在检查...", - "settings.updates.toast.latest.title": "已是最新版本", - "settings.updates.toast.latest.description": "你正在使用最新版本的 OpenCode。", - - "sound.option.none": "无", - "sound.option.alert01": "警报 01", - "sound.option.alert02": "警报 02", - "sound.option.alert03": "警报 03", - "sound.option.alert04": "警报 04", - "sound.option.alert05": "警报 05", - "sound.option.alert06": "警报 06", - "sound.option.alert07": "警报 07", - "sound.option.alert08": "警报 08", - "sound.option.alert09": "警报 09", - "sound.option.alert10": "警报 10", - "sound.option.bipbop01": "哔啵 01", - "sound.option.bipbop02": "哔啵 02", - "sound.option.bipbop03": "哔啵 03", - "sound.option.bipbop04": "哔啵 04", - "sound.option.bipbop05": "哔啵 05", - "sound.option.bipbop06": "哔啵 06", - "sound.option.bipbop07": "哔啵 07", - "sound.option.bipbop08": "哔啵 08", - "sound.option.bipbop09": "哔啵 09", - "sound.option.bipbop10": "哔啵 10", - "sound.option.staplebops01": "斯泰普博普斯 01", - "sound.option.staplebops02": "斯泰普博普斯 02", - "sound.option.staplebops03": "斯泰普博普斯 03", - "sound.option.staplebops04": "斯泰普博普斯 04", - "sound.option.staplebops05": "斯泰普博普斯 05", - "sound.option.staplebops06": "斯泰普博普斯 06", - "sound.option.staplebops07": "斯泰普博普斯 07", - "sound.option.nope01": "否 01", - "sound.option.nope02": "否 02", - "sound.option.nope03": "否 03", - "sound.option.nope04": "否 04", - "sound.option.nope05": "否 05", - "sound.option.nope06": "否 06", - "sound.option.nope07": "否 07", - "sound.option.nope08": "否 08", - "sound.option.nope09": "否 09", - "sound.option.nope10": "否 10", - "sound.option.nope11": "否 11", - "sound.option.nope12": "否 12", - "sound.option.yup01": "是 01", - "sound.option.yup02": "是 02", - "sound.option.yup03": "是 03", - "sound.option.yup04": "是 04", - "sound.option.yup05": "是 05", - "sound.option.yup06": "是 06", - - "settings.general.notifications.agent.title": "智能体", - "settings.general.notifications.agent.description": "当智能体完成或需要注意时显示系统通知", - "settings.general.notifications.permissions.title": "权限", - "settings.general.notifications.permissions.description": "当需要权限时显示系统通知", - "settings.general.notifications.errors.title": "错误", - "settings.general.notifications.errors.description": "发生错误时显示系统通知", - "settings.general.sounds.agent.title": "智能体", - "settings.general.sounds.agent.description": "当智能体完成或需要注意时播放声音", - "settings.general.sounds.permissions.title": "权限", - "settings.general.sounds.permissions.description": "当需要权限时播放声音", - "settings.general.sounds.errors.title": "错误", - "settings.general.sounds.errors.description": "发生错误时播放声音", - - "settings.shortcuts.title": "键盘快捷键", - "settings.shortcuts.reset.button": "重置为默认值", - "settings.shortcuts.reset.toast.title": "快捷键已重置", - "settings.shortcuts.reset.toast.description": "键盘快捷键已重置为默认设置。", - "settings.shortcuts.conflict.title": "快捷键已被占用", - "settings.shortcuts.conflict.description": "{{keybind}} 已分配给 {{titles}}。", - "settings.shortcuts.unassigned": "未设置", - "settings.shortcuts.pressKeys": "按下按键", - "settings.shortcuts.search.placeholder": "搜索快捷键", - "settings.shortcuts.search.empty": "未找到快捷键", - "settings.shortcuts.group.general": "通用", - "settings.shortcuts.group.session": "会话", - "settings.shortcuts.group.navigation": "导航", - "settings.shortcuts.group.modelAndAgent": "模型与智能体", - "settings.shortcuts.group.terminal": "终端", - "settings.shortcuts.group.prompt": "提示", - - "settings.providers.title": "提供商", - "settings.providers.description": "提供商设置将在此处可配置。", - "settings.providers.section.connected": "已连接的提供商", - "settings.providers.connected.empty": "没有已连接的提供商", - "settings.providers.section.popular": "热门提供商", - "settings.providers.tag.environment": "环境", - "settings.providers.tag.config": "配置", - "settings.providers.tag.custom": "自定义", - "settings.providers.tag.other": "其他", - - "settings.models.title": "模型", - "settings.models.description": "模型设置将在此处可配置。", - - "settings.agents.title": "智能体", - "settings.agents.description": "智能体设置将在此处可配置。", - - "settings.commands.title": "命令", - "settings.commands.description": "命令设置将在此处可配置。", - - "settings.mcp.title": "MCP", - "settings.mcp.description": "MCP 设置将在此处可配置。", - - "settings.permissions.title": "权限", - "settings.permissions.description": "控制服务器默认可以使用哪些工具。", - "settings.permissions.section.tools": "工具", - "settings.permissions.toast.updateFailed.title": "更新权限失败", - "settings.permissions.action.allow": "允许", - "settings.permissions.action.ask": "询问", - "settings.permissions.action.deny": "拒绝", - "settings.permissions.tool.read.title": "读取", - "settings.permissions.tool.read.description": "读取文件(匹配文件路径)", - "settings.permissions.tool.edit.title": "编辑", - "settings.permissions.tool.edit.description": "修改文件,包括编辑、写入、补丁和多重编辑", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "使用 glob 模式匹配文件", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "使用正则表达式搜索文件内容", - "settings.permissions.tool.list.title": "列表", - "settings.permissions.tool.list.description": "列出目录中的文件", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "运行 shell 命令", - "settings.permissions.tool.task.title": "任务", - "settings.permissions.tool.task.description": "启动子智能体", - "settings.permissions.tool.skill.title": "技能", - "settings.permissions.tool.skill.description": "按名称加载技能", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "运行语言服务器查询", - "settings.permissions.tool.todowrite.title": "更新待办", - "settings.permissions.tool.todowrite.description": "更新待办列表", - "settings.permissions.tool.webfetch.title": "网页获取", - "settings.permissions.tool.webfetch.description": "从 URL 获取内容", - "settings.permissions.tool.websearch.title": "网页搜索", - "settings.permissions.tool.websearch.description": "搜索网页", - "settings.permissions.tool.external_directory.title": "外部目录", - "settings.permissions.tool.external_directory.description": "访问项目目录之外的文件", - "settings.permissions.tool.doom_loop.title": "死循环", - "settings.permissions.tool.doom_loop.description": "检测具有相同输入的重复工具调用", - - "session.delete.failed.title": "删除会话失败", - "session.delete.title": "删除会话", - "session.delete.confirm": '删除会话 "{{name}}"?', - "session.delete.button": "删除会话", - - "workspace.new": "新建工作区", - "workspace.type.local": "本地", - "workspace.type.sandbox": "沙盒", - "workspace.create.failed.title": "创建工作区失败", - "workspace.delete.failed.title": "删除工作区失败", - "workspace.resetting.title": "正在重置工作区", - "workspace.resetting.description": "这可能需要一点时间。", - "workspace.reset.failed.title": "重置工作区失败", - "workspace.reset.success.title": "工作区已重置", - "workspace.reset.success.description": "工作区已与默认分支保持一致。", - "workspace.error.stillPreparing": "工作区仍在准备中", - "workspace.status.checking": "正在检查未合并的更改...", - "workspace.status.error": "无法验证 git 状态。", - "workspace.status.clean": "未检测到未合并的更改。", - "workspace.status.dirty": "检测到未合并的更改。", - "workspace.delete.title": "删除工作区", - "workspace.delete.confirm": '删除工作区 "{{name}}"?', - "workspace.delete.button": "删除工作区", - "workspace.reset.title": "重置工作区", - "workspace.reset.confirm": '重置工作区 "{{name}}"?', - "workspace.reset.button": "重置工作区", - "workspace.reset.archived.none": "不会归档任何活跃会话。", - "workspace.reset.archived.one": "将归档 1 个会话。", - "workspace.reset.archived.many": "将归档 {{count}} 个会话。", - "workspace.reset.note": "这将把工作区重置为与默认分支一致。", - "common.open": "打开", - "dialog.releaseNotes.action.getStarted": "开始", - "dialog.releaseNotes.action.next": "下一步", - "dialog.releaseNotes.action.hideFuture": "不再显示", - "dialog.releaseNotes.media.alt": "发布预览", - "toast.project.reloadFailed.title": "无法重新加载 {{project}}", - "error.server.invalidConfiguration": "配置无效", - "common.moreCountSuffix": " (还有 {{count}} 个)", - "common.time.justNow": "刚刚", - "common.time.minutesAgo.short": "{{count}}分钟前", - "common.time.hoursAgo.short": "{{count}}小时前", - "common.time.daysAgo.short": "{{count}}天前", - "settings.providers.connected.environmentDescription": "已通过环境变量连接", - "settings.providers.custom.description": "通过基础 URL 添加与 OpenAI 兼容的提供商。", - - "app.server.unreachable": "无法连接到 {{server}}", - "app.server.retrying": "正在自动重试...", - "app.server.otherServers": "其他服务器", - "dialog.server.add.usernamePlaceholder": "用户名", - "dialog.server.add.passwordPlaceholder": "密码", - "server.row.noUsername": "无用户名", - "session.review.noVcs.createGit.title": "创建 Git 仓库", - "session.review.noVcs.createGit.description": "在此项目中跟踪、审查和撤消更改", - "session.review.noVcs.createGit.actionLoading": "正在创建 Git 仓库...", - "session.review.noVcs.createGit.action": "创建 Git 仓库", - "session.todo.progress": "已完成 {{done}} 个任务(共 {{total}} 个)", - "session.question.progress": "{{current}}/{{total}} 个问题", - "session.header.open.finder": "访达", - "session.header.open.fileExplorer": "文件资源管理器", - "session.header.open.fileManager": "文件管理器", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "终端", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "开发性能诊断", - "debugBar.na": "不适用", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": "最后一次完成的涉及会话页面的路由转换,从路由器启动到稳定后的第一次绘制。", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "过去 5 秒内的滚动帧率。", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "过去 5 秒内最差的帧时间。", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "过去 5 秒内超过 32ms 的帧。", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "过去 5 秒内的阻塞时间和长任务计数。最大任务:{{max}}。", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "过去 5 秒内观察到的最差输入延迟。", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": "过去 5 秒内的近似交互持续时间。这类似于 INP,而非官方的 Web Vitals INP。", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "当前应用生命周期的累积布局偏移。", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "使用的 JS 堆与堆限制。仅限 Chromium。", - "debugBar.mem.tip": "使用的 JS 堆与堆限制。{{used}} / {{limit}}。", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "空格", - "common.key.backspace": "退格", - "common.key.enter": "回车", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "未知", - "error.page.circular": "[循环]", - "error.serverSDK.noServerAvailable": "无可用服务器", - "error.serverSDK.serverNotAvailable": "服务器不可用", - "error.childStore.persistedCacheCreateFailed": "创建持久化缓存失败", - "error.childStore.persistedProjectMetadataCreateFailed": "创建持久化项目元数据失败", - "error.childStore.persistedProjectIconCreateFailed": "创建持久化项目图标失败", - "error.childStore.storeCreateFailed": "创建存储失败", - "terminal.connectionLost.abnormalClose": "WebSocket 异常关闭:{{code}}", -} satisfies Partial> diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts deleted file mode 100644 index 7998dde3ef..0000000000 --- a/packages/app/src/i18n/zht.ts +++ /dev/null @@ -1,920 +0,0 @@ -import { dict as en } from "./en" - -type Keys = keyof typeof en - -export const dict = { - "command.category.suggested": "建議", - "command.category.view": "檢視", - "command.category.project": "專案", - "command.category.provider": "提供者", - "command.category.server": "伺服器", - "command.category.session": "工作階段", - "command.category.theme": "主題", - "command.category.language": "語言", - "command.category.file": "檔案", - "command.category.context": "上下文", - "command.category.terminal": "終端機", - "command.category.model": "模型", - "command.category.mcp": "MCP", - "command.category.agent": "代理程式", - "command.category.permissions": "權限", - "command.category.workspace": "工作區", - - "command.category.settings": "設定", - "theme.scheme.system": "系統", - "theme.scheme.light": "淺色", - "theme.scheme.dark": "深色", - - "command.sidebar.toggle": "切換側邊欄", - "command.project.open": "開啟專案", - "command.provider.connect": "連接提供者", - "command.server.switch": "切換伺服器", - "command.settings.open": "開啟設定", - "command.session.previous": "上一個工作階段", - "command.session.next": "下一個工作階段", - "command.session.previous.unseen": "上一個未讀會話", - "command.session.next.unseen": "下一個未讀會話", - "command.session.archive": "封存工作階段", - - "command.palette": "命令面板", - - "command.theme.cycle": "循環主題", - "command.theme.set": "使用主題: {{theme}}", - "command.theme.scheme.cycle": "循環配色方案", - "command.theme.scheme.set": "使用配色方案: {{scheme}}", - - "command.language.cycle": "循環語言", - "command.language.set": "使用語言: {{language}}", - - "command.session.new": "新增工作階段", - "command.file.open": "開啟檔案", - "command.tab.close": "關閉分頁", - "command.context.addSelection": "將選取內容加入上下文", - "command.context.addSelection.description": "加入目前檔案中選取的行", - "command.input.focus": "聚焦輸入框", - "command.terminal.toggle": "切換終端機", - "command.fileTree.toggle": "切換檔案樹", - "command.review.toggle": "切換審查", - "command.terminal.new": "新增終端機", - "command.terminal.new.description": "建立新的終端機標籤頁", - "command.steps.toggle": "切換步驟", - "command.steps.toggle.description": "顯示或隱藏目前訊息的步驟", - "command.message.previous": "上一則訊息", - "command.message.previous.description": "跳到上一則使用者訊息", - "command.message.next": "下一則訊息", - "command.message.next.description": "跳到下一則使用者訊息", - "command.model.choose": "選擇模型", - "command.model.choose.description": "選擇不同的模型", - "command.mcp.toggle": "切換 MCP", - "command.mcp.toggle.description": "切換 MCP", - "command.agent.cycle": "循環代理程式", - "command.agent.cycle.description": "切換到下一個代理程式", - "command.agent.cycle.reverse": "反向循環代理程式", - "command.agent.cycle.reverse.description": "切換到上一個代理程式", - "command.model.variant.cycle": "循環思考強度", - "command.model.variant.cycle.description": "切換到下一個強度等級", - "command.prompt.mode.shell": "Shell", - "command.prompt.mode.normal": "Prompt", - "command.permissions.autoaccept.enable": "自動接受權限", - "command.permissions.autoaccept.disable": "停止自動接受權限", - "command.workspace.toggle": "切換工作區", - "command.workspace.toggle.description": "在側邊欄啟用或停用多個工作區", - "command.session.undo": "復原", - "command.session.undo.description": "復原上一則訊息", - "command.session.redo": "重做", - "command.session.redo.description": "重做上一則復原的訊息", - "command.session.compact": "精簡工作階段", - "command.session.compact.description": "總結工作階段以減少上下文大小", - "command.session.fork": "從訊息分支", - "command.session.fork.description": "從先前的訊息建立新工作階段", - "command.session.share": "分享工作階段", - "command.session.share.description": "分享此工作階段並將連結複製到剪貼簿", - "command.session.unshare": "取消分享工作階段", - "command.session.unshare.description": "停止分享此工作階段", - - "palette.search.placeholder": "搜尋檔案、命令和工作階段", - "palette.empty": "找不到結果", - "palette.group.commands": "命令", - "palette.group.files": "檔案", - - "dialog.provider.search.placeholder": "搜尋提供者", - "dialog.provider.empty": "找不到提供者", - "dialog.provider.group.popular": "熱門", - "dialog.provider.group.other": "其他", - "dialog.provider.tag.recommended": "推薦", - "dialog.provider.opencode.note": "精選模型,包含 Claude、GPT、Gemini 等等", - "dialog.provider.opencode.tagline": "可靠的優化模型", - "dialog.provider.opencodeGo.tagline": "適合所有人的低成本訂閱", - "dialog.provider.anthropic.note": "使用 Claude Pro/Max 或 API 金鑰連線", - "dialog.provider.openai.note": "使用 ChatGPT Pro/Plus 或 API 金鑰連線", - "dialog.provider.copilot.note": "使用 Copilot 或 API 金鑰連線", - "dialog.provider.google.note": "Gemini 模型,提供快速且結構化的回應", - "dialog.provider.openrouter.note": "從單一提供者存取所有支援的模型", - "dialog.provider.vercel.note": "透過智慧路由統一存取 AI 模型", - - "dialog.model.select.title": "選擇模型", - "dialog.model.search.placeholder": "搜尋模型", - "dialog.model.empty": "找不到模型", - "dialog.model.manage": "管理模型", - "dialog.model.manage.description": "自訂模型選擇器中顯示的模型。", - "dialog.model.manage.provider.toggle": "切換所有 {{provider}} 模型", - - "dialog.model.unpaid.freeModels.title": "OpenCode 提供的免費模型", - "dialog.model.unpaid.addMore.title": "從熱門提供者新增更多模型", - - "dialog.provider.viewAll": "查看更多提供者", - - "provider.connect.title": "連線 {{provider}}", - "provider.connect.title.anthropicProMax": "使用 Claude Pro/Max 登入", - "provider.connect.selectMethod": "選擇 {{provider}} 的登入方式。", - "provider.connect.method.apiKey": "API 金鑰", - "provider.connect.status.inProgress": "正在授權...", - "provider.connect.status.waiting": "等待授權...", - "provider.connect.status.failed": "授權失敗: {{error}}", - "provider.connect.apiKey.description": - "輸入你的 {{provider}} API 金鑰以連線帳戶,並在 OpenCode 中使用 {{provider}} 模型。", - "provider.connect.apiKey.label": "{{provider}} API 金鑰", - "provider.connect.apiKey.placeholder": "API 金鑰", - "provider.connect.apiKey.required": "API 金鑰為必填", - "provider.connect.opencodeZen.line1": "OpenCode Zen 為你提供一組精選的可靠最佳化模型,用於程式碼代理程式。", - "provider.connect.opencodeZen.line2": "只需一個 API 金鑰,你就能使用 Claude、GPT、Gemini、GLM 等模型。", - "provider.connect.opencodeZen.visit.prefix": "造訪 ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " 取得你的 API 金鑰。", - "provider.connect.oauth.code.visit.prefix": "造訪 ", - "provider.connect.oauth.code.visit.link": "此連結", - "provider.connect.oauth.code.visit.suffix": " 取得授權碼,以連線你的帳戶並在 OpenCode 中使用 {{provider}} 模型。", - "provider.connect.oauth.code.label": "{{method}} 授權碼", - "provider.connect.oauth.code.placeholder": "授權碼", - "provider.connect.oauth.code.required": "授權碼為必填", - "provider.connect.oauth.code.invalid": "授權碼無效", - "provider.connect.oauth.auto.visit.prefix": "造訪 ", - "provider.connect.oauth.auto.visit.link": "此連結", - "provider.connect.oauth.auto.visit.suffix": - " 並輸入以下程式碼,以連線你的帳戶並在 OpenCode 中使用 {{provider}} 模型。", - "provider.connect.oauth.auto.confirmationCode": "確認碼", - "provider.connect.toast.connected.title": "{{provider}} 已連線", - "provider.connect.toast.connected.description": "現在可以使用 {{provider}} 模型了。", - - "provider.custom.title": "自訂提供商", - "provider.custom.description.prefix": "設定與 OpenAI 相容的提供商。請參閱", - "provider.custom.description.link": "提供商設定文件", - "provider.custom.description.suffix": "。", - "provider.custom.field.providerID.label": "提供商 ID", - "provider.custom.field.providerID.placeholder": "myprovider", - "provider.custom.field.providerID.description": "使用小寫字母、數字、連字號或底線", - "provider.custom.field.name.label": "顯示名稱", - "provider.custom.field.name.placeholder": "我的 AI 提供商", - "provider.custom.field.baseURL.label": "基礎 URL", - "provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1", - "provider.custom.field.apiKey.label": "API 金鑰", - "provider.custom.field.apiKey.placeholder": "API 金鑰", - "provider.custom.field.apiKey.description": "選填。若您透過標頭管理驗證,可留空。", - "provider.custom.models.label": "模型", - "provider.custom.models.id.label": "ID", - "provider.custom.models.id.placeholder": "model-id", - "provider.custom.models.name.label": "名稱", - "provider.custom.models.name.placeholder": "顯示名稱", - "provider.custom.models.remove": "移除模型", - "provider.custom.models.add": "新增模型", - "provider.custom.headers.label": "標頭(選填)", - "provider.custom.headers.key.label": "標頭", - "provider.custom.headers.key.placeholder": "Header-Name", - "provider.custom.headers.value.label": "值", - "provider.custom.headers.value.placeholder": "value", - "provider.custom.headers.remove": "移除標頭", - "provider.custom.headers.add": "新增標頭", - "provider.custom.error.providerID.required": "提供商 ID 為必填", - "provider.custom.error.providerID.format": "請使用小寫字母、數字、連字號或底線", - "provider.custom.error.providerID.exists": "該提供商 ID 已存在", - "provider.custom.error.name.required": "顯示名稱為必填", - "provider.custom.error.baseURL.required": "基礎 URL 為必填", - "provider.custom.error.baseURL.format": "必須以 http:// 或 https:// 開頭", - "provider.custom.error.required": "必填", - "provider.custom.error.duplicate": "重複", - - "provider.disconnect.toast.disconnected.title": "{{provider}} 已中斷連線", - "provider.disconnect.toast.disconnected.description": "{{provider}} 模型已不再可用。", - "model.tag.free": "免費", - "model.tag.latest": "最新", - - "model.provider.anthropic": "Anthropic", - "model.provider.openai": "OpenAI", - "model.provider.google": "Google", - "model.provider.xai": "xAI", - "model.provider.meta": "Meta", - "model.input.text": "文字", - "model.input.image": "圖片", - "model.input.audio": "音訊", - "model.input.video": "影片", - "model.input.pdf": "pdf", - "model.tooltip.allows": "支援: {{inputs}}", - "model.tooltip.reasoning.allowed": "支援推理", - "model.tooltip.reasoning.none": "不支援推理", - "model.tooltip.context": "上下文上限 {{limit}}", - "common.search.placeholder": "搜尋", - "common.goBack": "返回", - "common.goForward": "前進", - "common.loading": "載入中", - "common.loading.ellipsis": "...", - "common.cancel": "取消", - "common.connect": "連線", - "common.disconnect": "中斷連線", - "common.continue": "提交", - "common.submit": "提交", - "common.save": "儲存", - "common.saving": "儲存中...", - "common.default": "預設", - "common.attachment": "附件", - - "prompt.placeholder.shell": "輸入 shell 命令... {{example}}", - "prompt.placeholder.normal": '隨便問點什麼... "{{example}}"', - "prompt.placeholder.simple": "隨便問點什麼...", - "prompt.placeholder.summarizeComments": "摘要評論…", - "prompt.placeholder.summarizeComment": "摘要這則評論…", - "prompt.mode.shell": "Shell", - "prompt.mode.normal": "Prompt", - "prompt.mode.shell.exit": "按 esc 退出", - - "prompt.example.1": "修復程式碼庫中的一個 TODO", - "prompt.example.2": "這個專案的技術堆疊是什麼?", - "prompt.example.3": "修復失敗的測試", - "prompt.example.4": "解釋驗證是如何運作的", - "prompt.example.5": "尋找並修復安全漏洞", - "prompt.example.6": "為使用者服務新增單元測試", - "prompt.example.7": "重構這個函式,讓它更易讀", - "prompt.example.8": "這個錯誤是什麼意思?", - "prompt.example.9": "幫我偵錯這個問題", - "prompt.example.10": "產生 API 文件", - "prompt.example.11": "最佳化資料庫查詢", - "prompt.example.12": "新增輸入驗證", - "prompt.example.13": "建立一個新的元件用於...", - "prompt.example.14": "我該如何部署這個專案?", - "prompt.example.15": "審查我的程式碼並給出最佳實務建議", - "prompt.example.16": "為這個函式新增錯誤處理", - "prompt.example.17": "解釋這個正規表示式", - "prompt.example.18": "把它轉換成 TypeScript", - "prompt.example.19": "在整個程式碼庫中新增日誌", - "prompt.example.20": "哪些相依性已經過期?", - "prompt.example.21": "幫我寫一個遷移腳本", - "prompt.example.22": "為這個端點實作快取", - "prompt.example.23": "給這個清單新增分頁", - "prompt.example.24": "建立一個 CLI 命令用於...", - "prompt.example.25": "這裡的環境變數是怎麼運作的?", - - "prompt.popover.emptyResults": "沒有符合的結果", - "prompt.popover.emptyCommands": "沒有符合的命令", - "prompt.dropzone.label": "將圖片、PDF 或文字檔案拖放到此處", - "prompt.dropzone.file.label": "拖放以 @提及檔案", - "prompt.slash.badge.custom": "自訂", - "prompt.slash.badge.skill": "技能", - "prompt.slash.badge.mcp": "mcp", - "prompt.context.active": "作用中", - "prompt.context.includeActiveFile": "包含作用中檔案", - "prompt.context.removeActiveFile": "從上下文移除目前檔案", - "prompt.context.removeFile": "從上下文移除檔案", - "prompt.action.attachFile": "附加檔案", - "prompt.attachment.remove": "移除附件", - "prompt.action.send": "傳送", - "prompt.action.stop": "停止", - - "prompt.toast.pasteUnsupported.title": "不支援的附件", - "prompt.toast.pasteUnsupported.description": "此處僅能附加圖片、PDF 或文字檔案。", - "prompt.toast.modelAgentRequired.title": "請選擇代理程式和模型", - "prompt.toast.modelAgentRequired.description": "傳送提示前請先選擇代理程式和模型。", - "prompt.toast.worktreeCreateFailed.title": "建立工作樹失敗", - "prompt.toast.sessionCreateFailed.title": "建立工作階段失敗", - "prompt.toast.shellSendFailed.title": "傳送 shell 命令失敗", - "prompt.toast.commandSendFailed.title": "傳送命令失敗", - "prompt.toast.promptSendFailed.title": "傳送提示失敗", - "prompt.toast.promptSendFailed.description": "無法取得工作階段", - - "dialog.mcp.title": "MCP", - "dialog.mcp.description": "已啟用 {{enabled}} / {{total}}", - "dialog.mcp.empty": "未設定 MCP", - - "dialog.lsp.empty": "已從檔案類型自動偵測到 LSPs", - "dialog.plugins.empty": "在 opencode.json 中設定的外掛程式", - - "mcp.status.connected": "已連線", - "mcp.status.failed": "失敗", - "mcp.status.needs_auth": "需要授權", - "mcp.auth.clickToAuthenticate": "點擊以進行授權", - "mcp.status.disabled": "已停用", - - "dialog.fork.empty": "沒有可用於分支的訊息", - - "dialog.directory.search.placeholder": "搜尋資料夾", - "dialog.directory.empty": "找不到資料夾", - "dialog.directory.action.selectFile": "選擇檔案", - "dialog.directory.action.selectFolder": "選擇資料夾", - "dialog.directory.root": "根目錄", - "dialog.directory.parent": "上層目錄", - "dialog.directory.readError": "無法讀取此資料夾", - - "dialog.server.title": "伺服器", - "dialog.server.description": "切換此應用程式連線的 OpenCode 伺服器。", - "dialog.server.search.placeholder": "搜尋伺服器", - "dialog.server.empty": "暫無伺服器", - "dialog.server.add.title": "新增伺服器", - "dialog.server.add.url": "伺服器 URL", - "dialog.server.add.placeholder": "http://localhost:4096", - "dialog.server.add.error": "無法連線到伺服器", - "dialog.server.add.checking": "檢查中...", - "dialog.server.add.button": "新增伺服器", - "dialog.server.add.name": "伺服器名稱(選填)", - "dialog.server.add.namePlaceholder": "Localhost", - "dialog.server.add.username": "使用者名稱(選填)", - "dialog.server.add.password": "密碼(選填)", - "dialog.server.edit.title": "編輯伺服器", - "dialog.server.default.title": "預設伺服器", - "dialog.server.default.description": "應用程式啟動時連線此伺服器,而不是啟動本地伺服器。需要重新啟動。", - "dialog.server.default.none": "未選擇伺服器", - "dialog.server.default.set": "將目前伺服器設為預設", - "dialog.server.default.clear": "清除", - "dialog.server.action.remove": "移除伺服器", - - "dialog.server.menu.edit": "編輯", - "dialog.server.menu.default": "設為預設", - "dialog.server.menu.defaultRemove": "取消預設", - "dialog.server.menu.delete": "刪除", - "dialog.server.current": "目前伺服器", - "dialog.server.status.default": "預設", - - "dialog.project.edit.title": "編輯專案", - "dialog.project.edit.name": "名稱", - "dialog.project.edit.icon": "圖示", - "dialog.project.edit.icon.alt": "專案圖示", - "dialog.project.edit.icon.hint": "點擊或拖曳圖片", - "dialog.project.edit.icon.recommended": "建議:128x128px", - "dialog.project.edit.color": "顏色", - "dialog.project.edit.color.select": "選擇{{color}}顏色", - - "dialog.project.edit.worktree.startup": "工作區啟動腳本", - "dialog.project.edit.worktree.startup.description": "在建立新的工作區 (worktree) 後執行。", - "dialog.project.edit.worktree.startup.placeholder": "例如 bun install", - "context.breakdown.title": "上下文拆分", - "context.breakdown.note": "輸入 token 的大致拆分。「其他」包含工具定義和額外開銷。", - "context.breakdown.system": "系統", - "context.breakdown.user": "使用者", - "context.breakdown.assistant": "助手", - "context.breakdown.tool": "工具呼叫", - "context.breakdown.other": "其他", - - "context.systemPrompt.title": "系統提示詞", - "context.rawMessages.title": "原始訊息", - - "context.stats.session": "工作階段", - "context.stats.messages": "訊息數", - "context.stats.provider": "提供者", - "context.stats.model": "模型", - "context.stats.limit": "上下文限制", - "context.stats.totalTokens": "總 token", - "context.stats.usage": "使用量", - "context.stats.inputTokens": "輸入 token", - "context.stats.outputTokens": "輸出 token", - "context.stats.reasoningTokens": "推理 token", - "context.stats.cacheTokens": "快取 token(讀/寫)", - "context.stats.userMessages": "使用者訊息", - "context.stats.assistantMessages": "助手訊息", - "context.stats.totalCost": "總成本", - "context.stats.sessionCreated": "建立時間", - "context.stats.lastActivity": "最後活動", - - "context.usage.tokens": "Token", - "context.usage.usage": "使用量", - "context.usage.cost": "成本", - "context.usage.clickToView": "點擊查看上下文", - "context.usage.view": "檢視上下文用量", - - "language.en": "English", - "language.zh": "简体中文", - "language.zht": "繁體中文", - "language.ko": "한국어", - "language.de": "Deutsch", - "language.es": "Español", - "language.fr": "Français", - "language.da": "Dansk", - "language.ja": "日本語", - "language.pl": "Polski", - "language.ru": "Русский", - "language.ar": "العربية", - "language.no": "Norsk", - "language.br": "Português (Brasil)", - "language.bs": "Bosanski", - "language.th": "ไทย", - "language.tr": "Türkçe", - - "toast.language.title": "語言", - "toast.language.description": "已切換到 {{language}}", - - "toast.theme.title": "主題已切換", - "toast.scheme.title": "顏色方案", - - "toast.workspace.enabled.title": "工作區已啟用", - "toast.workspace.enabled.description": "側邊欄現在顯示多個工作樹", - "toast.workspace.disabled.title": "工作區已停用", - "toast.workspace.disabled.description": "側邊欄只顯示主工作樹", - - "toast.permissions.autoaccept.on.title": "正在自動接受權限", - "toast.permissions.autoaccept.on.description": "權限請求將被自動批准", - "toast.permissions.autoaccept.off.title": "已停止自動接受權限", - "toast.permissions.autoaccept.off.description": "權限請求將需要批准", - - "toast.model.none.title": "未選擇模型", - "toast.model.none.description": "請先連線提供者以總結此工作階段", - - "toast.file.loadFailed.title": "載入檔案失敗", - - "toast.file.listFailed.title": "列出檔案失敗", - "toast.context.noLineSelection.title": "未選取行", - "toast.context.noLineSelection.description": "請先在檔案分頁中選取行範圍。", - "toast.session.share.copyFailed.title": "無法複製連結到剪貼簿", - "toast.session.share.success.title": "工作階段已分享", - "toast.session.share.success.description": "分享連結已複製到剪貼簿", - "toast.session.share.failed.title": "分享工作階段失敗", - "toast.session.share.failed.description": "分享工作階段時發生錯誤", - - "toast.session.unshare.success.title": "已取消分享工作階段", - "toast.session.unshare.success.description": "工作階段已成功取消分享", - "toast.session.unshare.failed.title": "取消分享失敗", - "toast.session.unshare.failed.description": "取消分享工作階段時發生錯誤", - - "toast.session.listFailed.title": "無法載入 {{project}} 的工作階段", - - "toast.update.title": "有可用更新", - "toast.update.description": "OpenCode 有新版本 ({{version}}) 可安裝。", - "toast.update.action.installRestart": "安裝並重新啟動", - "toast.update.action.notYet": "稍後", - - "error.page.title": "出了點問題", - "error.page.description": "載入應用程式時發生錯誤。", - "error.page.details.label": "錯誤詳情", - "error.page.action.restart": "重新啟動", - "error.page.action.report": "回報錯誤", - "error.page.action.reported": "已回報錯誤", - "error.page.action.checking": "檢查中...", - "error.page.action.checkUpdates": "檢查更新", - "error.page.action.updateTo": "更新到 {{version}}", - "error.page.report.prefix": "請將此錯誤回報給 OpenCode 團隊", - "error.page.report.discord": "在 Discord 上", - "error.page.version": "版本: {{version}}", - - "error.dev.rootNotFound": "找不到根元素。你是不是忘了把它新增到 index.html? 或者 id 屬性拼錯了?", - - "error.serverSync.connectFailed": "無法連線到伺服器。是否有伺服器正在 `{{url}}` 執行?", - "directory.error.invalidUrl": "URL 中的目錄無效。", - - "error.chain.unknown": "未知錯誤", - "error.chain.causedBy": "原因:", - "error.chain.apiError": "API 錯誤", - "error.chain.status": "狀態: {{status}}", - "error.chain.retryable": "可重試: {{retryable}}", - "error.chain.responseBody": "回應內容:\n{{body}}", - "error.chain.didYouMean": "你是不是想輸入: {{suggestions}}", - "error.chain.modelNotFound": "找不到模型: {{provider}}/{{model}}", - "error.chain.checkConfig": "請檢查你的設定 (opencode.json) 中的 provider/model 名稱", - "error.chain.mcpFailed": 'MCP 伺服器 "{{name}}" 啟動失敗。注意: OpenCode 暫不支援 MCP 認證。', - "error.chain.providerAuthFailed": "提供者認證失敗 ({{provider}}): {{message}}", - "error.chain.providerInitFailed": '無法初始化提供者 "{{provider}}"。請檢查憑證和設定。', - "error.chain.configJsonInvalid": "設定檔 {{path}} 不是有效的 JSON(C)", - "error.chain.configJsonInvalidWithMessage": "設定檔 {{path}} 不是有效的 JSON(C): {{message}}", - "error.chain.configDirectoryTypo": - '{{path}} 中的目錄 "{{dir}}" 無效。請將目錄重新命名為 "{{suggestion}}" 或移除它。這是一個常見拼寫錯誤。', - "error.chain.configFrontmatterError": "無法解析 {{path}} 中的 frontmatter:\n{{message}}", - "error.chain.configInvalid": "設定檔 {{path}} 無效", - "error.chain.configInvalidWithMessage": "設定檔 {{path}} 無效: {{message}}", - - "notification.permission.title": "需要權限", - "notification.permission.description": "{{sessionTitle}}({{projectName}})需要權限", - "notification.question.title": "問題", - "notification.question.description": "{{sessionTitle}}({{projectName}})有一個問題", - "notification.action.goToSession": "前往工作階段", - - "notification.session.responseReady.title": "回覆已就緒", - "notification.session.error.title": "工作階段錯誤", - "notification.session.error.fallbackDescription": "發生錯誤", - - "home.recentProjects": "最近專案", - "home.empty.title": "沒有最近專案", - "home.empty.description": "透過開啟本地專案開始使用", - - "session.tab.session": "工作階段", - "session.tab.review": "審查", - "session.tab.context": "上下文", - "session.panel.reviewAndFiles": "審查與檔案", - "session.review.filesChanged": "{{count}} 個檔案變更", - "session.review.change.one": "變更", - "session.review.change.other": "變更", - "session.review.loadingChanges": "正在載入變更...", - "session.review.empty": "此工作階段暫無變更", - "session.review.noChanges": "沒有變更", - "session.review.noVcs": "未偵測到 Git 版本控制系統,無法顯示變更", - "session.review.noSnapshot": "設定中已停用快照追蹤,因此無法使用工作階段變更", - "session.files.selectToOpen": "選取要開啟的檔案", - "session.files.all": "所有檔案", - "session.files.empty": "沒有檔案", - "session.files.binaryContent": "二進位檔案(無法顯示內容)", - "session.messages.renderEarlier": "顯示更早的訊息", - "session.messages.loadingEarlier": "正在載入更早的訊息...", - "session.messages.loadEarlier": "載入更早的訊息", - "session.messages.loading": "正在載入訊息...", - - "session.messages.jumpToLatest": "跳到最新", - "session.context.addToContext": "將 {{selection}} 新增到上下文", - "session.todo.title": "待辦事項", - "session.todo.collapse": "折疊", - "session.todo.expand": "展開", - "session.followupDock.summary.one": "{{count}} 則佇列訊息", - "session.followupDock.summary.other": "{{count}} 則佇列訊息", - "session.followupDock.sendNow": "立即傳送", - "session.followupDock.edit": "編輯", - "session.followupDock.collapse": "收合佇列訊息", - "session.followupDock.expand": "展開佇列訊息", - "session.revertDock.summary.one": "{{count}} 則已回復訊息", - "session.revertDock.summary.other": "{{count}} 則已回復訊息", - "session.revertDock.collapse": "收合已回復訊息", - "session.revertDock.expand": "展開已回復訊息", - "session.revertDock.restore": "還原訊息", - - "session.new.title": "建構任何東西", - "session.new.worktree.main": "主分支", - "session.new.worktree.mainWithBranch": "主分支 ({{branch}})", - "session.new.worktree.create": "建立新的 worktree", - "session.new.lastModified": "最後修改", - - "session.header.search.placeholder": "搜尋 {{project}}", - "session.header.searchFiles": "搜尋檔案", - "session.header.openIn": "開啟於", - "session.header.open.action": "開啟 {{app}}", - "session.header.open.ariaLabel": "在 {{app}} 中開啟", - "session.header.open.menu": "開啟選項", - "session.header.open.copyPath": "複製路徑", - - "status.popover.trigger": "狀態", - "status.popover.ariaLabel": "伺服器設定", - "status.popover.tab.servers": "伺服器", - "status.popover.tab.mcp": "MCP", - "status.popover.tab.lsp": "LSP", - "status.popover.tab.plugins": "外掛程式", - "status.popover.action.manageServers": "管理伺服器", - - "session.share.popover.title": "發佈到網頁", - "session.share.popover.description.shared": "此工作階段已在網頁上公開。任何擁有連結的人都可以存取。", - "session.share.popover.description.unshared": "在網頁上公開分享此工作階段。任何擁有連結的人都可以存取。", - "session.share.action.share": "分享", - "session.share.action.publish": "發佈", - "session.share.action.publishing": "正在發佈...", - "session.share.action.unpublish": "取消發佈", - "session.share.action.unpublishing": "正在取消發佈...", - "session.share.action.view": "檢視", - "session.share.copy.copied": "已複製", - "session.share.copy.copyLink": "複製連結", - - "lsp.tooltip.none": "沒有 LSP 伺服器", - "lsp.label.connected": "{{count}} LSP", - - "prompt.loading": "正在載入提示...", - "terminal.loading": "正在載入終端機...", - "terminal.title": "終端機", - "terminal.title.numbered": "終端機 {{number}}", - "terminal.close": "關閉終端機", - - "terminal.connectionLost.title": "連線中斷", - "terminal.connectionLost.description": "終端機連線已中斷。這可能會在伺服器重新啟動時發生。", - "common.closeTab": "關閉標籤頁", - "common.dismiss": "忽略", - "common.requestFailed": "要求失敗", - "common.moreOptions": "更多選項", - "common.learnMore": "深入了解", - "common.rename": "重新命名", - "common.reset": "重設", - "common.archive": "封存", - "common.delete": "刪除", - "common.close": "關閉", - "common.edit": "編輯", - "common.loadMore": "載入更多", - - "common.key.esc": "ESC", - "sidebar.menu.toggle": "切換選單", - "sidebar.nav.projectsAndSessions": "專案與工作階段", - "sidebar.settings": "設定", - "sidebar.help": "說明", - "sidebar.workspaces.enable": "啟用工作區", - "sidebar.workspaces.disable": "停用工作區", - "sidebar.gettingStarted.title": "開始使用", - "sidebar.gettingStarted.line1": "OpenCode 提供免費模型,你可以立即開始使用。", - "sidebar.gettingStarted.line2": "連線任意提供者即可使用更多模型,如 Claude、GPT、Gemini 等。", - "sidebar.project.recentSessions": "最近工作階段", - "sidebar.project.viewAllSessions": "查看全部工作階段", - "sidebar.project.clearNotifications": "清除通知", - - "app.name.desktop": "OpenCode Desktop", - "settings.section.desktop": "桌面", - "settings.section.server": "伺服器", - "settings.tab.general": "一般", - "settings.tab.shortcuts": "快速鍵", - "settings.desktop.section.wsl": "WSL", - "settings.desktop.wsl.title": "WSL 整合", - "settings.desktop.wsl.description": "在 Windows 上的 WSL 中執行 OpenCode 伺服器。", - - "settings.general.section.appearance": "外觀", - "settings.general.section.notifications": "系統通知", - "settings.general.section.updates": "更新", - "settings.general.section.sounds": "音效", - "settings.general.section.feed": "資訊流", - "settings.general.section.display": "顯示", - - "settings.general.row.language.title": "語言", - "settings.general.row.language.description": "變更 OpenCode 的顯示語言", - "settings.general.row.appearance.title": "外觀", - "settings.general.row.appearance.description": "自訂 OpenCode 在你的裝置上的外觀", - "settings.general.row.colorScheme.title": "配色方案", - "settings.general.row.colorScheme.description": "選擇 OpenCode 要跟隨系統、淺色或深色主題", - "settings.general.row.theme.title": "主題", - "settings.general.row.theme.description": "自訂 OpenCode 的主題。", - "settings.general.row.font.title": "程式碼字型", - "settings.general.row.font.description": "自訂程式碼區塊使用的字型", - "settings.general.row.terminalFont.title": "Terminal Font", - "settings.general.row.terminalFont.description": "Customise the font used in the terminal", - "settings.general.row.uiFont.title": "介面字型", - "settings.general.row.uiFont.description": "自訂整個介面使用的字型", - "settings.general.row.followup.title": "後續追問行為", - "settings.general.row.followup.description": "選擇後續追問提示是立即引導還是進入佇列等待", - "settings.general.row.followup.option.queue": "佇列", - "settings.general.row.followup.option.steer": "引導", - "settings.general.row.reasoningSummaries.title": "顯示推理摘要", - "settings.general.row.reasoningSummaries.description": "在時間軸中顯示模型推理摘要", - - "settings.general.row.shellToolPartsExpanded.title": "展開 shell 工具區塊", - "settings.general.row.shellToolPartsExpanded.description": "在時間軸中預設展開 shell 工具區塊", - "settings.general.row.editToolPartsExpanded.title": "展開 edit 工具區塊", - "settings.general.row.editToolPartsExpanded.description": "在時間軸中預設展開 edit、write 和 patch 工具區塊", - "settings.general.row.wayland.title": "使用原生 Wayland", - "settings.general.row.wayland.description": "在 Wayland 上停用 X11 後備模式。需要重新啟動。", - "settings.general.row.wayland.tooltip": "在混合更新率螢幕的 Linux 系統上,原生 Wayland 可能更穩定。", - - "settings.general.row.releaseNotes.title": "發行說明", - "settings.general.row.releaseNotes.description": "更新後顯示「新功能」彈出視窗", - - "settings.updates.row.startup.title": "啟動時檢查更新", - "settings.updates.row.startup.description": "在 OpenCode 啟動時自動檢查更新", - "settings.updates.row.check.title": "檢查更新", - "settings.updates.row.check.description": "手動檢查更新並在有更新時安裝", - "settings.updates.action.checkNow": "立即檢查", - "settings.updates.action.checking": "檢查中...", - "settings.updates.toast.latest.title": "已是最新版本", - "settings.updates.toast.latest.description": "你正在使用最新版本的 OpenCode。", - - "sound.option.none": "無", - "sound.option.alert01": "警報 01", - "sound.option.alert02": "警報 02", - "sound.option.alert03": "警報 03", - "sound.option.alert04": "警報 04", - "sound.option.alert05": "警報 05", - "sound.option.alert06": "警報 06", - "sound.option.alert07": "警報 07", - "sound.option.alert08": "警報 08", - "sound.option.alert09": "警報 09", - "sound.option.alert10": "警報 10", - "sound.option.bipbop01": "嗶啵 01", - "sound.option.bipbop02": "嗶啵 02", - "sound.option.bipbop03": "嗶啵 03", - "sound.option.bipbop04": "嗶啵 04", - "sound.option.bipbop05": "嗶啵 05", - "sound.option.bipbop06": "嗶啵 06", - "sound.option.bipbop07": "嗶啵 07", - "sound.option.bipbop08": "嗶啵 08", - "sound.option.bipbop09": "嗶啵 09", - "sound.option.bipbop10": "嗶啵 10", - "sound.option.staplebops01": "斯泰普博普斯 01", - "sound.option.staplebops02": "斯泰普博普斯 02", - "sound.option.staplebops03": "斯泰普博普斯 03", - "sound.option.staplebops04": "斯泰普博普斯 04", - "sound.option.staplebops05": "斯泰普博普斯 05", - "sound.option.staplebops06": "斯泰普博普斯 06", - "sound.option.staplebops07": "斯泰普博普斯 07", - "sound.option.nope01": "否 01", - "sound.option.nope02": "否 02", - "sound.option.nope03": "否 03", - "sound.option.nope04": "否 04", - "sound.option.nope05": "否 05", - "sound.option.nope06": "否 06", - "sound.option.nope07": "否 07", - "sound.option.nope08": "否 08", - "sound.option.nope09": "否 09", - "sound.option.nope10": "否 10", - "sound.option.nope11": "否 11", - "sound.option.nope12": "否 12", - "sound.option.yup01": "是 01", - "sound.option.yup02": "是 02", - "sound.option.yup03": "是 03", - "sound.option.yup04": "是 04", - "sound.option.yup05": "是 05", - "sound.option.yup06": "是 06", - "settings.general.notifications.agent.title": "代理程式", - "settings.general.notifications.agent.description": "當代理程式完成或需要注意時顯示系統通知", - "settings.general.notifications.permissions.title": "權限", - "settings.general.notifications.permissions.description": "當需要權限時顯示系統通知", - "settings.general.notifications.errors.title": "錯誤", - "settings.general.notifications.errors.description": "發生錯誤時顯示系統通知", - - "settings.general.sounds.agent.title": "代理程式", - "settings.general.sounds.agent.description": "當代理程式完成或需要注意時播放聲音", - "settings.general.sounds.permissions.title": "權限", - "settings.general.sounds.permissions.description": "當需要權限時播放聲音", - "settings.general.sounds.errors.title": "錯誤", - "settings.general.sounds.errors.description": "發生錯誤時播放聲音", - - "settings.shortcuts.title": "鍵盤快速鍵", - "settings.shortcuts.reset.button": "重設為預設值", - "settings.shortcuts.reset.toast.title": "快速鍵已重設", - "settings.shortcuts.reset.toast.description": "鍵盤快速鍵已重設為預設設定。", - "settings.shortcuts.conflict.title": "快速鍵已被占用", - "settings.shortcuts.conflict.description": "{{keybind}} 已分配給 {{titles}}。", - "settings.shortcuts.unassigned": "未設定", - "settings.shortcuts.pressKeys": "按下按鍵", - "settings.shortcuts.search.placeholder": "搜尋快速鍵", - "settings.shortcuts.search.empty": "找不到快速鍵", - - "settings.shortcuts.group.general": "一般", - "settings.shortcuts.group.session": "工作階段", - "settings.shortcuts.group.navigation": "導覽", - "settings.shortcuts.group.modelAndAgent": "模型與代理程式", - "settings.shortcuts.group.terminal": "終端機", - "settings.shortcuts.group.prompt": "提示", - - "settings.providers.title": "提供者", - "settings.providers.description": "提供者設定將在此處可設定。", - "settings.providers.section.connected": "已連線的提供商", - "settings.providers.connected.empty": "沒有已連線的提供商", - "settings.providers.section.popular": "熱門提供商", - "settings.providers.tag.environment": "環境", - "settings.providers.tag.config": "配置", - "settings.providers.tag.custom": "自訂", - "settings.providers.tag.other": "其他", - "settings.models.title": "模型", - "settings.models.description": "模型設定將在此處可設定。", - "settings.agents.title": "代理程式", - "settings.agents.description": "代理程式設定將在此處可設定。", - "settings.commands.title": "命令", - "settings.commands.description": "命令設定將在此處可設定。", - "settings.mcp.title": "MCP", - "settings.mcp.description": "MCP 設定將在此處可設定。", - - "settings.permissions.title": "權限", - "settings.permissions.description": "控制伺服器預設可以使用哪些工具。", - "settings.permissions.section.tools": "工具", - "settings.permissions.toast.updateFailed.title": "更新權限失敗", - - "settings.permissions.action.allow": "允許", - "settings.permissions.action.ask": "詢問", - "settings.permissions.action.deny": "拒絕", - - "settings.permissions.tool.read.title": "讀取", - "settings.permissions.tool.read.description": "讀取檔案(符合檔案路徑)", - "settings.permissions.tool.edit.title": "編輯", - "settings.permissions.tool.edit.description": "修改檔案,包括編輯、寫入、修補和多重編輯", - "settings.permissions.tool.glob.title": "Glob", - "settings.permissions.tool.glob.description": "使用 glob 模式符合檔案", - "settings.permissions.tool.grep.title": "Grep", - "settings.permissions.tool.grep.description": "使用正規表示式搜尋檔案內容", - "settings.permissions.tool.list.title": "清單", - "settings.permissions.tool.list.description": "列出目錄中的檔案", - "settings.permissions.tool.bash.title": "Bash", - "settings.permissions.tool.bash.description": "執行 shell 命令", - "settings.permissions.tool.task.title": "Task", - "settings.permissions.tool.task.description": "啟動子代理程式", - "settings.permissions.tool.skill.title": "Skill", - "settings.permissions.tool.skill.description": "按名稱載入技能", - "settings.permissions.tool.lsp.title": "LSP", - "settings.permissions.tool.lsp.description": "執行語言伺服器查詢", - "settings.permissions.tool.todowrite.title": "更新待辦", - "settings.permissions.tool.todowrite.description": "更新待辦清單", - "settings.permissions.tool.webfetch.title": "Web Fetch", - "settings.permissions.tool.webfetch.description": "從 URL 取得內容", - "settings.permissions.tool.websearch.title": "Web Search", - "settings.permissions.tool.websearch.description": "搜尋網頁", - "settings.permissions.tool.external_directory.title": "外部目錄", - "settings.permissions.tool.external_directory.description": "存取專案目錄之外的檔案", - "settings.permissions.tool.doom_loop.title": "Doom Loop", - "settings.permissions.tool.doom_loop.description": "偵測具有相同輸入的重複工具呼叫", - - "session.delete.failed.title": "刪除工作階段失敗", - "session.delete.title": "刪除工作階段", - "session.delete.confirm": '刪除工作階段 "{{name}}"?', - "session.delete.button": "刪除工作階段", - - "workspace.new": "新增工作區", - "workspace.type.local": "本地", - "workspace.type.sandbox": "沙盒", - "workspace.create.failed.title": "建立工作區失敗", - "workspace.delete.failed.title": "刪除工作區失敗", - "workspace.resetting.title": "正在重設工作區", - "workspace.resetting.description": "這可能需要一點時間。", - "workspace.reset.failed.title": "重設工作區失敗", - "workspace.reset.success.title": "工作區已重設", - "workspace.reset.success.description": "工作區已與預設分支保持一致。", - "workspace.error.stillPreparing": "工作區仍在準備中", - "workspace.status.checking": "正在檢查未合併的變更...", - "workspace.status.error": "無法驗證 git 狀態。", - "workspace.status.clean": "未偵測到未合併的變更。", - "workspace.status.dirty": "偵測到未合併的變更。", - "workspace.delete.title": "刪除工作區", - "workspace.delete.confirm": '刪除工作區 "{{name}}"?', - "workspace.delete.button": "刪除工作區", - "workspace.reset.title": "重設工作區", - "workspace.reset.confirm": '重設工作區 "{{name}}"?', - "workspace.reset.button": "重設工作區", - "workspace.reset.archived.none": "不會封存任何作用中工作階段。", - "workspace.reset.archived.one": "將封存 1 個工作階段。", - "workspace.reset.archived.many": "將封存 {{count}} 個工作階段。", - "workspace.reset.note": "這將把工作區重設為與預設分支一致。", - "common.open": "打開", - "dialog.releaseNotes.action.getStarted": "開始", - "dialog.releaseNotes.action.next": "下一步", - "dialog.releaseNotes.action.hideFuture": "不再顯示", - "dialog.releaseNotes.media.alt": "發佈預覽", - "toast.project.reloadFailed.title": "無法重新載入 {{project}}", - "error.server.invalidConfiguration": "無效的設定", - "common.moreCountSuffix": " (還有 {{count}} 個)", - "common.time.justNow": "剛剛", - "common.time.minutesAgo.short": "{{count}}分鐘前", - "common.time.hoursAgo.short": "{{count}}小時前", - "common.time.daysAgo.short": "{{count}}天前", - "settings.providers.connected.environmentDescription": "已從環境變數連線", - "settings.providers.custom.description": "透過基本 URL 新增與 OpenAI 相容的提供者。", - - "app.server.unreachable": "無法連線至 {{server}}", - "app.server.retrying": "正在自動重試...", - "app.server.otherServers": "其他伺服器", - "dialog.server.add.usernamePlaceholder": "使用者名稱", - "dialog.server.add.passwordPlaceholder": "密碼", - "server.row.noUsername": "無使用者名稱", - "session.review.noVcs.createGit.title": "建立 Git 儲存庫", - "session.review.noVcs.createGit.description": "追蹤、檢閱及復原此專案中的變更", - "session.review.noVcs.createGit.actionLoading": "正在建立 Git 儲存庫...", - "session.review.noVcs.createGit.action": "建立 Git 儲存庫", - "session.todo.progress": "已完成 {{done}} 個待辦事項(共 {{total}} 個)", - "session.question.progress": "{{current}}/{{total}} 個問題", - "session.header.open.finder": "Finder", - "session.header.open.fileExplorer": "檔案總管", - "session.header.open.fileManager": "檔案管理員", - "session.header.open.app.vscode": "VS Code", - "session.header.open.app.cursor": "Cursor", - "session.header.open.app.zed": "Zed", - "session.header.open.app.textmate": "TextMate", - "session.header.open.app.antigravity": "Antigravity", - "session.header.open.app.terminal": "終端機", - "session.header.open.app.iterm2": "iTerm2", - "session.header.open.app.ghostty": "Ghostty", - "session.header.open.app.warp": "Warp", - "session.header.open.app.xcode": "Xcode", - "session.header.open.app.androidStudio": "Android Studio", - "session.header.open.app.powershell": "PowerShell", - "session.header.open.app.sublimeText": "Sublime Text", - "debugBar.ariaLabel": "開發效能診斷", - "debugBar.na": "不適用", - "debugBar.nav.label": "NAV", - "debugBar.nav.tip": "最後一次完成的涉及工作階段頁面的路由轉換,從路由器啟動到穩定後的第一次繪製。", - "debugBar.fps.label": "FPS", - "debugBar.fps.tip": "過去 5 秒內的滾動幀率。", - "debugBar.frame.label": "FRAME", - "debugBar.frame.tip": "過去 5 秒內最差的幀時間。", - "debugBar.jank.label": "JANK", - "debugBar.jank.tip": "過去 5 秒內超過 32ms 的幀。", - "debugBar.long.label": "LONG", - "debugBar.long.tip": "過去 5 秒內的阻塞時間和長任務計數。最大任務:{{max}}。", - "debugBar.delay.label": "DELAY", - "debugBar.delay.tip": "過去 5 秒內觀察到的最差輸入延遲。", - "debugBar.inp.label": "INP", - "debugBar.inp.tip": "過去 5 秒內的近似互動持續時間。這類似於 INP,而非官方的 Web Vitals INP。", - "debugBar.cls.label": "CLS", - "debugBar.cls.tip": "目前應用程式生命週期的累積版面配置位移。", - "debugBar.mem.label": "MEM", - "debugBar.mem.tipUnavailable": "使用的 JS 堆積與堆積限制。僅限 Chromium。", - "debugBar.mem.tip": "使用的 JS 堆積與堆積限制。{{used}} / {{limit}}。", - "common.key.ctrl": "Ctrl", - "common.key.alt": "Alt", - "common.key.shift": "Shift", - "common.key.meta": "Meta", - "common.key.space": "空白鍵", - "common.key.backspace": "退格鍵", - "common.key.enter": "Enter", - "common.key.tab": "Tab", - "common.key.delete": "Delete", - "common.key.home": "Home", - "common.key.end": "End", - "common.key.pageUp": "Page Up", - "common.key.pageDown": "Page Down", - "common.key.insert": "Insert", - "common.unknown": "未知", - "error.page.circular": "[循環]", - "error.serverSDK.noServerAvailable": "無可用的伺服器", - "error.serverSDK.serverNotAvailable": "伺服器無法使用", - "error.childStore.persistedCacheCreateFailed": "建立持續性快取失敗", - "error.childStore.persistedProjectMetadataCreateFailed": "建立持續性專案中繼資料失敗", - "error.childStore.persistedProjectIconCreateFailed": "建立持續性專案圖示失敗", - "error.childStore.storeCreateFailed": "建立儲存區失敗", - "terminal.connectionLost.abnormalClose": "WebSocket 異常關閉:{{code}}", -} satisfies Partial> diff --git a/packages/console/app/src/component/footer.tsx b/packages/console/app/src/component/footer.tsx index 0ea370ac78..ccfde46464 100644 --- a/packages/console/app/src/component/footer.tsx +++ b/packages/console/app/src/component/footer.tsx @@ -8,12 +8,7 @@ import { useI18n } from "~/context/i18n" export function Footer() { const language = useLanguage() const i18n = useI18n() - const community = createMemo(() => { - const locale = language.locale() - return locale === "zh" || locale === "zht" - ? ({ key: "footer.feishu", link: language.route("/feishu") } as const) - : ({ key: "footer.discord", link: language.route("/discord") } as const) - }) + const community = createMemo(() => ({ key: "footer.discord", link: language.route("/discord") }) as const) const githubData = createAsync(() => github()) const starCount = createMemo(() => githubData()?.stars diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts deleted file mode 100644 index ddb66b4135..0000000000 --- a/packages/console/app/src/i18n/ar.ts +++ /dev/null @@ -1,819 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "الوثائق", - "nav.changelog": "سجل التغييرات", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "المؤسسات", - "nav.zen": "Zen", - "nav.login": "تسجيل الدخول", - "nav.free": "تحميل", - "nav.home": "الرئيسية", - "nav.openMenu": "فتح القائمة", - "nav.getStartedFree": "ابدأ مجانا", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "نسخ الشعار كـ SVG", - "nav.context.copyWordmark": "نسخ اسم العلامة كـ SVG", - "nav.context.brandAssets": "أصول العلامة التجارية", - - "footer.github": "GitHub", - "footer.docs": "الوثائق", - "footer.changelog": "سجل التغييرات", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "العلامة التجارية", - "legal.privacy": "الخصوصية", - "legal.terms": "الشروط", - - "email.title": "كن الأول في المعرفة عند إطلاق منتجات جديدة", - "email.subtitle": "انضم إلى قائمة الانتظار للحصول على وصول مبكر.", - "email.placeholder": "عنوان البريد الإلكتروني", - "email.subscribe": "اشتراك", - "email.success": "تبقّت خطوة واحدة: تحقق من بريدك وأكّد عنوانك", - - "notFound.title": "غير موجود | opencode", - "notFound.heading": "404 - الصفحة غير موجودة", - "notFound.home": "الرئيسية", - "notFound.docs": "الوثائق", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "شعار opencode الفاتح", - "notFound.logoDarkAlt": "شعار opencode الداكن", - - "user.logout": "تسجيل الخروج", - - "auth.callback.error.codeMissing": "لم يتم العثور على رمز التفويض.", - - "workspace.select": "اختر مساحة العمل", - "workspace.createNew": "+ إنشاء مساحة عمل جديدة", - "workspace.modal.title": "إنشاء مساحة عمل جديدة", - "workspace.modal.placeholder": "أدخل اسم مساحة العمل", - - "common.cancel": "إلغاء", - "common.creating": "جارٍ الإنشاء...", - "common.create": "إنشاء", - - "common.videoUnsupported": "متصفحك لا يدعم وسم الفيديو.", - "common.figure": "شكل {{n}}.", - "common.faq": "الأسئلة الشائعة", - "common.learnMore": "اعرف المزيد", - - "error.invalidPlan": "خطة غير صالحة", - "error.workspaceRequired": "معرف مساحة العمل مطلوب", - "error.alreadySubscribed": "مساحة العمل هذه لديها اشتراك بالفعل", - "error.limitRequired": "الحد مطلوب.", - "error.monthlyLimitInvalid": "قم بتعيين حد شهري صالح.", - "error.workspaceNameRequired": "اسم مساحة العمل مطلوب.", - "error.nameTooLong": "يجب أن يكون الاسم 255 حرفًا أو أقل.", - "error.emailRequired": "البريد الإلكتروني مطلوب", - "error.roleRequired": "الدور مطلوب", - "error.idRequired": "المعرف مطلوب", - "error.nameRequired": "الاسم مطلوب", - "error.providerRequired": "المزود مطلوب", - "error.apiKeyRequired": "مفتاح API مطلوب", - "error.modelRequired": "النموذج مطلوب", - "error.reloadAmountMin": "يجب أن يكون مبلغ الشحن ${{amount}} على الأقل", - "error.reloadTriggerMin": "يجب أن يكون حد الرصيد ${{amount}} على الأقل", - - "app.meta.description": "OpenCode - وكيل البرمجة مفتوح المصدر.", - - "home.title": "OpenCode | وكيل برمجة بالذكاء الاصطناعي مفتوح المصدر", - - "temp.title": "opencode | وكيل برمجة بالذكاء الاصطناعي مبني للطرفية", - "temp.hero.title": "وكيل البرمجة بالذكاء الاصطناعي المبني للطرفية", - "temp.zen": "opencode zen", - "temp.getStarted": "ابدأ", - "temp.feature.native.title": "واجهة طرفية أصلية", - "temp.feature.native.body": "واجهة مستخدم طرفية سريعة الاستجابة، أصلية، وقابلة للتخصيص", - "temp.feature.zen.beforeLink": "قائمة", - "temp.feature.zen.link": "منسقة من النماذج", - "temp.feature.zen.afterLink": "مقدمة من opencode", - "temp.feature.models.beforeLink": "يدعم أكثر من 75 مزود LLM من خلال", - "temp.feature.models.afterLink": "، بما في ذلك النماذج المحلية", - "temp.screenshot.caption": "واجهة OpenCode الطرفية مع سمة tokyonight", - "temp.screenshot.alt": "واجهة OpenCode الطرفية بسمة tokyonight", - "temp.logoLightAlt": "شعار opencode الفاتح", - "temp.logoDarkAlt": "شعار opencode الداكن", - - "home.banner.badge": "جديد", - "home.banner.text": "تطبيق سطح المكتب متاح بنسخة تجريبية", - "home.banner.platforms": "على macOS، Windows، وLinux", - "home.banner.downloadNow": "حمّل الآن", - "home.banner.downloadBetaNow": "حمّل النسخة التجريبية لتطبيق سطح المكتب الآن", - - "home.hero.title": "وكيل برمجة بالذكاء الاصطناعي مفتوح المصدر", - "home.hero.subtitle.a": "نماذج مجانية مضمّنة أو اربط أي نموذج من أي مزوّد،", - "home.hero.subtitle.b": "بما في ذلك Claude، GPT، Gemini وغيرها.", - - "home.install.ariaLabel": "خيارات التثبيت", - - "home.what.title": "ما هو OpenCode؟", - "home.what.body": "OpenCode وكيل مفتوح المصدر يساعدك على كتابة الكود في الطرفية، IDE، أو سطح المكتب.", - "home.what.lsp.title": "دعم LSP", - "home.what.lsp.body": "يحمّل تلقائيًا موافقات LSP المناسبة للـ LLM", - "home.what.multiSession.title": "جلسات متعددة", - "home.what.multiSession.body": "ابدأ عدة وكلاء بالتوازي على نفس المشروع", - "home.what.shareLinks.title": "روابط المشاركة", - "home.what.shareLinks.body": "شارك رابطًا لأي جلسة للرجوع إليها أو لتصحيح الأخطاء", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "سجّل الدخول بـ GitHub لاستخدام حسابك في Copilot", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "سجّل الدخول بـ OpenAI لاستخدام حسابك في ChatGPT Plus أو Pro", - "home.what.anyModel.title": "أي نموذج", - "home.what.anyModel.body": "75+ مزوّد LLM عبر Models.dev، بما في ذلك النماذج المحلية", - "home.what.anyEditor.title": "أي محرر", - "home.what.anyEditor.body": "متاح كواجهة طرفية، وتطبيق سطح مكتب، وامتداد IDE", - "home.what.readDocs": "اقرأ الوثائق", - - "home.growth.title": "وكيل برمجة بالذكاء الاصطناعي مفتوح المصدر", - "home.growth.body": - "مع أكثر من {{stars}} نجمة على GitHub، و{{contributors}} مساهمًا، وأكثر من {{commits}} Commit، يستخدم OpenCode ويثق به أكثر من {{monthlyUsers}} مطوّر كل شهر.", - "home.growth.githubStars": "نجوم GitHub", - "home.growth.contributors": "المساهمون", - "home.growth.monthlyDevs": "مطورون شهريًا", - - "home.privacy.title": "مصمم للخصوصية أولاً", - "home.privacy.body": "لا يخزّن OpenCode أي كود أو بيانات سياق، ليتمكن من العمل في بيئات حساسة للخصوصية.", - "home.privacy.learnMore": "اعرف المزيد عن", - "home.privacy.link": "الخصوصية", - - "home.faq.q1": "ما هو OpenCode؟", - "home.faq.a1": - "OpenCode وكيل مفتوح المصدر يساعدك على كتابة وتشغيل الكود مع أي نموذج ذكاء اصطناعي. متاح كواجهة طرفية، وتطبيق سطح مكتب، أو امتداد IDE.", - "home.faq.q2": "كيف أستخدم OpenCode؟", - "home.faq.a2.before": "أسهل طريقة للبدء هي قراءة", - "home.faq.a2.link": "المقدمة", - "home.faq.q3": "هل أحتاج لاشتراكات ذكاء اصطناعي إضافية لاستخدام OpenCode؟", - "home.faq.a3.p1": - "ليس بالضرورة، فـ OpenCode يأتي مع مجموعة من النماذج المجانية التي تستطيع استخدامها دون إنشاء حساب.", - "home.faq.a3.p2.beforeZen": "وبخلاف ذلك، يمكنك استخدام أي من نماذج البرمجة الشائعة بإنشاء حساب", - "home.faq.a3.p2.afterZen": ".", - "home.faq.a3.p3": - "مع أننا نشجّع المستخدمين على استخدام Zen، فإن OpenCode يعمل أيضًا مع كل المزودين الشائعين مثل OpenAI، Anthropic، xAI إلخ.", - "home.faq.a3.p4.beforeLocal": "ويمكنك أيضًا ربط", - "home.faq.a3.p4.localLink": "النماذج المحلية", - "home.faq.q4": "هل يمكنني استخدام اشتراكاتي الحالية مع OpenCode؟", - "home.faq.a4.p1": - "نعم، يدعم OpenCode خطط الاشتراك من كل المزودين الرئيسيين. يمكنك استخدام اشتراكات Claude Pro/Max، ChatGPT Plus/Pro، أو GitHub Copilot.", - "home.faq.q5": "هل يمكنني استخدام OpenCode في الطرفية فقط؟", - "home.faq.a5.beforeDesktop": "ليس بعد الآن! OpenCode متاح الآن كتطبيق لـ", - "home.faq.a5.desktop": "سطح المكتب", - "home.faq.a5.and": "و", - "home.faq.a5.web": "الويب", - "home.faq.q6": "كم تكلفة OpenCode؟", - "home.faq.a6": - "OpenCode مجاني 100% للاستخدام. كما يأتي مع مجموعة من النماذج المجانية. قد توجد تكاليف إضافية إذا ربطت مزوّدًا آخر.", - "home.faq.q7": "ماذا عن البيانات والخصوصية؟", - "home.faq.a7.p1": "لا يتم تخزين بياناتك ومعلوماتك إلا عندما تستخدم نماذجنا المجانية أو تنشئ روابط قابلة للمشاركة.", - "home.faq.a7.p2.beforeModels": "اعرف المزيد عن", - "home.faq.a7.p2.modelsLink": "نماذجنا", - "home.faq.a7.p2.and": "و", - "home.faq.a7.p2.shareLink": "صفحات المشاركة", - "home.faq.q8": "هل OpenCode مفتوح المصدر؟", - "home.faq.a8.p1": "نعم، OpenCode مفتوح المصدر بالكامل. الكود المصدري متاح علنًا على", - "home.faq.a8.p2": "بموجب", - "home.faq.a8.mitLicense": "رخصة MIT", - "home.faq.a8.p3": - "، مما يعني أن أي شخص يستطيع استخدامه أو تعديله أو المساهمة في تطويره. يمكن لأي شخص من المجتمع فتح قضايا، وتقديم طلبات سحب، وتوسيع الوظائف.", - - "home.zenCta.title": "وصول لنماذج محسنة وموثوقة لوكلاء البرمجة", - "home.zenCta.body": - "يمنحك Zen الوصول إلى مجموعة مختارة بعناية من نماذج الذكاء الاصطناعي التي اختبرها OpenCode وقاس أداءها خصيصًا لوكلاء البرمجة. لا حاجة للقلق بشأن اختلاف الأداء والجودة بين المزودين، استخدم نماذج محققة تعمل بكفاءة.", - "home.zenCta.link": "تعرف على Zen", - - "zen.title": "OpenCode Zen | مجموعة منسقة من النماذج المحسنة والموثوقة لوكلاء البرمجة", - "zen.hero.title": "نماذج محسنة وموثوقة لوكلاء البرمجة", - "zen.hero.body": - "يمنحك Zen الوصول إلى مجموعة منسقة من نماذج الذكاء الاصطناعي التي اختبرها OpenCode وقاس أداءها خصيصًا لوكلاء البرمجة. لا حاجة للقلق بشأن اختلاف الأداء والجودة، استخدم نماذج محققة تعمل بكفاءة.", - - "zen.faq.q1": "ما هو OpenCode Zen؟", - "zen.faq.a1": - "Zen هو مجموعة منسقة من نماذج الذكاء الاصطناعي التي تم اختبارها وقياس أدائها لوكلاء البرمجة، أنشأها الفريق المطور لـ OpenCode.", - "zen.faq.q2": "ما الذي يجعل Zen أكثر دقة؟", - "zen.faq.a2": - "يوفر Zen فقط النماذج التي تم اختبارها وقياس أدائها خصيصًا لوكلاء البرمجة. لن تستخدم سكين زبدة لقطع شريحة لحم، فلا تستخدم نماذج ضعيفة للبرمجة.", - "zen.faq.q3": "هل Zen أرخص؟", - "zen.faq.a3": - "Zen ليس للربح. يمرر Zen التكاليف من مزودي النماذج إليك مباشرة. كلما زاد استخدام Zen، تمكن OpenCode من التفاوض على أسعار أفضل وتمريرها إليك.", - "zen.faq.q4": "كم تكلفة Zen؟", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "يحاسب لكل طلب", - "zen.faq.a4.p1.afterPricing": "بدون أي هوامش ربح، لذا تدفع بالضبط ما يفرضه مزود النموذج.", - "zen.faq.a4.p2.beforeAccount": "تعتمد تكلفتك الإجمالية على الاستخدام، ويمكنك تعيين حدود إنفاق شهرية في", - "zen.faq.a4.p2.accountLink": "حسابك", - "zen.faq.a4.p3": - "لتغطية التكاليف، يضيف OpenCode فقط رسومًا صغيرة لمعالجة الدفع قدرها 1.23 دولار لكل إعادة شحن رصيد بقيمة 20 دولارًا.", - "zen.faq.q5": "ماذا عن البيانات والخصوصية؟", - "zen.faq.a5.beforeExceptions": - "تتم استضافة جميع نماذج Zen في الولايات المتحدة. يتبع المزودون سياسة عدم الاحتفاظ بالبيانات ولا يستخدمون بياناتك لتدريب النماذج، مع", - "zen.faq.a5.exceptionsLink": "الاستثناءات التالية", - "zen.faq.q6": "هل يمكنني تعيين حدود للإنفاق؟", - "zen.faq.a6": "نعم، يمكنك تعيين حدود إنفاق شهرية في حسابك.", - "zen.faq.q7": "هل يمكنني الإلغاء؟", - "zen.faq.a7": "نعم، يمكنك تعطيل الفوترة في أي وقت واستخدام رصيدك المتبقي.", - "zen.faq.q8": "هل يمكنني استخدام Zen مع وكلاء برمجة آخرين؟", - "zen.faq.a8": - "بينما يعمل Zen بشكل رائع مع OpenCode، يمكنك استخدام Zen مع أي وكيل. اتبع تعليمات الإعداد في وكيل البرمجة المفضل لديك.", - - "zen.cta.start": "ابدأ مع Zen", - "zen.pricing.title": "أضف رصيد 20 دولار (دفع حسب الاستخدام)", - "zen.pricing.fee": "(+1.23 دولار رسوم معالجة البطاقة)", - "zen.pricing.body": "استخدمه مع أي وكيل. عيّن حدود الإنفاق الشهري. ألغِ في أي وقت.", - "zen.problem.title": "ما المشكلة التي يحلها Zen؟", - "zen.problem.body": - "هناك العديد من النماذج المتاحة، ولكن القليل منها فقط يعمل بشكل جيد مع وكلاء البرمجة. يقوم معظم مقدمي الخدمة بتكوينها بشكل مختلف مما يعطي نتائج متفاوتة.", - "zen.problem.subtitle": "نحن نعمل على إصلاح هذا للجميع، وليس فقط لمستخدمي OpenCode.", - "zen.problem.item1": "اختبار نماذج مختارة واستشارة فرقها", - "zen.problem.item2": "العمل مع مقدمي الخدمة لضمان تسليمها بشكل صحيح", - "zen.problem.item3": "قياس أداء جميع مجموعات النماذج والمزودين التي نوصي بها", - "zen.how.title": "كيف يعمل Zen", - "zen.how.body": "بينما نقترح عليك استخدام Zen مع OpenCode، يمكنك استخدام Zen مع أي وكيل.", - "zen.how.step1.title": "سجّل وأضف رصيدًا بقيمة 20 دولارًا", - "zen.how.step1.beforeLink": "اتبع", - "zen.how.step1.link": "تعليمات الإعداد", - "zen.how.step2.title": "استخدم Zen بتسعير شفاف", - "zen.how.step2.link": "ادفع لكل طلب", - "zen.how.step2.afterLink": "بدون أي هوامش ربح", - "zen.how.step3.title": "شحن تلقائي", - "zen.how.step3.body": "عندما يصل رصيدك إلى 5 دولارات، سنضيف تلقائيًا 20 دولارًا", - "zen.privacy.title": "خصوصيتك مهمة بالنسبة لنا", - "zen.privacy.beforeExceptions": - "تتم استضافة جميع نماذج Zen في الولايات المتحدة. يتبع المزودون سياسة عدم الاحتفاظ بالبيانات ولا يستخدمون بياناتك لتدريب النماذج، مع", - "zen.privacy.exceptionsLink": "الاستثناءات التالية", - - "go.title": "OpenCode Go | نماذج برمجة منخفضة التكلفة للجميع", - "go.meta.description": - "يبدأ Go من $5 للشهر الأول، ثم $10/شهر، مع حدود طلب سخية لمدة 5 ساعات لـ GLM-5.2 وGLM-5.1 وKimi K2.7 Code وKimi K2.6 وMiMo-V2.5-Pro وMiMo-V2.5 وQwen3.7 Max وQwen3.7 Plus وQwen3.6 Plus وMiniMax M2.7 وMiniMax M3 وDeepSeek V4 Pro وDeepSeek V4 Flash.", - "go.hero.title": "نماذج برمجة منخفضة التكلفة للجميع", - "go.hero.body": - "يجلب Go البرمجة الوكيلة للمبرمجين حول العالم. يوفر حدودًا سخية ووصولًا موثوقًا إلى أقوى النماذج مفتوحة المصدر، حتى تتمكن من البناء باستخدام وكلاء أقوياء دون القلق بشأن التكلفة أو التوفر.", - - "go.cta.start": "اشترك في Go", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "اشترك في Go", - "go.cta.price": "$10/شهر", - "go.cta.promo": "$5 للشهر الأول", - "go.pricing.body": - "استخدمه مع أي وكيل. $5 للشهر الأول، ثم $10/شهر. قم بزيادة الرصيد إذا لزم الأمر. الإلغاء في أي وقت.", - "go.graph.free": "مجاني", - "go.graph.freePill": "Big Pickle ونماذج مجانية", - "go.graph.go": "Go", - "go.graph.label": "الطلبات كل 5 ساعات", - "go.graph.usageLimits": "حدود الاستخدام", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "الطلبات كل 5 ساعات: {{free}} مقابل {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "الرئيس التنفيذي السابق، منتجات Terminal", - "go.testimonials.dax.quoteAfter": "كان تغييرًا جذريًا في الحياة، إنه قرار لا يحتاج لتفكير.", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "مؤسس سابق، SEED، PM، Melt، Pop، Dapt، Cadmus، وViewPoint", - "go.testimonials.jay.quoteBefore": "4 من كل 5 أشخاص في فريقنا يحبون استخدام", - "go.testimonials.jay.quoteAfter": ".", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "بطل سابق، AWS", - "go.testimonials.adam.quoteBefore": "لا أستطيع التوصية بـ", - "go.testimonials.adam.quoteAfter": "بما فيه الكفاية. بجدية، إنه جيد حقًا.", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "رئيس التصميم السابق، Laravel", - "go.testimonials.david.quoteBefore": "مع", - "go.testimonials.david.quoteAfter": "أعلم أن جميع النماذج مختبرة ومثالية لوكلاء البرمجة.", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "متدرب سابق، Nvidia (4 مرات)", - "go.testimonials.frank.quote": "أتمنى لو كنت لا أزال في Nvidia.", - "go.problem.title": "ما المشكلة التي يحلها Go؟", - "go.problem.body": - "نحن نركز على تقديم تجربة OpenCode لأكبر عدد ممكن من الناس. OpenCode Go هو اشتراك منخفض التكلفة: $5 للشهر الأول، ثم $10/شهر. يوفر حدودا سخية ووصولا موثوقا إلى نماذج المصدر المفتوح الأكثر قدرة.", - "go.problem.subtitle": " ", - "go.problem.item1": "أسعار اشتراك منخفضة التكلفة", - "go.problem.item2": "حدود سخية ووصول موثوق", - "go.problem.item3": "مصمم لأكبر عدد ممكن من المبرمجين", - "go.problem.item4": - "يتضمن GLM-5.2 وGLM-5.1 وKimi K2.7 Code وKimi K2.6 وMiMo-V2.5-Pro وMiMo-V2.5 وQwen3.7 Max وQwen3.7 Plus وQwen3.6 Plus وMiniMax M2.7 وMiniMax M3 وDeepSeek V4 Pro وDeepSeek V4 Flash", - "go.how.title": "كيف يعمل Go", - "go.how.body": "يبدأ Go من $5 للشهر الأول، ثم $10/شهر. يمكنك استخدامه مع OpenCode أو أي وكيل.", - "go.how.step1.title": "أنشئ حسابًا", - "go.how.step1.beforeLink": "اتبع", - "go.how.step1.link": "تعليمات الإعداد", - "go.how.step2.title": "اشترك في Go", - "go.how.step2.link": "$5 للشهر الأول", - "go.how.step2.afterLink": "ثم $10/شهر مع حدود سخية", - "go.how.step3.title": "ابدأ البرمجة", - "go.how.step3.body": "مع وصول موثوق لنماذج مفتوحة المصدر", - "go.privacy.title": "خصوصيتك مهمة بالنسبة لنا", - "go.privacy.body": - "تم تصميم الخطة بشكل أساسي للمستخدمين الدوليين، مع استضافة النماذج في الولايات المتحدة والاتحاد الأوروبي وسنغافورة للحصول على وصول عالمي مستقر.", - "go.privacy.contactAfter": "إذا كان لديك أي أسئلة.", - "go.privacy.beforeExceptions": - "تتم استضافة نماذج Go في الولايات المتحدة. يتبع المزودون سياسة عدم الاحتفاظ بالبيانات ولا يستخدمون بياناتك لتدريب النماذج، مع", - "go.privacy.exceptionsLink": "الاستثناءات التالية", - "go.faq.q1": "ما هو OpenCode Go؟", - "go.faq.a1": "Go هو اشتراك منخفض التكلفة يمنحك وصولًا موثوقًا إلى نماذج مفتوحة المصدر قادرة على البرمجة الوكيلة.", - "go.faq.q2": "ما النماذج التي يتضمنها Go؟", - "go.faq.a2": "يتضمن Go النماذج المدرجة أدناه، مع حدود سخية وإتاحة موثوقة.", - "go.faq.q3": "هل Go هو نفسه Zen؟", - "go.faq.a3": - "لا. Zen هو الدفع حسب الاستخدام، بينما يبدأ Go من $5 للشهر الأول، ثم $10/شهر، مع حدود سخية ووصول موثوق إلى نماذج المصدر المفتوح GLM-5.2 وGLM-5.1 وKimi K2.7 Code وKimi K2.6 وMiMo-V2.5-Pro وMiMo-V2.5 وQwen3.7 Max وQwen3.7 Plus وQwen3.6 Plus وMiniMax M2.7 وMiniMax M3 وDeepSeek V4 Pro وDeepSeek V4 Flash.", - "go.faq.q4": "كم تكلفة Go؟", - "go.faq.a4.p1.beforePricing": "تكلفة Go", - "go.faq.a4.p1.pricingLink": "$5 للشهر الأول", - "go.faq.a4.p1.afterPricing": "ثم $10/شهر مع حدود سخية.", - "go.faq.a4.p2.beforeAccount": "يمكنك إدارة اشتراكك في", - "go.faq.a4.p2.accountLink": "حسابك", - "go.faq.a4.p3": "ألغِ في أي وقت.", - "go.faq.q5": "ماذا عن البيانات والخصوصية؟", - "go.faq.a5.body": - "تم تصميم الخطة بشكل أساسي للمستخدمين الدوليين، مع استضافة النماذج في الولايات المتحدة والاتحاد الأوروبي وسنغافورة للحصول على وصول عالمي مستقر. يتبع مزودونا سياسة عدم الاحتفاظ بالبيانات ولا يستخدمون بياناتك لتدريب النماذج.", - "go.faq.a5.beforeExceptions": - "تتم استضافة نماذج Go في الولايات المتحدة. يتبع المزودون سياسة عدم الاحتفاظ بالبيانات ولا يستخدمون بياناتك لتدريب النماذج، مع", - "go.faq.a5.exceptionsLink": "الاستثناءات التالية", - "go.faq.q6": "هل يمكنني شحن رصيد إضافي؟", - "go.faq.a6": "إذا كنت بحاجة إلى مزيد من الاستخدام، يمكنك شحن رصيد في حسابك.", - "go.faq.q7": "هل يمكنني الإلغاء؟", - "go.faq.a7": "نعم، يمكنك الإلغاء في أي وقت.", - "go.faq.q8": "هل يمكنني استخدام Go مع وكلاء برمجة آخرين؟", - "go.faq.a8": "نعم، يمكنك استخدام Go مع أي وكيل. اتبع تعليمات الإعداد في وكيل البرمجة المفضل لديك.", - - "go.faq.q9": "ما الفرق بين النماذج المجانية وGo؟", - "go.faq.a9": - "تشمل النماذج المجانية Big Pickle بالإضافة إلى النماذج الترويجية المتاحة في ذلك الوقت، مع حصة 200 طلب/يوم. يتضمن Go نماذج GLM-5.2 وGLM-5.1 وKimi K2.7 Code وKimi K2.6 وMiMo-V2.5-Pro وMiMo-V2.5 وQwen3.7 Max وQwen3.7 Plus وQwen3.6 Plus وMiniMax M2.7 وMiniMax M3 وDeepSeek V4 Pro وDeepSeek V4 Flash مع حصص طلبات أعلى مطبقة عبر نوافذ متجددة (5 ساعات، أسبوعيًا، وشهريًا)، تعادل تقريبًا 12 دولارًا كل 5 ساعات، و30 دولارًا في الأسبوع، و60 دولارًا في الشهر (تختلف أعداد الطلبات الفعلية حسب النموذج والاستخدام).", - - "zen.api.error.rateLimitExceeded": "تم تجاوز حد الطلبات. يرجى المحاولة مرة أخرى لاحقًا.", - "zen.api.error.modelNotSupported": "النموذج {{model}} غير مدعوم", - "zen.api.error.modelFormatNotSupported": "النموذج {{model}} غير مدعوم للتنسيق {{format}}", - "zen.api.error.noProviderAvailable": "لا يوجد مزود متاح", - "zen.api.error.providerNotSupported": "المزود {{provider}} غير مدعوم", - "zen.api.error.missingApiKey": "مفتاح API مفقود.", - "zen.api.error.invalidApiKey": "مفتاح API غير صالح.", - "zen.api.error.subscriptionQuotaExceeded": "تم تجاوز حصة الاشتراك. أعد المحاولة خلال {{retryIn}}.", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "تم الوصول إلى حد الاستخدام لمدة 5 ساعات. تتم إعادة التعيين خلال {{retryIn}}. لمواصلة استخدام هذا النموذج الآن، فعّل الاستخدام من رصيدك المتاح: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "تم الوصول إلى حد الاستخدام الأسبوعي. تتم إعادة التعيين خلال {{retryIn}}. لمواصلة استخدام هذا النموذج الآن، فعّل الاستخدام من رصيدك المتاح: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "تم الوصول إلى حد الاستخدام الشهري. تتم إعادة التعيين خلال {{retryIn}}. لمواصلة استخدام هذا النموذج الآن، فعّل الاستخدام من رصيدك المتاح: {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "لا توجد طريقة دفع. أضف طريقة دفع هنا: {{billingUrl}}", - "zen.api.error.insufficientBalance": "رصيد غير كاف. إدارة فواتيرك هنا: {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "وصلت مساحة العمل الخاصة بك إلى حد الإنفاق الشهري البالغ ${{amount}}. إدارة حدودك هنا: {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "لقد وصلت إلى حد الإنفاق الشهري البالغ ${{amount}}. إدارة حدودك هنا: {{membersUrl}}", - "zen.api.error.modelDisabled": "النموذج معطل", - "zen.api.error.regionNotAllowed": - "هذا النموذج مستضاف في الصين. إذا كنت ترغب في استخدام هذا النموذج، فعّله في إعداداتك: {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "انتهى العرض المجاني لـ {{model}}. يمكنك مواصلة استخدام النموذج بالاشتراك في OpenCode Go - {{link}}", - - "black.meta.title": "OpenCode Black | الوصول إلى أفضل نماذج البرمجة في العالم", - "black.meta.description": "احصل على وصول إلى Claude، GPT، Gemini والمزيد مع خطط اشتراك OpenCode Black.", - "black.hero.title": "الوصول إلى أفضل نماذج البرمجة في العالم", - "black.hero.subtitle": "بما في ذلك Claude، GPT، Gemini والمزيد", - "black.title": "OpenCode Black | الأسعار", - "black.paused": "التسجيل في خطة Black متوقف مؤقتًا.", - "black.plan.icon20": "خطة Black 20", - "black.plan.icon100": "خطة Black 100", - "black.plan.icon200": "خطة Black 200", - "black.plan.multiplier100": "استخدام أكثر بـ 5 أضعاف من Black 20", - "black.plan.multiplier200": "استخدام أكثر بـ 20 ضعفًا من Black 20", - "black.price.perMonth": "شهريًا", - "black.price.perPersonBilledMonthly": "للشخص الواحد، يُفوتر شهريًا", - "black.terms.1": "لن يبدأ اشتراكك على الفور", - "black.terms.2": "ستتم إضافتك إلى قائمة الانتظار وتفعيلك قريبًا", - "black.terms.3": "لن يتم خصم المبلغ من بطاقتك إلا عند تفعيل اشتراكك", - "black.terms.4": "تطبق حدود الاستخدام، وقد يصل الاستخدام المؤتمت بكثافة إلى الحدود بشكل أسرع", - "black.terms.5": "الاشتراكات للأفراد، تواصل مع قسم المؤسسات للفرق", - "black.terms.6": "قد يتم تعديل الحدود وقد يتم إيقاف الخطط في المستقبل", - "black.terms.7": "ألغِ اشتراكك في أي وقت", - "black.action.continue": "متابعة", - "black.finePrint.beforeTerms": "الأسعار المعروضة لا تشمل الضرائب المطبقة", - "black.finePrint.terms": "شروط الخدمة", - "black.workspace.title": "OpenCode Black | اختر مساحة العمل", - "black.workspace.selectPlan": "اختر مساحة عمل لهذه الخطة", - "black.workspace.name": "مساحة العمل {{n}}", - "black.subscribe.title": "اشترك في OpenCode Black", - "black.subscribe.paymentMethod": "طريقة الدفع", - "black.subscribe.loadingPaymentForm": "جارٍ تحميل نموذج الدفع...", - "black.subscribe.selectWorkspaceToContinue": "اختر مساحة عمل للمتابعة", - "black.subscribe.failurePrefix": "أوه لا!", - "black.subscribe.error.generic": "حدث خطأ", - "black.subscribe.error.invalidPlan": "خطة غير صالحة", - "black.subscribe.error.workspaceRequired": "معرف مساحة العمل مطلوب", - "black.subscribe.error.alreadySubscribed": "مساحة العمل هذه لديها اشتراك بالفعل", - "black.subscribe.processing": "جارٍ المعالجة...", - "black.subscribe.submit": "اشترك بمبلغ ${{plan}}", - "black.subscribe.form.chargeNotice": "لن يتم خصم المبلغ إلا عند تفعيل اشتراكك", - "black.subscribe.success.title": "أنت في قائمة انتظار OpenCode Black", - "black.subscribe.success.subscriptionPlan": "خطة الاشتراك", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "المبلغ", - "black.subscribe.success.amountValue": "${{plan}} شهريًا", - "black.subscribe.success.paymentMethod": "طريقة الدفع", - "black.subscribe.success.dateJoined": "تاريخ الانضمام", - "black.subscribe.success.chargeNotice": "سيتم خصم المبلغ من بطاقتك عند تفعيل اشتراكك", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "الاستخدام", - "workspace.nav.apiKeys": "مفاتيح API", - "workspace.nav.members": "الأعضاء", - "workspace.nav.billing": "الفوترة", - "workspace.nav.settings": "الإعدادات", - - "workspace.home.banner.beforeLink": "نماذج محسنة وموثوقة لوكلاء البرمجة.", - "workspace.lite.banner.beforeLink": "نماذج برمجة منخفضة التكلفة للجميع.", - "workspace.home.billing.loading": "جارٍ التحميل...", - "workspace.home.billing.enable": "تمكين الفوترة", - "workspace.home.billing.currentBalance": "الرصيد الحالي", - - "workspace.newUser.feature.tested.title": "نماذج مُختبرة ومحققة", - "workspace.newUser.feature.tested.body": "لقد قمنا بقياس واختبار النماذج خصيصًا لوكلاء البرمجة لضمان أفضل أداء.", - "workspace.newUser.feature.quality.title": "أعلى جودة", - "workspace.newUser.feature.quality.body": - "الوصول إلى النماذج التي تم تكوينها لتحقيق الأداء الأمثل - لا تقليل للجودة أو توجيه إلى موفري خدمة أرخص.", - "workspace.newUser.feature.lockin.title": "لا قيود على المزود", - "workspace.newUser.feature.lockin.body": - "استخدم Zen مع أي وكيل برمجة، واستمر في استخدام موفرين آخرين مع opencode وقتما تشاء.", - "workspace.newUser.copyApiKey": "نسخ مفتاح API", - "workspace.newUser.copyKey": "نسخ المفتاح", - "workspace.newUser.copied": "تم النسخ!", - "workspace.newUser.step.enableBilling": "تمكين الفوترة", - "workspace.newUser.step.login.before": "شغّل", - "workspace.newUser.step.login.after": "واختر opencode", - "workspace.newUser.step.pasteKey": "الصق مفتاح API الخاص بك", - "workspace.newUser.step.models.before": "ابدأ opencode ثم نفّذ", - "workspace.newUser.step.models.after": "لاختيار نموذج", - - "workspace.models.title": "النماذج", - "workspace.models.subtitle.beforeLink": "إدارة النماذج التي يمكن لأعضاء مساحة العمل الوصول إليها.", - "workspace.models.table.model": "النموذج", - "workspace.models.table.enabled": "ممكّن", - - "workspace.providers.title": "أحضر مفتاحك الخاص", - "workspace.providers.subtitle": "قم بتكوين مفاتيح API الخاصة بك من موفري الذكاء الاصطناعي.", - "workspace.providers.placeholder": "أدخل مفتاح API لـ {{provider}} ({{prefix}}...)", - "workspace.providers.configure": "تكوين", - "workspace.providers.edit": "تعديل", - "workspace.providers.delete": "حذف", - "workspace.providers.saving": "جارٍ الحفظ...", - "workspace.providers.save": "حفظ", - "workspace.providers.table.provider": "المزود", - "workspace.providers.table.apiKey": "مفتاح API", - - "workspace.usage.title": "تاريخ الاستخدام", - "workspace.usage.subtitle": "استخدام وتكاليف API الأخيرة.", - "workspace.usage.empty": "قم بإجراء أول استدعاء API للبدء.", - "workspace.usage.table.date": "التاريخ", - "workspace.usage.table.model": "النموذج", - "workspace.usage.table.input": "الدخل", - "workspace.usage.table.output": "الخرج", - "workspace.usage.table.cost": "التكلفة", - "workspace.usage.table.session": "الجلسة", - "workspace.usage.breakdown.input": "الدخل", - "workspace.usage.breakdown.cacheRead": "قراءة الكاش", - "workspace.usage.breakdown.cacheWrite": "كتابة الكاش", - "workspace.usage.breakdown.output": "الخرج", - "workspace.usage.breakdown.reasoning": "المنطق", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "التكلفة", - "workspace.cost.subtitle": "تكاليف الاستخدام مقسمة حسب النموذج.", - "workspace.cost.allModels": "جميع النماذج", - "workspace.cost.allKeys": "جميع المفاتيح", - "workspace.cost.deletedSuffix": "(محذوف)", - "workspace.cost.empty": "لا توجد بيانات استخدام متاحة للفترة المحددة.", - "workspace.cost.subscriptionShort": "اشتراك", - - "workspace.keys.title": "مفاتيح API", - "workspace.keys.subtitle": "إدارة مفاتيح API الخاصة بك للوصول إلى خدمات opencode.", - "workspace.keys.create": "إنشاء مفتاح API", - "workspace.keys.placeholder": "أدخل اسم المفتاح", - "workspace.keys.empty": "أنشئ مفتاح API لبوابة opencode", - "workspace.keys.table.name": "الاسم", - "workspace.keys.table.key": "المفتاح", - "workspace.keys.table.createdBy": "تم الإنشاء بواسطة", - "workspace.keys.table.lastUsed": "آخر استخدام", - "workspace.keys.copyApiKey": "نسخ مفتاح API", - "workspace.keys.delete": "حذف", - - "workspace.members.title": "الأعضاء", - "workspace.members.subtitle": "إدارة أعضاء مساحة العمل وأذوناتهم.", - "workspace.members.invite": "دعوة عضو", - "workspace.members.inviting": "جارٍ الدعوة...", - "workspace.members.beta.beforeLink": "مساحات العمل مجانية للفرق أثناء الفترة التجريبية.", - "workspace.members.form.invitee": "المدعو", - "workspace.members.form.emailPlaceholder": "أدخل البريد الإلكتروني", - "workspace.members.form.role": "الدور", - "workspace.members.form.monthlyLimit": "حد الإنفاق الشهري", - "workspace.members.noLimit": "لا يوجد حد", - "workspace.members.noLimitLowercase": "لا يوجد حد", - "workspace.members.invited": "تمت دعوته", - "workspace.members.edit": "تعديل", - "workspace.members.delete": "حذف", - "workspace.members.saving": "جارٍ الحفظ...", - "workspace.members.save": "حفظ", - "workspace.members.table.email": "البريد الإلكتروني", - "workspace.members.table.role": "الدور", - "workspace.members.table.monthLimit": "الحد الشهري", - "workspace.members.role.admin": "مسؤول", - "workspace.members.role.adminDescription": "يمكنه إدارة النماذج، والأعضاء، والفوترة", - "workspace.members.role.member": "عضو", - "workspace.members.role.memberDescription": "يمكنه فقط إنشاء مفاتيح API لنفسه", - - "workspace.settings.title": "الإعدادات", - "workspace.settings.subtitle": "حدّث اسم مساحة العمل وتفضيلاتك.", - "workspace.settings.workspaceName": "اسم مساحة العمل", - "workspace.settings.defaultName": "افتراضي", - "workspace.settings.updating": "جارٍ التحديث...", - "workspace.settings.save": "حفظ", - "workspace.settings.edit": "تعديل", - - "workspace.billing.title": "الفوترة", - "workspace.billing.subtitle.beforeLink": "إدارة طرق الدفع.", - "workspace.billing.contactUs": "اتصل بنا", - "workspace.billing.subtitle.afterLink": "إذا كان لديك أي أسئلة.", - "workspace.billing.currentBalance": "الرصيد الحالي", - "workspace.billing.add": "أضف $", - "workspace.billing.enterAmount": "أدخل المبلغ", - "workspace.billing.loading": "جارٍ التحميل...", - "workspace.billing.addAction": "إضافة", - "workspace.billing.addBalance": "إضافة رصيد", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "مرتبط بـ Stripe", - "workspace.billing.manage": "إدارة", - "workspace.billing.enable": "تمكين الفوترة", - - "workspace.monthlyLimit.title": "الحد الشهري", - "workspace.monthlyLimit.subtitle": "عيّن حد الاستخدام الشهري لحسابك.", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "جارٍ التعيين...", - "workspace.monthlyLimit.set": "تعيين", - "workspace.monthlyLimit.edit": "تعديل الحد", - "workspace.monthlyLimit.noLimit": "لم يتم تعيين حد للاستخدام.", - "workspace.monthlyLimit.currentUsage.beforeMonth": "الاستخدام الحالي لـ", - "workspace.monthlyLimit.currentUsage.beforeAmount": "هو $", - - "workspace.redeem.title": "استرداد قسيمة", - "workspace.redeem.subtitle": "استرد رمز القسيمة للحصول على رصيد أو مزايا.", - "workspace.redeem.placeholder": "أدخل رمز القسيمة", - "workspace.redeem.redeem": "استرداد", - "workspace.redeem.redeeming": "جارٍ الاسترداد...", - "workspace.redeem.success": "تم استرداد القسيمة بنجاح.", - - "workspace.reload.title": "إعادة الشحن التلقائي", - "workspace.reload.disabled.before": "إعادة الشحن التلقائي", - "workspace.reload.disabled.state": "معطّل", - "workspace.reload.disabled.after": "فعّلها لإعادة شحن الرصيد تلقائيًا عندما ينخفض.", - "workspace.reload.enabled.before": "إعادة الشحن التلقائي", - "workspace.reload.enabled.state": "ممكّن", - "workspace.reload.enabled.middle": "سنعيد شحن رصيدك بمبلغ", - "workspace.reload.processingFee": "رسوم معالجة", - "workspace.reload.enabled.after": "عندما يصل الرصيد إلى", - "workspace.reload.edit": "تعديل", - "workspace.reload.enable": "تفعيل", - "workspace.reload.enableAutoReload": "تفعيل إعادة الشحن التلقائي", - "workspace.reload.reloadAmount": "مبلغ الشحن $", - "workspace.reload.whenBalanceReaches": "عندما يصل الرصيد إلى $", - "workspace.reload.saving": "جارٍ الحفظ...", - "workspace.reload.save": "حفظ", - "workspace.reload.failedAt": "فشلت إعادة الشحن في", - "workspace.reload.reason": "السبب:", - "workspace.reload.updatePaymentMethod": "يرجى تحديث طريقة الدفع والمحاولة مرة أخرى.", - "workspace.reload.retrying": "جارٍ إعادة المحاولة...", - "workspace.reload.retry": "أعد المحاولة", - "workspace.reload.error.paymentFailed": "فشلت عملية الدفع.", - - "workspace.payments.title": "سجل المدفوعات", - "workspace.payments.subtitle": "معاملات الدفع الأخيرة.", - "workspace.payments.table.date": "التاريخ", - "workspace.payments.table.paymentId": "معرف الدفع", - "workspace.payments.table.amount": "المبلغ", - "workspace.payments.table.receipt": "الإيصال", - "workspace.payments.type.credit": "رصيد", - "workspace.payments.type.subscription": "اشتراك", - "workspace.payments.view": "عرض", - - "workspace.black.loading": "جارٍ التحميل...", - "workspace.black.time.day": "يوم", - "workspace.black.time.days": "أيام", - "workspace.black.time.hour": "ساعة", - "workspace.black.time.hours": "ساعات", - "workspace.black.time.minute": "دقيقة", - "workspace.black.time.minutes": "دقائق", - "workspace.black.time.fewSeconds": "بضع ثوان", - "workspace.black.subscription.title": "الاشتراك", - "workspace.black.subscription.message": "أنت مشترك في OpenCode Black مقابل ${{plan}} شهريًا.", - "workspace.black.subscription.manage": "إدارة الاشتراك", - "workspace.black.subscription.rollingUsage": "استخدام لمدة 5 ساعات", - "workspace.black.subscription.weeklyUsage": "الاستخدام الأسبوعي", - "workspace.black.subscription.resetsIn": "إعادة تعيين في", - "workspace.black.subscription.useBalance": "استخدم رصيدك المتوفر بعد الوصول إلى حدود الاستخدام", - "workspace.black.waitlist.title": "قائمة الانتظار", - "workspace.black.waitlist.joined": "أنت في قائمة الانتظار لخطة OpenCode Black بقيمة ${{plan}} شهريًا.", - "workspace.black.waitlist.ready": "نحن مستعدون لتسجيلك في خطة OpenCode Black بقيمة ${{plan}} شهريًا.", - "workspace.black.waitlist.leave": "ترك قائمة الانتظار", - "workspace.black.waitlist.leaving": "جارٍ المغادرة...", - "workspace.black.waitlist.left": "غادر", - "workspace.black.waitlist.enroll": "تسجيل", - "workspace.black.waitlist.enrolling": "جارٍ التسجيل...", - "workspace.black.waitlist.enrolled": "مسجل", - "workspace.black.waitlist.enrollNote": 'عند النقر فوق "تسجيل"، يبدأ اشتراكك على الفور وسيتم خصم الرسوم من بطاقتك.', - - "workspace.lite.loading": "جارٍ التحميل...", - "workspace.lite.time.day": "يوم", - "workspace.lite.time.days": "أيام", - "workspace.lite.time.hour": "ساعة", - "workspace.lite.time.hours": "ساعات", - "workspace.lite.time.minute": "دقيقة", - "workspace.lite.time.minutes": "دقائق", - "workspace.lite.time.fewSeconds": "بضع ثوان", - "workspace.lite.subscription.message": "أنت مشترك في OpenCode Go.", - "workspace.lite.subscription.manage": "إدارة الاشتراك", - "workspace.lite.subscription.rollingUsage": "الاستخدام المتجدد", - "workspace.lite.subscription.weeklyUsage": "الاستخدام الأسبوعي", - "workspace.lite.subscription.monthlyUsage": "الاستخدام الشهري", - "workspace.lite.subscription.resetsIn": "إعادة تعيين في", - "workspace.lite.subscription.useBalance": "استخدم رصيدك المتوفر بعد الوصول إلى حدود الاستخدام", - "workspace.lite.subscription.selectProvider": - 'اختر "OpenCode Go" كمزود في إعدادات opencode الخاصة بك لاستخدام نماذج Go.', - "workspace.lite.providers.title": "المزودون", - "workspace.lite.providers.description": "تحكم في المزودين المستخدمين للتوجيه.", - "workspace.lite.providers.useChina": "تفعيل النماذج المستضافة في الصين", - "workspace.lite.black.message": - "أنت مشترك حاليًا في OpenCode Black أو في قائمة الانتظار. يرجى إلغاء الاشتراك أولاً إذا كنت ترغب في التبديل إلى Go.", - "workspace.lite.other.message": - "عضو آخر في مساحة العمل هذه مشترك بالفعل في OpenCode Go. يمكن لعضو واحد فقط لكل مساحة عمل الاشتراك.", - "workspace.lite.promo.description": - "يبدأ OpenCode Go بسعر {{price}}، ثم $10/شهر، ويوفر وصولا موثوقا لنماذج البرمجة المفتوحة الشهيرة مع حدود استخدام سخية.", - "workspace.lite.promo.price": "$5 للشهر الأول", - "workspace.lite.promo.modelsTitle": "ما يتضمنه", - "workspace.lite.promo.footer": - "تم تصميم الخطة بشكل أساسي للمستخدمين الدوليين، مع استضافة النماذج في الولايات المتحدة والاتحاد الأوروبي وسنغافورة للحصول على وصول عالمي مستقر. قد تتغير الأسعار وحدود الاستخدام بناءً على تعلمنا من الاستخدام المبكر والملاحظات.", - "workspace.lite.promo.subscribe": "الاشتراك في Go", - "workspace.lite.promo.subscribing": "جارٍ إعادة التوجيه...", - "workspace.lite.promo.otherMethods": "طرق دفع أخرى", - "workspace.lite.promo.selectMethod": "اختر طريقة الدفع", - - "workspace.referral.copyLink": "نسخ الرابط", - "workspace.referral.copied": "تم النسخ", - "workspace.referral.overview.title": "ادعُ أصدقاءك", - "workspace.referral.overview.subtitle": "احصل على $5 عند اشتراك صديق. وسيحصل هو أيضًا على $5.", - "workspace.referral.instructions.share": "شارك رابط الإحالة الخاص بك", - "workspace.referral.instructions.subscribe": "ينضم صديقك ويشترك في Go", - "workspace.referral.instructions.claim": "تحصلان كلاكما على رصيد استخدام بقيمة $5 لتطبيقه على حدود استخدام Go", - "workspace.referral.rewards.title": "مكافآت الإحالة", - "workspace.referral.rewards.description": "طبّق أرصدة الإحالة المتاحة على استخدامك لـ Go.", - "workspace.referral.rewards.subtitle": "تم تطبيق {{applied}} / {{total}} من المكافآت.", - "workspace.referral.rewards.empty": "لا توجد مكافآت إحالة بعد.", - "workspace.referral.table.reward": "المكافأة", - "workspace.referral.table.referral": "الوصف", - "workspace.referral.table.date": "التاريخ", - "workspace.referral.reward.description.inviter": "تمت دعوة {{email}}", - "workspace.referral.reward.description.invitee": "تمت دعوتك بواسطة {{email}}", - "workspace.referral.reward.action.subscribeUnlock": "اشترك لإلغاء القفل", - "workspace.referral.reward.action.view": "عرض المكافأة", - "workspace.referral.reward.action.applied": "تم تطبيق المكافأة", - "workspace.referral.reward.source.pendingInviter": "بانتظار اشتراكه", - "workspace.referral.reward.source.pendingInvitee": "اشترك لإلغاء قفل المكافأة", - "workspace.referral.reward.source.available": "المكافأة جاهزة للتطبيق", - "workspace.referral.reward.source.applied": "تم تطبيق المكافأة", - "workspace.referral.reward.status.applied": "تم تطبيق المكافأة", - "workspace.referral.reward.status.pendingInviter": "اشترك لإلغاء القفل", - "workspace.referral.reward.status.pendingInvitee": "اشترك لإلغاء القفل", - "workspace.referral.apply.noGo": "اشترك لإلغاء القفل", - "workspace.referral.apply.preview": "عرض المكافأة", - "workspace.referral.apply.action": "تطبيق", - "workspace.referral.apply.confirmTitle": "تطبيق المكافأة", - "workspace.referral.apply.confirmBody": "طبِّق {{amount}} لتقليل الاستخدام الحالي في مساحة العمل هذه.", - "workspace.referral.apply.confirmAction": "تطبيق", - - "download.title": "OpenCode | تنزيل", - "download.meta.description": "نزّل OpenCode لـ macOS، Windows، وLinux", - "download.hero.title": "تنزيل OpenCode", - "download.hero.subtitle": "متاح في نسخة تجريبية لـ macOS، Windows، وLinux", - "download.hero.button": "تنزيل لـ {{os}}", - "download.section.terminal": "OpenCode للطرفية", - "download.section.desktop": "OpenCode لسطح المكتب (Beta)", - "download.section.extensions": "امتدادات OpenCode", - "download.section.integrations": "تكاملات OpenCode", - "download.action.download": "تنزيل", - "download.action.install": "تثبيت", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "ليس بالضرورة، ولكن على الأرجح. ستحتاج إلى اشتراك ذكاء اصطناعي إذا كنت تريد ربط OpenCode بمزوّد مدفوع، رغم أنه يمكنك العمل مع", - "download.faq.a3.localLink": "النماذج المحلية", - "download.faq.a3.afterLocal.beforeZen": "مجانًا. بينما نشجع المستخدمين على استخدام", - "download.faq.a3.afterZen": "، فإن OpenCode يعمل مع جميع المزودين الشائعين مثل OpenAI، Anthropic، xAI إلخ.", - - "download.faq.a5.p1": "OpenCode مجاني 100% للاستخدام.", - "download.faq.a5.p2.beforeZen": - "أي تكاليف إضافية ستأتي من اشتراكك لدى مزود النماذج. بينما يعمل OpenCode مع أي مزود نماذج، نوصي باستخدام", - "download.faq.a5.p2.afterZen": ".", - - "download.faq.a6.p1": "يتم حفظ بياناتك ومعلوماتك فقط عند إنشاء روابط قابلة للمشاركة في OpenCode.", - "download.faq.a6.p2.beforeShare": "اعرف المزيد عن", - "download.faq.a6.shareLink": "صفحات المشاركة", - - "enterprise.title": "OpenCode | حلول المؤسسات لمنظمتك", - "enterprise.meta.description": "تواصل مع OpenCode لحلول المؤسسات", - "enterprise.hero.title": "كودك ملكك", - "enterprise.hero.body1": - "يعمل OpenCode بأمان داخل مؤسستك دون تخزين أي بيانات أو سياق، ودون قيود ترخيص أو مطالبات ملكية. ابدأ تجربة مع فريقك، ثم انشره عبر مؤسستك من خلال دمجه مع SSO وبوابة الذكاء الاصطناعي الداخلية لديك.", - "enterprise.hero.body2": "أخبرنا كيف يمكننا المساعدة.", - "enterprise.form.name.label": "الاسم الكامل", - "enterprise.form.name.placeholder": "جيف بيزوس", - "enterprise.form.role.label": "المنصب", - "enterprise.form.role.placeholder": "رئيس مجلس الإدارة التنفيذي", - "enterprise.form.company.label": "الشركة", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "البريد الإلكتروني للشركة", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "رقم الهاتف", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "ما المشكلة التي تحاول حلها؟", - "enterprise.form.message.placeholder": "نحتاج مساعدة في...", - "enterprise.form.send": "إرسال", - "enterprise.form.sending": "جارٍ الإرسال...", - "enterprise.form.success": "تم إرسال الرسالة، سنتواصل معك قريبًا.", - "enterprise.form.success.submitted": "تم إرسال النموذج بنجاح.", - "enterprise.form.error.allFieldsRequired": "جميع الحقول مطلوبة.", - "enterprise.form.error.invalidEmailFormat": "تنسيق البريد الإلكتروني غير صالح.", - "enterprise.form.error.internalServer": "خطأ داخلي في الخادم.", - "enterprise.faq.title": "الأسئلة الشائعة", - "enterprise.faq.q1": "ما هو OpenCode Enterprise؟", - "enterprise.faq.a1": - "OpenCode Enterprise مخصص للمؤسسات التي تريد التأكد من أن الكود والبيانات لا تغادر بنيتها التحتية أبدًا. يتحقق ذلك عبر استخدام تكوين مركزي يندمج مع SSO وبوابة الذكاء الاصطناعي الداخلية لديك.", - "enterprise.faq.q2": "كيف أبدأ مع OpenCode Enterprise؟", - "enterprise.faq.a2": - "ابدأ ببساطة بتجربة داخلية مع فريقك. افتراضيًا، لا يقوم OpenCode بتخزين الكود أو بيانات السياق، مما يجعل البدء سهلاً. ثم اتصل بنا لمناقشة الأسعار وخيارات التنفيذ.", - "enterprise.faq.q3": "كيف تعمل تسعيرة المؤسسات؟", - "enterprise.faq.a3": - "نقدم تسعيرًا للمؤسسات حسب المقعد. إذا كان لديك بوابة LLM خاصة بك، فلن نفرض رسومًا على التوكنات المستخدمة. لمزيد من التفاصيل، اتصل بنا للحصول على عرض سعر مخصص بناءً على احتياجات مؤسستك.", - "enterprise.faq.q4": "هل بياناتي آمنة مع OpenCode Enterprise؟", - "enterprise.faq.a4": - "نعم. لا يقوم OpenCode بتخزين الكود أو بيانات السياق. تتم جميع المعالجة محليًا أو عبر استدعاءات API مباشرة إلى مزود الذكاء الاصطناعي لديك. مع التكوين المركزي وتكامل SSO، تظل بياناتك آمنة داخل البنية التحتية لمؤسستك.", - - "brand.title": "OpenCode | العلامة التجارية", - "brand.meta.description": "إرشادات العلامة التجارية لـ OpenCode", - "brand.heading": "إرشادات العلامة التجارية", - "brand.subtitle": "موارد وأصول لمساعدتك في العمل مع العلامة التجارية لـ OpenCode.", - "brand.downloadAll": "تنزيل جميع الأصول", - - "changelog.title": "OpenCode | سجل التغييرات", - "changelog.meta.description": "ملاحظات الإصدار وسجل التغييرات لـ OpenCode", - "changelog.hero.title": "سجل التغييرات", - "changelog.hero.subtitle": "تحديثات وتحسينات جديدة لـ OpenCode", - "changelog.empty": "لم يتم العثور على مدخلات في سجل التغييرات.", - "changelog.viewJson": "عرض JSON", - - "bench.list.title": "المعيار", - "bench.list.heading": "المعايير", - "bench.list.table.agent": "الوكيل", - "bench.list.table.model": "النموذج", - "bench.list.table.score": "الدرجة", - "bench.submission.error.allFieldsRequired": "جميع الحقول مطلوبة.", - - "bench.detail.title": "المعيار - {{task}}", - "bench.detail.notFound": "المهمة غير موجودة", - "bench.detail.na": "غير متاح", - "bench.detail.labels.agent": "الوكيل", - "bench.detail.labels.model": "النموذج", - "bench.detail.labels.task": "المهمة", - "bench.detail.labels.repo": "المستودع", - "bench.detail.labels.from": "من", - "bench.detail.labels.to": "إلى", - "bench.detail.labels.prompt": "الموجه", - "bench.detail.labels.commit": "Commit", - "bench.detail.labels.averageDuration": "متوسط المدة", - "bench.detail.labels.averageScore": "متوسط الدرجة", - "bench.detail.labels.averageCost": "متوسط التكلفة", - "bench.detail.labels.summary": "الملخص", - "bench.detail.labels.runs": "تشغيلات", - "bench.detail.labels.score": "الدرجة", - "bench.detail.labels.base": "الأساس", - "bench.detail.labels.penalty": "الجزاء", - "bench.detail.labels.weight": "الوزن", - "bench.detail.table.run": "تشغيل", - "bench.detail.table.score": "الدرجة (الأساس - الجزاء)", - "bench.detail.table.cost": "التكلفة", - "bench.detail.table.duration": "المدة", - "bench.detail.run.title": "تشغيل {{n}}", - "bench.detail.rawJson": "JSON خام", -} satisfies Dict diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts deleted file mode 100644 index 3c00dc8643..0000000000 --- a/packages/console/app/src/i18n/br.ts +++ /dev/null @@ -1,832 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "Documentação", - "nav.changelog": "Changelog", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "Enterprise", - "nav.zen": "Zen", - "nav.login": "Entrar", - "nav.free": "Download", - "nav.home": "Início", - "nav.openMenu": "Abrir menu", - "nav.getStartedFree": "Começar grátis", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "Copiar logo como SVG", - "nav.context.copyWordmark": "Copiar marca como SVG", - "nav.context.brandAssets": "Recursos da marca", - - "footer.github": "GitHub", - "footer.docs": "Documentação", - "footer.changelog": "Changelog", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "Marca", - "legal.privacy": "Privacidade", - "legal.terms": "Termos", - - "email.title": "Seja o primeiro a saber quando lançarmos novos produtos", - "email.subtitle": "Entre na lista de espera para acesso antecipado.", - "email.placeholder": "Endereço de e-mail", - "email.subscribe": "Inscrever-se", - "email.success": "Quase lá, verifique sua caixa de entrada e confirme seu e-mail", - - "notFound.title": "Não encontrado | opencode", - "notFound.heading": "404 - Página não encontrada", - "notFound.home": "Início", - "notFound.docs": "Documentação", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "logo opencode claro", - "notFound.logoDarkAlt": "logo opencode escuro", - - "user.logout": "Sair", - - "auth.callback.error.codeMissing": "Nenhum código de autorização encontrado.", - - "workspace.select": "Selecionar workspace", - "workspace.createNew": "+ Criar novo workspace", - "workspace.modal.title": "Criar novo workspace", - "workspace.modal.placeholder": "Digite o nome do workspace", - - "common.cancel": "Cancelar", - "common.creating": "Criando...", - "common.create": "Criar", - - "common.videoUnsupported": "Seu navegador não suporta a tag de vídeo.", - "common.figure": "Fig {{n}}.", - "common.faq": "FAQ", - "common.learnMore": "Saiba mais", - - "error.invalidPlan": "Plano inválido", - "error.workspaceRequired": "ID do workspace é obrigatório", - "error.alreadySubscribed": "Este workspace já possui uma assinatura", - "error.limitRequired": "Limite é obrigatório.", - "error.monthlyLimitInvalid": "Defina um limite mensal válido.", - "error.workspaceNameRequired": "Nome do workspace é obrigatório.", - "error.nameTooLong": "O nome deve ter 255 caracteres ou menos.", - "error.emailRequired": "E-mail é obrigatório", - "error.roleRequired": "Função é obrigatória", - "error.idRequired": "ID é obrigatório", - "error.nameRequired": "Nome é obrigatório", - "error.providerRequired": "Provedor é obrigatório", - "error.apiKeyRequired": "Chave de API é obrigatória", - "error.modelRequired": "Modelo é obrigatório", - "error.reloadAmountMin": "O valor de recarga deve ser de pelo menos ${{amount}}", - "error.reloadTriggerMin": "O gatilho de saldo deve ser de pelo menos ${{amount}}", - - "app.meta.description": "OpenCode - O agente de codificação de código aberto.", - - "home.title": "OpenCode | O agente de codificação de código aberto com IA", - - "temp.title": "opencode | Agente de codificação com IA feito para o terminal", - "temp.hero.title": "O agente de codificação com IA feito para o terminal", - "temp.zen": "opencode zen", - "temp.getStarted": "Começar", - "temp.feature.native.title": "TUI Nativa", - "temp.feature.native.body": "Uma interface de terminal responsiva, nativa e personalizável", - "temp.feature.zen.beforeLink": "Uma", - "temp.feature.zen.link": "lista selecionada de modelos", - "temp.feature.zen.afterLink": "fornecida pela opencode", - "temp.feature.models.beforeLink": "Suporta mais de 75 provedores de LLM através do", - "temp.feature.models.afterLink": ", incluindo modelos locais", - "temp.screenshot.caption": "OpenCode TUI com o tema tokyonight", - "temp.screenshot.alt": "OpenCode TUI com tema tokyonight", - "temp.logoLightAlt": "logo opencode claro", - "temp.logoDarkAlt": "logo opencode escuro", - - "home.banner.badge": "Novo", - "home.banner.text": "App desktop disponível em beta", - "home.banner.platforms": "no macOS, Windows e Linux", - "home.banner.downloadNow": "Baixar agora", - "home.banner.downloadBetaNow": "Baixe agora o beta do desktop", - - "home.hero.title": "O agente de codificação de código aberto com IA", - "home.hero.subtitle.a": "Modelos grátis incluídos ou conecte qualquer modelo de qualquer provedor,", - "home.hero.subtitle.b": "incluindo Claude, GPT, Gemini e mais.", - - "home.install.ariaLabel": "Opções de instalação", - - "home.what.title": "O que é OpenCode?", - "home.what.body": - "OpenCode é um agente de código aberto que ajuda você a escrever código no seu terminal, IDE ou desktop.", - "home.what.lsp.title": "LSP habilitado", - "home.what.lsp.body": "Carrega automaticamente os LSPs certos para o LLM", - "home.what.multiSession.title": "Multissessão", - "home.what.multiSession.body": "Inicie vários agentes em paralelo no mesmo projeto", - "home.what.shareLinks.title": "Links compartilháveis", - "home.what.shareLinks.body": "Compartilhe um link para qualquer sessão para referência ou depuração", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "Entre com o GitHub para usar sua conta do Copilot", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "Entre com a OpenAI para usar sua conta do ChatGPT Plus ou Pro", - "home.what.anyModel.title": "Qualquer modelo", - "home.what.anyModel.body": "Mais de 75 provedores de LLM via Models.dev, incluindo modelos locais", - "home.what.anyEditor.title": "Qualquer editor", - "home.what.anyEditor.body": "Disponível como interface de terminal, app desktop e extensão de IDE", - "home.what.readDocs": "Ler documentação", - - "home.growth.title": "O agente de codificação de código aberto com IA", - "home.growth.body": - "Com mais de {{stars}} estrelas no GitHub, {{contributors}} colaboradores e mais de {{commits}} commits, OpenCode é usado e confiado por mais de {{monthlyUsers}} desenvolvedores todos os meses.", - "home.growth.githubStars": "Estrelas no GitHub", - "home.growth.contributors": "Colaboradores", - "home.growth.monthlyDevs": "Devs mensais", - - "home.privacy.title": "Feito com privacidade em primeiro lugar", - "home.privacy.body": - "OpenCode não armazena nenhum código seu nem dados de contexto, para que possa operar em ambientes sensíveis à privacidade.", - "home.privacy.learnMore": "Saiba mais sobre", - "home.privacy.link": "privacidade", - - "home.faq.q1": "O que é OpenCode?", - "home.faq.a1": - "OpenCode é um agente de código aberto que ajuda você a escrever e executar código com qualquer modelo de IA. Está disponível como interface de terminal, app desktop ou extensão de IDE.", - "home.faq.q2": "Como eu uso o OpenCode?", - "home.faq.a2.before": "A maneira mais fácil de começar é ler a", - "home.faq.a2.link": "introdução", - "home.faq.q3": "Preciso de assinaturas extras de IA para usar o OpenCode?", - "home.faq.a3.p1": - "Não necessariamente, OpenCode vem com um conjunto de modelos grátis que você pode usar sem criar conta.", - "home.faq.a3.p2.beforeZen": - "Além disso, você pode usar qualquer um dos modelos de codificação populares criando uma conta", - "home.faq.a3.p2.afterZen": ".", - "home.faq.a3.p3": - "Embora incentivemos os usuários a usar o Zen, OpenCode também funciona com todos os provedores populares, como OpenAI, Anthropic, xAI etc.", - "home.faq.a3.p4.beforeLocal": "Você pode até conectar seus", - "home.faq.a3.p4.localLink": "modelos locais", - "home.faq.q4": "Posso usar minhas assinaturas de IA existentes com o OpenCode?", - "home.faq.a4.p1": - "Sim, OpenCode suporta planos de assinatura de todos os principais provedores. Você pode usar suas assinaturas Claude Pro/Max, ChatGPT Plus/Pro ou GitHub Copilot.", - "home.faq.q5": "Posso usar o OpenCode apenas no terminal?", - "home.faq.a5.beforeDesktop": "Não mais! OpenCode agora está disponível como um app para o seu", - "home.faq.a5.desktop": "desktop", - "home.faq.a5.and": "e", - "home.faq.a5.web": "web", - "home.faq.q6": "Quanto custa o OpenCode?", - "home.faq.a6": - "OpenCode é 100% gratuito para usar. Ele também vem com um conjunto de modelos gratuitos. Pode haver custos adicionais se você conectar qualquer outro provedor.", - "home.faq.q7": "E sobre dados e privacidade?", - "home.faq.a7.p1": - "Seus dados e informações só são armazenados quando você usa nossos modelos gratuitos ou cria links compartilháveis.", - "home.faq.a7.p2.beforeModels": "Saiba mais sobre", - "home.faq.a7.p2.modelsLink": "nossos modelos", - "home.faq.a7.p2.and": "e", - "home.faq.a7.p2.shareLink": "páginas de compartilhamento", - "home.faq.q8": "OpenCode é código aberto?", - "home.faq.a8.p1": "Sim, OpenCode é totalmente open source. O código-fonte é público no", - "home.faq.a8.p2": "sob a", - "home.faq.a8.mitLicense": "Licença MIT", - "home.faq.a8.p3": - ", o que significa que qualquer pessoa pode usar, modificar ou contribuir para o seu desenvolvimento. Qualquer pessoa da comunidade pode abrir issues, enviar pull requests e estender a funcionalidade.", - - "home.zenCta.title": "Acesse modelos confiáveis e otimizados para agentes de codificação", - "home.zenCta.body": - "O Zen dá acesso a um conjunto selecionado de modelos de IA que a OpenCode testou e avaliou especificamente para agentes de codificação. Não precisa se preocupar com desempenho e qualidade inconsistentes entre provedores, use modelos validados que funcionam.", - "home.zenCta.link": "Saiba mais sobre o Zen", - - "zen.title": "OpenCode Zen | Um conjunto selecionado de modelos confiáveis e otimizados para agentes de codificação", - "zen.hero.title": "Modelos confiáveis e otimizados para agentes de codificação", - "zen.hero.body": - "O Zen dá acesso a um conjunto selecionado de modelos de IA que a OpenCode testou e avaliou especificamente para agentes de codificação. Não precisa se preocupar com desempenho e qualidade inconsistentes, use modelos validados que funcionam.", - - "zen.faq.q1": "O que é OpenCode Zen?", - "zen.faq.a1": - "Zen é um conjunto selecionado de modelos de IA testados e avaliados para agentes de codificação, criado pela equipe por trás do OpenCode.", - "zen.faq.q2": "O que torna o Zen mais preciso?", - "zen.faq.a2": - "O Zen fornece apenas modelos que foram especificamente testados e avaliados para agentes de codificação. Você não usaria uma faca de manteiga para cortar um bife, não use modelos ruins para programar.", - "zen.faq.q3": "O Zen é mais barato?", - "zen.faq.a3": - "O Zen não tem fins lucrativos. O Zen repassa os custos dos provedores de modelos para você. Quanto maior o uso do Zen, mais a OpenCode pode negociar melhores taxas e repassá-las para você.", - "zen.faq.q4": "Quanto custa o Zen?", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "cobra por requisição", - "zen.faq.a4.p1.afterPricing": "sem margens de lucro, então você paga exatamente o que o provedor do modelo cobra.", - "zen.faq.a4.p2.beforeAccount": "Seu custo total depende do uso, e você pode definir limites de gastos mensais em sua", - "zen.faq.a4.p2.accountLink": "conta", - "zen.faq.a4.p3": - "Para cobrir custos, a OpenCode adiciona apenas uma pequena taxa de processamento de pagamento de $1,23 por recarga de $20.", - "zen.faq.q5": "E sobre dados e privacidade?", - "zen.faq.a5.beforeExceptions": - "Todos os modelos Zen são hospedados nos EUA. Os provedores seguem uma política de retenção zero e não usam seus dados para treinamento de modelos, com as", - "zen.faq.a5.exceptionsLink": "seguintes exceções", - "zen.faq.q6": "Posso definir limites de gastos?", - "zen.faq.a6": "Sim, você pode definir limites de gastos mensais em sua conta.", - "zen.faq.q7": "Posso cancelar?", - "zen.faq.a7": "Sim, você pode desativar o faturamento a qualquer momento e usar seu saldo restante.", - "zen.faq.q8": "Posso usar o Zen com outros agentes de codificação?", - "zen.faq.a8": - "Embora o Zen funcione muito bem com o OpenCode, você pode usar o Zen com qualquer agente. Siga as instruções de configuração no seu agente de codificação preferido.", - - "zen.cta.start": "Comece com o Zen", - "zen.pricing.title": "Adicionar $20 de saldo pré-pago", - "zen.pricing.fee": "(+$1,23 taxa de processamento do cartão)", - "zen.pricing.body": "Use com qualquer agente. Defina limites de gastos mensais. Cancele a qualquer momento.", - "zen.problem.title": "Que problema o Zen resolve?", - "zen.problem.body": - "Existem muitos modelos disponíveis, mas apenas alguns funcionam bem com agentes de codificação. A maioria dos provedores os configura de maneira diferente, com resultados variados.", - "zen.problem.subtitle": "Estamos corrigindo isso para todos, não apenas para os usuários do OpenCode.", - "zen.problem.item1": "Testando modelos selecionados e consultando suas equipes", - "zen.problem.item2": "Trabalhando com provedores para garantir que sejam entregues corretamente", - "zen.problem.item3": "Avaliando todas as combinações de modelo-provedor que recomendamos", - "zen.how.title": "Como o Zen funciona", - "zen.how.body": "Embora sugerimos que você use o Zen com o OpenCode, você pode usá-lo com qualquer agente.", - "zen.how.step1.title": "Cadastre-se e adicione $20 de saldo", - "zen.how.step1.beforeLink": "siga as", - "zen.how.step1.link": "instruções de configuração", - "zen.how.step2.title": "Use o Zen com preços transparentes", - "zen.how.step2.link": "pague por requisição", - "zen.how.step2.afterLink": "sem margens de lucro", - "zen.how.step3.title": "Recarga automática", - "zen.how.step3.body": "quando seu saldo atingir $5, adicionaremos automaticamente $20", - "zen.privacy.title": "Sua privacidade é importante para nós", - "zen.privacy.beforeExceptions": - "Todos os modelos Zen são hospedados nos EUA. Os provedores seguem uma política de retenção zero e não usam seus dados para treinamento de modelo, com as", - "zen.privacy.exceptionsLink": "seguintes exceções", - - "go.title": "OpenCode Go | Modelos de codificação de baixo custo para todos", - "go.meta.description": - "O Go começa em $5 no primeiro mês, depois $10/mês, com limites generosos de solicitação de 5 horas para GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro e DeepSeek V4 Flash.", - "go.hero.title": "Modelos de codificação de baixo custo para todos", - "go.hero.body": - "O Go traz a codificação com agentes para programadores em todo o mundo. Oferecendo limites generosos e acesso confiável aos modelos de código aberto mais capazes, para que você possa construir com agentes poderosos sem se preocupar com custos ou disponibilidade.", - - "go.cta.start": "Assinar o Go", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "Assinar o Go", - "go.cta.price": "$10/mês", - "go.cta.promo": "$5 no primeiro mês", - "go.pricing.body": - "Use com qualquer agente. $5 no primeiro mês, depois $10/mês. Recarregue o crédito se necessário. Cancele a qualquer momento.", - "go.graph.free": "Grátis", - "go.graph.freePill": "Big Pickle e modelos gratuitos", - "go.graph.go": "Go", - "go.graph.label": "Requisições por 5 horas", - "go.graph.usageLimits": "Limites de uso", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "Requisições por 5h: {{free}} vs {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "ex-CEO, Terminal Products", - "go.testimonials.dax.quoteAfter": "mudou minha vida, é realmente uma escolha óbvia.", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "ex-Fundador, SEED, PM, Melt, Pop, Dapt, Cadmus e ViewPoint", - "go.testimonials.jay.quoteBefore": "4 de 5 pessoas em nossa equipe adoram usar", - "go.testimonials.jay.quoteAfter": ".", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "ex-Hero, AWS", - "go.testimonials.adam.quoteBefore": "Eu não consigo recomendar o", - "go.testimonials.adam.quoteAfter": "o suficiente. Sério, é muito bom.", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "ex-Head de Design, Laravel", - "go.testimonials.david.quoteBefore": "Com o", - "go.testimonials.david.quoteAfter": - "eu sei que todos os modelos são testados e perfeitos para agentes de codificação.", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "ex-Estagiário, Nvidia (4 vezes)", - "go.testimonials.frank.quote": "Eu queria ainda estar na Nvidia.", - "go.problem.title": "Que problema o Go resolve?", - "go.problem.body": - "Estamos focados em levar a experiência do OpenCode para o maior número de pessoas possível. OpenCode Go é uma assinatura de baixo custo: $5 no primeiro mês, depois $10/mês. Oferece limites generosos e acesso confiável aos modelos open source mais capazes.", - "go.problem.subtitle": " ", - "go.problem.item1": "Preço de assinatura de baixo custo", - "go.problem.item2": "Limites generosos e acesso confiável", - "go.problem.item3": "Feito para o maior número possível de programadores", - "go.problem.item4": - "Inclui GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro e DeepSeek V4 Flash", - "go.how.title": "Como o Go funciona", - "go.how.body": - "O Go começa em $5 no primeiro mês, depois $10/mês. Você pode usá-lo com o OpenCode ou qualquer agente.", - "go.how.step1.title": "Crie uma conta", - "go.how.step1.beforeLink": "siga as", - "go.how.step1.link": "instruções de configuração", - "go.how.step2.title": "Assinar o Go", - "go.how.step2.link": "$5 no primeiro mês", - "go.how.step2.afterLink": "depois $10/mês com limites generosos", - "go.how.step3.title": "Comece a codificar", - "go.how.step3.body": "com acesso confiável a modelos de código aberto", - "go.privacy.title": "Sua privacidade é importante para nós", - "go.privacy.body": - "O plano é projetado principalmente para usuários internacionais, com modelos hospedados nos EUA, UE e Singapura para acesso global estável.", - "go.privacy.contactAfter": "se você tiver alguma dúvida.", - "go.privacy.beforeExceptions": - "Os modelos Go são hospedados nos EUA. Os provedores seguem uma política de retenção zero e não usam seus dados para treinamento de modelos, com as", - "go.privacy.exceptionsLink": "seguintes exceções", - "go.faq.q1": "O que é OpenCode Go?", - "go.faq.a1": - "Go é uma assinatura de baixo custo que oferece acesso confiável a modelos de código aberto capazes para codificação com agentes.", - "go.faq.q2": "Quais modelos o Go inclui?", - "go.faq.a2": "O Go inclui os modelos listados abaixo, com limites generosos e acesso confiável.", - "go.faq.q3": "O Go é o mesmo que o Zen?", - "go.faq.a3": - "Não. Zen é pay-as-you-go, enquanto o Go começa em $5 no primeiro mês, depois $10/mês, com limites generosos e acesso confiável aos modelos open source GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro e DeepSeek V4 Flash.", - "go.faq.q4": "Quanto custa o Go?", - "go.faq.a4.p1.beforePricing": "O Go custa", - "go.faq.a4.p1.pricingLink": "$5 no primeiro mês", - "go.faq.a4.p1.afterPricing": "depois $10/mês com limites generosos.", - "go.faq.a4.p2.beforeAccount": "Você pode gerenciar sua assinatura em sua", - "go.faq.a4.p2.accountLink": "conta", - "go.faq.a4.p3": "Cancele a qualquer momento.", - "go.faq.q5": "E sobre dados e privacidade?", - "go.faq.a5.body": - "O plano é projetado principalmente para usuários internacionais, com modelos hospedados nos EUA, UE e Singapura para acesso global estável. Nossos provedores seguem uma política de retenção zero e não usam seus dados para treinamento de modelos.", - "go.faq.a5.beforeExceptions": - "Os modelos Go são hospedados nos EUA. Os provedores seguem uma política de retenção zero e não usam seus dados para treinamento de modelos, com as", - "go.faq.a5.exceptionsLink": "seguintes exceções", - "go.faq.q6": "Posso recarregar crédito?", - "go.faq.a6": "Se você precisar de mais uso, pode recarregar crédito em sua conta.", - "go.faq.q7": "Posso cancelar?", - "go.faq.a7": "Sim, você pode cancelar a qualquer momento.", - "go.faq.q8": "Posso usar o Go com outros agentes de codificação?", - "go.faq.a8": - "Sim, você pode usar o Go com qualquer agente. Siga as instruções de configuração no seu agente de codificação preferido.", - - "go.faq.q9": "Qual a diferença entre os modelos gratuitos e o Go?", - "go.faq.a9": - "Os modelos gratuitos incluem Big Pickle e modelos promocionais disponíveis no momento, com uma cota de 200 requisições/dia. O Go inclui GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro e DeepSeek V4 Flash com cotas de requisição mais altas aplicadas em janelas móveis (5 horas, semanal e mensal), aproximadamente equivalentes a $12 por 5 horas, $30 por semana e $60 por mês (as contagens reais de requisições variam de acordo com o modelo e o uso).", - - "zen.api.error.rateLimitExceeded": "Limite de taxa excedido. Por favor, tente novamente mais tarde.", - "zen.api.error.modelNotSupported": "Modelo {{model}} não suportado", - "zen.api.error.modelFormatNotSupported": "Modelo {{model}} não suportado para o formato {{format}}", - "zen.api.error.noProviderAvailable": "Nenhum provedor disponível", - "zen.api.error.providerNotSupported": "Provedor {{provider}} não suportado", - "zen.api.error.missingApiKey": "Chave de API ausente.", - "zen.api.error.invalidApiKey": "Chave de API inválida.", - "zen.api.error.subscriptionQuotaExceeded": "Cota de assinatura excedida. Tente novamente em {{retryIn}}.", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "Limite de uso de 5 horas atingido. Será reiniciado em {{retryIn}}. Para continuar usando este modelo agora, habilite o uso a partir do seu saldo disponível: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "Limite de uso semanal atingido. Será reiniciado em {{retryIn}}. Para continuar usando este modelo agora, habilite o uso a partir do seu saldo disponível: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "Limite de uso mensal atingido. Será reiniciado em {{retryIn}}. Para continuar usando este modelo agora, habilite o uso a partir do seu saldo disponível: {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "Nenhuma forma de pagamento. Adicione uma forma de pagamento aqui: {{billingUrl}}", - "zen.api.error.insufficientBalance": "Saldo insuficiente. Gerencie seu faturamento aqui: {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "Seu workspace atingiu o limite de gastos mensais de ${{amount}}. Gerencie seus limites aqui: {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "Você atingiu seu limite de gastos mensais de ${{amount}}. Gerencie seus limites aqui: {{membersUrl}}", - "zen.api.error.modelDisabled": "O modelo está desabilitado", - "zen.api.error.regionNotAllowed": - "Este modelo está hospedado na China. Se você quiser usar este modelo, ative-o nas suas configurações: {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "A promoção gratuita do {{model}} terminou. Você pode continuar usando o modelo assinando o OpenCode Go - {{link}}", - - "black.meta.title": "OpenCode Black | Acesse os melhores modelos de codificação do mundo", - "black.meta.description": "Tenha acesso ao Claude, GPT, Gemini e mais com os planos de assinatura OpenCode Black.", - "black.hero.title": "Acesse os melhores modelos de codificação do mundo", - "black.hero.subtitle": "Incluindo Claude, GPT, Gemini e mais", - "black.title": "OpenCode Black | Preços", - "black.paused": "A inscrição no plano Black está temporariamente pausada.", - "black.plan.icon20": "Plano Black 20", - "black.plan.icon100": "Plano Black 100", - "black.plan.icon200": "Plano Black 200", - "black.plan.multiplier100": "5x mais uso que o Black 20", - "black.plan.multiplier200": "20x mais uso que o Black 20", - "black.price.perMonth": "por mês", - "black.price.perPersonBilledMonthly": "por pessoa faturado mensalmente", - "black.terms.1": "Sua assinatura não começará imediatamente", - "black.terms.2": "Você será adicionado à lista de espera e ativado em breve", - "black.terms.3": "Seu cartão só será cobrado quando sua assinatura for ativada", - "black.terms.4": "Limites de uso se aplicam; uso fortemente automatizado pode atingir os limites mais cedo", - "black.terms.5": "Assinaturas são para indivíduos, contate Enterprise para equipes", - "black.terms.6": "Limites podem ser ajustados e planos podem ser descontinuados no futuro", - "black.terms.7": "Cancele sua assinatura a qualquer momento", - "black.action.continue": "Continuar", - "black.finePrint.beforeTerms": "Os preços mostrados não incluem impostos aplicáveis", - "black.finePrint.terms": "Termos de Serviço", - "black.workspace.title": "OpenCode Black | Selecionar Workspace", - "black.workspace.selectPlan": "Selecione um workspace para este plano", - "black.workspace.name": "Workspace {{n}}", - "black.subscribe.title": "Assinar OpenCode Black", - "black.subscribe.paymentMethod": "Forma de pagamento", - "black.subscribe.loadingPaymentForm": "Carregando formulário de pagamento...", - "black.subscribe.selectWorkspaceToContinue": "Selecione um workspace para continuar", - "black.subscribe.failurePrefix": "Ops!", - "black.subscribe.error.generic": "Ocorreu um erro", - "black.subscribe.error.invalidPlan": "Plano inválido", - "black.subscribe.error.workspaceRequired": "ID do workspace é obrigatório", - "black.subscribe.error.alreadySubscribed": "Este workspace já possui uma assinatura", - "black.subscribe.processing": "Processando...", - "black.subscribe.submit": "Assinar ${{plan}}", - "black.subscribe.form.chargeNotice": "Você só será cobrado quando sua assinatura for ativada", - "black.subscribe.success.title": "Você está na lista de espera do OpenCode Black", - "black.subscribe.success.subscriptionPlan": "Plano de assinatura", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "Valor", - "black.subscribe.success.amountValue": "${{plan}} por mês", - "black.subscribe.success.paymentMethod": "Forma de pagamento", - "black.subscribe.success.dateJoined": "Data de entrada", - "black.subscribe.success.chargeNotice": "Seu cartão será cobrado quando sua assinatura for ativada", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "Uso", - "workspace.nav.apiKeys": "Chaves de API", - "workspace.nav.members": "Membros", - "workspace.nav.billing": "Faturamento", - "workspace.nav.settings": "Configurações", - - "workspace.home.banner.beforeLink": "Modelos otimizados e confiáveis para agentes de codificação.", - "workspace.lite.banner.beforeLink": "Modelos de codificação de baixo custo para todos.", - "workspace.home.billing.loading": "Carregando...", - "workspace.home.billing.enable": "Ativar faturamento", - "workspace.home.billing.currentBalance": "Saldo atual", - - "workspace.newUser.feature.tested.title": "Modelos Testados e Verificados", - "workspace.newUser.feature.tested.body": - "Avaliamos e testamos modelos especificamente para agentes de codificação para garantir o melhor desempenho.", - "workspace.newUser.feature.quality.title": "Qualidade Máxima", - "workspace.newUser.feature.quality.body": - "Acesse modelos configurados para desempenho ideal - sem downgrades ou roteamento para provedores mais baratos.", - "workspace.newUser.feature.lockin.title": "Sem Fidelidade", - "workspace.newUser.feature.lockin.body": - "Use o Zen com qualquer agente de codificação e continue usando outros provedores com opencode sempre que quiser.", - "workspace.newUser.copyApiKey": "Copiar chave de API", - "workspace.newUser.copyKey": "Copiar Chave", - "workspace.newUser.copied": "Copiado!", - "workspace.newUser.step.enableBilling": "Ativar faturamento", - "workspace.newUser.step.login.before": "Execute", - "workspace.newUser.step.login.after": "e selecione opencode", - "workspace.newUser.step.pasteKey": "Cole sua chave de API", - "workspace.newUser.step.models.before": "Inicie o opencode e execute", - "workspace.newUser.step.models.after": "para selecionar um modelo", - - "workspace.models.title": "Modelos", - "workspace.models.subtitle.beforeLink": "Gerencie quais modelos os membros do workspace podem acessar.", - "workspace.models.table.model": "Modelo", - "workspace.models.table.enabled": "Habilitado", - - "workspace.providers.title": "Traga Sua Própria Chave", - "workspace.providers.subtitle": "Configure suas próprias chaves de API de provedores de IA.", - "workspace.providers.placeholder": "Insira a chave de API {{provider}} ({{prefix}}...)", - "workspace.providers.configure": "Configurar", - "workspace.providers.edit": "Editar", - "workspace.providers.delete": "Excluir", - "workspace.providers.saving": "Salvando...", - "workspace.providers.save": "Salvar", - "workspace.providers.table.provider": "Provedor", - "workspace.providers.table.apiKey": "Chave de API", - - "workspace.usage.title": "Histórico de Uso", - "workspace.usage.subtitle": "Uso recente da API e custos.", - "workspace.usage.empty": "Faça sua primeira chamada de API para começar.", - "workspace.usage.table.date": "Data", - "workspace.usage.table.model": "Modelo", - "workspace.usage.table.input": "Entrada", - "workspace.usage.table.output": "Saída", - "workspace.usage.table.cost": "Custo", - "workspace.usage.table.session": "Sessão", - "workspace.usage.breakdown.input": "Entrada", - "workspace.usage.breakdown.cacheRead": "Leitura de Cache", - "workspace.usage.breakdown.cacheWrite": "Escrita em Cache", - "workspace.usage.breakdown.output": "Saída", - "workspace.usage.breakdown.reasoning": "Raciocínio", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "Custo", - "workspace.cost.subtitle": "Custos de uso discriminados por modelo.", - "workspace.cost.allModels": "Todos os Modelos", - "workspace.cost.allKeys": "Todas as Chaves", - "workspace.cost.deletedSuffix": "(excluído)", - "workspace.cost.empty": "Nenhum dado de uso disponível para o período selecionado.", - "workspace.cost.subscriptionShort": "ass", - - "workspace.keys.title": "Chaves de API", - "workspace.keys.subtitle": "Gerencie suas chaves de API para acessar os serviços opencode.", - "workspace.keys.create": "Criar Chave de API", - "workspace.keys.placeholder": "Digite o nome da chave", - "workspace.keys.empty": "Crie uma chave de API do opencode Gateway", - "workspace.keys.table.name": "Nome", - "workspace.keys.table.key": "Chave", - "workspace.keys.table.createdBy": "Criado Por", - "workspace.keys.table.lastUsed": "Último Uso", - "workspace.keys.copyApiKey": "Copiar chave de API", - "workspace.keys.delete": "Excluir", - - "workspace.members.title": "Membros", - "workspace.members.subtitle": "Gerencie os membros do workspace e suas permissões.", - "workspace.members.invite": "Convidar Membro", - "workspace.members.inviting": "Convidando...", - "workspace.members.beta.beforeLink": "Workspaces são gratuitos para equipes durante o beta.", - "workspace.members.form.invitee": "Convidado", - "workspace.members.form.emailPlaceholder": "Digite o e-mail", - "workspace.members.form.role": "Função", - "workspace.members.form.monthlyLimit": "Limite de gastos mensais", - "workspace.members.noLimit": "Sem limite", - "workspace.members.noLimitLowercase": "sem limite", - "workspace.members.invited": "convidado", - "workspace.members.edit": "Editar", - "workspace.members.delete": "Excluir", - "workspace.members.saving": "Salvando...", - "workspace.members.save": "Salvar", - "workspace.members.table.email": "E-mail", - "workspace.members.table.role": "Função", - "workspace.members.table.monthLimit": "Limite mensal", - "workspace.members.role.admin": "Admin", - "workspace.members.role.adminDescription": "Pode gerenciar modelos, membros e faturamento", - "workspace.members.role.member": "Membro", - "workspace.members.role.memberDescription": "Só pode gerar chaves de API para si mesmo", - - "workspace.settings.title": "Configurações", - "workspace.settings.subtitle": "Atualize o nome e as preferências do seu workspace.", - "workspace.settings.workspaceName": "Nome do workspace", - "workspace.settings.defaultName": "Padrão", - "workspace.settings.updating": "Atualizando...", - "workspace.settings.save": "Salvar", - "workspace.settings.edit": "Editar", - - "workspace.billing.title": "Faturamento", - "workspace.billing.subtitle.beforeLink": "Gerenciar formas de pagamento.", - "workspace.billing.contactUs": "Contate-nos", - "workspace.billing.subtitle.afterLink": "se você tiver alguma dúvida.", - "workspace.billing.currentBalance": "Saldo Atual", - "workspace.billing.add": "Adicionar $", - "workspace.billing.enterAmount": "Digite o valor", - "workspace.billing.loading": "Carregando...", - "workspace.billing.addAction": "Adicionar", - "workspace.billing.addBalance": "Adicionar Saldo", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "Vinculado ao Stripe", - "workspace.billing.manage": "Gerenciar", - "workspace.billing.enable": "Ativar Faturamento", - - "workspace.monthlyLimit.title": "Limite Mensal", - "workspace.monthlyLimit.subtitle": "Defina um limite de uso mensal para sua conta.", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "Definindo...", - "workspace.monthlyLimit.set": "Definir", - "workspace.monthlyLimit.edit": "Editar Limite", - "workspace.monthlyLimit.noLimit": "Nenhum limite de uso definido.", - "workspace.monthlyLimit.currentUsage.beforeMonth": "Uso atual para", - "workspace.monthlyLimit.currentUsage.beforeAmount": "é $", - - "workspace.redeem.title": "Resgatar Cupom", - "workspace.redeem.subtitle": "Resgate um código de cupom para receber créditos ou vantagens.", - "workspace.redeem.placeholder": "Digite o código do cupom", - "workspace.redeem.redeem": "Resgatar", - "workspace.redeem.redeeming": "Resgatando...", - "workspace.redeem.success": "Cupom resgatado com sucesso.", - - "workspace.reload.title": "Recarga Automática", - "workspace.reload.disabled.before": "A recarga automática está", - "workspace.reload.disabled.state": "desativada", - "workspace.reload.disabled.after": "Ative para recarregar automaticamente quando o saldo estiver baixo.", - "workspace.reload.enabled.before": "A recarga automática está", - "workspace.reload.enabled.state": "ativada", - "workspace.reload.enabled.middle": "Recarregaremos", - "workspace.reload.processingFee": "taxa de processamento", - "workspace.reload.enabled.after": "quando o saldo atingir", - "workspace.reload.edit": "Editar", - "workspace.reload.enable": "Ativar", - "workspace.reload.enableAutoReload": "Ativar Recarga Automática", - "workspace.reload.reloadAmount": "Recarregar $", - "workspace.reload.whenBalanceReaches": "Quando o saldo atingir $", - "workspace.reload.saving": "Salvando...", - "workspace.reload.save": "Salvar", - "workspace.reload.failedAt": "Recarga falhou em", - "workspace.reload.reason": "Motivo:", - "workspace.reload.updatePaymentMethod": "Por favor, atualize sua forma de pagamento e tente novamente.", - "workspace.reload.retrying": "Tentando novamente...", - "workspace.reload.retry": "Tentar novamente", - "workspace.reload.error.paymentFailed": "Pagamento falhou.", - - "workspace.payments.title": "Histórico de Pagamentos", - "workspace.payments.subtitle": "Transações de pagamento recentes.", - "workspace.payments.table.date": "Data", - "workspace.payments.table.paymentId": "ID do Pagamento", - "workspace.payments.table.amount": "Valor", - "workspace.payments.table.receipt": "Recibo", - "workspace.payments.type.credit": "crédito", - "workspace.payments.type.subscription": "assinatura", - "workspace.payments.view": "Ver", - - "workspace.black.loading": "Carregando...", - "workspace.black.time.day": "dia", - "workspace.black.time.days": "dias", - "workspace.black.time.hour": "hora", - "workspace.black.time.hours": "horas", - "workspace.black.time.minute": "minuto", - "workspace.black.time.minutes": "minutos", - "workspace.black.time.fewSeconds": "alguns segundos", - "workspace.black.subscription.title": "Assinatura", - "workspace.black.subscription.message": "Você assina o OpenCode Black por ${{plan}} por mês.", - "workspace.black.subscription.manage": "Gerenciar Assinatura", - "workspace.black.subscription.rollingUsage": "Uso de 5 horas", - "workspace.black.subscription.weeklyUsage": "Uso Semanal", - "workspace.black.subscription.resetsIn": "Reinicia em", - "workspace.black.subscription.useBalance": "Use seu saldo disponível após atingir os limites de uso", - "workspace.black.waitlist.title": "Lista de Espera", - "workspace.black.waitlist.joined": "Você está na lista de espera para o plano OpenCode Black de ${{plan}} por mês.", - "workspace.black.waitlist.ready": "Estamos prontos para inscrever você no plano OpenCode Black de ${{plan}} por mês.", - "workspace.black.waitlist.leave": "Sair da Lista de Espera", - "workspace.black.waitlist.leaving": "Saindo...", - "workspace.black.waitlist.left": "Saiu", - "workspace.black.waitlist.enroll": "Inscrever-se", - "workspace.black.waitlist.enrolling": "Inscrevendo-se...", - "workspace.black.waitlist.enrolled": "Inscrito", - "workspace.black.waitlist.enrollNote": - "Ao clicar em Inscrever-se, sua assinatura começará imediatamente e seu cartão será cobrado.", - - "workspace.lite.loading": "Carregando...", - "workspace.lite.time.day": "dia", - "workspace.lite.time.days": "dias", - "workspace.lite.time.hour": "hora", - "workspace.lite.time.hours": "horas", - "workspace.lite.time.minute": "minuto", - "workspace.lite.time.minutes": "minutos", - "workspace.lite.time.fewSeconds": "alguns segundos", - "workspace.lite.subscription.message": "Você assina o OpenCode Go.", - "workspace.lite.subscription.manage": "Gerenciar Assinatura", - "workspace.lite.subscription.rollingUsage": "Uso Contínuo", - "workspace.lite.subscription.weeklyUsage": "Uso Semanal", - "workspace.lite.subscription.monthlyUsage": "Uso Mensal", - "workspace.lite.subscription.resetsIn": "Reinicia em", - "workspace.lite.subscription.useBalance": "Use seu saldo disponível após atingir os limites de uso", - "workspace.lite.subscription.selectProvider": - 'Selecione "OpenCode Go" como provedor na sua configuração do opencode para usar os modelos Go.', - "workspace.lite.providers.title": "Provedores", - "workspace.lite.providers.description": "Controle quais provedores são usados para roteamento.", - "workspace.lite.providers.useChina": "Ativar modelos hospedados na China", - "workspace.lite.black.message": - "Você está atualmente inscrito no OpenCode Black ou na lista de espera. Por favor, cancele a assinatura primeiro se desejar mudar para o Go.", - "workspace.lite.other.message": - "Outro membro neste workspace já assina o OpenCode Go. Apenas um membro por workspace pode assinar.", - "workspace.lite.promo.description": - "O OpenCode Go começa em {{price}}, depois $10/mês, e oferece acesso confiável a modelos de codificação abertos populares com limites de uso generosos.", - "workspace.lite.promo.price": "$5 no primeiro mês", - "workspace.lite.promo.modelsTitle": "O que está incluído", - "workspace.lite.promo.footer": - "O plano é projetado principalmente para usuários internacionais, com modelos hospedados nos EUA, UE e Singapura para acesso global estável. Preços e limites de uso podem mudar conforme aprendemos com o uso inicial e feedback.", - "workspace.lite.promo.subscribe": "Assinar Go", - "workspace.lite.promo.subscribing": "Redirecionando...", - "workspace.lite.promo.otherMethods": "Outros métodos de pagamento", - "workspace.lite.promo.selectMethod": "Selecionar método de pagamento", - - "workspace.referral.copyLink": "Copiar link", - "workspace.referral.copied": "Copiado", - "workspace.referral.overview.title": "Convide amigos", - "workspace.referral.overview.subtitle": "Ganhe $5 quando um amigo assinar. Ele também ganha $5.", - "workspace.referral.instructions.share": "Compartilhe seu link de indicação", - "workspace.referral.instructions.subscribe": "Seu amigo entra e assina o Go", - "workspace.referral.instructions.claim": - "Vocês dois ganham um crédito de uso de $5 para aplicar aos seus limites de uso do Go", - "workspace.referral.rewards.title": "Recompensas de indicação", - "workspace.referral.rewards.description": "Aplique os créditos de indicação disponíveis no seu uso do Go.", - "workspace.referral.rewards.subtitle": "{{applied}} / {{total}} recompensas aplicadas.", - "workspace.referral.rewards.empty": "Ainda não há recompensas de indicação.", - "workspace.referral.table.reward": "Recompensa", - "workspace.referral.table.referral": "Descrição", - "workspace.referral.table.date": "Data", - "workspace.referral.reward.description.inviter": "Convidou {{email}}", - "workspace.referral.reward.description.invitee": "Convidado por {{email}}", - "workspace.referral.reward.action.subscribeUnlock": "Assine para desbloquear", - "workspace.referral.reward.action.view": "Ver recompensa", - "workspace.referral.reward.action.applied": "Recompensa aplicada", - "workspace.referral.reward.source.pendingInviter": "Aguardando ele assinar", - "workspace.referral.reward.source.pendingInvitee": "Assine para desbloquear a recompensa", - "workspace.referral.reward.source.available": "Recompensa pronta para usar", - "workspace.referral.reward.source.applied": "Recompensa aplicada", - "workspace.referral.reward.status.applied": "Recompensa aplicada", - "workspace.referral.reward.status.pendingInviter": "Assine para desbloquear", - "workspace.referral.reward.status.pendingInvitee": "Assine para desbloquear", - "workspace.referral.apply.noGo": "Assine para desbloquear", - "workspace.referral.apply.preview": "Ver recompensa", - "workspace.referral.apply.action": "Aplicar", - "workspace.referral.apply.confirmTitle": "Aplicar recompensa", - "workspace.referral.apply.confirmBody": "Aplique {{amount}} para reduzir o uso atual deste workspace.", - "workspace.referral.apply.confirmAction": "Aplicar", - - "download.title": "OpenCode | Baixar", - "download.meta.description": "Baixe o OpenCode para macOS, Windows e Linux", - "download.hero.title": "Baixar OpenCode", - "download.hero.subtitle": "Disponível em Beta para macOS, Windows e Linux", - "download.hero.button": "Baixar para {{os}}", - "download.section.terminal": "OpenCode Terminal", - "download.section.desktop": "OpenCode Desktop (Beta)", - "download.section.extensions": "Extensões OpenCode", - "download.section.integrations": "Integrações OpenCode", - "download.action.download": "Baixar", - "download.action.install": "Instalar", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "Não necessariamente, mas provavelmente. Você precisará de uma assinatura de IA se quiser conectar o OpenCode a um provedor pago, embora você possa trabalhar com", - "download.faq.a3.localLink": "modelos locais", - "download.faq.a3.afterLocal.beforeZen": "de graça. Embora incentivemos os usuários a usar o", - "download.faq.a3.afterZen": - ", o OpenCode funciona com todos os provedores populares, como OpenAI, Anthropic, xAI etc.", - - "download.faq.a5.p1": "O OpenCode é 100% gratuito para usar.", - "download.faq.a5.p2.beforeZen": - "Quaisquer custos adicionais virão da sua assinatura de um provedor de modelo. Embora o OpenCode funcione com qualquer provedor de modelo, recomendamos o uso do", - "download.faq.a5.p2.afterZen": ".", - - "download.faq.a6.p1": - "Seus dados e informações só são armazenados quando você cria links compartilháveis no OpenCode.", - "download.faq.a6.p2.beforeShare": "Saiba mais sobre", - "download.faq.a6.shareLink": "páginas de compartilhamento", - - "enterprise.title": "OpenCode | Soluções empresariais para sua organização", - "enterprise.meta.description": "Contate a OpenCode para soluções empresariais", - "enterprise.hero.title": "Seu código é seu", - "enterprise.hero.body1": - "O OpenCode opera com segurança dentro da sua organização, sem dados ou contexto armazenados e sem restrições de licenciamento ou reivindicações de propriedade. Inicie um teste com sua equipe e, em seguida, implante em toda a organização integrando-o ao seu SSO e gateway de IA interno.", - "enterprise.hero.body2": "Deixe-nos saber como podemos ajudar.", - "enterprise.form.name.label": "Nome completo", - "enterprise.form.name.placeholder": "Jeff Bezos", - "enterprise.form.role.label": "Cargo", - "enterprise.form.role.placeholder": "Presidente Executivo", - "enterprise.form.company.label": "Empresa", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "E-mail corporativo", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "Telefone", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "Qual problema você está tentando resolver?", - "enterprise.form.message.placeholder": "Precisamos de ajuda com...", - "enterprise.form.send": "Enviar", - "enterprise.form.sending": "Enviando...", - "enterprise.form.success": "Mensagem enviada, entraremos em contato em breve.", - "enterprise.form.success.submitted": "Formulário enviado com sucesso.", - "enterprise.form.error.allFieldsRequired": "Todos os campos são obrigatórios.", - "enterprise.form.error.invalidEmailFormat": "Formato de e-mail inválido.", - "enterprise.form.error.internalServer": "Erro interno do servidor.", - "enterprise.faq.title": "FAQ", - "enterprise.faq.q1": "O que é OpenCode Enterprise?", - "enterprise.faq.a1": - "OpenCode Enterprise é para organizações que desejam garantir que seu código e dados nunca saiam de sua infraestrutura. Isso pode ser feito usando uma configuração centralizada que se integra ao seu SSO e gateway de IA interno.", - "enterprise.faq.q2": "Como faço para começar com o OpenCode Enterprise?", - "enterprise.faq.a2": - "Basta começar com um teste interno com sua equipe. O OpenCode por padrão não armazena seu código ou dados de contexto, facilitando o início. Em seguida, entre em contato conosco para discutir opções de preços e implementação.", - "enterprise.faq.q3": "Como funciona o preço empresarial?", - "enterprise.faq.a3": - "Oferecemos preços empresariais por assento. Se você tiver seu próprio gateway de LLM, não cobramos pelos tokens usados. Para mais detalhes, entre em contato conosco para um orçamento personalizado com base nas necessidades da sua organização.", - "enterprise.faq.q4": "Meus dados estão seguros com o OpenCode Enterprise?", - "enterprise.faq.a4": - "Sim. O OpenCode não armazena seu código ou dados de contexto. Todo o processamento acontece localmente ou por meio de chamadas de API diretas para seu provedor de IA. Com configuração centralizada e integração de SSO, seus dados permanecem seguros dentro da infraestrutura de sua organização.", - - "brand.title": "OpenCode | Marca", - "brand.meta.description": "Diretrizes da marca OpenCode", - "brand.heading": "Diretrizes da marca", - "brand.subtitle": "Recursos e ativos para ajudá-lo a trabalhar com a marca OpenCode.", - "brand.downloadAll": "Baixar todos os recursos", - - "changelog.title": "OpenCode | Changelog", - "changelog.meta.description": "Notas de versão e changelog do OpenCode", - "changelog.hero.title": "Changelog", - "changelog.hero.subtitle": "Novas atualizações e melhorias no OpenCode", - "changelog.empty": "Nenhuma entrada de changelog encontrada.", - "changelog.viewJson": "Ver JSON", - - "bench.list.title": "Benchmark", - "bench.list.heading": "Benchmarks", - "bench.list.table.agent": "Agente", - "bench.list.table.model": "Modelo", - "bench.list.table.score": "Pontuação", - "bench.submission.error.allFieldsRequired": "Todos os campos são obrigatórios.", - - "bench.detail.title": "Benchmark - {{task}}", - "bench.detail.notFound": "Tarefa não encontrada", - "bench.detail.na": "N/A", - "bench.detail.labels.agent": "Agente", - "bench.detail.labels.model": "Modelo", - "bench.detail.labels.task": "Tarefa", - "bench.detail.labels.repo": "Repositório", - "bench.detail.labels.from": "De", - "bench.detail.labels.to": "Para", - "bench.detail.labels.prompt": "Prompt", - "bench.detail.labels.commit": "Commit", - "bench.detail.labels.averageDuration": "Duração Média", - "bench.detail.labels.averageScore": "Pontuação Média", - "bench.detail.labels.averageCost": "Custo Médio", - "bench.detail.labels.summary": "Resumo", - "bench.detail.labels.runs": "Execuções", - "bench.detail.labels.score": "Pontuação", - "bench.detail.labels.base": "Base", - "bench.detail.labels.penalty": "Penalidade", - "bench.detail.labels.weight": "peso", - "bench.detail.table.run": "Execução", - "bench.detail.table.score": "Pontuação (Base - Penalidade)", - "bench.detail.table.cost": "Custo", - "bench.detail.table.duration": "Duração", - "bench.detail.run.title": "Execução {{n}}", - "bench.detail.rawJson": "JSON Bruto", -} satisfies Dict diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts deleted file mode 100644 index b87aa04cd9..0000000000 --- a/packages/console/app/src/i18n/da.ts +++ /dev/null @@ -1,825 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "Dokumentation", - "nav.changelog": "Changelog", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "Enterprise", - "nav.zen": "Zen", - "nav.login": "Log ind", - "nav.free": "Download", - "nav.home": "Hjem", - "nav.openMenu": "Åbn menu", - "nav.getStartedFree": "Kom i gang gratis", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "Kopier logo som SVG", - "nav.context.copyWordmark": "Kopier wordmark som SVG", - "nav.context.brandAssets": "Brand-assets", - - "footer.github": "GitHub", - "footer.docs": "Dokumentation", - "footer.changelog": "Changelog", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "Brand", - "legal.privacy": "Privatliv", - "legal.terms": "Vilkår", - - "email.title": "Få besked først, når vi lancerer nye produkter", - "email.subtitle": "Tilmeld dig ventelisten for tidlig adgang.", - "email.placeholder": "E-mailadresse", - "email.subscribe": "Tilmeld", - "email.success": "Næsten færdig - tjek din indbakke og bekræft din e-mailadresse", - - "notFound.title": "Ikke fundet | opencode", - "notFound.heading": "404 - Siden blev ikke fundet", - "notFound.home": "Hjem", - "notFound.docs": "Dokumentation", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "opencode logo light", - "notFound.logoDarkAlt": "opencode logo dark", - - "user.logout": "Log ud", - - "auth.callback.error.codeMissing": "Ingen autorisationskode fundet.", - - "workspace.select": "Vælg workspace", - "workspace.createNew": "+ Opret nyt workspace", - "workspace.modal.title": "Opret nyt workspace", - "workspace.modal.placeholder": "Indtast workspace-navn", - - "common.cancel": "Annuller", - "common.creating": "Opretter...", - "common.create": "Opret", - - "common.videoUnsupported": "Din browser understøtter ikke video-tagget.", - "common.figure": "Fig {{n}}.", - "common.faq": "FAQ", - "common.learnMore": "Læs mere", - - "error.invalidPlan": "Ugyldig plan", - "error.workspaceRequired": "Workspace-ID er påkrævet", - "error.alreadySubscribed": "Dette workspace har allerede et abonnement", - "error.limitRequired": "Grænse er påkrævet.", - "error.monthlyLimitInvalid": "Angiv en gyldig månedlig grænse.", - "error.workspaceNameRequired": "Workspace-navn er påkrævet.", - "error.nameTooLong": "Navnet må højst være på 255 tegn.", - "error.emailRequired": "E-mail er påkrævet", - "error.roleRequired": "Rolle er påkrævet", - "error.idRequired": "ID er påkrævet", - "error.nameRequired": "Navn er påkrævet", - "error.providerRequired": "Udbyder er påkrævet", - "error.apiKeyRequired": "API-nøgle er påkrævet", - "error.modelRequired": "Model er påkrævet", - "error.reloadAmountMin": "Genopfyldningsbeløb skal være mindst ${{amount}}", - "error.reloadTriggerMin": "Saldogrænse skal være mindst ${{amount}}", - - "app.meta.description": "OpenCode - Den open source kodningsagent.", - - "home.title": "OpenCode | Den open source AI-kodningsagent", - - "temp.title": "opencode | AI-kodningsagent bygget til terminalen", - "temp.hero.title": "AI-kodningsagenten bygget til terminalen", - "temp.zen": "opencode zen", - "temp.getStarted": "Kom i gang", - "temp.feature.native.title": "Native TUI", - "temp.feature.native.body": "En responsiv, native, tema-bar terminal-UI", - "temp.feature.zen.beforeLink": "En", - "temp.feature.zen.link": "kurateret liste over modeller", - "temp.feature.zen.afterLink": "leveret af opencode", - "temp.feature.models.beforeLink": "Understøtter 75+ LLM-udbydere gennem", - "temp.feature.models.afterLink": ", inklusive lokale modeller", - "temp.screenshot.caption": "opencode TUI med tokyonight-temaet", - "temp.screenshot.alt": "opencode TUI med tokyonight-temaet", - "temp.logoLightAlt": "opencode logo light", - "temp.logoDarkAlt": "opencode logo dark", - - "home.banner.badge": "Ny", - "home.banner.text": "Desktop-app tilgængelig i beta", - "home.banner.platforms": "på macOS, Windows og Linux", - "home.banner.downloadNow": "Download nu", - "home.banner.downloadBetaNow": "Download desktop-betaen nu", - - "home.hero.title": "Den open source AI-kodningsagent", - "home.hero.subtitle.a": "Gratis modeller inkluderet, eller forbind enhver model fra enhver udbyder,", - "home.hero.subtitle.b": "inklusive Claude, GPT, Gemini og mere.", - - "home.install.ariaLabel": "Installationsmuligheder", - - "home.what.title": "Hvad er OpenCode?", - "home.what.body": - "OpenCode er en open source agent, der hjælper dig med at skrive kode i din terminal, IDE eller desktop.", - "home.what.lsp.title": "LSP aktiveret", - "home.what.lsp.body": "Indlæser automatisk de rigtige LSP'er til LLM'en", - "home.what.multiSession.title": "Multi-session", - "home.what.multiSession.body": "Start flere agenter parallelt på det samme projekt", - "home.what.shareLinks.title": "Del links", - "home.what.shareLinks.body": "Del et link til enhver session til reference eller debugging", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "Log ind med GitHub for at bruge din Copilot-konto", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "Log ind med OpenAI for at bruge din ChatGPT Plus- eller Pro-konto", - "home.what.anyModel.title": "Enhver model", - "home.what.anyModel.body": "75+ LLM-udbydere via Models.dev, inklusive lokale modeller", - "home.what.anyEditor.title": "Enhver editor", - "home.what.anyEditor.body": "Tilgængelig som terminal-interface, desktop-app og IDE-udvidelse", - "home.what.readDocs": "Læs docs", - - "home.growth.title": "Den open source AI-kodningsagent", - "home.growth.body": - "Med over {{stars}} GitHub-stjerner, {{contributors}} bidragsydere og over {{commits}} commits bruges OpenCode af over {{monthlyUsers}} udviklere hver måned.", - "home.growth.githubStars": "GitHub-stjerner", - "home.growth.contributors": "Bidragsydere", - "home.growth.monthlyDevs": "Månedlige udviklere", - - "home.privacy.title": "Bygget med privatliv først", - "home.privacy.body": - "OpenCode gemmer ikke din kode eller kontekstdata, så den kan bruges i privatlivsfølsomme miljøer.", - "home.privacy.learnMore": "Læs mere om", - "home.privacy.link": "privatliv", - - "home.faq.q1": "Hvad er OpenCode?", - "home.faq.a1": - "OpenCode er en open source agent, der hjælper dig med at skrive og køre kode med enhver AI-model. Den er tilgængelig som terminal-interface, desktop-app eller IDE-udvidelse.", - "home.faq.q2": "Hvordan bruger jeg OpenCode?", - "home.faq.a2.before": "Den nemmeste måde at komme i gang på er at læse", - "home.faq.a2.link": "introen", - "home.faq.q3": "Skal jeg have ekstra AI-abonnementer for at bruge OpenCode?", - "home.faq.a3.p1": - "Ikke nødvendigvis. OpenCode kommer med gratis modeller, som du kan bruge uden at oprette en konto.", - "home.faq.a3.p2.beforeZen": "Derudover kan du bruge populære kodningsmodeller ved at oprette en", - "home.faq.a3.p2.afterZen": " konto.", - "home.faq.a3.p3": - "Vi opfordrer til at bruge Zen, men OpenCode virker også med populære udbydere som OpenAI, Anthropic, xAI osv.", - "home.faq.a3.p4.beforeLocal": "Du kan endda forbinde dine", - "home.faq.a3.p4.localLink": "lokale modeller", - "home.faq.q4": "Kan jeg bruge mine eksisterende AI-abonnementer med OpenCode?", - "home.faq.a4.p1": - "Ja. OpenCode understøtter abonnementer fra alle store udbydere. Du kan bruge Claude Pro/Max, ChatGPT Plus/Pro eller GitHub Copilot.", - "home.faq.q5": "Kan jeg kun bruge OpenCode i terminalen?", - "home.faq.a5.beforeDesktop": "Ikke længere! OpenCode er nu tilgængelig som en app til", - "home.faq.a5.desktop": "desktop", - "home.faq.a5.and": "og", - "home.faq.a5.web": "web", - "home.faq.q6": "Hvad koster OpenCode?", - "home.faq.a6": - "OpenCode er 100% gratis at bruge. Det kommer også med et sæt gratis modeller. Der kan være ekstra omkostninger, hvis du forbinder en anden udbyder.", - "home.faq.q7": "Hvad med data og privatliv?", - "home.faq.a7.p1": "Dine data gemmes kun, når du bruger vores gratis modeller eller opretter delbare links.", - "home.faq.a7.p2.beforeModels": "Læs mere om", - "home.faq.a7.p2.modelsLink": "vores modeller", - "home.faq.a7.p2.and": "og", - "home.faq.a7.p2.shareLink": "delingssider", - "home.faq.q8": "Er OpenCode open source?", - "home.faq.a8.p1": "Ja, OpenCode er fuldt open source. Kildekoden er offentlig på", - "home.faq.a8.p2": "under", - "home.faq.a8.mitLicense": "MIT-licensen", - "home.faq.a8.p3": - ", hvilket betyder at alle kan bruge, ændre eller bidrage til udviklingen. Alle i communityet kan oprette issues, indsende pull requests og udvide funktionalitet.", - - "home.zenCta.title": "Få adgang til pålidelige, optimerede modeller til kodningsagenter", - "home.zenCta.body": - "Zen giver dig adgang til et håndplukket sæt AI-modeller, som OpenCode har testet og benchmarked specifikt til kodningsagenter. Du behøver ikke bekymre dig om svingende performance og kvalitet på tværs af udbydere: brug validerede modeller, der virker.", - "home.zenCta.link": "Læs om Zen", - - "zen.title": "OpenCode Zen | Et kurateret sæt af pålidelige, optimerede modeller til kodningsagenter", - "zen.hero.title": "Pålidelige optimerede modeller til kodningsagenter", - "zen.hero.body": - "Zen giver dig adgang til et kurateret sæt AI-modeller, som OpenCode har testet og benchmarked specifikt til kodningsagenter. Du behøver ikke bekymre dig om svingende performance og kvalitet: brug validerede modeller, der virker.", - - "zen.faq.q1": "Hvad er OpenCode Zen?", - "zen.faq.a1": - "Zen er et kurateret sæt AI-modeller testet og benchmarked til kodningsagenter, skabt af teamet bag OpenCode.", - "zen.faq.q2": "Hvad gør Zen mere præcis?", - "zen.faq.a2": - "Zen tilbyder kun modeller, der er testet og benchmarked specifikt til kodningsagenter. Du ville ikke bruge en smørkniv til at skære steak; brug ikke dårlige modeller til kodning.", - "zen.faq.q3": "Er Zen billigere?", - "zen.faq.a3": - "Zen er ikke for profit. Zen videregiver omkostningerne fra modeludbyderne til dig. Jo mere Zen bruges, desto mere kan OpenCode forhandle bedre priser og give dem videre til dig.", - "zen.faq.q4": "Hvad koster Zen?", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "opkræver per request", - "zen.faq.a4.p1.afterPricing": "uden markups, så du betaler præcis det, som modeludbyderen opkræver.", - "zen.faq.a4.p2.beforeAccount": "Din samlede pris afhænger af brug, og du kan sætte månedlige udgiftsgrænser i din", - "zen.faq.a4.p2.accountLink": "konto", - "zen.faq.a4.p3": - "For at dække omkostninger tilføjer OpenCode kun et lille betalingsgebyr på $1.23 per $20 saldo-opfyldning.", - "zen.faq.q5": "Hvad med data og privatliv?", - "zen.faq.a5.beforeExceptions": - "Alle Zen-modeller hostes i USA. Udbydere følger en zero-retention-policy og bruger ikke dine data til modeltræning, med de", - "zen.faq.a5.exceptionsLink": "følgende undtagelser", - "zen.faq.q6": "Kan jeg sætte udgiftsgrænser?", - "zen.faq.a6": "Ja, du kan sætte månedlige udgiftsgrænser i din konto.", - "zen.faq.q7": "Kan jeg afmelde?", - "zen.faq.a7": "Ja, du kan deaktivere betaling når som helst og bruge din resterende saldo.", - "zen.faq.q8": "Kan jeg bruge Zen med andre kodningsagenter?", - "zen.faq.a8": - "Selvom Zen fungerer godt med OpenCode, kan du bruge Zen med enhver agent. Følg opsætningsinstruktionerne i din foretrukne kodningsagent.", - - "zen.cta.start": "Kom godt i gang med Zen", - "zen.pricing.title": "Tilføj $20 Pay as you go-saldo", - "zen.pricing.fee": "(+$1.23 kortbehandlingsgebyr)", - "zen.pricing.body": "Brug med enhver agent. Indstil månedlige forbrugsgrænser. Annuller til enhver tid.", - "zen.problem.title": "Hvilket problem løser Zen?", - "zen.problem.body": - "Der er så mange modeller tilgængelige, men kun få fungerer godt med kodningsagenter. De fleste udbydere konfigurerer dem anderledes med forskellige resultater.", - "zen.problem.subtitle": "Vi løser dette for alle, ikke kun OpenCode-brugere.", - "zen.problem.item1": "Test af udvalgte modeller og høring af deres teams", - "zen.problem.item2": "Samarbejde med udbydere for at sikre, at de bliver leveret korrekt", - "zen.problem.item3": "Benchmarking af alle model-udbyder kombinationer, vi anbefaler", - "zen.how.title": "Hvordan Zen virker", - "zen.how.body": "Selvom vi foreslår, at du bruger Zen med OpenCode, kan du bruge Zen med enhver agent.", - "zen.how.step1.title": "Tilmeld dig og tilføj saldo på $20", - "zen.how.step1.beforeLink": "følg", - "zen.how.step1.link": "opsætningsinstruktioner", - "zen.how.step2.title": "Brug Zen med gennemsigtige priser", - "zen.how.step2.link": "betal per request", - "zen.how.step2.afterLink": "med nul markups", - "zen.how.step3.title": "Auto-top op", - "zen.how.step3.body": "når din saldo når $5, tilføjer vi automatisk $20", - "zen.privacy.title": "Dit privatliv er vigtigt for os", - "zen.privacy.beforeExceptions": - "Alle Zen-modeller er hostet i USA. Udbydere følger en nulopbevaringspolitik og bruger ikke dine data til modeltræning med", - "zen.privacy.exceptionsLink": "følgende undtagelser", - - "go.title": "OpenCode Go | Kodningsmodeller til lav pris for alle", - "go.meta.description": - "Go starter ved $5 for den første måned, derefter $10/måned, med generøse 5-timers anmodningsgrænser for GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro og DeepSeek V4 Flash.", - "go.hero.title": "Kodningsmodeller til lav pris for alle", - "go.hero.body": - "Go bringer agentisk kodning til programmører over hele verden. Med generøse grænser og pålidelig adgang til de mest kapable open source-modeller, så du kan bygge med kraftfulde agenter uden at bekymre dig om omkostninger eller tilgængelighed.", - - "go.cta.start": "Abonner på Go", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "Abonner på Go", - "go.cta.price": "$10/måned", - "go.cta.promo": "$5 første måned", - "go.pricing.body": - "Brug med enhver agent. $5 første måned, derefter $10/måned. Tank op med kredit efter behov. Afmeld når som helst.", - "go.graph.free": "Gratis", - "go.graph.freePill": "Big Pickle og gratis modeller", - "go.graph.go": "Go", - "go.graph.label": "Forespørgsler pr. 5 timer", - "go.graph.usageLimits": "Brugsgrænser", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "Forespørgsler pr. 5t: {{free}} vs {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "ex-CEO, Terminal Products", - "go.testimonials.dax.quoteAfter": "har været livsændrende, det er virkelig en no-brainer.", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "ex-Founder, SEED, PM, Melt, Pop, Dapt, Cadmus, og ViewPoint", - "go.testimonials.jay.quoteBefore": "4 ud af 5 personer på vores team elsker at bruge", - "go.testimonials.jay.quoteAfter": ".", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "ex-Hero, AWS", - "go.testimonials.adam.quoteBefore": "Jeg kan ikke anbefale", - "go.testimonials.adam.quoteAfter": "nok. Seriøst, det er virkelig godt.", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "ex-Head of Design, Laravel", - "go.testimonials.david.quoteBefore": "Med", - "go.testimonials.david.quoteAfter": "ved jeg, at alle modellerne er testede og perfekte til kodningsagenter.", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "ex-Intern, Nvidia (4 gange)", - "go.testimonials.frank.quote": "Jeg ville ønske, jeg stadig var hos Nvidia.", - "go.problem.title": "Hvilket problem løser Go?", - "go.problem.body": - "Vi fokuserer på at bringe OpenCode-oplevelsen ud til så mange som muligt. OpenCode Go er et lavprisabonnement: $5 for den første måned, derefter $10/måned. Det giver generøse grænser og pålidelig adgang til de mest kapable open source-modeller.", - "go.problem.subtitle": " ", - "go.problem.item1": "Lavpris abonnementspriser", - "go.problem.item2": "Generøse grænser og pålidelig adgang", - "go.problem.item3": "Bygget til så mange programmører som muligt", - "go.problem.item4": - "Inkluderer GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro og DeepSeek V4 Flash", - "go.how.title": "Hvordan Go virker", - "go.how.body": - "Go starter ved $5 for den første måned, derefter $10/måned. Du kan bruge det med OpenCode eller enhver agent.", - "go.how.step1.title": "Opret en konto", - "go.how.step1.beforeLink": "følg", - "go.how.step1.link": "opsætningsinstruktionerne", - "go.how.step2.title": "Abonner på Go", - "go.how.step2.link": "$5 første måned", - "go.how.step2.afterLink": "derefter $10/måned med generøse grænser", - "go.how.step3.title": "Start kodning", - "go.how.step3.body": "med pålidelig adgang til open source-modeller", - "go.privacy.title": "Dit privatliv er vigtigt for os", - "go.privacy.body": - "Planen er primært designet til internationale brugere, med modeller hostet i USA, EU og Singapore for stabil global adgang.", - "go.privacy.contactAfter": "hvis du har spørgsmål.", - "go.privacy.beforeExceptions": - "Go-modeller hostes i USA. Udbydere følger en nulopbevaringspolitik og bruger ikke dine data til modeltræning, med de", - "go.privacy.exceptionsLink": "følgende undtagelser", - "go.faq.q1": "Hvad er OpenCode Go?", - "go.faq.a1": - "Go er et lavprisabonnement, der giver dig pålidelig adgang til kapable open source-modeller til agentisk kodning.", - "go.faq.q2": "Hvilke modeller inkluderer Go?", - "go.faq.a2": "Go inkluderer modellerne nedenfor med generøse grænser og pålidelig adgang.", - "go.faq.q3": "Er Go det samme som Zen?", - "go.faq.a3": - "Nej. Zen er pay-as-you-go, mens Go starter ved $5 for den første måned, derefter $10/måned, med generøse grænser og pålidelig adgang til open source-modellerne GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro og DeepSeek V4 Flash.", - "go.faq.q4": "Hvad koster Go?", - "go.faq.a4.p1.beforePricing": "Go koster", - "go.faq.a4.p1.pricingLink": "$5 første måned", - "go.faq.a4.p1.afterPricing": "derefter $10/måned med generøse grænser.", - "go.faq.a4.p2.beforeAccount": "Du kan administrere dit abonnement i din", - "go.faq.a4.p2.accountLink": "konto", - "go.faq.a4.p3": "Annuller til enhver tid.", - "go.faq.q5": "Hvad med data og privatliv?", - "go.faq.a5.body": - "Planen er primært designet til internationale brugere, med modeller hostet i USA, EU og Singapore for stabil global adgang. Vores udbydere følger en nulopbevaringspolitik og bruger ikke dine data til modeltræning.", - "go.faq.a5.beforeExceptions": - "Go-modeller hostes i USA. Udbydere følger en nulopbevaringspolitik og bruger ikke dine data til modeltræning, med de", - "go.faq.a5.exceptionsLink": "følgende undtagelser", - "go.faq.q6": "Kan jeg tanke kredit op?", - "go.faq.a6": "Hvis du har brug for mere forbrug, kan du tanke kredit op på din konto.", - "go.faq.q7": "Kan jeg annullere?", - "go.faq.a7": "Ja, du kan annullere til enhver tid.", - "go.faq.q8": "Kan jeg bruge Go med andre kodningsagenter?", - "go.faq.a8": "Ja, du kan bruge Go med enhver agent. Følg opsætningsinstruktionerne i din foretrukne kodningsagent.", - - "go.faq.q9": "Hvad er forskellen på gratis modeller og Go?", - "go.faq.a9": - "Gratis modeller inkluderer Big Pickle plus salgsfremmende modeller tilgængelige på det tidspunkt, med en kvote på 200 forespørgsler/dag. Go inkluderer GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro og DeepSeek V4 Flash med højere anmodningskvoter håndhævet over rullende vinduer (5-timers, ugentlig og månedlig), nogenlunde svarende til $12 pr. 5 timer, $30 pr. uge og $60 pr. måned (faktiske anmodningstal varierer efter model og brug).", - - "zen.api.error.rateLimitExceeded": "Hastighedsgrænse overskredet. Prøv venligst igen senere.", - "zen.api.error.modelNotSupported": "Model {{model}} understøttes ikke", - "zen.api.error.modelFormatNotSupported": "Model {{model}} understøttes ikke for format {{format}}", - "zen.api.error.noProviderAvailable": "Ingen udbyder tilgængelig", - "zen.api.error.providerNotSupported": "Udbyder {{provider}} understøttes ikke", - "zen.api.error.missingApiKey": "Manglende API-nøgle.", - "zen.api.error.invalidApiKey": "Ugyldig API-nøgle.", - "zen.api.error.subscriptionQuotaExceeded": "Abonnementskvote overskredet. Prøv igen om {{retryIn}}.", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "Forbrugsgrænsen for 5 timer er nået. Nulstilles om {{retryIn}}. For at fortsætte med at bruge denne model nu, aktivér forbrug fra din tilgængelige saldo: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "Ugentlig forbrugsgrænse er nået. Nulstilles om {{retryIn}}. For at fortsætte med at bruge denne model nu, aktivér forbrug fra din tilgængelige saldo: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "Månedlig forbrugsgrænse er nået. Nulstilles om {{retryIn}}. For at fortsætte med at bruge denne model nu, aktivér forbrug fra din tilgængelige saldo: {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "Ingen betalingsmetode. Tilføj en betalingsmetode her: {{billingUrl}}", - "zen.api.error.insufficientBalance": "Utilstrækkelig saldo. Administrer din fakturering her: {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "Dit workspace har nået sin månedlige forbrugsgrænse på ${{amount}}. Administrer dine grænser her: {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "Du har nået din månedlige forbrugsgrænse på ${{amount}}. Administrer dine grænser her: {{membersUrl}}", - "zen.api.error.modelDisabled": "Modellen er deaktiveret", - "zen.api.error.regionNotAllowed": - "Denne model hostes i Kina. Hvis du vil bruge denne model, skal du aktivere den i dine indstillinger: {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "Den gratis kampagne for {{model}} er afsluttet. Du kan fortsætte med at bruge modellen ved at abonnere på OpenCode Go - {{link}}", - - "black.meta.title": "OpenCode Black | Få adgang til verdens bedste kodningsmodeller", - "black.meta.description": "Få adgang til Claude, GPT, Gemini og mere med OpenCode Black-abonnementer.", - "black.hero.title": "Få adgang til verdens bedste kodningsmodeller", - "black.hero.subtitle": "Inklusive Claude, GPT, Gemini og mere", - "black.title": "OpenCode Black | Priser", - "black.paused": "Black-plantilmelding er midlertidigt sat på pause.", - "black.plan.icon20": "Black 20-plan", - "black.plan.icon100": "Black 100-plan", - "black.plan.icon200": "Black 200-plan", - "black.plan.multiplier100": "5x mere brug end Black 20", - "black.plan.multiplier200": "20x mere brug end Black 20", - "black.price.perMonth": "pr. måned", - "black.price.perPersonBilledMonthly": "pr. person faktureret månedligt", - "black.terms.1": "Dit abonnement starter ikke med det samme", - "black.terms.2": "Du bliver sat på ventelisten og aktiveret snart", - "black.terms.3": "Dit kort debiteres først, når dit abonnement er aktiveret", - "black.terms.4": "Forbrugsgrænser gælder, tung automatiseret brug kan nå grænserne hurtigere", - "black.terms.5": "Abonnementer er for enkeltpersoner, kontakt Enterprise for teams", - "black.terms.6": "Grænser kan justeres, og planer kan blive udfaset i fremtiden", - "black.terms.7": "Opsig dit abonnement når som helst", - "black.action.continue": "Fortsæt", - "black.finePrint.beforeTerms": "Viste priser inkluderer ikke gældende skat", - "black.finePrint.terms": "Servicevilkår", - "black.workspace.title": "OpenCode Black | Vælg workspace", - "black.workspace.selectPlan": "Vælg et workspace til denne plan", - "black.workspace.name": "Workspace {{n}}", - "black.subscribe.title": "Abonner på OpenCode Black", - "black.subscribe.paymentMethod": "Betalingsmetode", - "black.subscribe.loadingPaymentForm": "Indlæser betalingsformular...", - "black.subscribe.selectWorkspaceToContinue": "Vælg et workspace for at fortsætte", - "black.subscribe.failurePrefix": "Åh nej!", - "black.subscribe.error.generic": "Der opstod en fejl", - "black.subscribe.error.invalidPlan": "Ugyldig plan", - "black.subscribe.error.workspaceRequired": "Workspace-ID er påkrævet", - "black.subscribe.error.alreadySubscribed": "Dette workspace har allerede et abonnement", - "black.subscribe.processing": "Behandler...", - "black.subscribe.submit": "Abonner ${{plan}}", - "black.subscribe.form.chargeNotice": "Du bliver først debiteret, når dit abonnement er aktiveret", - "black.subscribe.success.title": "Du er på OpenCode Black-ventelisten", - "black.subscribe.success.subscriptionPlan": "Abonnementsplan", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "Beløb", - "black.subscribe.success.amountValue": "${{plan}} pr. måned", - "black.subscribe.success.paymentMethod": "Betalingsmetode", - "black.subscribe.success.dateJoined": "Dato tilmeldt", - "black.subscribe.success.chargeNotice": "Dit kort vil blive debiteret, når dit abonnement er aktiveret", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "Brug", - "workspace.nav.apiKeys": "API-nøgler", - "workspace.nav.members": "Medlemmer", - "workspace.nav.billing": "Fakturering", - "workspace.nav.settings": "Indstillinger", - - "workspace.home.banner.beforeLink": "Pålidelige optimerede modeller til kodningsagenter.", - "workspace.lite.banner.beforeLink": "Lavpris kodemodeller for alle.", - "workspace.home.billing.loading": "Indlæser...", - "workspace.home.billing.enable": "Aktiver fakturering", - "workspace.home.billing.currentBalance": "Nuværende saldo", - - "workspace.newUser.feature.tested.title": "Testede og verificerede modeller", - "workspace.newUser.feature.tested.body": - "Vi har benchmarket og testet modeller specifikt til kodningsagenter for at sikre den bedste ydeevne.", - "workspace.newUser.feature.quality.title": "Højeste kvalitet", - "workspace.newUser.feature.quality.body": - "Få adgang til modeller konfigureret til optimal ydeevne - ingen nedgraderinger eller routing til billigere udbydere.", - "workspace.newUser.feature.lockin.title": "Ingen indlåsning", - "workspace.newUser.feature.lockin.body": - "Brug Zen med en hvilken som helst kodningsagent, og fortsæt med at bruge andre udbydere med opencode, når du vil.", - "workspace.newUser.copyApiKey": "Kopiér API-nøgle", - "workspace.newUser.copyKey": "Kopier nøgle", - "workspace.newUser.copied": "Kopieret!", - "workspace.newUser.step.enableBilling": "Aktiver fakturering", - "workspace.newUser.step.login.before": "Kør", - "workspace.newUser.step.login.after": "og vælg opencode", - "workspace.newUser.step.pasteKey": "Indsæt din API-nøgle", - "workspace.newUser.step.models.before": "Start opencode og kør", - "workspace.newUser.step.models.after": "for at vælge en model", - - "workspace.models.title": "Modeller", - "workspace.models.subtitle.beforeLink": "Administrer, hvilke modeller workspace-medlemmer kan få adgang til.", - "workspace.models.table.model": "Model", - "workspace.models.table.enabled": "Aktiveret", - - "workspace.providers.title": "Medbring din egen nøgle", - "workspace.providers.subtitle": "Konfigurer dine egne API-nøgler fra AI-udbydere.", - "workspace.providers.placeholder": "Indtast {{provider}} API-nøgle ({{prefix}}...)", - "workspace.providers.configure": "Konfigurer", - "workspace.providers.edit": "Rediger", - "workspace.providers.delete": "Slet", - "workspace.providers.saving": "Gemmer...", - "workspace.providers.save": "Gem", - "workspace.providers.table.provider": "Udbyder", - "workspace.providers.table.apiKey": "API-nøgle", - - "workspace.usage.title": "Brugshistorik", - "workspace.usage.subtitle": "Seneste API-brug og omkostninger.", - "workspace.usage.empty": "Foretag dit første API-opkald for at komme i gang.", - "workspace.usage.table.date": "Dato", - "workspace.usage.table.model": "Model", - "workspace.usage.table.input": "Input", - "workspace.usage.table.output": "Output", - "workspace.usage.table.cost": "Omkostning", - "workspace.usage.table.session": "Session", - "workspace.usage.breakdown.input": "Input", - "workspace.usage.breakdown.cacheRead": "Cache læst", - "workspace.usage.breakdown.cacheWrite": "Cache skriv", - "workspace.usage.breakdown.output": "Output", - "workspace.usage.breakdown.reasoning": "Ræsonnement", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "Omkostninger", - "workspace.cost.subtitle": "Brugsomkostninger opdelt efter model.", - "workspace.cost.allModels": "Alle modeller", - "workspace.cost.allKeys": "Alle nøgler", - "workspace.cost.deletedSuffix": "(slettet)", - "workspace.cost.empty": "Ingen brugsdata tilgængelige for den valgte periode.", - "workspace.cost.subscriptionShort": "sub", - - "workspace.keys.title": "API-nøgler", - "workspace.keys.subtitle": "Administrer dine API-nøgler for at få adgang til opencode-tjenester.", - "workspace.keys.create": "Opret API-nøgle", - "workspace.keys.placeholder": "Indtast nøglenavn", - "workspace.keys.empty": "Opret en opencode Gateway API-nøgle", - "workspace.keys.table.name": "Navn", - "workspace.keys.table.key": "Nøgle", - "workspace.keys.table.createdBy": "Oprettet af", - "workspace.keys.table.lastUsed": "Sidst brugt", - "workspace.keys.copyApiKey": "Kopiér API-nøgle", - "workspace.keys.delete": "Slet", - - "workspace.members.title": "Medlemmer", - "workspace.members.subtitle": "Administrer workspace-medlemmer og deres tilladelser.", - "workspace.members.invite": "Inviter medlem", - "workspace.members.inviting": "Inviterer...", - "workspace.members.beta.beforeLink": "Workspaces er gratis for teams under betaversionen.", - "workspace.members.form.invitee": "Inviteret", - "workspace.members.form.emailPlaceholder": "Indtast e-mail", - "workspace.members.form.role": "Rolle", - "workspace.members.form.monthlyLimit": "Månedlig forbrugsgrænse", - "workspace.members.noLimit": "Ingen grænse", - "workspace.members.noLimitLowercase": "ingen grænse", - "workspace.members.invited": "inviteret", - "workspace.members.edit": "Rediger", - "workspace.members.delete": "Slet", - "workspace.members.saving": "Gemmer...", - "workspace.members.save": "Gem", - "workspace.members.table.email": "E-mail", - "workspace.members.table.role": "Rolle", - "workspace.members.table.monthLimit": "Månedsgrænse", - "workspace.members.role.admin": "Admin", - "workspace.members.role.adminDescription": "Kan administrere modeller, medlemmer og fakturering", - "workspace.members.role.member": "Medlem", - "workspace.members.role.memberDescription": "Kan kun generere API-nøgler til sig selv", - - "workspace.settings.title": "Indstillinger", - "workspace.settings.subtitle": "Opdater dit workspace-navn og præferencer.", - "workspace.settings.workspaceName": "Workspace-navn", - "workspace.settings.defaultName": "Standard", - "workspace.settings.updating": "Opdaterer...", - "workspace.settings.save": "Gem", - "workspace.settings.edit": "Rediger", - - "workspace.billing.title": "Fakturering", - "workspace.billing.subtitle.beforeLink": "Administrer betalingsmetoder.", - "workspace.billing.contactUs": "Kontakt os", - "workspace.billing.subtitle.afterLink": "hvis du har spørgsmål.", - "workspace.billing.currentBalance": "Nuværende saldo", - "workspace.billing.add": "Tilføj $", - "workspace.billing.enterAmount": "Indtast beløb", - "workspace.billing.loading": "Indlæser...", - "workspace.billing.addAction": "Tilføj", - "workspace.billing.addBalance": "Tilføj saldo", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "Forbundet til Stripe", - "workspace.billing.manage": "Administrer", - "workspace.billing.enable": "Aktiver fakturering", - - "workspace.monthlyLimit.title": "Månedlig grænse", - "workspace.monthlyLimit.subtitle": "Indstil en månedlig forbrugsgrænse for din konto.", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "Indstiller...", - "workspace.monthlyLimit.set": "Sæt", - "workspace.monthlyLimit.edit": "Rediger grænse", - "workspace.monthlyLimit.noLimit": "Ingen forbrugsgrænse angivet.", - "workspace.monthlyLimit.currentUsage.beforeMonth": "Nuværende brug for", - "workspace.monthlyLimit.currentUsage.beforeAmount": "er $", - - "workspace.redeem.title": "Indløs kupon", - "workspace.redeem.subtitle": "Indløs en kuponkode for at få kreditter eller fordele.", - "workspace.redeem.placeholder": "Indtast kuponkode", - "workspace.redeem.redeem": "Indløs", - "workspace.redeem.redeeming": "Indløser...", - "workspace.redeem.success": "Kuponen blev indløst.", - - "workspace.reload.title": "Automatisk genopfyldning", - "workspace.reload.disabled.before": "Automatisk genopfyldning er", - "workspace.reload.disabled.state": "deaktiveret", - "workspace.reload.disabled.after": "Aktiver for automatisk at genopfylde, når saldoen er lav.", - "workspace.reload.enabled.before": "Automatisk genopfyldning er", - "workspace.reload.enabled.state": "aktiveret", - "workspace.reload.enabled.middle": "Vi genopfylder", - "workspace.reload.processingFee": "ekspeditionsgebyr", - "workspace.reload.enabled.after": "når saldoen når", - "workspace.reload.edit": "Rediger", - "workspace.reload.enable": "Aktiver", - "workspace.reload.enableAutoReload": "Aktiver automatisk genopfyldning", - "workspace.reload.reloadAmount": "Genopfyld $", - "workspace.reload.whenBalanceReaches": "Når saldoen når $", - "workspace.reload.saving": "Gemmer...", - "workspace.reload.save": "Gem", - "workspace.reload.failedAt": "Genopfyldning mislykkedes kl", - "workspace.reload.reason": "Årsag:", - "workspace.reload.updatePaymentMethod": "Opdater din betalingsmetode, og prøv igen.", - "workspace.reload.retrying": "Prøver igen...", - "workspace.reload.retry": "Prøv igen", - "workspace.reload.error.paymentFailed": "Betaling mislykkedes.", - - "workspace.payments.title": "Betalingshistorik", - "workspace.payments.subtitle": "Seneste betalingstransaktioner.", - "workspace.payments.table.date": "Dato", - "workspace.payments.table.paymentId": "Betalings-ID", - "workspace.payments.table.amount": "Beløb", - "workspace.payments.table.receipt": "Kvittering", - "workspace.payments.type.credit": "kredit", - "workspace.payments.type.subscription": "abonnement", - "workspace.payments.view": "Vis", - - "workspace.black.loading": "Indlæser...", - "workspace.black.time.day": "dag", - "workspace.black.time.days": "dage", - "workspace.black.time.hour": "time", - "workspace.black.time.hours": "timer", - "workspace.black.time.minute": "minut", - "workspace.black.time.minutes": "minutter", - "workspace.black.time.fewSeconds": "et par sekunder", - "workspace.black.subscription.title": "Abonnement", - "workspace.black.subscription.message": "Du abonnerer på OpenCode Black for ${{plan}} om måneden.", - "workspace.black.subscription.manage": "Administrer abonnement", - "workspace.black.subscription.rollingUsage": "5-timers brug", - "workspace.black.subscription.weeklyUsage": "Ugentlig brug", - "workspace.black.subscription.resetsIn": "Nulstiller i", - "workspace.black.subscription.useBalance": "Brug din tilgængelige saldo, når du har nået forbrugsgrænserne", - "workspace.black.waitlist.title": "Venteliste", - "workspace.black.waitlist.joined": "Du er på ventelisten for ${{plan}} per måned OpenCode Black plan.", - "workspace.black.waitlist.ready": "Vi er klar til at tilmelde dig ${{plan}} per måned OpenCode Black plan.", - "workspace.black.waitlist.leave": "Forlad venteliste", - "workspace.black.waitlist.leaving": "Forlader...", - "workspace.black.waitlist.left": "Forladt", - "workspace.black.waitlist.enroll": "Tilmeld", - "workspace.black.waitlist.enrolling": "Tilmelder...", - "workspace.black.waitlist.enrolled": "Tilmeldt", - "workspace.black.waitlist.enrollNote": - "Når du klikker på Tilmeld, starter dit abonnement med det samme, og dit kort vil blive debiteret.", - - "workspace.lite.loading": "Indlæser...", - "workspace.lite.time.day": "dag", - "workspace.lite.time.days": "dage", - "workspace.lite.time.hour": "time", - "workspace.lite.time.hours": "timer", - "workspace.lite.time.minute": "minut", - "workspace.lite.time.minutes": "minutter", - "workspace.lite.time.fewSeconds": "et par sekunder", - "workspace.lite.subscription.message": "Du abonnerer på OpenCode Go.", - "workspace.lite.subscription.manage": "Administrer abonnement", - "workspace.lite.subscription.rollingUsage": "Løbende forbrug", - "workspace.lite.subscription.weeklyUsage": "Ugentligt forbrug", - "workspace.lite.subscription.monthlyUsage": "Månedligt forbrug", - "workspace.lite.subscription.resetsIn": "Nulstiller i", - "workspace.lite.subscription.useBalance": "Brug din tilgængelige saldo, når du har nået forbrugsgrænserne", - "workspace.lite.subscription.selectProvider": - 'Vælg "OpenCode Go" som udbyder i din opencode-konfiguration for at bruge Go-modeller.', - "workspace.lite.providers.title": "Udbydere", - "workspace.lite.providers.description": "Styr, hvilke udbydere der bruges til routing.", - "workspace.lite.providers.useChina": "Aktivér modeller hostet i Kina", - "workspace.lite.black.message": - "Du abonnerer i øjeblikket på OpenCode Black eller er på venteliste. Afmeld venligst først, hvis du vil skifte til Go.", - "workspace.lite.other.message": - "Et andet medlem i dette workspace abonnerer allerede på OpenCode Go. Kun ét medlem pr. workspace kan abonnere.", - "workspace.lite.promo.description": - "OpenCode Go starter ved {{price}}, derefter $10/måned, og giver pålidelig adgang til populære åbne kodningsmodeller med generøse brugsgrænser.", - "workspace.lite.promo.price": "$5 for den første måned", - "workspace.lite.promo.modelsTitle": "Hvad er inkluderet", - "workspace.lite.promo.footer": - "Planen er primært designet til internationale brugere, med modeller hostet i USA, EU og Singapore for stabil global adgang. Priser og forbrugsgrænser kan ændre sig, efterhånden som vi lærer af tidlig brug og feedback.", - "workspace.lite.promo.subscribe": "Abonner på Go", - "workspace.lite.promo.subscribing": "Omdirigerer...", - "workspace.lite.promo.otherMethods": "Andre betalingsmetoder", - "workspace.lite.promo.selectMethod": "Vælg betalingsmetode", - - "workspace.referral.copyLink": "Kopiér link", - "workspace.referral.copied": "Kopieret", - "workspace.referral.overview.title": "Inviter venner", - "workspace.referral.overview.subtitle": "Få $5, når en ven abonnerer. De får også $5.", - "workspace.referral.instructions.share": "Del dit henvisningslink", - "workspace.referral.instructions.subscribe": "Din ven tilmelder sig og abonnerer på Go", - "workspace.referral.instructions.claim": "I får begge $5 i forbrugskredit til at bruge på jeres Go-forbrugsgrænser", - "workspace.referral.rewards.title": "Henvisningsbelønninger", - "workspace.referral.rewards.description": "Brug tilgængelige henvisningskreditter på dit Go-forbrug.", - "workspace.referral.rewards.subtitle": "{{applied}} / {{total}} belønninger brugt.", - "workspace.referral.rewards.empty": "Ingen henvisningsbelønninger endnu.", - "workspace.referral.table.reward": "Belønning", - "workspace.referral.table.referral": "Beskrivelse", - "workspace.referral.table.date": "Dato", - "workspace.referral.reward.description.inviter": "Inviterede {{email}}", - "workspace.referral.reward.description.invitee": "Inviteret af {{email}}", - "workspace.referral.reward.action.subscribeUnlock": "Abonner for at låse op", - "workspace.referral.reward.action.view": "Vis belønning", - "workspace.referral.reward.action.applied": "Belønning brugt", - "workspace.referral.reward.source.pendingInviter": "Venter på, at de abonnerer", - "workspace.referral.reward.source.pendingInvitee": "Abonner for at låse belønningen op", - "workspace.referral.reward.source.available": "Belønning klar til brug", - "workspace.referral.reward.source.applied": "Belønning brugt", - "workspace.referral.reward.status.applied": "Belønning brugt", - "workspace.referral.reward.status.pendingInviter": "Abonner for at låse op", - "workspace.referral.reward.status.pendingInvitee": "Abonner for at låse op", - "workspace.referral.apply.noGo": "Abonner for at låse op", - "workspace.referral.apply.preview": "Vis belønning", - "workspace.referral.apply.action": "Brug", - "workspace.referral.apply.confirmTitle": "Brug belønning", - "workspace.referral.apply.confirmBody": "Brug {{amount}} til at reducere dette workspaces nuværende forbrug.", - "workspace.referral.apply.confirmAction": "Brug", - - "download.title": "OpenCode | Download", - "download.meta.description": "Download OpenCode til macOS, Windows og Linux", - "download.hero.title": "Download OpenCode", - "download.hero.subtitle": "Tilgængelig i beta til macOS, Windows og Linux", - "download.hero.button": "Download til {{os}}", - "download.section.terminal": "OpenCode Terminal", - "download.section.desktop": "OpenCode Desktop (Beta)", - "download.section.extensions": "OpenCode Extensions", - "download.section.integrations": "OpenCode Integrations", - "download.action.download": "Download", - "download.action.install": "Installer", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "Ikke nødvendigvis, men sandsynligvis. Du skal bruge et AI-abonnement hvis du vil forbinde OpenCode til en betalt udbyder, men du kan arbejde med", - "download.faq.a3.localLink": "lokale modeller", - "download.faq.a3.afterLocal.beforeZen": "gratis. Selvom vi opfordrer brugere til at bruge", - "download.faq.a3.afterZen": ", fungerer OpenCode med alle populære udbydere som OpenAI, Anthropic, xAI osv.", - - "download.faq.a5.p1": "OpenCode er 100% gratis at bruge.", - "download.faq.a5.p2.beforeZen": - "Eventuelle ekstra omkostninger kommer fra dit abonnement hos en modeludbyder. Selvom OpenCode fungerer med enhver modeludbyder, anbefaler vi at bruge", - "download.faq.a5.p2.afterZen": ".", - - "download.faq.a6.p1": "Dine data og oplysninger gemmes kun når du opretter delbare links i OpenCode.", - "download.faq.a6.p2.beforeShare": "Læs mere om", - "download.faq.a6.shareLink": "delingssider", - - "enterprise.title": "OpenCode | Enterprise-løsninger til din organisation", - "enterprise.meta.description": "Kontakt OpenCode for enterprise-løsninger", - "enterprise.hero.title": "Din kode er din egen", - "enterprise.hero.body1": - "OpenCode fungerer sikkert inde i din organisation uden at lagre data eller kontekst og uden licensbegrænsninger eller ejerskabskrav. Start en prøveperiode med dit team, og udrul det derefter i hele din organisation ved at integrere det med dit SSO og din interne AI-gateway.", - "enterprise.hero.body2": "Fortæl os, hvordan vi kan hjælpe.", - "enterprise.form.name.label": "Fulde navn", - "enterprise.form.name.placeholder": "Jeff Bezos", - "enterprise.form.role.label": "Rolle", - "enterprise.form.role.placeholder": "Bestyrelsesformand", - "enterprise.form.company.label": "Virksomhed", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "Firma-e-mail", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "Telefonnummer", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "Hvilket problem prøver du at løse?", - "enterprise.form.message.placeholder": "Vi har brug for hjælp med...", - "enterprise.form.send": "Send", - "enterprise.form.sending": "Sender...", - "enterprise.form.success": "Besked sendt, vi vender tilbage snart.", - "enterprise.form.success.submitted": "Formular indsendt med succes.", - "enterprise.form.error.allFieldsRequired": "Alle felter er påkrævet.", - "enterprise.form.error.invalidEmailFormat": "Ugyldigt e-mailformat.", - "enterprise.form.error.internalServer": "Intern serverfejl.", - "enterprise.faq.title": "FAQ", - "enterprise.faq.q1": "Hvad er OpenCode Enterprise?", - "enterprise.faq.a1": - "OpenCode Enterprise er til organisationer, der vil sikre, at deres kode og data aldrig forlader deres infrastruktur. Det kan gøres med en central konfiguration, der integrerer med dit SSO og din interne AI-gateway.", - "enterprise.faq.q2": "Hvordan kommer jeg i gang med OpenCode Enterprise?", - "enterprise.faq.a2": - "Start blot 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. Kontakt os derefter for at tale om priser og implementeringsmuligheder.", - "enterprise.faq.q3": "Hvordan fungerer enterprise-priser?", - "enterprise.faq.a3": - "Vi tilbyder enterprise-priser pr. bruger. Hvis du har din egen LLM-gateway, opkræver vi ikke for brugte tokens. Kontakt os for flere detaljer og et tilbud tilpasset din organisations behov.", - "enterprise.faq.q4": "Er mine data sikre med OpenCode Enterprise?", - "enterprise.faq.a4": - "Ja. OpenCode gemmer ikke din kode eller kontekstdata. Al behandling sker lokalt eller via direkte API-kald til din AI-udbyder. Med central konfiguration og SSO-integration forbliver dine data sikre inden for din organisations infrastruktur.", - - "brand.title": "OpenCode | Brand", - "brand.meta.description": "OpenCode brandretningslinjer", - "brand.heading": "Brandretningslinjer", - "brand.subtitle": "Ressourcer og assets, der hjælper dig med at arbejde med OpenCode-brandet.", - "brand.downloadAll": "Download alle assets", - - "changelog.title": "OpenCode | Changelog", - "changelog.meta.description": "OpenCode versionsnoter og changelog", - "changelog.hero.title": "Changelog", - "changelog.hero.subtitle": "Nye opdateringer og forbedringer til OpenCode", - "changelog.empty": "Ingen changelog-indlæg fundet.", - "changelog.viewJson": "Se JSON", - - "bench.list.title": "Benchmark", - "bench.list.heading": "Benchmarks", - "bench.list.table.agent": "Agent", - "bench.list.table.model": "Model", - "bench.list.table.score": "Score", - "bench.submission.error.allFieldsRequired": "Alle felter er påkrævet.", - - "bench.detail.title": "Benchmark - {{task}}", - "bench.detail.notFound": "Opgave ikke fundet", - "bench.detail.na": "Ikke tilgængelig", - "bench.detail.labels.agent": "Agent", - "bench.detail.labels.model": "Model", - "bench.detail.labels.task": "Opgave", - "bench.detail.labels.repo": "Repo", - "bench.detail.labels.from": "Fra", - "bench.detail.labels.to": "Til", - "bench.detail.labels.prompt": "Prompt", - "bench.detail.labels.commit": "Commit", - "bench.detail.labels.averageDuration": "Gennemsnitlig varighed", - "bench.detail.labels.averageScore": "Gennemsnitlig score", - "bench.detail.labels.averageCost": "Gennemsnitlig omkostning", - "bench.detail.labels.summary": "Resumé", - "bench.detail.labels.runs": "Kørsler", - "bench.detail.labels.score": "Score", - "bench.detail.labels.base": "Basis", - "bench.detail.labels.penalty": "Straf", - "bench.detail.labels.weight": "vægt", - "bench.detail.table.run": "Kørsel", - "bench.detail.table.score": "Score (Basis - Straf)", - "bench.detail.table.cost": "Omkostning", - "bench.detail.table.duration": "Varighed", - "bench.detail.run.title": "Kørsel {{n}}", - "bench.detail.rawJson": "Rå JSON", -} satisfies Dict diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts deleted file mode 100644 index 5579796f3a..0000000000 --- a/packages/console/app/src/i18n/de.ts +++ /dev/null @@ -1,832 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "Dokumentation", - "nav.changelog": "Changelog", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "Enterprise", - "nav.zen": "Zen", - "nav.login": "Anmelden", - "nav.free": "Download", - "nav.home": "Startseite", - "nav.openMenu": "Menü öffnen", - "nav.getStartedFree": "Kostenlos starten", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "Logo als SVG kopieren", - "nav.context.copyWordmark": "Wortmarke als SVG kopieren", - "nav.context.brandAssets": "Marken-Assets", - - "footer.github": "GitHub", - "footer.docs": "Dokumentation", - "footer.changelog": "Changelog", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "Marke", - "legal.privacy": "Datenschutz", - "legal.terms": "AGB", - - "email.title": "Erfahre als Erste:r, wenn wir neue Produkte veröffentlichen", - "email.subtitle": "Trage dich in die Warteliste für frühen Zugang ein.", - "email.placeholder": "E-Mail-Adresse", - "email.subscribe": "Anmelden", - "email.success": "Fast geschafft, überprüfe deinen Posteingang und bestätige deine E-Mail-Adresse", - - "notFound.title": "Nicht gefunden | OpenCode", - "notFound.heading": "404 - Seite nicht gefunden", - "notFound.home": "Startseite", - "notFound.docs": "Dokumentation", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "OpenCode Logo hell", - "notFound.logoDarkAlt": "OpenCode Logo dunkel", - - "user.logout": "Abmelden", - - "auth.callback.error.codeMissing": "Kein Autorisierungscode gefunden.", - - "workspace.select": "Workspace auswählen", - "workspace.createNew": "+ Neuen Workspace erstellen", - "workspace.modal.title": "Neuen Workspace erstellen", - "workspace.modal.placeholder": "Workspace-Namen eingeben", - - "common.cancel": "Abbrechen", - "common.creating": "Erstelle...", - "common.create": "Erstellen", - - "common.videoUnsupported": "Dein Browser unterstützt das Video-Tag nicht.", - "common.figure": "Abb. {{n}}.", - "common.faq": "FAQ", - "common.learnMore": "Mehr erfahren", - - "error.invalidPlan": "Ungültiger Plan", - "error.workspaceRequired": "Workspace-ID ist erforderlich", - "error.alreadySubscribed": "Dieser Workspace hat bereits ein Abonnement", - "error.limitRequired": "Limit ist erforderlich.", - "error.monthlyLimitInvalid": "Bitte gib ein gültiges monatliches Limit ein.", - "error.workspaceNameRequired": "Workspace-Name ist erforderlich.", - "error.nameTooLong": "Der Name darf höchstens 255 Zeichen lang sein.", - "error.emailRequired": "E-Mail ist erforderlich", - "error.roleRequired": "Rolle ist erforderlich", - "error.idRequired": "ID ist erforderlich", - "error.nameRequired": "Name ist erforderlich", - "error.providerRequired": "Anbieter ist erforderlich", - "error.apiKeyRequired": "API-Key ist erforderlich", - "error.modelRequired": "Modell ist erforderlich", - "error.reloadAmountMin": "Aufladebetrag muss mindestens ${{amount}} betragen", - "error.reloadTriggerMin": "Guthaben-Auslöser muss mindestens ${{amount}} betragen", - - "app.meta.description": "OpenCode - Der Open-Source Coding-Agent.", - - "home.title": "OpenCode | Der Open-Source AI-Coding-Agent", - - "temp.title": "OpenCode | Für das Terminal gebauter AI-Coding-Agent", - "temp.hero.title": "Der für das Terminal gebaute AI-Coding-Agent", - "temp.zen": "OpenCode Zen", - "temp.getStarted": "Loslegen", - "temp.feature.native.title": "Native TUI", - "temp.feature.native.body": "Eine reaktionsschnelle, native, thematisierbare Terminal-UI", - "temp.feature.zen.beforeLink": "Eine", - "temp.feature.zen.link": "kuratierte Liste von Modellen", - "temp.feature.zen.afterLink": "bereitgestellt von OpenCode", - "temp.feature.models.beforeLink": "Unterstützt 75+ LLM-Anbieter durch", - "temp.feature.models.afterLink": ", einschließlich lokaler Modelle", - "temp.screenshot.caption": "OpenCode TUI mit dem Tokyonight-Theme", - "temp.screenshot.alt": "OpenCode TUI mit Tokyonight-Theme", - "temp.logoLightAlt": "OpenCode Logo hell", - "temp.logoDarkAlt": "OpenCode Logo dunkel", - - "home.banner.badge": "Neu", - "home.banner.text": "Desktop-App in der Beta verfügbar", - "home.banner.platforms": "auf macOS, Windows und Linux", - "home.banner.downloadNow": "Jetzt herunterladen", - "home.banner.downloadBetaNow": "Desktop-Beta jetzt herunterladen", - - "home.hero.title": "Der Open-Source AI-Coding-Agent", - "home.hero.subtitle.a": "Kostenlose Modelle inklusive oder verbinde jedes Modell eines beliebigen Anbieters,", - "home.hero.subtitle.b": "einschließlich Claude, GPT, Gemini und mehr.", - - "home.install.ariaLabel": "Installationsoptionen", - - "home.what.title": "Was ist OpenCode?", - "home.what.body": - "OpenCode ist ein Open-Source-Agent, der dir hilft, Code in deinem Terminal, deiner IDE oder auf dem Desktop zu schreiben.", - "home.what.lsp.title": "LSP-fähig", - "home.what.lsp.body": "Lädt automatisch die richtigen LSPs für das LLM", - "home.what.multiSession.title": "Multi-Session", - "home.what.multiSession.body": "Starte mehrere Agenten parallel im selben Projekt", - "home.what.shareLinks.title": "Links teilen", - "home.what.shareLinks.body": "Teile einen Link zu jeder Sitzung als Referenz oder zum Debuggen", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "Melde dich mit GitHub an, um deinen Copilot-Account zu nutzen", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "Melde dich mit OpenAI an, um deinen ChatGPT Plus- oder Pro-Account zu nutzen", - "home.what.anyModel.title": "Jedes Modell", - "home.what.anyModel.body": "75+ LLM-Anbieter durch Models.dev, einschließlich lokaler Modelle", - "home.what.anyEditor.title": "Jeder Editor", - "home.what.anyEditor.body": "Verfügbar als Terminal-Interface, Desktop-App und IDE-Extension", - "home.what.readDocs": "Doku lesen", - - "home.growth.title": "Der Open-Source AI-Coding-Agent", - "home.growth.body": - "Mit über {{stars}} GitHub-Stars, {{contributors}} Contributors und über {{commits}} Commits wird OpenCode von über {{monthlyUsers}} Entwickler:innen jeden Monat genutzt und geschätzt.", - "home.growth.githubStars": "GitHub Stars", - "home.growth.contributors": "Contributors", - "home.growth.monthlyDevs": "Monatliche Devs", - - "home.privacy.title": "Built for privacy first", - "home.privacy.body": - "OpenCode speichert keinen deiner Codes oder Kontextdaten, sodass es in datenschutzsensiblen Umgebungen arbeiten kann.", - "home.privacy.learnMore": "Erfahre mehr über", - "home.privacy.link": "Datenschutz", - - "home.faq.q1": "Was ist OpenCode?", - "home.faq.a1": - "OpenCode ist ein Open-Source-Agent, der dir hilft, Code mit jedem KI-Modell zu schreiben und auszuführen. Er ist als Terminal-Interface, Desktop-App oder IDE-Erweiterung verfügbar.", - "home.faq.q2": "Wie nutze ich OpenCode?", - "home.faq.a2.before": "Der einfachste Weg zu starten ist, die", - "home.faq.a2.link": "Einführung zu lesen", - "home.faq.q3": "Brauche ich zusätzliche AI-Abos, um OpenCode zu nutzen?", - "home.faq.a3.p1": - "Nicht unbedingt, OpenCode kommt mit einer Reihe kostenloser Modelle, die du ohne Account nutzen kannst.", - "home.faq.a3.p2.beforeZen": "Abgesehen davon kannst du jedes beliebige Coding-Modell nutzen, indem du einen", - "home.faq.a3.p2.afterZen": " Account erstellst.", - "home.faq.a3.p3": - "Während wir dazu raten, Zen zu nutzen, funktioniert OpenCode auch mit allen beliebten Anbietern wie OpenAI, Anthropic, xAI etc.", - "home.faq.a3.p4.beforeLocal": "Du kannst sogar deine", - "home.faq.a3.p4.localLink": "lokalen Modelle verbinden", - "home.faq.q4": "Kann ich meine bestehenden AI-Abos mit OpenCode nutzen?", - "home.faq.a4.p1": - "Ja, OpenCode unterstützt Abos von allen großen Anbietern. Du kannst deine Claude Pro/Max, ChatGPT Plus/Pro oder GitHub Copilot Abos nutzen.", - "home.faq.q5": "Kann ich OpenCode nur im Terminal nutzen?", - "home.faq.a5.beforeDesktop": "Nicht mehr! OpenCode ist jetzt als App für", - "home.faq.a5.desktop": "Desktop", - "home.faq.a5.and": "und", - "home.faq.a5.web": "Web verfügbar", - "home.faq.q6": "Wie viel kostet OpenCode?", - "home.faq.a6": - "OpenCode ist zu 100% kostenlos. Es enthält auch eine Reihe kostenloser Modelle. Zusätzliche Kosten können entstehen, wenn du andere Anbieter verbindest.", - "home.faq.q7": "Was ist mit Daten und Privatsphäre?", - "home.faq.a7.p1": - "Deine Daten und Informationen werden nur gespeichert, wenn du unsere kostenlosen Modelle nutzt oder teilbare Links erstellst.", - "home.faq.a7.p2.beforeModels": "Erfahre mehr über", - "home.faq.a7.p2.modelsLink": "unsere Modelle", - "home.faq.a7.p2.and": "und", - "home.faq.a7.p2.shareLink": "Share-Pages", - "home.faq.q8": "Ist OpenCode Open Source?", - "home.faq.a8.p1": "Ja, OpenCode ist vollständig Open Source. Der Quellcode ist öffentlich auf", - "home.faq.a8.p2": "unter der", - "home.faq.a8.mitLicense": "MIT Lizenz", - "home.faq.a8.p3": - ", was bedeutet, dass jeder ihn nutzen, modifizieren oder zu seiner Entwicklung beitragen kann. Jeder aus der Community kann Issues melden, Pull Requests einreichen und die Funktionalität erweitern.", - - "home.zenCta.title": "Zugriff auf zuverlässige, optimierte Modelle für Coding-Agents", - "home.zenCta.body": - "Zen gibt dir Zugriff auf ein handverlesenes Set an AI-Modellen, die OpenCode speziell für Coding-Agents getestet und bewertet hat. Keine Sorge wegen inkonsistenter Leistung und Qualität bei verschiedenen Anbietern – nutze validierte Modelle, die funktionieren.", - "home.zenCta.link": "Erfahre mehr über Zen", - - "zen.title": "OpenCode Zen | Ein kuratiertes Set zuverlässiger, optimierter Modelle für Coding-Agents", - "zen.hero.title": "Zuverlässige, optimierte Modelle für Coding-Agents", - "zen.hero.body": - "Zen gibt dir Zugriff auf ein kuratiertes Set an AI-Modellen, die OpenCode speziell für Coding-Agents getestet und bewertet hat. Keine Sorge wegen inkonsistenter Leistung und Qualität – nutze validierte Modelle, die funktionieren.", - - "zen.faq.q1": "Was ist OpenCode Zen?", - "zen.faq.a1": - "Zen ist ein kuratiertes Set an AI-Modellen, getestet und bewertet für Coding-Agents, erstellt vom Team hinter OpenCode.", - "zen.faq.q2": "Was macht Zen genauer?", - "zen.faq.a2": - "Zen bietet nur Modelle, die speziell für Coding-Agents getestet und bewertet wurden. Du würdest kein Buttermesser nehmen, um ein Steak zu schneiden – nutze keine schlechten Modelle zum Coden.", - "zen.faq.q3": "Ist Zen günstiger?", - "zen.faq.a3": - "Zen ist nicht gewinnorientiert. Zen gibt die Kosten der Modellanbieter an dich weiter. Je höher die Nutzung von Zen, desto besser kann OpenCode Preise verhandeln und diese an dich weitergeben.", - "zen.faq.q4": "Wie viel kostet Zen?", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "berechnet pro Anfrage", - "zen.faq.a4.p1.afterPricing": "ohne Aufschläge, also zahlst du genau das, was der Modellanbieter berechnet.", - "zen.faq.a4.p2.beforeAccount": - "Deine Gesamtkosten hängen von der Nutzung ab, und du kannst monatliche Ausgabenlimits in deinem", - "zen.faq.a4.p2.accountLink": "Account festlegen", - "zen.faq.a4.p3": - "Um die Kosten zu decken, fügt OpenCode nur eine kleine Bearbeitungsgebühr von $1.23 pro $20 Guthabenaufladung hinzu.", - "zen.faq.q5": "Was ist mit Daten und Privatsphäre?", - "zen.faq.a5.beforeExceptions": - "Alle Zen-Modelle werden in den USA gehostet. Anbieter folgen einer Zero-Retention-Policy und nutzen deine Daten nicht zum Trainieren von Modellen, mit den", - "zen.faq.a5.exceptionsLink": "folgenden Ausnahmen", - "zen.faq.q6": "Kann ich Ausgabenlimits setzen?", - "zen.faq.a6": "Ja, du kannst monatliche Ausgabenlimits in deinem Account setzen.", - "zen.faq.q7": "Kann ich kündigen?", - "zen.faq.a7": "Ja, du kannst die Abrechnung jederzeit deaktivieren und dein verbleibendes Guthaben nutzen.", - "zen.faq.q8": "Kann ich Zen mit anderen Coding-Agents nutzen?", - "zen.faq.a8": - "Während Zen großartig mit OpenCode funktioniert, kannst du Zen mit jedem Agent nutzen. Folge den Einrichtungsanweisungen in deinem bevorzugten Coding-Agent.", - - "zen.cta.start": "Starte mit Zen", - "zen.pricing.title": "Füge $20 Pay-as-you-go Guthaben hinzu", - "zen.pricing.fee": "(+$1.23 Bearbeitungsgebühr)", - "zen.pricing.body": "Nutze es mit jedem Agent. Setze monatliche Ausgabenlimits. Jederzeit kündbar.", - "zen.problem.title": "Welches Problem löst Zen?", - "zen.problem.body": - "Es gibt so viele Modelle, aber nur wenige funktionieren gut mit Coding-Agents. Die meisten Anbieter konfigurieren sie unterschiedlich, was zu variierenden Ergebnissen führt.", - "zen.problem.subtitle": "Wir beheben das für alle, nicht nur für OpenCode-Nutzer.", - "zen.problem.item1": "Testen ausgewählter Modelle und Beratung mit deren Teams", - "zen.problem.item2": "Zusammenarbeit mit Anbietern, um korrekte Bereitstellung zu sichern", - "zen.problem.item3": "Benchmarking aller Modell-Anbieter-Kombinationen, die wir empfehlen", - "zen.how.title": "Wie Zen funktioniert", - "zen.how.body": "Während wir dir raten, Zen mit OpenCode zu nutzen, kannst du Zen mit jedem Agent nutzen.", - "zen.how.step1.title": "Melde dich an und füge $20 Guthaben hinzu", - "zen.how.step1.beforeLink": "folge den", - "zen.how.step1.link": "Einrichtungsanweisungen", - "zen.how.step2.title": "Nutze Zen mit transparenter Preisgestaltung", - "zen.how.step2.link": "zahle pro Anfrage", - "zen.how.step2.afterLink": "ohne Aufschläge", - "zen.how.step3.title": "Auto-Top-up", - "zen.how.step3.body": "wenn dein Guthaben $5 erreicht, fügen wir automatisch $20 hinzu", - "zen.privacy.title": "Deine Privatsphäre ist uns wichtig", - "zen.privacy.beforeExceptions": - "Alle Zen-Modelle werden in den USA gehostet. Anbieter folgen einer Zero-Retention-Policy und nutzen deine Daten nicht für Modelltraining, mit den", - "zen.privacy.exceptionsLink": "folgenden Ausnahmen", - - "go.title": "OpenCode Go | Kostengünstige Coding-Modelle für alle", - "go.meta.description": - "Go beginnt bei $5 für den ersten Monat, danach $10/Monat, mit großzügigen 5-Stunden-Anfragelimits für GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro und DeepSeek V4 Flash.", - "go.hero.title": "Kostengünstige Coding-Modelle für alle", - "go.hero.body": - "Go bringt Agentic Coding zu Programmierern auf der ganzen Welt. Mit großzügigen Limits und zuverlässigem Zugang zu den leistungsfähigsten Open-Source-Modellen, damit du mit leistungsstarken Agenten entwickeln kannst, ohne dir Gedanken über Kosten oder Verfügbarkeit zu machen.", - - "go.cta.start": "Go abonnieren", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "Go abonnieren", - "go.cta.price": "$10/Monat", - "go.cta.promo": "$5 im ersten Monat", - "go.pricing.body": - "Mit jedem Agenten nutzbar. $5 im ersten Monat, danach $10/Monat. Guthaben bei Bedarf aufladen. Jederzeit kündbar.", - "go.graph.free": "Kostenlos", - "go.graph.freePill": "Big Pickle und kostenlose Modelle", - "go.graph.go": "Go", - "go.graph.label": "Anfragen pro 5 Stunden", - "go.graph.usageLimits": "Nutzungslimits", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "Anfragen pro 5h: {{free}} vs {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "ex-CEO, Terminal Products", - "go.testimonials.dax.quoteAfter": "hat mein Leben verändert, es ist wirklich ein No-Brainer.", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "ex-Gründer, SEED, PM, Melt, Pop, Dapt, Cadmus und ViewPoint", - "go.testimonials.jay.quoteBefore": "4 von 5 Leuten in unserem Team lieben die Nutzung von", - "go.testimonials.jay.quoteAfter": ".", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "ex-Hero, AWS", - "go.testimonials.adam.quoteBefore": "Ich kann", - "go.testimonials.adam.quoteAfter": "nicht genug empfehlen. Ernsthaft, es ist wirklich gut.", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "ex-Head of Design, Laravel", - "go.testimonials.david.quoteBefore": "Mit", - "go.testimonials.david.quoteAfter": "weiß ich, dass alle Modelle getestet und perfekt für Coding-Agenten sind.", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "ex-Praktikant, Nvidia (4 mal)", - "go.testimonials.frank.quote": "Ich wünschte, ich wäre noch bei Nvidia.", - "go.problem.title": "Welches Problem löst Go?", - "go.problem.body": - "Wir konzentrieren uns darauf, die OpenCode-Erfahrung so vielen Menschen wie möglich zugänglich zu machen. OpenCode Go ist ein kostengünstiges Abonnement: $5 im ersten Monat, danach $10/Monat. Es bietet großzügige Limits und zuverlässigen Zugang zu den leistungsfähigsten Open-Source-Modellen.", - "go.problem.subtitle": " ", - "go.problem.item1": "Kostengünstiges Abonnement", - "go.problem.item2": "Großzügige Limits und zuverlässiger Zugang", - "go.problem.item3": "Für so viele Programmierer wie möglich gebaut", - "go.problem.item4": - "Beinhaltet GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro und DeepSeek V4 Flash", - "go.how.title": "Wie Go funktioniert", - "go.how.body": - "Go beginnt bei $5 für den ersten Monat, danach $10/Monat. Du kannst es mit OpenCode oder jedem Agenten nutzen.", - "go.how.step1.title": "Konto erstellen", - "go.how.step1.beforeLink": "folge den", - "go.how.step1.link": "Einrichtungsanweisungen", - "go.how.step2.title": "Go abonnieren", - "go.how.step2.link": "$5 im ersten Monat", - "go.how.step2.afterLink": "danach $10/Monat mit großzügigen Limits", - "go.how.step3.title": "Loslegen mit Coding", - "go.how.step3.body": "mit zuverlässigem Zugang zu Open-Source-Modellen", - "go.privacy.title": "Deine Privatsphäre ist uns wichtig", - "go.privacy.body": - "Der Plan ist primär für internationale Nutzer konzipiert, mit Modellen gehostet in den USA, der EU und Singapur für stabilen globalen Zugang.", - "go.privacy.contactAfter": "wenn du Fragen hast.", - "go.privacy.beforeExceptions": - "Go-Modelle werden in den USA gehostet. Anbieter verfolgen eine Zero-Retention-Politik und nutzen deine Daten nicht für das Training von Modellen, mit den", - "go.privacy.exceptionsLink": "folgenden Ausnahmen", - "go.faq.q1": "Was ist OpenCode Go?", - "go.faq.a1": - "Go ist ein kostengünstiges Abonnement, das dir zuverlässigen Zugang zu leistungsfähigen Open-Source-Modellen für Agentic Coding bietet.", - "go.faq.q2": "Welche Modelle beinhaltet Go?", - "go.faq.a2": "Go umfasst die unten aufgeführten Modelle mit großzügigen Limits und zuverlässigem Zugriff.", - "go.faq.q3": "Ist Go dasselbe wie Zen?", - "go.faq.a3": - "Nein. Zen ist Pay-as-you-go, während Go bei $5 für den ersten Monat beginnt, danach $10/Monat, mit großzügigen Limits und zuverlässigem Zugang zu den Open-Source-Modellen GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro und DeepSeek V4 Flash.", - "go.faq.q4": "Wie viel kostet Go?", - "go.faq.a4.p1.beforePricing": "Go kostet", - "go.faq.a4.p1.pricingLink": "$5 im ersten Monat", - "go.faq.a4.p1.afterPricing": "danach $10/Monat mit großzügigen Limits.", - "go.faq.a4.p2.beforeAccount": "Du kannst dein Abonnement in deinem", - "go.faq.a4.p2.accountLink": "Konto verwalten", - "go.faq.a4.p3": "Jederzeit kündbar.", - "go.faq.q5": "Was ist mit Daten und Privatsphäre?", - "go.faq.a5.body": - "Der Plan ist primär für internationale Nutzer konzipiert, mit Modellen gehostet in den USA, der EU und Singapur für stabilen globalen Zugang. Unsere Anbieter verfolgen eine Zero-Retention-Politik und nutzen deine Daten nicht für das Training von Modellen.", - "go.faq.a5.beforeExceptions": - "Go-Modelle werden in den USA gehostet. Anbieter verfolgen eine Zero-Retention-Politik und nutzen deine Daten nicht für das Training von Modellen, mit den", - "go.faq.a5.exceptionsLink": "folgenden Ausnahmen", - "go.faq.q6": "Kann ich Guthaben aufladen?", - "go.faq.a6": "Wenn du mehr Nutzung benötigst, kannst du Guthaben in deinem Konto aufladen.", - "go.faq.q7": "Kann ich kündigen?", - "go.faq.a7": "Ja, du kannst jederzeit kündigen.", - "go.faq.q8": "Kann ich Go mit anderen Coding-Agenten nutzen?", - "go.faq.a8": - "Ja, du kannst Go mit jedem Agenten nutzen. Folge den Einrichtungsanweisungen in deinem bevorzugten Coding-Agenten.", - - "go.faq.q9": "Was ist der Unterschied zwischen kostenlosen Modellen und Go?", - "go.faq.a9": - "Kostenlose Modelle beinhalten Big Pickle sowie Werbemodelle, die zum jeweiligen Zeitpunkt verfügbar sind, mit einem Kontingent von 200 Anfragen/Tag. Go beinhaltet GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro und DeepSeek V4 Flash mit höheren Anfragekontingenten, die über rollierende Zeitfenster (5 Stunden, wöchentlich und monatlich) durchgesetzt werden, grob äquivalent zu $12 pro 5 Stunden, $30 pro Woche und $60 pro Monat (tatsächliche Anfragezahlen variieren je nach Modell und Nutzung).", - - "zen.api.error.rateLimitExceeded": "Ratenlimit überschritten. Bitte versuche es später erneut.", - "zen.api.error.modelNotSupported": "Modell {{model}} wird nicht unterstützt", - "zen.api.error.modelFormatNotSupported": "Modell {{model}} wird für das Format {{format}} nicht unterstützt", - "zen.api.error.noProviderAvailable": "Kein Anbieter verfügbar", - "zen.api.error.providerNotSupported": "Anbieter {{provider}} wird nicht unterstützt", - "zen.api.error.missingApiKey": "Fehlender API-Key.", - "zen.api.error.invalidApiKey": "Ungültiger API-Key.", - "zen.api.error.subscriptionQuotaExceeded": "Abonnement-Quote überschritten. Erneuter Versuch in {{retryIn}}.", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "5-Stunden-Nutzungslimit erreicht. Wird in {{retryIn}} zurückgesetzt. Um dieses Modell jetzt weiter zu nutzen, aktiviere die Nutzung über dein verfügbares Guthaben: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "Wöchentliches Nutzungslimit erreicht. Wird in {{retryIn}} zurückgesetzt. Um dieses Modell jetzt weiter zu nutzen, aktiviere die Nutzung über dein verfügbares Guthaben: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "Monatliches Nutzungslimit erreicht. Wird in {{retryIn}} zurückgesetzt. Um dieses Modell jetzt weiter zu nutzen, aktiviere die Nutzung über dein verfügbares Guthaben: {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "Keine Zahlungsmethode. Füge hier eine Zahlungsmethode hinzu: {{billingUrl}}", - "zen.api.error.insufficientBalance": "Unzureichendes Guthaben. Verwalte deine Abrechnung hier: {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "Dein Workspace hat sein monatliches Ausgabenlimit von ${{amount}} erreicht. Verwalte deine Limits hier: {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "Du hast dein monatliches Ausgabenlimit von ${{amount}} erreicht. Verwalte deine Limits hier: {{membersUrl}}", - "zen.api.error.modelDisabled": "Modell ist deaktiviert", - "zen.api.error.regionNotAllowed": - "Dieses Modell wird in China gehostet. Wenn du dieses Modell verwenden möchtest, aktiviere es in deinen Einstellungen: {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "Die kostenlose Aktion für {{model}} ist beendet. Du kannst das Modell weiterhin nutzen, indem du OpenCode Go abonnierst - {{link}}", - - "black.meta.title": "OpenCode Black | Zugriff auf die weltweit besten Coding-Modelle", - "black.meta.description": "Erhalte Zugriff auf Claude, GPT, Gemini und mehr mit OpenCode Black Abos.", - "black.hero.title": "Zugriff auf die weltweit besten Coding-Modelle", - "black.hero.subtitle": "Einschließlich Claude, GPT, Gemini und mehr", - "black.title": "OpenCode Black | Preise", - "black.paused": "Die Anmeldung zum Black-Plan ist vorübergehend pausiert.", - "black.plan.icon20": "Black 20 Plan", - "black.plan.icon100": "Black 100 Plan", - "black.plan.icon200": "Black 200 Plan", - "black.plan.multiplier100": "5x mehr Nutzung als Black 20", - "black.plan.multiplier200": "20x mehr Nutzung als Black 20", - "black.price.perMonth": "pro Monat", - "black.price.perPersonBilledMonthly": "pro Person, monatlich abgerechnet", - "black.terms.1": "Dein Abonnement startet nicht sofort", - "black.terms.2": "Du wirst auf die Warteliste gesetzt und bald freigeschaltet", - "black.terms.3": "Deine Karte wird erst belastet, wenn dein Abonnement aktiviert ist", - "black.terms.4": "Nutzungslimits gelten, stark automatisierte Nutzung kann Limits schneller erreichen", - "black.terms.5": "Abonnements sind für Einzelpersonen, kontaktiere Enterprise für Teams", - "black.terms.6": "Limits können angepasst werden und Pläne können in Zukunft eingestellt werden", - "black.terms.7": "Kündige dein Abonnement jederzeit", - "black.action.continue": "Weiter", - "black.finePrint.beforeTerms": "Angezeigte Preise enthalten keine anfallenden Steuern", - "black.finePrint.terms": "Nutzungsbedingungen", - "black.workspace.title": "OpenCode Black | Workspace wählen", - "black.workspace.selectPlan": "Wähle einen Workspace für diesen Plan", - "black.workspace.name": "Workspace {{n}}", - "black.subscribe.title": "OpenCode Black abonnieren", - "black.subscribe.paymentMethod": "Zahlungsmethode", - "black.subscribe.loadingPaymentForm": "Lade Zahlungsformular...", - "black.subscribe.selectWorkspaceToContinue": "Wähle einen Workspace um fortzufahren", - "black.subscribe.failurePrefix": "Oh nein!", - "black.subscribe.error.generic": "Ein Fehler ist aufgetreten", - "black.subscribe.error.invalidPlan": "Ungültiger Plan", - "black.subscribe.error.workspaceRequired": "Workspace-ID ist erforderlich", - "black.subscribe.error.alreadySubscribed": "Dieser Workspace hat bereits ein Abonnement", - "black.subscribe.processing": "Verarbeitung...", - "black.subscribe.submit": "Abonnieren ${{plan}}", - "black.subscribe.form.chargeNotice": "Du wirst erst belastet, wenn dein Abonnement aktiviert ist", - "black.subscribe.success.title": "Du bist auf der OpenCode Black Warteliste", - "black.subscribe.success.subscriptionPlan": "Abo-Plan", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "Betrag", - "black.subscribe.success.amountValue": "${{plan}} pro Monat", - "black.subscribe.success.paymentMethod": "Zahlungsmethode", - "black.subscribe.success.dateJoined": "Beitrittsdatum", - "black.subscribe.success.chargeNotice": "Deine Karte wird belastet, sobald dein Abonnement aktiviert ist", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "Nutzung", - "workspace.nav.apiKeys": "API Keys", - "workspace.nav.members": "Mitglieder", - "workspace.nav.billing": "Abrechnung", - "workspace.nav.settings": "Einstellungen", - - "workspace.home.banner.beforeLink": "Zuverlässige, optimierte Modelle für Coding-Agents.", - "workspace.lite.banner.beforeLink": "Kostengünstige Coding-Modelle für alle.", - "workspace.home.billing.loading": "Laden...", - "workspace.home.billing.enable": "Abrechnung aktivieren", - "workspace.home.billing.currentBalance": "Aktuelles Guthaben", - - "workspace.newUser.feature.tested.title": "Getestete & Verifizierte Modelle", - "workspace.newUser.feature.tested.body": - "Wir haben Modelle speziell für Coding-Agents getestet und bewertet, um beste Leistung zu garantieren.", - "workspace.newUser.feature.quality.title": "Höchste Qualität", - "workspace.newUser.feature.quality.body": - "Zugriff auf Modelle, die für optimale Leistung konfiguriert sind – keine Downgrades oder Routing zu billigeren Anbietern.", - "workspace.newUser.feature.lockin.title": "Kein Lock-in", - "workspace.newUser.feature.lockin.body": - "Nutze Zen mit jedem Coding-Agent und nutze weiterhin andere Anbieter mit OpenCode, wann immer du willst.", - "workspace.newUser.copyApiKey": "API Key kopieren", - "workspace.newUser.copyKey": "Key kopieren", - "workspace.newUser.copied": "Kopiert!", - "workspace.newUser.step.enableBilling": "Abrechnung aktivieren", - "workspace.newUser.step.login.before": "Führe", - "workspace.newUser.step.login.after": "aus und wähle OpenCode", - "workspace.newUser.step.pasteKey": "Füge deinen API Key ein", - "workspace.newUser.step.models.before": "Starte OpenCode und führe", - "workspace.newUser.step.models.after": "aus, um ein Modell zu wählen", - - "workspace.models.title": "Modelle", - "workspace.models.subtitle.beforeLink": "Verwalte, auf welche Modelle Workspace-Mitglieder zugreifen können.", - "workspace.models.table.model": "Modell", - "workspace.models.table.enabled": "Aktiviert", - - "workspace.providers.title": "Bring Your Own Key", - "workspace.providers.subtitle": "Konfiguriere deine eigenen API Keys von AI-Anbietern.", - "workspace.providers.placeholder": "Gib {{provider}} API Key ein ({{prefix}}...)", - "workspace.providers.configure": "Konfigurieren", - "workspace.providers.edit": "Bearbeiten", - "workspace.providers.delete": "Löschen", - "workspace.providers.saving": "Speichere...", - "workspace.providers.save": "Speichern", - "workspace.providers.table.provider": "Anbieter", - "workspace.providers.table.apiKey": "API Key", - - "workspace.usage.title": "Nutzungsverlauf", - "workspace.usage.subtitle": "Kürzliche API-Nutzung und Kosten.", - "workspace.usage.empty": "Mache deinen ersten API-Aufruf, um loszulegen.", - "workspace.usage.table.date": "Datum", - "workspace.usage.table.model": "Modell", - "workspace.usage.table.input": "Input", - "workspace.usage.table.output": "Output", - "workspace.usage.table.cost": "Kosten", - "workspace.usage.table.session": "Sitzung", - "workspace.usage.breakdown.input": "Input", - "workspace.usage.breakdown.cacheRead": "Cache Read", - "workspace.usage.breakdown.cacheWrite": "Cache Write", - "workspace.usage.breakdown.output": "Output", - "workspace.usage.breakdown.reasoning": "Reasoning", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "Kosten", - "workspace.cost.subtitle": "Nutzungskosten aufgeschlüsselt nach Modell.", - "workspace.cost.allModels": "Alle Modelle", - "workspace.cost.allKeys": "Alle Keys", - "workspace.cost.deletedSuffix": "(gelöscht)", - "workspace.cost.empty": "Keine Nutzungsdaten für den gewählten Zeitraum verfügbar.", - "workspace.cost.subscriptionShort": "Abo", - - "workspace.keys.title": "API Keys", - "workspace.keys.subtitle": "Verwalte deine API Keys für den Zugriff auf OpenCode-Dienste.", - "workspace.keys.create": "API Key erstellen", - "workspace.keys.placeholder": "Key-Namen eingeben", - "workspace.keys.empty": "Erstelle einen OpenCode Gateway API Key", - "workspace.keys.table.name": "Name", - "workspace.keys.table.key": "Key", - "workspace.keys.table.createdBy": "Erstellt von", - "workspace.keys.table.lastUsed": "Zuletzt genutzt", - "workspace.keys.copyApiKey": "API Key kopieren", - "workspace.keys.delete": "Löschen", - - "workspace.members.title": "Mitglieder", - "workspace.members.subtitle": "Verwalte Workspace-Mitglieder und deren Berechtigungen.", - "workspace.members.invite": "Mitglied einladen", - "workspace.members.inviting": "Lade ein...", - "workspace.members.beta.beforeLink": "Workspaces sind für Teams während der Beta kostenlos.", - "workspace.members.form.invitee": "Eingeladene Person", - "workspace.members.form.emailPlaceholder": "E-Mail eingeben", - "workspace.members.form.role": "Rolle", - "workspace.members.form.monthlyLimit": "Monatliches Ausgabenlimit", - "workspace.members.noLimit": "Kein Limit", - "workspace.members.noLimitLowercase": "kein Limit", - "workspace.members.invited": "eingeladen", - "workspace.members.edit": "Bearbeiten", - "workspace.members.delete": "Löschen", - "workspace.members.saving": "Speichere...", - "workspace.members.save": "Speichern", - "workspace.members.table.email": "E-Mail", - "workspace.members.table.role": "Rolle", - "workspace.members.table.monthLimit": "Monatslimit", - "workspace.members.role.admin": "Admin", - "workspace.members.role.adminDescription": "Kann Modelle, Mitglieder und Abrechnung verwalten", - "workspace.members.role.member": "Mitglied", - "workspace.members.role.memberDescription": "Kann nur API Keys für sich selbst generieren", - - "workspace.settings.title": "Einstellungen", - "workspace.settings.subtitle": "Aktualisiere deinen Workspace-Namen und Präferenzen.", - "workspace.settings.workspaceName": "Workspace-Name", - "workspace.settings.defaultName": "Standard", - "workspace.settings.updating": "Aktualisiere...", - "workspace.settings.save": "Speichern", - "workspace.settings.edit": "Bearbeiten", - - "workspace.billing.title": "Abrechnung", - "workspace.billing.subtitle.beforeLink": "Zahlungsmethoden verwalten.", - "workspace.billing.contactUs": "Kontaktiere uns", - "workspace.billing.subtitle.afterLink": "wenn du Fragen hast.", - "workspace.billing.currentBalance": "Aktuelles Guthaben", - "workspace.billing.add": "$ hinzufügen", - "workspace.billing.enterAmount": "Betrag eingeben", - "workspace.billing.loading": "Lade...", - "workspace.billing.addAction": "Hinzufügen", - "workspace.billing.addBalance": "Guthaben aufladen", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "Mit Stripe verbunden", - "workspace.billing.manage": "Verwalten", - "workspace.billing.enable": "Abrechnung aktivieren", - - "workspace.monthlyLimit.title": "Monatliches Limit", - "workspace.monthlyLimit.subtitle": "Setze ein monatliches Nutzungslimit für deinen Account.", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "Setze...", - "workspace.monthlyLimit.set": "Setzen", - "workspace.monthlyLimit.edit": "Limit bearbeiten", - "workspace.monthlyLimit.noLimit": "Kein Nutzungslimit gesetzt.", - "workspace.monthlyLimit.currentUsage.beforeMonth": "Aktuelle Nutzung für", - "workspace.monthlyLimit.currentUsage.beforeAmount": "ist $", - - "workspace.redeem.title": "Gutschein einlösen", - "workspace.redeem.subtitle": "Löse einen Gutscheincode ein, um Guthaben oder Vorteile zu erhalten.", - "workspace.redeem.placeholder": "Gutscheincode eingeben", - "workspace.redeem.redeem": "Einlösen", - "workspace.redeem.redeeming": "Wird eingelöst...", - "workspace.redeem.success": "Gutschein erfolgreich eingelöst.", - - "workspace.reload.title": "Auto-Reload", - "workspace.reload.disabled.before": "Auto-Reload ist", - "workspace.reload.disabled.state": "deaktiviert", - "workspace.reload.disabled.after": "Aktivieren, um automatisch aufzuladen, wenn das Guthaben niedrig ist.", - "workspace.reload.enabled.before": "Auto-Reload ist", - "workspace.reload.enabled.state": "aktiviert", - "workspace.reload.enabled.middle": "Wir laden auf", - "workspace.reload.processingFee": "Bearbeitungsgebühr", - "workspace.reload.enabled.after": "wenn das Guthaben erreicht:", - "workspace.reload.edit": "Bearbeiten", - "workspace.reload.enable": "Aktivieren", - "workspace.reload.enableAutoReload": "Auto-Reload aktivieren", - "workspace.reload.reloadAmount": "Aufladebetrag $", - "workspace.reload.whenBalanceReaches": "Wenn Guthaben $ erreicht", - "workspace.reload.saving": "Speichere...", - "workspace.reload.save": "Speichern", - "workspace.reload.failedAt": "Aufladung fehlgeschlagen am", - "workspace.reload.reason": "Grund:", - "workspace.reload.updatePaymentMethod": "Bitte aktualisiere deine Zahlungsmethode und versuche es erneut.", - "workspace.reload.retrying": "Versuche erneut...", - "workspace.reload.retry": "Erneut versuchen", - "workspace.reload.error.paymentFailed": "Zahlung fehlgeschlagen.", - - "workspace.payments.title": "Zahlungshistorie", - "workspace.payments.subtitle": "Kürzliche Zahlungstransaktionen.", - "workspace.payments.table.date": "Datum", - "workspace.payments.table.paymentId": "Zahlungs-ID", - "workspace.payments.table.amount": "Betrag", - "workspace.payments.table.receipt": "Beleg", - "workspace.payments.type.credit": "Guthaben", - "workspace.payments.type.subscription": "Abonnement", - "workspace.payments.view": "Ansehen", - - "workspace.black.loading": "Lade...", - "workspace.black.time.day": "Tag", - "workspace.black.time.days": "Tage", - "workspace.black.time.hour": "Stunde", - "workspace.black.time.hours": "Stunden", - "workspace.black.time.minute": "Minute", - "workspace.black.time.minutes": "Minuten", - "workspace.black.time.fewSeconds": "einige Sekunden", - "workspace.black.subscription.title": "Abonnement", - "workspace.black.subscription.message": "Du hast OpenCode Black für ${{plan}} pro Monat abonniert.", - "workspace.black.subscription.manage": "Abo verwalten", - "workspace.black.subscription.rollingUsage": "5-Stunden-Nutzung", - "workspace.black.subscription.weeklyUsage": "Wöchentliche Nutzung", - "workspace.black.subscription.resetsIn": "Setzt zurück in", - "workspace.black.subscription.useBalance": "Nutze dein verfügbares Guthaben, nachdem die Limits erreicht sind", - "workspace.black.waitlist.title": "Warteliste", - "workspace.black.waitlist.joined": "Du bist auf der Warteliste für den ${{plan}} pro Monat OpenCode Black Plan.", - "workspace.black.waitlist.ready": "Wir sind bereit, dich in den ${{plan}} pro Monat OpenCode Black Plan aufzunehmen.", - "workspace.black.waitlist.leave": "Warteliste verlassen", - "workspace.black.waitlist.leaving": "Verlasse...", - "workspace.black.waitlist.left": "Verlassen", - "workspace.black.waitlist.enroll": "Einschreiben", - "workspace.black.waitlist.enrolling": "Schreibe ein...", - "workspace.black.waitlist.enrolled": "Eingeschrieben", - "workspace.black.waitlist.enrollNote": - "Wenn du auf Einschreiben klickst, startet dein Abo sofort und deine Karte wird belastet.", - - "workspace.lite.loading": "Lade...", - "workspace.lite.time.day": "Tag", - "workspace.lite.time.days": "Tage", - "workspace.lite.time.hour": "Stunde", - "workspace.lite.time.hours": "Stunden", - "workspace.lite.time.minute": "Minute", - "workspace.lite.time.minutes": "Minuten", - "workspace.lite.time.fewSeconds": "einige Sekunden", - "workspace.lite.subscription.message": "Du hast OpenCode Go abonniert.", - "workspace.lite.subscription.manage": "Abo verwalten", - "workspace.lite.subscription.rollingUsage": "Fortlaufende Nutzung", - "workspace.lite.subscription.weeklyUsage": "Wöchentliche Nutzung", - "workspace.lite.subscription.monthlyUsage": "Monatliche Nutzung", - "workspace.lite.subscription.resetsIn": "Setzt zurück in", - "workspace.lite.subscription.useBalance": "Nutze dein verfügbares Guthaben, nachdem die Nutzungslimits erreicht sind", - "workspace.lite.subscription.selectProvider": - 'Wähle "OpenCode Go" als Anbieter in deiner opencode-Konfiguration, um Go-Modelle zu verwenden.', - "workspace.lite.providers.title": "Anbieter", - "workspace.lite.providers.description": "Steuere, welche Anbieter für das Routing verwendet werden.", - "workspace.lite.providers.useChina": "In China gehostete Modelle aktivieren", - "workspace.lite.black.message": - "Du hast derzeit OpenCode Black abonniert oder stehst auf der Warteliste. Bitte kündige zuerst, wenn du zu Go wechseln möchtest.", - "workspace.lite.other.message": - "Ein anderes Mitglied in diesem Workspace hat OpenCode Go bereits abonniert. Nur ein Mitglied pro Workspace kann abonnieren.", - "workspace.lite.promo.description": - "OpenCode Go startet bei {{price}}, danach $10/Monat, und bietet zuverlässigen Zugang zu beliebten offenen Coding-Modellen mit großzügigen Nutzungslimits.", - "workspace.lite.promo.price": "$5 im ersten Monat", - "workspace.lite.promo.modelsTitle": "Was enthalten ist", - "workspace.lite.promo.footer": - "Der Plan wurde hauptsächlich für internationale Nutzer entwickelt, wobei die Modelle in den USA, der EU und Singapur gehostet werden, um einen stabilen weltweiten Zugriff zu gewährleisten. Preise und Nutzungslimits können sich ändern, während wir aus der frühen Nutzung und dem Feedback lernen.", - "workspace.lite.promo.subscribe": "Go abonnieren", - "workspace.lite.promo.subscribing": "Leite weiter...", - "workspace.lite.promo.otherMethods": "Andere Zahlungsmethoden", - "workspace.lite.promo.selectMethod": "Zahlungsmethode auswählen", - - "workspace.referral.copyLink": "Link kopieren", - "workspace.referral.copied": "Kopiert", - "workspace.referral.overview.title": "Freunde einladen", - "workspace.referral.overview.subtitle": "Erhalte $5, wenn ein Freund abonniert. Er bekommt ebenfalls $5.", - "workspace.referral.instructions.share": "Teile deinen Empfehlungslink", - "workspace.referral.instructions.subscribe": "Dein Freund tritt bei und abonniert Go", - "workspace.referral.instructions.claim": - "Ihr erhaltet beide ein Nutzungsguthaben von $5, das ihr auf eure Go-Nutzungslimits anrechnen könnt", - "workspace.referral.rewards.title": "Empfehlungsbelohnungen", - "workspace.referral.rewards.description": "Verfügbare Empfehlungsguthaben auf deine Go-Nutzung anwenden.", - "workspace.referral.rewards.subtitle": "{{applied}} / {{total}} Belohnungen eingelöst.", - "workspace.referral.rewards.empty": "Noch keine Empfehlungsbelohnungen.", - "workspace.referral.table.reward": "Belohnung", - "workspace.referral.table.referral": "Beschreibung", - "workspace.referral.table.date": "Datum", - "workspace.referral.reward.description.inviter": "{{email}} eingeladen", - "workspace.referral.reward.description.invitee": "Eingeladen von {{email}}", - "workspace.referral.reward.action.subscribeUnlock": "Abonnieren zum Freischalten", - "workspace.referral.reward.action.view": "Belohnung ansehen", - "workspace.referral.reward.action.applied": "Belohnung eingelöst", - "workspace.referral.reward.source.pendingInviter": "Warten auf das Abo des Freundes", - "workspace.referral.reward.source.pendingInvitee": "Abonnieren, um Belohnung freizuschalten", - "workspace.referral.reward.source.available": "Belohnung kann eingelöst werden", - "workspace.referral.reward.source.applied": "Belohnung eingelöst", - "workspace.referral.reward.status.applied": "Belohnung eingelöst", - "workspace.referral.reward.status.pendingInviter": "Abonnieren zum Freischalten", - "workspace.referral.reward.status.pendingInvitee": "Abonnieren zum Freischalten", - "workspace.referral.apply.noGo": "Abonnieren zum Freischalten", - "workspace.referral.apply.preview": "Belohnung ansehen", - "workspace.referral.apply.action": "Einlösen", - "workspace.referral.apply.confirmTitle": "Belohnung einlösen", - "workspace.referral.apply.confirmBody": - "Löse {{amount}} ein, um die aktuelle Nutzung dieses Workspace zu reduzieren.", - "workspace.referral.apply.confirmAction": "Einlösen", - - "download.title": "OpenCode | Download", - "download.meta.description": "Lade OpenCode für macOS, Windows und Linux herunter", - "download.hero.title": "OpenCode herunterladen", - "download.hero.subtitle": "In Beta verfügbar für macOS, Windows und Linux", - "download.hero.button": "Download für {{os}}", - "download.section.terminal": "OpenCode Terminal", - "download.section.desktop": "OpenCode Desktop (Beta)", - "download.section.extensions": "OpenCode Extensions", - "download.section.integrations": "OpenCode Integrationen", - "download.action.download": "Download", - "download.action.install": "Installieren", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "Nicht unbedingt, aber wahrscheinlich. Du brauchst ein AI-Abo, wenn du OpenCode mit einem bezahlten Anbieter verbinden willst, obwohl du mit", - "download.faq.a3.localLink": "lokalen Modellen", - "download.faq.a3.afterLocal.beforeZen": "kostenlos arbeiten kannst. Während wir Nutzern raten,", - "download.faq.a3.afterZen": - " zu nutzen, funktioniert OpenCode mit allen populären Anbietern wie OpenAI, Anthropic, xAI etc.", - - "download.faq.a5.p1": "OpenCode ist 100% kostenlos.", - "download.faq.a5.p2.beforeZen": - "Zusätzliche Kosten entstehen durch dein Abo bei einem Modellanbieter. Während OpenCode mit jedem Modellanbieter funktioniert, empfehlen wir", - "download.faq.a5.p2.afterZen": " zu nutzen.", - - "download.faq.a6.p1": - "Deine Daten und Informationen werden nur gespeichert, wenn du teilbare Links in OpenCode erstellst.", - "download.faq.a6.p2.beforeShare": "Erfahre mehr über", - "download.faq.a6.shareLink": "Share-Pages", - - "enterprise.title": "OpenCode | Enterprise-Lösungen für Ihre Organisation", - "enterprise.meta.description": "Kontaktieren Sie OpenCode für Enterprise-Lösungen", - "enterprise.hero.title": "Ihr Code gehört Ihnen", - "enterprise.hero.body1": - "OpenCode arbeitet sicher innerhalb Ihrer Organisation, ohne dass Daten oder Kontext gespeichert werden und ohne Lizenzbeschränkungen oder Eigentumsansprüche. Starten Sie einen Testlauf mit Ihrem Team, dann rollen Sie es in Ihrer Organisation aus, indem Sie es in Ihr SSO und internes AI-Gateway integrieren.", - "enterprise.hero.body2": "Lassen Sie uns wissen, wie wir helfen können.", - "enterprise.form.name.label": "Vollständiger Name", - "enterprise.form.name.placeholder": "Jeff Bezos", - "enterprise.form.role.label": "Rolle", - "enterprise.form.role.placeholder": "Executive Chairman", - "enterprise.form.company.label": "Unternehmen", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "Firmen-E-Mail", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "Telefonnummer", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "Welches Problem versuchen Sie zu lösen?", - "enterprise.form.message.placeholder": "Wir brauchen Hilfe bei...", - "enterprise.form.send": "Senden", - "enterprise.form.sending": "Sende...", - "enterprise.form.success": "Nachricht gesendet, wir melden uns bald.", - "enterprise.form.success.submitted": "Formular erfolgreich gesendet.", - "enterprise.form.error.allFieldsRequired": "Alle Felder sind erforderlich.", - "enterprise.form.error.invalidEmailFormat": "Ungültiges E-Mail-Format.", - "enterprise.form.error.internalServer": "Interner Serverfehler.", - "enterprise.faq.title": "FAQ", - "enterprise.faq.q1": "Was ist OpenCode Enterprise?", - "enterprise.faq.a1": - "OpenCode Enterprise ist für Organisationen, die sicherstellen wollen, dass Code und Daten niemals ihre Infrastruktur verlassen. Dies geschieht durch eine zentrale Konfiguration, die in Ihr SSO und internes AI-Gateway integriert wird.", - "enterprise.faq.q2": "Wie starte ich mit OpenCode Enterprise?", - "enterprise.faq.a2": - "Starten Sie einfach mit einem internen Testlauf mit Ihrem Team. OpenCode speichert standardmäßig weder Code noch Kontextdaten, was den Einstieg erleichtert. Kontaktieren Sie uns dann, um Preise und Implementierungsoptionen zu besprechen.", - "enterprise.faq.q3": "Wie funktioniert das Enterprise-Pricing?", - "enterprise.faq.a3": - "Wir bieten eine Preisgestaltung pro Arbeitsplatz (Seat) an. Wenn Sie Ihr eigenes LLM-Gateway haben, berechnen wir keine Gebühren für genutzte Token. Für weitere Details kontaktieren Sie uns für ein individuelles Angebot basierend auf den Anforderungen Ihrer Organisation.", - "enterprise.faq.q4": "Sind meine Daten mit OpenCode Enterprise sicher?", - "enterprise.faq.a4": - "Ja. OpenCode speichert weder Ihren Code noch Kontextdaten. Alle Verarbeitungen finden lokal oder über direkte API-Aufrufe an Ihren AI-Anbieter statt. Mit zentraler Konfiguration und SSO-Integration bleiben Ihre Daten sicher innerhalb der Infrastruktur Ihrer Organisation.", - - "brand.title": "OpenCode | Marke", - "brand.meta.description": "OpenCode Markenrichtlinien", - "brand.heading": "Markenrichtlinien", - "brand.subtitle": "Ressourcen und Assets, die dir helfen, mit der OpenCode-Marke zu arbeiten.", - "brand.downloadAll": "Alle Assets herunterladen", - - "changelog.title": "OpenCode | Changelog", - "changelog.meta.description": "OpenCode Release Notes und Changelog", - "changelog.hero.title": "Changelog", - "changelog.hero.subtitle": "Neue Updates und Verbesserungen für OpenCode", - "changelog.empty": "Keine Changelog-Einträge gefunden.", - "changelog.viewJson": "JSON ansehen", - - "bench.list.title": "Benchmark", - "bench.list.heading": "Benchmarks", - "bench.list.table.agent": "Agent", - "bench.list.table.model": "Modell", - "bench.list.table.score": "Score", - "bench.submission.error.allFieldsRequired": "Alle Felder sind erforderlich.", - - "bench.detail.title": "Benchmark - {{task}}", - "bench.detail.notFound": "Task nicht gefunden", - "bench.detail.na": "N/A", - "bench.detail.labels.agent": "Agent", - "bench.detail.labels.model": "Modell", - "bench.detail.labels.task": "Task", - "bench.detail.labels.repo": "Repo", - "bench.detail.labels.from": "Von", - "bench.detail.labels.to": "Bis", - "bench.detail.labels.prompt": "Prompt", - "bench.detail.labels.commit": "Commit", - "bench.detail.labels.averageDuration": "Durchschnittliche Dauer", - "bench.detail.labels.averageScore": "Durchschnittlicher Score", - "bench.detail.labels.averageCost": "Durchschnittliche Kosten", - "bench.detail.labels.summary": "Zusammenfassung", - "bench.detail.labels.runs": "Durchläufe", - "bench.detail.labels.score": "Score", - "bench.detail.labels.base": "Basis", - "bench.detail.labels.penalty": "Strafe", - "bench.detail.labels.weight": "Gewichtung", - "bench.detail.table.run": "Durchlauf", - "bench.detail.table.score": "Score (Basis - Strafe)", - "bench.detail.table.cost": "Kosten", - "bench.detail.table.duration": "Dauer", - "bench.detail.run.title": "Durchlauf {{n}}", - "bench.detail.rawJson": "Raw JSON", -} satisfies Dict diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts deleted file mode 100644 index 039692ef6b..0000000000 --- a/packages/console/app/src/i18n/fr.ts +++ /dev/null @@ -1,839 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "app.meta.description": "OpenCode - L'agent de code open source.", - "nav.github": "GitHub", - "nav.docs": "Documentation", - "nav.changelog": "Changelog", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "Entreprise", - "nav.zen": "Zen", - "nav.login": "Se connecter", - "nav.free": "Télécharger", - "nav.home": "Accueil", - "nav.openMenu": "Ouvrir le menu", - "nav.getStartedFree": "Commencer gratuitement", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "Copier le logo en SVG", - "nav.context.copyWordmark": "Copier le logotype en SVG", - "nav.context.brandAssets": "Ressources de marque", - - "footer.github": "GitHub", - "footer.docs": "Documentation", - "footer.changelog": "Changelog", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "Marque", - "legal.privacy": "Confidentialité", - "legal.terms": "Conditions", - - "email.title": "Soyez le premier à être informé de nos nouveaux produits", - "email.subtitle": "Inscrivez-vous à la liste d'attente pour un accès anticipé.", - "email.placeholder": "Adresse e-mail", - "email.subscribe": "S'abonner", - "email.success": "Presque terminé - vérifiez votre boîte de réception et confirmez votre adresse e-mail", - - "notFound.title": "Introuvable | OpenCode", - "notFound.heading": "404 - Page introuvable", - "notFound.home": "Accueil", - "notFound.docs": "Documentation", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "opencode logo light", - "notFound.logoDarkAlt": "opencode logo dark", - - "user.logout": "Se déconnecter", - - "workspace.select": "Sélectionner un espace de travail", - "workspace.createNew": "+ Créer un nouvel espace", - "workspace.modal.title": "Créer un nouvel espace", - "workspace.modal.placeholder": "Saisir le nom de l'espace", - - "common.cancel": "Annuler", - "common.creating": "Création...", - "common.create": "Créer", - - "common.videoUnsupported": "Votre navigateur ne prend pas en charge la balise vidéo.", - "common.figure": "Fig {{n}}.", - "common.faq": "FAQ", - "common.learnMore": "En savoir plus", - - "error.invalidPlan": "Forfait invalide", - "error.workspaceRequired": "L'ID de l'espace de travail est requis", - "error.alreadySubscribed": "Cet espace de travail a déjà un abonnement", - "error.limitRequired": "La limite est requise.", - "error.monthlyLimitInvalid": "Définissez une limite mensuelle valide.", - "error.workspaceNameRequired": "Le nom de l'espace de travail est requis.", - "error.nameTooLong": "Le nom doit comporter 255 caractères ou moins.", - "error.emailRequired": "L'e-mail est requis", - "error.roleRequired": "Le rôle est requis", - "error.idRequired": "L'ID est requis", - "error.nameRequired": "Le nom est requis", - "error.providerRequired": "Le fournisseur est requis", - "error.apiKeyRequired": "La clé API est requise", - "error.modelRequired": "Le modèle est requis", - "error.reloadAmountMin": "Le montant de recharge doit être d'au moins {{amount}} $", - "error.reloadTriggerMin": "Le seuil de déclenchement doit être d'au moins {{amount}} $", - "auth.callback.error.codeMissing": "Aucun code d'autorisation trouvé.", - - "home.title": "OpenCode | L'agent de code IA open source", - - "temp.title": "OpenCode | Agent de code IA conçu pour le terminal", - "temp.hero.title": "L'agent de code IA conçu pour le terminal", - "temp.zen": "OpenCode Zen", - "temp.getStarted": "Commencer", - "temp.feature.native.title": "TUI Native", - "temp.feature.native.body": "Une interface terminal native, réactive et thémable", - "temp.feature.zen.beforeLink": "Une", - "temp.feature.zen.link": "liste organisée de modèles", - "temp.feature.zen.afterLink": "fournie par OpenCode", - "temp.feature.models.beforeLink": "Prend en charge plus de 75 fournisseurs LLM via", - "temp.feature.models.afterLink": ", y compris les modèles locaux", - "temp.screenshot.caption": "OpenCode TUI avec le thème tokyonight", - "temp.screenshot.alt": "OpenCode TUI avec le thème tokyonight", - "temp.logoLightAlt": "opencode logo light", - "temp.logoDarkAlt": "opencode logo dark", - - "home.banner.badge": "Nouveau", - "home.banner.text": "Application desktop disponible en bêta", - "home.banner.platforms": "sur macOS, Windows et Linux", - "home.banner.downloadNow": "Télécharger maintenant", - "home.banner.downloadBetaNow": "Télécharger la bêta desktop maintenant", - - "home.hero.title": "L'agent de code IA open source", - "home.hero.subtitle.a": - "Modèles gratuits inclus ou connectez n'importe quel modèle depuis n'importe quel fournisseur,", - "home.hero.subtitle.b": "dont Claude, GPT, Gemini et plus.", - - "home.install.ariaLabel": "Options d'installation", - - "home.what.title": "Qu'est-ce que OpenCode ?", - "home.what.body": - "OpenCode est un agent open source qui vous aide à écrire du code dans votre terminal, IDE ou desktop.", - "home.what.lsp.title": "LSP activé", - "home.what.lsp.body": "Charge automatiquement les bons LSP pour le LLM", - "home.what.multiSession.title": "Multi-session", - "home.what.multiSession.body": "Lancez plusieurs agents en parallèle sur le même projet", - "home.what.shareLinks.title": "Liens de partage", - "home.what.shareLinks.body": "Partagez un lien vers n'importe quelle session pour référence ou debug", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "Connectez-vous avec GitHub pour utiliser votre compte Copilot", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "Connectez-vous avec OpenAI pour utiliser votre compte ChatGPT Plus ou Pro", - "home.what.anyModel.title": "N'importe quel modèle", - "home.what.anyModel.body": "75+ fournisseurs de LLM via Models.dev, y compris des modèles locaux", - "home.what.anyEditor.title": "N'importe quel éditeur", - "home.what.anyEditor.body": "Disponible en interface terminal, application desktop et extension IDE", - "home.what.readDocs": "Lire la doc", - - "home.growth.title": "L'agent de code IA open source", - "home.growth.body": - "Avec plus de {{stars}} étoiles sur GitHub, {{contributors}} contributeurs et plus de {{commits}} commits, OpenCode est utilisé et approuvé par plus de {{monthlyUsers}} développeurs chaque mois.", - "home.growth.githubStars": "Étoiles GitHub", - "home.growth.contributors": "Contributeurs", - "home.growth.monthlyDevs": "Devs mensuels", - - "home.privacy.title": "Conçu pour la confidentialité", - "home.privacy.body": - "OpenCode ne stocke ni votre code ni vos données de contexte, afin de pouvoir fonctionner dans des environnements sensibles à la confidentialité.", - "home.privacy.learnMore": "En savoir plus sur", - "home.privacy.link": "la confidentialité", - - "home.faq.q1": "Qu'est-ce que OpenCode ?", - "home.faq.a1": - "OpenCode est un agent open source qui vous aide à écrire et exécuter du code avec n'importe quel modèle d'IA. Il est disponible en interface terminal, application desktop ou extension IDE.", - "home.faq.q2": "Comment utiliser OpenCode ?", - "home.faq.a2.before": "Le moyen le plus simple de commencer est de lire l'", - "home.faq.a2.link": "intro", - "home.faq.q3": "Ai-je besoin d'abonnements IA supplémentaires pour utiliser OpenCode ?", - "home.faq.a3.p1": - "Pas forcément : OpenCode propose des modèles gratuits que vous pouvez utiliser sans créer de compte.", - "home.faq.a3.p2.beforeZen": "En plus, vous pouvez utiliser des modèles populaires pour le code en créant un compte", - "home.faq.a3.p2.afterZen": ".", - "home.faq.a3.p3": - "Nous encourageons l'utilisation de Zen, mais OpenCode fonctionne aussi avec les fournisseurs populaires comme OpenAI, Anthropic, xAI, etc.", - "home.faq.a3.p4.beforeLocal": "Vous pouvez même connecter vos", - "home.faq.a3.p4.localLink": "modèles locaux", - "home.faq.q4": "Puis-je utiliser mes abonnements IA existants avec OpenCode ?", - "home.faq.a4.p1": - "Oui, OpenCode prend en charge les abonnements des principaux fournisseurs. Vous pouvez utiliser Claude Pro/Max, ChatGPT Plus/Pro ou GitHub Copilot.", - "home.faq.q5": "Puis-je utiliser OpenCode uniquement dans le terminal ?", - "home.faq.a5.beforeDesktop": "Plus maintenant ! OpenCode est désormais disponible en application pour", - "home.faq.a5.desktop": "desktop", - "home.faq.a5.and": "et", - "home.faq.a5.web": "web", - "home.faq.q6": "Combien coûte OpenCode ?", - "home.faq.a6": - "OpenCode est 100% gratuit. Il inclut aussi des modèles gratuits. Des coûts supplémentaires peuvent s'appliquer si vous connectez un autre fournisseur.", - "home.faq.q7": "Qu'en est-il des données et de la confidentialité ?", - "home.faq.a7.p1": - "Vos données ne sont stockées que lorsque vous utilisez nos modèles gratuits ou créez des liens partageables.", - "home.faq.a7.p2.beforeModels": "En savoir plus sur", - "home.faq.a7.p2.modelsLink": "nos modèles", - "home.faq.a7.p2.and": "et", - "home.faq.a7.p2.shareLink": "les pages de partage", - "home.faq.q8": "OpenCode est-il open source ?", - "home.faq.a8.p1": "Oui, OpenCode est entièrement open source. Le code source est public sur", - "home.faq.a8.p2": "sous la", - "home.faq.a8.mitLicense": "Licence MIT", - "home.faq.a8.p3": - ", ce qui signifie que tout le monde peut l'utiliser, le modifier ou contribuer à son développement. Toute personne de la communauté peut ouvrir des tickets, soumettre des pull requests et étendre les fonctionnalités.", - - "home.zenCta.title": "Accédez à des modèles fiables et optimisés pour les agents de code", - "home.zenCta.body": - "Zen vous donne accès à un ensemble sélectionné de modèles d'IA que OpenCode a testés et benchmarkés spécifiquement pour les agents de code. Plus besoin de vous soucier des variations de performance et de qualité selon les fournisseurs : utilisez des modèles validés qui fonctionnent.", - "home.zenCta.link": "En savoir plus sur Zen", - - "zen.title": "OpenCode Zen | Un ensemble sélectionné de modèles fiables et optimisés pour les agents de code", - "zen.hero.title": "Modèles fiables et optimisés pour les agents de code", - "zen.hero.body": - "Zen vous donne accès à un ensemble sélectionné de modèles d'IA que OpenCode a testés et benchmarkés spécifiquement pour les agents de code. Plus besoin de vous soucier des variations de performance et de qualité selon les fournisseurs : utilisez des modèles validés qui fonctionnent.", - - "zen.faq.q1": "Qu'est-ce que OpenCode Zen ?", - "zen.faq.a1": - "Zen est un ensemble sélectionné de modèles d'IA testés et benchmarkés pour les agents de code, créé par l'équipe derrière OpenCode.", - "zen.faq.q2": "Qu'est-ce qui rend Zen plus précis ?", - "zen.faq.a2": - "Zen ne propose que des modèles testés et benchmarkés spécifiquement pour les agents de code. Vous n'utiliseriez pas un couteau à beurre pour couper un steak ; n'utilisez pas de mauvais modèles pour coder.", - "zen.faq.q3": "Zen est-il moins cher ?", - "zen.faq.a3": - "Zen n'est pas à but lucratif. Zen vous facture au prix coûtant des fournisseurs de modèles. Plus Zen est utilisé, plus OpenCode peut négocier de meilleurs tarifs et vous les répercuter.", - "zen.faq.q4": "Combien coûte Zen ?", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "facture par requête", - "zen.faq.a4.p1.afterPricing": "sans marge, vous payez donc exactement ce que facture le fournisseur du modèle.", - "zen.faq.a4.p2.beforeAccount": - "Votre coût total dépend de l'usage, et vous pouvez définir des limites de dépense mensuelles dans votre", - "zen.faq.a4.p2.accountLink": "compte", - "zen.faq.a4.p3": - "Pour couvrir les coûts, OpenCode ajoute uniquement de petits frais de traitement de paiement de 1,23 $ par recharge de 20 $.", - "zen.faq.q5": "Et pour les données et la confidentialité ?", - "zen.faq.a5.beforeExceptions": - "Tous les modèles Zen sont hébergés aux États-Unis. Les fournisseurs appliquent une politique de rétention zéro et n'utilisent pas vos données pour l'entraînement des modèles, avec les", - "zen.faq.a5.exceptionsLink": "exceptions suivantes", - "zen.faq.q6": "Puis-je définir des limites de dépense ?", - "zen.faq.a6": "Oui, vous pouvez définir des limites de dépense mensuelles dans votre compte.", - "zen.faq.q7": "Puis-je annuler ?", - "zen.faq.a7": "Oui, vous pouvez désactiver la facturation à tout moment et utiliser votre solde restant.", - "zen.faq.q8": "Puis-je utiliser Zen avec d'autres agents de code ?", - "zen.faq.a8": - "Zen fonctionne très bien avec OpenCode, mais vous pouvez utiliser Zen avec n'importe quel agent. Suivez les instructions de configuration dans votre agent préféré.", - - "zen.cta.start": "Commencez avec Zen", - "zen.pricing.title": "Ajoutez 20 $ de solde Pay as you go", - "zen.pricing.fee": "(+1,23 $ de frais de traitement de carte)", - "zen.pricing.body": - "Utilisez avec n'importe quel agent. Fixez des limites de dépenses mensuelles. Annulez à tout moment.", - "zen.problem.title": "Quel problème Zen résout-il ?", - "zen.problem.body": - "Il existe de nombreux modèles disponibles, mais seuls quelques-uns fonctionnent bien avec les agents de code. La plupart des fournisseurs les configurent différemment avec des résultats variables.", - "zen.problem.subtitle": - "Nous résolvons ce problème pour tout le monde, pas seulement pour les utilisateurs de OpenCode.", - "zen.problem.item1": "Test des modèles sélectionnés et consultation de leurs équipes", - "zen.problem.item2": "Collaboration avec les fournisseurs pour garantir une livraison correcte", - "zen.problem.item3": "Benchmark de toutes les combinaisons modèle-fournisseur que nous recommandons", - "zen.how.title": "Comment fonctionne Zen", - "zen.how.body": - "Bien que nous vous suggérions d'utiliser Zen avec OpenCode, vous pouvez utiliser Zen avec n'importe quel agent.", - "zen.how.step1.title": "Inscrivez-vous et ajoutez un solde de 20 $", - "zen.how.step1.beforeLink": "suivez les", - "zen.how.step1.link": "instructions de configuration", - "zen.how.step2.title": "Utilisez Zen avec une tarification transparente", - "zen.how.step2.link": "payez par requête", - "zen.how.step2.afterLink": "sans marge", - "zen.how.step3.title": "Recharge automatique", - "zen.how.step3.body": "lorsque votre solde atteint 5 $, nous ajouterons automatiquement 20 $", - "zen.privacy.title": "Votre vie privée est importante pour nous", - "zen.privacy.beforeExceptions": - "Tous les modèles Zen sont hébergés aux États-Unis. Les fournisseurs suivent une politique de rétention zéro et n'utilisent pas vos données pour l'entraînement des modèles, avec les", - "zen.privacy.exceptionsLink": "exceptions suivantes", - - "go.title": "OpenCode Go | Modèles de code à faible coût pour tous", - "go.meta.description": - "Go commence à $5 pour le premier mois, puis 10 $/mois, avec des limites de requêtes généreuses sur 5 heures pour GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro et DeepSeek V4 Flash.", - "go.hero.title": "Modèles de code à faible coût pour tous", - "go.hero.body": - "Go apporte le codage agentique aux programmeurs du monde entier. Offrant des limites généreuses et un accès fiable aux modèles open source les plus capables, pour que vous puissiez construire avec des agents puissants sans vous soucier du coût ou de la disponibilité.", - - "go.cta.start": "S'abonner à Go", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "S'abonner à Go", - "go.cta.price": "10 $/mois", - "go.cta.promo": "$5 le premier mois", - "go.pricing.body": - "Utilisez-le avec n'importe quel agent. $5 le premier mois, puis 10 $/mois. Rechargez du crédit si nécessaire. Annulez à tout moment.", - "go.graph.free": "Gratuit", - "go.graph.freePill": "Big Pickle et modèles gratuits", - "go.graph.go": "Go", - "go.graph.label": "Requêtes par tranche de 5 heures", - "go.graph.usageLimits": "Limites d'utilisation", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "Requêtes par 5h : {{free}} vs {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "ex-PDG, Terminal Products", - "go.testimonials.dax.quoteAfter": "a changé ma vie, c'est vraiment une évidence.", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "ex-Fondateur, SEED, PM, Melt, Pop, Dapt, Cadmus, et ViewPoint", - "go.testimonials.jay.quoteBefore": "4 personnes sur 5 dans notre équipe adorent utiliser", - "go.testimonials.jay.quoteAfter": ".", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "ex-Hero, AWS", - "go.testimonials.adam.quoteBefore": "Je ne peux pas recommander", - "go.testimonials.adam.quoteAfter": "assez. Sérieusement, c'est vraiment bien.", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "ex-Directeur du Design, Laravel", - "go.testimonials.david.quoteBefore": "Avec", - "go.testimonials.david.quoteAfter": "je sais que tous les modèles sont testés et parfaits pour les agents de code.", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "ex-Stagiaire, Nvidia (4 fois)", - "go.testimonials.frank.quote": "J'aimerais être encore chez Nvidia.", - "go.problem.title": "Quel problème Go résout-il ?", - "go.problem.body": - "Nous nous efforçons d'apporter l'expérience OpenCode au plus grand nombre. OpenCode Go est un abonnement à faible coût : $5 pour le premier mois, puis 10 $/mois. Il offre des limites généreuses et un accès fiable aux modèles open source les plus performants.", - "go.problem.subtitle": " ", - "go.problem.item1": "Prix d'abonnement bas", - "go.problem.item2": "Limites généreuses et accès fiable", - "go.problem.item3": "Conçu pour autant de programmeurs que possible", - "go.problem.item4": - "Inclut GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro et DeepSeek V4 Flash", - "go.how.title": "Comment fonctionne Go", - "go.how.body": - "Go commence à $5 pour le premier mois, puis 10 $/mois. Vous pouvez l'utiliser avec OpenCode ou n'importe quel agent.", - "go.how.step1.title": "Créez un compte", - "go.how.step1.beforeLink": "suivez les", - "go.how.step1.link": "instructions de configuration", - "go.how.step2.title": "Abonnez-vous à Go", - "go.how.step2.link": "$5 le premier mois", - "go.how.step2.afterLink": "puis 10 $/mois avec des limites généreuses", - "go.how.step3.title": "Commencez à coder", - "go.how.step3.body": "avec un accès fiable aux modèles open source", - "go.privacy.title": "Votre vie privée est importante pour nous", - "go.privacy.body": - "Le plan est conçu principalement pour les utilisateurs internationaux, avec des modèles hébergés aux États-Unis, dans l'UE et à Singapour pour un accès mondial stable.", - "go.privacy.contactAfter": "si vous avez des questions.", - "go.privacy.beforeExceptions": - "Les modèles Go sont hébergés aux États-Unis. Les fournisseurs suivent une politique de rétention zéro et n'utilisent pas vos données pour l'entraînement des modèles, avec les", - "go.privacy.exceptionsLink": "exceptions suivantes", - "go.faq.q1": "Qu'est-ce que OpenCode Go ?", - "go.faq.a1": - "Go est un abonnement à faible coût qui vous donne un accès fiable à des modèles open source performants pour le codage agentique.", - "go.faq.q2": "Quels modèles Go inclut-il ?", - "go.faq.a2": "Go inclut les modèles ci-dessous, avec des limites généreuses et un accès fiable.", - "go.faq.q3": "Est-ce que Go est la même chose que Zen ?", - "go.faq.a3": - "Non. Zen est un paiement à l'utilisation, tandis que Go commence à $5 pour le premier mois, puis 10 $/mois, avec des limites généreuses et un accès fiable aux modèles open source GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro et DeepSeek V4 Flash.", - "go.faq.q4": "Combien coûte Go ?", - "go.faq.a4.p1.beforePricing": "Go coûte", - "go.faq.a4.p1.pricingLink": "$5 le premier mois", - "go.faq.a4.p1.afterPricing": "puis 10 $/mois avec des limites généreuses.", - "go.faq.a4.p2.beforeAccount": "Vous pouvez gérer votre abonnement dans votre", - "go.faq.a4.p2.accountLink": "compte", - "go.faq.a4.p3": "Annulez à tout moment.", - "go.faq.q5": "Et pour les données et la confidentialité ?", - "go.faq.a5.body": - "Le plan est conçu principalement pour les utilisateurs internationaux, avec des modèles hébergés aux États-Unis, dans l'UE et à Singapour pour un accès mondial stable. Nos fournisseurs suivent une politique de rétention zéro et n'utilisent pas vos données pour l'entraînement des modèles.", - "go.faq.a5.beforeExceptions": - "Les modèles Go sont hébergés aux États-Unis. Les fournisseurs suivent une politique de rétention zéro et n'utilisent pas vos données pour l'entraînement des modèles, avec les", - "go.faq.a5.exceptionsLink": "exceptions suivantes", - "go.faq.q6": "Puis-je recharger mon crédit ?", - "go.faq.a6": "Si vous avez besoin de plus d'utilisation, vous pouvez recharger du crédit dans votre compte.", - "go.faq.q7": "Puis-je annuler ?", - "go.faq.a7": "Oui, vous pouvez annuler à tout moment.", - "go.faq.q8": "Puis-je utiliser Go avec d'autres agents de code ?", - "go.faq.a8": - "Oui, vous pouvez utiliser Go avec n'importe quel agent. Suivez les instructions de configuration dans votre agent de code préféré.", - "go.faq.q9": "Quelle est la différence entre les modèles gratuits et Go ?", - "go.faq.a9": - "Les modèles gratuits incluent Big Pickle ainsi que des modèles promotionnels disponibles à ce moment-là, avec un quota de 200 requêtes/jour. Go inclut GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro et DeepSeek V4 Flash avec des quotas de requêtes plus élevés appliqués sur des fenêtres glissantes (5 heures, hebdomadaire et mensuelle), à peu près équivalent à 12 $ par 5 heures, 30 $ par semaine et 60 $ par mois (le nombre réel de requêtes varie selon le modèle et l'utilisation).", - - "zen.api.error.rateLimitExceeded": "Limite de débit dépassée. Veuillez réessayer plus tard.", - "zen.api.error.modelNotSupported": "Modèle {{model}} non pris en charge", - "zen.api.error.modelFormatNotSupported": "Modèle {{model}} non pris en charge pour le format {{format}}", - "zen.api.error.noProviderAvailable": "Aucun fournisseur disponible", - "zen.api.error.providerNotSupported": "Fournisseur {{provider}} non pris en charge", - "zen.api.error.missingApiKey": "Clé API manquante.", - "zen.api.error.invalidApiKey": "Clé API invalide.", - "zen.api.error.subscriptionQuotaExceeded": "Quota d'abonnement dépassé. Réessayez dans {{retryIn}}.", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "Limite d'utilisation sur 5 heures atteinte. Réinitialisation dans {{retryIn}}. Pour continuer à utiliser ce modèle dès maintenant, activez l'utilisation depuis votre solde disponible : {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "Limite d'utilisation hebdomadaire atteinte. Réinitialisation dans {{retryIn}}. Pour continuer à utiliser ce modèle dès maintenant, activez l'utilisation depuis votre solde disponible : {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "Limite d'utilisation mensuelle atteinte. Réinitialisation dans {{retryIn}}. Pour continuer à utiliser ce modèle dès maintenant, activez l'utilisation depuis votre solde disponible : {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "Aucune méthode de paiement. Ajoutez une méthode de paiement ici : {{billingUrl}}", - "zen.api.error.insufficientBalance": "Solde insuffisant. Gérez votre facturation ici : {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "Votre espace de travail a atteint sa limite de dépense mensuelle de {{amount}} $. Gérez vos limites ici : {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "Vous avez atteint votre limite de dépense mensuelle de {{amount}} $. Gérez vos limites ici : {{membersUrl}}", - "zen.api.error.modelDisabled": "Le modèle est désactivé", - "zen.api.error.regionNotAllowed": - "Ce modèle est hébergé en Chine. Si vous souhaitez utiliser ce modèle, activez-le dans vos paramètres : {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "La promotion gratuite de {{model}} est terminée. Vous pouvez continuer à utiliser le modèle en vous abonnant à OpenCode Go - {{link}}", - - "black.meta.title": "OpenCode Black | Accédez aux meilleurs modèles de code au monde", - "black.meta.description": "Accédez à Claude, GPT, Gemini et plus avec les forfaits d'abonnement OpenCode Black.", - "black.hero.title": "Accédez aux meilleurs modèles de code au monde", - "black.hero.subtitle": "Y compris Claude, GPT, Gemini et plus", - "black.title": "OpenCode Black | Tarification", - "black.paused": "L'inscription au plan Black est temporairement suspendue.", - "black.plan.icon20": "Forfait Black 20", - "black.plan.icon100": "Forfait Black 100", - "black.plan.icon200": "Forfait Black 200", - "black.plan.multiplier100": "5x plus d'utilisation que Black 20", - "black.plan.multiplier200": "20x plus d'utilisation que Black 20", - "black.price.perMonth": "par mois", - "black.price.perPersonBilledMonthly": "par personne facturé mensuellement", - "black.terms.1": "Votre abonnement ne commencera pas immédiatement", - "black.terms.2": "Vous serez ajouté à la liste d'attente et activé bientôt", - "black.terms.3": "Votre carte ne sera débitée que lorsque votre abonnement sera activé", - "black.terms.4": - "Des limites d'utilisation s'appliquent, une utilisation fortement automatisée peut atteindre les limites plus tôt", - "black.terms.5": "Les abonnements sont pour les individus, contactez Enterprise pour les équipes", - "black.terms.6": "Les limites peuvent être ajustées et les forfaits peuvent être interrompus à l'avenir", - "black.terms.7": "Annulez votre abonnement à tout moment", - "black.action.continue": "Continuer", - "black.finePrint.beforeTerms": "Les prix affichés n'incluent pas les taxes applicables", - "black.finePrint.terms": "Conditions d'utilisation", - "black.workspace.title": "OpenCode Black | Sélectionner un espace de travail", - "black.workspace.selectPlan": "Sélectionnez un espace de travail pour ce forfait", - "black.workspace.name": "Espace de travail {{n}}", - "black.subscribe.title": "S'abonner à OpenCode Black", - "black.subscribe.paymentMethod": "Méthode de paiement", - "black.subscribe.loadingPaymentForm": "Chargement du formulaire de paiement...", - "black.subscribe.selectWorkspaceToContinue": "Sélectionnez un espace de travail pour continuer", - "black.subscribe.failurePrefix": "Oh oh !", - "black.subscribe.error.generic": "Une erreur est survenue", - "black.subscribe.error.invalidPlan": "Forfait invalide", - "black.subscribe.error.workspaceRequired": "L'ID de l'espace de travail est requis", - "black.subscribe.error.alreadySubscribed": "Cet espace de travail a déjà un abonnement", - "black.subscribe.processing": "Traitement...", - "black.subscribe.submit": "S'abonner ${{plan}}", - "black.subscribe.form.chargeNotice": "Vous ne serez débité que lorsque votre abonnement sera activé", - "black.subscribe.success.title": "Vous êtes sur la liste d'attente OpenCode Black", - "black.subscribe.success.subscriptionPlan": "Forfait d'abonnement", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "Montant", - "black.subscribe.success.amountValue": "{{plan}} $ par mois", - "black.subscribe.success.paymentMethod": "Méthode de paiement", - "black.subscribe.success.dateJoined": "Date d'inscription", - "black.subscribe.success.chargeNotice": "Votre carte sera débitée lorsque votre abonnement sera activé", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "Utilisation", - "workspace.nav.apiKeys": "Clés API", - "workspace.nav.members": "Membres", - "workspace.nav.billing": "Facturation", - "workspace.nav.settings": "Paramètres", - - "workspace.home.banner.beforeLink": "Modèles optimisés fiables pour les agents de code.", - "workspace.lite.banner.beforeLink": "Modèles de code à faible coût pour tous.", - "workspace.home.billing.loading": "Chargement...", - "workspace.home.billing.enable": "Activer la facturation", - "workspace.home.billing.currentBalance": "Solde actuel", - - "workspace.newUser.feature.tested.title": "Modèles testés et vérifiés", - "workspace.newUser.feature.tested.body": - "Nous avons benchmarké et testé des modèles spécifiquement pour les agents de code afin de garantir les meilleures performances.", - "workspace.newUser.feature.quality.title": "La plus haute qualité", - "workspace.newUser.feature.quality.body": - "Accédez à des modèles configurés pour des performances optimales - pas de rétrogradation ni de routage vers des fournisseurs moins chers.", - "workspace.newUser.feature.lockin.title": "Pas de verrouillage", - "workspace.newUser.feature.lockin.body": - "Utilisez Zen avec n'importe quel agent de code et continuez à utiliser d'autres fournisseurs avec OpenCode quand vous le souhaitez.", - "workspace.newUser.copyApiKey": "Copier la clé API", - "workspace.newUser.copyKey": "Copier la clé", - "workspace.newUser.copied": "Copié !", - "workspace.newUser.step.enableBilling": "Activer la facturation", - "workspace.newUser.step.login.before": "Exécuter", - "workspace.newUser.step.login.after": "et sélectionnez OpenCode", - "workspace.newUser.step.pasteKey": "Collez votre clé API", - "workspace.newUser.step.models.before": "Démarrez OpenCode et exécutez", - "workspace.newUser.step.models.after": "pour sélectionner un modèle", - - "workspace.models.title": "Modèles", - "workspace.models.subtitle.beforeLink": - "Gérez les modèles auxquels les membres de l'espace de travail peuvent accéder.", - "workspace.models.table.model": "Modèle", - "workspace.models.table.enabled": "Activé", - - "workspace.providers.title": "Apportez votre propre clé", - "workspace.providers.subtitle": "Configurez vos propres clés API auprès des fournisseurs d'IA.", - "workspace.providers.placeholder": "Entrez la clé API {{provider}} ({{prefix}}...)", - "workspace.providers.configure": "Configurer", - "workspace.providers.edit": "Modifier", - "workspace.providers.delete": "Supprimer", - "workspace.providers.saving": "Enregistrement...", - "workspace.providers.save": "Enregistrer", - "workspace.providers.table.provider": "Fournisseur", - "workspace.providers.table.apiKey": "Clé API", - - "workspace.usage.title": "Historique d'utilisation", - "workspace.usage.subtitle": "Utilisation récente de l'API et coûts.", - "workspace.usage.empty": "Faites votre premier appel API pour commencer.", - "workspace.usage.table.date": "Date", - "workspace.usage.table.model": "Modèle", - "workspace.usage.table.input": "Entrée", - "workspace.usage.table.output": "Sortie", - "workspace.usage.table.cost": "Coût", - "workspace.usage.table.session": "Session", - "workspace.usage.breakdown.input": "Entrée", - "workspace.usage.breakdown.cacheRead": "Lecture cache", - "workspace.usage.breakdown.cacheWrite": "Écriture cache", - "workspace.usage.breakdown.output": "Sortie", - "workspace.usage.breakdown.reasoning": "Raisonnement", - "workspace.usage.subscription": "Black ({{amount}} $)", - "workspace.usage.lite": "Go ({{amount}} $)", - "workspace.usage.byok": "BYOK ({{amount}} $)", - - "workspace.cost.title": "Coût", - "workspace.cost.subtitle": "Coûts d'utilisation répartis par modèle.", - "workspace.cost.allModels": "Tous les modèles", - "workspace.cost.allKeys": "Toutes les clés", - "workspace.cost.deletedSuffix": "(supprimé)", - "workspace.cost.empty": "Aucune donnée d'utilisation disponible pour la période sélectionnée.", - "workspace.cost.subscriptionShort": "abo", - - "workspace.keys.title": "Clés API", - "workspace.keys.subtitle": "Gérez vos clés API pour accéder aux services OpenCode.", - "workspace.keys.create": "Créer une clé API", - "workspace.keys.placeholder": "Entrez le nom de la clé", - "workspace.keys.empty": "Créer une clé API OpenCode Gateway", - "workspace.keys.table.name": "Nom", - "workspace.keys.table.key": "Clé", - "workspace.keys.table.createdBy": "Créé par", - "workspace.keys.table.lastUsed": "Dernière utilisation", - "workspace.keys.copyApiKey": "Copier la clé API", - "workspace.keys.delete": "Supprimer", - - "workspace.members.title": "Membres", - "workspace.members.subtitle": "Gérez les membres de l'espace de travail et leurs autorisations.", - "workspace.members.invite": "Inviter un membre", - "workspace.members.inviting": "Invitation en cours...", - "workspace.members.beta.beforeLink": "Les espaces de travail sont gratuits pour les équipes pendant la version bêta.", - "workspace.members.form.invitee": "Invité", - "workspace.members.form.emailPlaceholder": "Entrez l'e-mail", - "workspace.members.form.role": "Rôle", - "workspace.members.form.monthlyLimit": "Limite de dépense mensuelle", - "workspace.members.noLimit": "Aucune limite", - "workspace.members.noLimitLowercase": "pas de limite", - "workspace.members.invited": "invité", - "workspace.members.edit": "Modifier", - "workspace.members.delete": "Supprimer", - "workspace.members.saving": "Enregistrement...", - "workspace.members.save": "Enregistrer", - "workspace.members.table.email": "E-mail", - "workspace.members.table.role": "Rôle", - "workspace.members.table.monthLimit": "Limite mensuelle", - "workspace.members.role.admin": "Administrateur", - "workspace.members.role.adminDescription": "Peut gérer les modèles, les membres et la facturation", - "workspace.members.role.member": "Membre", - "workspace.members.role.memberDescription": "Ne peut générer que des clés API pour lui-même", - - "workspace.settings.title": "Paramètres", - "workspace.settings.subtitle": "Mettez à jour le nom et les préférences de votre espace de travail.", - "workspace.settings.workspaceName": "Nom de l'espace de travail", - "workspace.settings.defaultName": "Défaut", - "workspace.settings.updating": "Mise à jour...", - "workspace.settings.save": "Enregistrer", - "workspace.settings.edit": "Modifier", - - "workspace.billing.title": "Facturation", - "workspace.billing.subtitle.beforeLink": "Gérer les méthodes de paiement.", - "workspace.billing.contactUs": "Contactez-nous", - "workspace.billing.subtitle.afterLink": "si vous avez des questions.", - "workspace.billing.currentBalance": "Solde actuel", - "workspace.billing.add": "Ajouter $", - "workspace.billing.enterAmount": "Saisir le montant", - "workspace.billing.loading": "Chargement...", - "workspace.billing.addAction": "Ajouter", - "workspace.billing.addBalance": "Ajouter un solde", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "Lié à Stripe", - "workspace.billing.manage": "Gérer", - "workspace.billing.enable": "Activer la facturation", - - "workspace.monthlyLimit.title": "Limite mensuelle", - "workspace.monthlyLimit.subtitle": "Définissez une limite d'utilisation mensuelle pour votre compte.", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "Définition...", - "workspace.monthlyLimit.set": "Défini", - "workspace.monthlyLimit.edit": "Modifier la limite", - "workspace.monthlyLimit.noLimit": "Aucune limite d'utilisation définie.", - "workspace.monthlyLimit.currentUsage.beforeMonth": "L'utilisation actuelle pour", - "workspace.monthlyLimit.currentUsage.beforeAmount": "est de", - - "workspace.redeem.title": "Utiliser un coupon", - "workspace.redeem.subtitle": "Utilisez un code promo pour obtenir du crédit ou des avantages.", - "workspace.redeem.placeholder": "Saisissez le code promo", - "workspace.redeem.redeem": "Utiliser", - "workspace.redeem.redeeming": "Utilisation...", - "workspace.redeem.success": "Coupon utilisé avec succès.", - - "workspace.reload.title": "Rechargement automatique", - "workspace.reload.disabled.before": "Le rechargement automatique est", - "workspace.reload.disabled.state": "désactivé", - "workspace.reload.disabled.after": "Activer le rechargement automatique lorsque le solde est faible.", - "workspace.reload.enabled.before": "Le rechargement automatique est", - "workspace.reload.enabled.state": "activé", - "workspace.reload.enabled.middle": "Nous rechargerons", - "workspace.reload.processingFee": "frais de traitement", - "workspace.reload.enabled.after": "quand le solde atteint", - "workspace.reload.edit": "Modifier", - "workspace.reload.enable": "Activer", - "workspace.reload.enableAutoReload": "Activer le rechargement automatique", - "workspace.reload.reloadAmount": "Recharger $", - "workspace.reload.whenBalanceReaches": "Lorsque le solde atteint $", - "workspace.reload.saving": "Enregistrement...", - "workspace.reload.save": "Enregistrer", - "workspace.reload.failedAt": "Le rechargement a échoué à", - "workspace.reload.reason": "Raison :", - "workspace.reload.updatePaymentMethod": "Veuillez mettre à jour votre méthode de paiement et réessayer.", - "workspace.reload.retrying": "Nouvelle tentative...", - "workspace.reload.retry": "Réessayer", - "workspace.reload.error.paymentFailed": "Échec du paiement.", - - "workspace.payments.title": "Historique des paiements", - "workspace.payments.subtitle": "Transactions de paiement récentes.", - "workspace.payments.table.date": "Date", - "workspace.payments.table.paymentId": "ID de paiement", - "workspace.payments.table.amount": "Montant", - "workspace.payments.table.receipt": "Reçu", - "workspace.payments.type.credit": "crédit", - "workspace.payments.type.subscription": "abonnement", - "workspace.payments.view": "Voir", - - "workspace.black.loading": "Chargement...", - "workspace.black.time.day": "jour", - "workspace.black.time.days": "jours", - "workspace.black.time.hour": "heure", - "workspace.black.time.hours": "heures", - "workspace.black.time.minute": "minute", - "workspace.black.time.minutes": "minutes", - "workspace.black.time.fewSeconds": "quelques secondes", - "workspace.black.subscription.title": "Abonnement", - "workspace.black.subscription.message": "Vous êtes abonné à OpenCode Black pour {{plan}} $ par mois.", - "workspace.black.subscription.manage": "Gérer l'abonnement", - "workspace.black.subscription.rollingUsage": "Utilisation 5 heures", - "workspace.black.subscription.weeklyUsage": "Utilisation hebdomadaire", - "workspace.black.subscription.resetsIn": "Réinitialisation dans", - "workspace.black.subscription.useBalance": - "Utilisez votre solde disponible après avoir atteint les limites d'utilisation", - "workspace.black.waitlist.title": "Liste d'attente", - "workspace.black.waitlist.joined": - "Vous êtes sur la liste d'attente pour le forfait OpenCode Black à {{plan}} $ par mois.", - "workspace.black.waitlist.ready": - "Nous sommes prêts à vous inscrire au forfait OpenCode Black à {{plan}} $ par mois.", - "workspace.black.waitlist.leave": "Quitter la liste d'attente", - "workspace.black.waitlist.leaving": "Sortie...", - "workspace.black.waitlist.left": "Quitté", - "workspace.black.waitlist.enroll": "S'inscrire", - "workspace.black.waitlist.enrolling": "Inscription...", - "workspace.black.waitlist.enrolled": "Inscrit", - "workspace.black.waitlist.enrollNote": - "Lorsque vous cliquez sur S'inscrire, votre abonnement démarre immédiatement et votre carte sera débitée.", - - "workspace.lite.loading": "Chargement...", - "workspace.lite.time.day": "jour", - "workspace.lite.time.days": "jours", - "workspace.lite.time.hour": "heure", - "workspace.lite.time.hours": "heures", - "workspace.lite.time.minute": "minute", - "workspace.lite.time.minutes": "minutes", - "workspace.lite.time.fewSeconds": "quelques secondes", - "workspace.lite.subscription.message": "Vous êtes abonné à OpenCode Go.", - "workspace.lite.subscription.manage": "Gérer l'abonnement", - "workspace.lite.subscription.rollingUsage": "Utilisation glissante", - "workspace.lite.subscription.weeklyUsage": "Utilisation hebdomadaire", - "workspace.lite.subscription.monthlyUsage": "Utilisation mensuelle", - "workspace.lite.subscription.resetsIn": "Réinitialisation dans", - "workspace.lite.subscription.useBalance": - "Utilisez votre solde disponible après avoir atteint les limites d'utilisation", - "workspace.lite.subscription.selectProvider": - 'Sélectionnez "OpenCode Go" comme fournisseur dans votre configuration opencode pour utiliser les modèles Go.', - "workspace.lite.providers.title": "Fournisseurs", - "workspace.lite.providers.description": "Contrôlez les fournisseurs utilisés pour le routage.", - "workspace.lite.providers.useChina": "Activer les modèles hébergés en Chine", - "workspace.lite.black.message": - "Vous êtes actuellement abonné à OpenCode Black ou sur liste d'attente. Veuillez d'abord vous désabonner si vous souhaitez passer à Go.", - "workspace.lite.other.message": - "Un autre membre de cet espace de travail est déjà abonné à OpenCode Go. Un seul membre par espace de travail peut s'abonner.", - "workspace.lite.promo.description": - "OpenCode Go commence à {{price}}, puis 10 $/mois, et offre un accès fiable aux modèles de code ouverts populaires avec des limites d'utilisation généreuses.", - "workspace.lite.promo.price": "$5 le premier mois", - "workspace.lite.promo.modelsTitle": "Ce qui est inclus", - "workspace.lite.promo.footer": - "Le plan est conçu principalement pour les utilisateurs internationaux, avec des modèles hébergés aux États-Unis, dans l'UE et à Singapour pour un accès mondial stable. Les tarifs et les limites d'utilisation peuvent changer à mesure que nous apprenons des premières utilisations et des commentaires.", - "workspace.lite.promo.subscribe": "S'abonner à Go", - "workspace.lite.promo.subscribing": "Redirection...", - "workspace.lite.promo.otherMethods": "Autres méthodes de paiement", - "workspace.lite.promo.selectMethod": "Sélectionner la méthode de paiement", - - "workspace.referral.copyLink": "Copier le lien", - "workspace.referral.copied": "Copié", - "workspace.referral.overview.title": "Inviter des amis", - "workspace.referral.overview.subtitle": "Gagnez $5 lorsqu'un ami s'abonne. Il recevra également $5.", - "workspace.referral.instructions.share": "Partagez votre lien de parrainage", - "workspace.referral.instructions.subscribe": "Votre ami rejoint et s'abonne à Go", - "workspace.referral.instructions.claim": - "Vous recevez tous les deux un crédit d'utilisation de $5 à appliquer à vos limites d'utilisation Go", - "workspace.referral.rewards.title": "Récompenses de parrainage", - "workspace.referral.rewards.description": - "Utilisez les crédits de parrainage disponibles pour votre utilisation de Go.", - "workspace.referral.rewards.subtitle": "{{applied}} / {{total}} récompenses utilisées.", - "workspace.referral.rewards.empty": "Aucune récompense de parrainage pour l'instant.", - "workspace.referral.table.reward": "Récompense", - "workspace.referral.table.referral": "Description", - "workspace.referral.table.date": "Date", - "workspace.referral.reward.description.inviter": "Vous avez invité {{email}}", - "workspace.referral.reward.description.invitee": "Invité par {{email}}", - "workspace.referral.reward.action.subscribeUnlock": "Abonnez-vous pour débloquer", - "workspace.referral.reward.action.view": "Voir la récompense", - "workspace.referral.reward.action.applied": "Récompense utilisée", - "workspace.referral.reward.source.pendingInviter": "En attente de son abonnement", - "workspace.referral.reward.source.pendingInvitee": "Abonnez-vous pour débloquer la récompense", - "workspace.referral.reward.source.available": "Récompense prête à utiliser", - "workspace.referral.reward.source.applied": "Récompense utilisée", - "workspace.referral.reward.status.applied": "Récompense utilisée", - "workspace.referral.reward.status.pendingInviter": "Abonnez-vous pour débloquer", - "workspace.referral.reward.status.pendingInvitee": "Abonnez-vous pour débloquer", - "workspace.referral.apply.noGo": "Abonnez-vous pour débloquer", - "workspace.referral.apply.preview": "Voir la récompense", - "workspace.referral.apply.action": "Utiliser", - "workspace.referral.apply.confirmTitle": "Utiliser la récompense", - "workspace.referral.apply.confirmBody": "Utilisez {{amount}} pour réduire l'utilisation actuelle de ce workspace.", - "workspace.referral.apply.confirmAction": "Utiliser", - - "download.title": "OpenCode | Téléchargement", - "download.meta.description": "Téléchargez OpenCode pour macOS, Windows et Linux", - "download.hero.title": "Télécharger OpenCode", - "download.hero.subtitle": "Disponible en bêta pour macOS, Windows et Linux", - "download.hero.button": "Télécharger pour {{os}}", - "download.section.terminal": "OpenCode Terminal", - "download.section.desktop": "OpenCode Desktop (Bêta)", - "download.section.extensions": "Extensions OpenCode", - "download.section.integrations": "Intégrations OpenCode", - "download.action.download": "Télécharger", - "download.action.install": "Installer", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "Pas forcément, mais probablement. Vous aurez besoin d'un abonnement IA si vous voulez connecter OpenCode à un fournisseur payant, mais vous pouvez travailler avec des", - "download.faq.a3.localLink": "modèles locaux", - "download.faq.a3.afterLocal.beforeZen": "gratuitement. Même si nous encourageons les utilisateurs à utiliser", - "download.faq.a3.afterZen": - ", OpenCode fonctionne avec tous les fournisseurs populaires comme OpenAI, Anthropic, xAI, etc.", - - "download.faq.a5.p1": "OpenCode est 100% gratuit à utiliser.", - "download.faq.a5.p2.beforeZen": - "Les coûts supplémentaires viendront de votre abonnement à un fournisseur de modèle. Même si OpenCode fonctionne avec n'importe quel fournisseur, nous recommandons d'utiliser", - "download.faq.a5.p2.afterZen": ".", - - "download.faq.a6.p1": - "Vos données et informations ne sont stockées que lorsque vous créez des liens partageables dans OpenCode.", - "download.faq.a6.p2.beforeShare": "En savoir plus sur", - "download.faq.a6.shareLink": "les pages de partage", - - "enterprise.title": "OpenCode | Solutions entreprise pour votre organisation", - "enterprise.meta.description": "Contactez OpenCode pour des solutions entreprise", - "enterprise.hero.title": "Votre code vous appartient", - "enterprise.hero.body1": - "OpenCode fonctionne de manière sécurisée au sein de votre organisation, sans stocker de données ni de contexte, et sans restrictions de licence ni revendications de propriété. Démarrez un essai avec votre équipe, puis déployez-le dans votre organisation en l'intégrant à votre SSO et à votre passerelle IA interne.", - "enterprise.hero.body2": "Dites-nous comment nous pouvons vous aider.", - "enterprise.form.name.label": "Nom complet", - "enterprise.form.name.placeholder": "Jeff Bezos", - "enterprise.form.role.label": "Poste", - "enterprise.form.role.placeholder": "Président exécutif", - "enterprise.form.company.label": "Entreprise", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "E-mail professionnel", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "Téléphone", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "Quel problème essayez-vous de résoudre ?", - "enterprise.form.message.placeholder": "Nous avons besoin d'aide pour...", - "enterprise.form.send": "Envoyer", - "enterprise.form.sending": "Envoi...", - "enterprise.form.success": "Message envoyé, nous vous contacterons bientôt.", - "enterprise.form.success.submitted": "Formulaire soumis avec succès.", - "enterprise.form.error.allFieldsRequired": "Tous les champs sont requis.", - "enterprise.form.error.invalidEmailFormat": "Format d'e-mail invalide.", - "enterprise.form.error.internalServer": "Erreur interne du serveur.", - "enterprise.faq.title": "FAQ", - "enterprise.faq.q1": "Qu'est-ce que OpenCode Enterprise ?", - "enterprise.faq.a1": - "OpenCode Enterprise s'adresse aux organisations qui veulent s'assurer que leur code et leurs données ne quittent jamais leur infrastructure. Cela est possible grâce à une configuration centralisée qui s'intègre à votre SSO et à votre passerelle IA interne.", - "enterprise.faq.q2": "Comment démarrer avec OpenCode Enterprise ?", - "enterprise.faq.a2": - "Commencez simplement par un essai interne avec votre équipe. Par défaut, OpenCode ne stocke pas votre code ni vos données de contexte, ce qui facilite la prise en main. Ensuite, contactez-nous pour discuter des tarifs et des options de mise en œuvre.", - "enterprise.faq.q3": "Comment fonctionne la tarification entreprise ?", - "enterprise.faq.a3": - "Nous proposons une tarification entreprise par siège. Si vous avez votre propre passerelle LLM, nous ne facturons pas les tokens utilisés. Pour plus de détails, contactez-nous pour un devis sur mesure en fonction des besoins de votre organisation.", - "enterprise.faq.q4": "Mes données sont-elles sécurisées avec OpenCode Enterprise ?", - "enterprise.faq.a4": - "Oui. OpenCode ne stocke pas votre code ni vos données de contexte. Tout le traitement se fait localement ou via des appels API directs vers votre fournisseur d'IA. Avec une configuration centralisée et une intégration SSO, vos données restent sécurisées au sein de l'infrastructure de votre organisation.", - - "brand.title": "OpenCode | Marque", - "brand.meta.description": "Guide de marque OpenCode", - "brand.heading": "Guide de marque", - "brand.subtitle": "Ressources et éléments pour vous aider à travailler avec la marque OpenCode.", - "brand.downloadAll": "Télécharger tous les assets", - - "changelog.title": "OpenCode | Changelog", - "changelog.meta.description": "Notes de version et changelog d'OpenCode", - "changelog.hero.title": "Changelog", - "changelog.hero.subtitle": "Nouvelles mises à jour et améliorations pour OpenCode", - "changelog.empty": "Aucune entrée de changelog trouvée.", - "changelog.viewJson": "Voir le JSON", - - "bench.list.title": "Benchmark", - "bench.list.heading": "Benchmarks", - "bench.list.table.agent": "Agent", - "bench.list.table.model": "Modèle", - "bench.list.table.score": "Score", - - "bench.detail.title": "Benchmark - {{task}}", - "bench.detail.notFound": "Tâche introuvable", - "bench.detail.na": "N/A", - "bench.detail.labels.agent": "Agent", - "bench.detail.labels.model": "Modèle", - "bench.detail.labels.task": "Tâche", - "bench.detail.labels.repo": "Dépôt", - "bench.detail.labels.from": "De", - "bench.detail.labels.to": "À", - "bench.detail.labels.prompt": "Prompt", - "bench.detail.labels.commit": "Commit", - "bench.detail.labels.averageDuration": "Durée moyenne", - "bench.detail.labels.averageScore": "Score moyen", - "bench.detail.labels.averageCost": "Coût moyen", - "bench.detail.labels.summary": "Résumé", - "bench.detail.labels.runs": "Exécutions", - "bench.detail.labels.score": "Score", - "bench.detail.labels.base": "Base", - "bench.detail.labels.penalty": "Pénalité", - "bench.detail.labels.weight": "poids", - "bench.detail.table.run": "Exécution", - "bench.detail.table.score": "Score (Base - Pénalité)", - "bench.detail.table.cost": "Coût", - "bench.detail.table.duration": "Durée", - "bench.detail.run.title": "Exécution {{n}}", - "bench.detail.rawJson": "JSON brut", - "bench.submission.error.allFieldsRequired": "Tous les champs sont requis.", -} satisfies Dict diff --git a/packages/console/app/src/i18n/index.ts b/packages/console/app/src/i18n/index.ts index a855ccfa3e..6b97d22dfc 100644 --- a/packages/console/app/src/i18n/index.ts +++ b/packages/console/app/src/i18n/index.ts @@ -1,22 +1,6 @@ import type { Locale } from "~/lib/language" import { dict as en } from "~/i18n/en" -import { dict as zh } from "~/i18n/zh" -import { dict as zht } from "~/i18n/zht" -import { dict as ko } from "~/i18n/ko" -import { dict as de } from "~/i18n/de" import { dict as es } from "~/i18n/es" -import { dict as fr } from "~/i18n/fr" -import { dict as it } from "~/i18n/it" -import { dict as da } from "~/i18n/da" -import { dict as ja } from "~/i18n/ja" -import { dict as pl } from "~/i18n/pl" -import { dict as ru } from "~/i18n/ru" -import { dict as uk } from "~/i18n/uk" -import { dict as ar } from "~/i18n/ar" -import { dict as no } from "~/i18n/no" -import { dict as br } from "~/i18n/br" -import { dict as th } from "~/i18n/th" -import { dict as tr } from "~/i18n/tr" export type Key = keyof typeof en export type Dict = Record @@ -25,21 +9,5 @@ const base = en satisfies Dict export function i18n(locale: Locale): Dict { if (locale === "en") return base - if (locale === "zh") return { ...base, ...zh } - if (locale === "zht") return { ...base, ...zht } - if (locale === "ko") return { ...base, ...ko } - if (locale === "de") return { ...base, ...de } - if (locale === "es") return { ...base, ...es } - if (locale === "fr") return { ...base, ...fr } - if (locale === "it") return { ...base, ...it } - if (locale === "da") return { ...base, ...da } - if (locale === "ja") return { ...base, ...ja } - if (locale === "pl") return { ...base, ...pl } - if (locale === "ru") return { ...base, ...ru } - if (locale === "uk") return { ...base, ...uk } - if (locale === "ar") return { ...base, ...ar } - if (locale === "no") return { ...base, ...no } - if (locale === "br") return { ...base, ...br } - if (locale === "th") return { ...base, ...th } - return { ...base, ...tr } + return { ...base, ...es } } diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts deleted file mode 100644 index bd080c44d3..0000000000 --- a/packages/console/app/src/i18n/it.ts +++ /dev/null @@ -1,828 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "Documentazione", - "nav.changelog": "Changelog", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "Enterprise", - "nav.zen": "Zen", - "nav.login": "Accedi", - "nav.free": "Scarica", - "nav.home": "Home", - "nav.openMenu": "Apri menu", - "nav.getStartedFree": "Inizia gratis", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "Copia il logo come SVG", - "nav.context.copyWordmark": "Copia il wordmark come SVG", - "nav.context.brandAssets": "Asset del brand", - - "footer.github": "GitHub", - "footer.docs": "Documentazione", - "footer.changelog": "Changelog", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "Brand", - "legal.privacy": "Privacy", - "legal.terms": "Termini", - - "email.title": "Sii il primo a sapere quando rilasciamo nuovi prodotti", - "email.subtitle": "Iscriviti alla waitlist per l'accesso anticipato.", - "email.placeholder": "Indirizzo email", - "email.subscribe": "Iscriviti", - "email.success": "Quasi fatto, controlla la posta in arrivo e conferma il tuo indirizzo email", - - "notFound.title": "Non trovato | opencode", - "notFound.heading": "404 - Pagina non trovata", - "notFound.home": "Home", - "notFound.docs": "Documentazione", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "logo chiaro di opencode", - "notFound.logoDarkAlt": "logo scuro di opencode", - - "user.logout": "Esci", - - "auth.callback.error.codeMissing": "Nessun codice di autorizzazione trovato.", - - "workspace.select": "Seleziona workspace", - "workspace.createNew": "+ Crea nuovo workspace", - "workspace.modal.title": "Crea nuovo workspace", - "workspace.modal.placeholder": "Inserisci il nome del workspace", - - "common.cancel": "Annulla", - "common.creating": "Creazione...", - "common.create": "Crea", - - "common.videoUnsupported": "Il tuo browser non supporta il tag video.", - "common.figure": "Fig {{n}}.", - "common.faq": "FAQ", - "common.learnMore": "Scopri di più", - - "error.invalidPlan": "Piano non valido", - "error.workspaceRequired": "ID Workspace richiesto", - "error.alreadySubscribed": "Questo workspace ha già un abbonamento", - "error.limitRequired": "Il limite è richiesto.", - "error.monthlyLimitInvalid": "Imposta un limite mensile valido.", - "error.workspaceNameRequired": "Il nome del workspace è richiesto.", - "error.nameTooLong": "Il nome deve essere di 255 caratteri o meno.", - "error.emailRequired": "L'email è richiesta", - "error.roleRequired": "Il ruolo è richiesto", - "error.idRequired": "L'ID è richiesto", - "error.nameRequired": "Il nome è richiesto", - "error.providerRequired": "Il provider è richiesto", - "error.apiKeyRequired": "La chiave API è richiesta", - "error.modelRequired": "Il modello è richiesto", - "error.reloadAmountMin": "L'importo della ricarica deve essere almeno ${{amount}}", - "error.reloadTriggerMin": "La soglia del saldo deve essere almeno ${{amount}}", - - "app.meta.description": "OpenCode - L'agente di programmazione open source.", - - "home.title": "OpenCode | L'agente di coding IA open source", - - "temp.title": "opencode | Agente di coding IA costruito per il terminale", - "temp.hero.title": "L'agente di coding IA costruito per il terminale", - "temp.zen": "opencode zen", - "temp.getStarted": "Inizia", - "temp.feature.native.title": "TUI Nativa", - "temp.feature.native.body": "Un'interfaccia terminale reattiva, nativa e personalizzabile", - "temp.feature.zen.beforeLink": "Una", - "temp.feature.zen.link": "lista curata di modelli", - "temp.feature.zen.afterLink": "fornita da opencode", - "temp.feature.models.beforeLink": "Supporta 75+ provider LLM tramite", - "temp.feature.models.afterLink": ", inclusi modelli locali", - "temp.screenshot.caption": "OpenCode TUI con il tema tokyonight", - "temp.screenshot.alt": "OpenCode TUI con tema tokyonight", - "temp.logoLightAlt": "logo chiaro di opencode", - "temp.logoDarkAlt": "logo scuro di opencode", - - "home.banner.badge": "Nuovo", - "home.banner.text": "App desktop disponibile in beta", - "home.banner.platforms": "su macOS, Windows e Linux", - "home.banner.downloadNow": "Scarica ora", - "home.banner.downloadBetaNow": "Scarica ora la beta desktop", - - "home.hero.title": "L'agente di coding IA open source", - "home.hero.subtitle.a": "Modelli gratuiti inclusi o collega qualsiasi modello da qualsiasi provider,", - "home.hero.subtitle.b": "inclusi Claude, GPT, Gemini e altri.", - - "home.install.ariaLabel": "Opzioni di installazione", - - "home.what.title": "Che cos'è OpenCode?", - "home.what.body": "OpenCode è un agente open source che ti aiuta a scrivere codice nel terminale, IDE o desktop.", - "home.what.lsp.title": "LSP abilitato", - "home.what.lsp.body": "Carica automaticamente gli LSP giusti per il LLM", - "home.what.multiSession.title": "Multi-session", - "home.what.multiSession.body": "Avvia più agenti in parallelo sullo stesso progetto", - "home.what.shareLinks.title": "Link condivisi", - "home.what.shareLinks.body": "Condividi un link a qualsiasi sessione per riferimento o debug", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "Accedi con GitHub per usare il tuo account Copilot", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "Accedi con OpenAI per usare il tuo account ChatGPT Plus o Pro", - "home.what.anyModel.title": "Qualsiasi modello", - "home.what.anyModel.body": "75+ provider LLM tramite Models.dev, inclusi modelli locali", - "home.what.anyEditor.title": "Qualsiasi editor", - "home.what.anyEditor.body": "Disponibile come interfaccia terminale, app desktop ed estensione IDE", - "home.what.readDocs": "Leggi la doc", - - "home.growth.title": "L'agente di coding IA open source", - "home.growth.body": - "Con oltre {{stars}} stelle su GitHub, {{contributors}} contributori e oltre {{commits}} commit, OpenCode è usato e apprezzato da oltre {{monthlyUsers}} sviluppatori ogni mese.", - "home.growth.githubStars": "Stelle GitHub", - "home.growth.contributors": "Contributori", - "home.growth.monthlyDevs": "Devs mensili", - - "home.privacy.title": "Progettato per la privacy", - "home.privacy.body": - "OpenCode non archivia il tuo codice né i dati di contesto, così può operare in ambienti sensibili alla privacy.", - "home.privacy.learnMore": "Scopri di più su", - "home.privacy.link": "privacy", - - "home.faq.q1": "Che cos'è OpenCode?", - "home.faq.a1": - "OpenCode è un agente open source che ti aiuta a scrivere ed eseguire codice con qualsiasi modello di IA. È disponibile come interfaccia terminale, app desktop o estensione IDE.", - "home.faq.q2": "Come uso OpenCode?", - "home.faq.a2.before": "Il modo più semplice per iniziare è leggere l'", - "home.faq.a2.link": "introduzione", - "home.faq.q3": "Mi servono abbonamenti IA extra per usare OpenCode?", - "home.faq.a3.p1": - "Non necessariamente: OpenCode include un set di modelli gratuiti che puoi usare senza creare un account.", - "home.faq.a3.p2.beforeZen": "Inoltre, puoi usare modelli popolari per il coding creando un account", - "home.faq.a3.p2.afterZen": ".", - "home.faq.a3.p3": - "Anche se incoraggiamo gli utenti a usare Zen, OpenCode funziona anche con i provider più diffusi come OpenAI, Anthropic, xAI, ecc.", - "home.faq.a3.p4.beforeLocal": "Puoi anche collegare i tuoi", - "home.faq.a3.p4.localLink": "modelli locali", - "home.faq.q4": "Posso usare i miei abbonamenti IA esistenti con OpenCode?", - "home.faq.a4.p1": - "Sì, OpenCode supporta gli abbonamenti dei principali provider. Puoi usare Claude Pro/Max, ChatGPT Plus/Pro o GitHub Copilot.", - "home.faq.q5": "Posso usare OpenCode solo nel terminale?", - "home.faq.a5.beforeDesktop": "Non più! OpenCode ora è disponibile come app per", - "home.faq.a5.desktop": "desktop", - "home.faq.a5.and": "e", - "home.faq.a5.web": "web", - "home.faq.q6": "Quanto costa OpenCode?", - "home.faq.a6": - "OpenCode è gratuito al 100%. Include anche un set di modelli gratuiti. Potrebbero esserci costi aggiuntivi se colleghi altri provider.", - "home.faq.q7": "E per quanto riguarda dati e privacy?", - "home.faq.a7.p1": - "I tuoi dati vengono archiviati solo quando usi i nostri modelli gratuiti o crei link condivisibili.", - "home.faq.a7.p2.beforeModels": "Scopri di più su", - "home.faq.a7.p2.modelsLink": "i nostri modelli", - "home.faq.a7.p2.and": "e", - "home.faq.a7.p2.shareLink": "le pagine di condivisione", - "home.faq.q8": "OpenCode è open source?", - "home.faq.a8.p1": "Sì, OpenCode è completamente open source. Il codice sorgente è pubblico su", - "home.faq.a8.p2": "sotto la", - "home.faq.a8.mitLicense": "Licenza MIT", - "home.faq.a8.p3": - ", il che significa che chiunque può usarlo, modificarlo o contribuire al suo sviluppo. Chiunque nella comunità può aprire issue, inviare pull request ed estendere le funzionalità.", - - "home.zenCta.title": "Accedi a modelli affidabili e ottimizzati per agenti di coding", - "home.zenCta.body": - "Zen ti dà accesso a una selezione di modelli di IA che OpenCode ha testato e benchmarkato specificamente per agenti di coding. Niente più preoccupazioni per prestazioni e qualità incoerenti tra provider: usa modelli validati che funzionano.", - "home.zenCta.link": "Scopri Zen", - - "zen.title": "OpenCode Zen | Una selezione curata di modelli affidabili e ottimizzati per agenti di coding", - "zen.hero.title": "Accedi a modelli affidabili e ottimizzati per agenti di coding", - "zen.hero.body": - "Zen ti dà accesso a una selezione di modelli di IA che OpenCode ha testato e benchmarkato specificamente per agenti di coding. Niente più preoccupazioni per prestazioni e qualità incoerenti tra provider: usa modelli validati che funzionano.", - - "zen.faq.q1": "Cos'è OpenCode Zen?", - "zen.faq.a1": - "Zen è un set curato di modelli di IA testati e benchmarkati per agenti di coding, creato dal team dietro OpenCode.", - "zen.faq.q2": "Cosa rende Zen più accurato?", - "zen.faq.a2": - "Zen offre solo modelli testati e benchmarkati specificamente per agenti di coding. Non useresti un coltello da burro per tagliare una bistecca; non usare modelli scarsi per programmare.", - "zen.faq.q3": "Zen è più economico?", - "zen.faq.a3": - "Zen non è a scopo di lucro. Zen ribalta i costi dei provider di modelli direttamente su di te. Più Zen viene usato, più OpenCode può negoziare tariffe migliori e passarle a te.", - "zen.faq.q4": "Quanto costa Zen?", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "addebita per richiesta", - "zen.faq.a4.p1.afterPricing": "senza ricarichi, quindi paghi esattamente ciò che addebita il provider del modello.", - "zen.faq.a4.p2.beforeAccount": "Il costo totale dipende dall'uso e puoi impostare limiti di spesa mensili nel tuo", - "zen.faq.a4.p2.accountLink": "account", - "zen.faq.a4.p3": - "Per coprire i costi, OpenCode aggiunge solo una piccola commissione di elaborazione del pagamento di $1.23 per ogni ricarica di saldo da $20.", - "zen.faq.q5": "E per quanto riguarda dati e privacy?", - "zen.faq.a5.beforeExceptions": - "Tutti i modelli Zen sono ospitati negli Stati Uniti. I provider seguono una policy di zero-retention e non usano i tuoi dati per l'addestramento dei modelli, con le", - "zen.faq.a5.exceptionsLink": "seguenti eccezioni", - "zen.faq.q6": "Posso impostare limiti di spesa?", - "zen.faq.a6": "Sì, puoi impostare limiti di spesa mensuali nel tuo account.", - "zen.faq.q7": "Posso annullare?", - "zen.faq.a7": "Sì, puoi disattivare la fatturazione in qualsiasi momento e usare il saldo rimanente.", - "zen.faq.q8": "Posso usare Zen con altri agenti di coding?", - "zen.faq.a8": - "Anche se Zen funziona alla grande con OpenCode, puoi usare Zen con qualsiasi agente. Segui le istruzioni di configurazione nel tuo agente di coding preferito.", - - "zen.cta.start": "Inizia con Zen", - "zen.pricing.title": "Aggiungi $20 di saldo a consumo", - "zen.pricing.fee": "(+$1.23 commissione di elaborazione carta)", - "zen.pricing.body": "Usa con qualsiasi agente. Imposta limiti di spesa mensili. Annulla in qualsiasi momento.", - "zen.problem.title": "Quale problema risolve Zen?", - "zen.problem.body": - "Sono disponibili numerosi modelli, ma solo pochi funzionano bene con gli agenti di coding. La maggior parte dei provider li configura in modo diverso con risultati variabili.", - "zen.problem.subtitle": "Stiamo risolvendo questo problema per tutti, non solo per gli utenti OpenCode.", - "zen.problem.item1": "Testare modelli selezionati e consultare i loro team", - "zen.problem.item2": "Collaborare con i provider per garantire che vengano consegnati correttamente", - "zen.problem.item3": "Benchmark di tutte le combinazioni modello-provider che raccomandiamo", - "zen.how.title": "Come funziona Zen", - "zen.how.body": "Anche se ti consigliamo di utilizzare Zen con OpenCode, puoi utilizzare Zen con qualsiasi agente.", - "zen.how.step1.title": "Iscriviti e aggiungi un saldo di $20", - "zen.how.step1.beforeLink": "segui le", - "zen.how.step1.link": "istruzioni di configurazione", - "zen.how.step2.title": "Usa Zen con prezzi trasparenti", - "zen.how.step2.link": "paga per richiesta", - "zen.how.step2.afterLink": "senza ricarichi", - "zen.how.step3.title": "Ricarica automatica", - "zen.how.step3.body": "quando il tuo saldo raggiunge $5, aggiungeremo automaticamente $20", - "zen.privacy.title": "La tua privacy è importante per noi", - "zen.privacy.beforeExceptions": - "Tutti i modelli Zen sono ospitati negli Stati Uniti. I provider seguono una policy di zero-retention e non usano i tuoi dati per l'addestramento dei modelli, con le", - "zen.privacy.exceptionsLink": "seguenti eccezioni", - - "go.title": "OpenCode Go | Modelli di coding a basso costo per tutti", - "go.meta.description": - "Go inizia a $5 per il primo mese, poi $10/mese, con generosi limiti di richiesta di 5 ore per GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro e DeepSeek V4 Flash.", - "go.hero.title": "Modelli di coding a basso costo per tutti", - "go.hero.body": - "Go porta il coding agentico ai programmatori di tutto il mondo. Offrendo limiti generosi e un accesso affidabile ai modelli open source più capaci, in modo da poter costruire con agenti potenti senza preoccuparsi dei costi o della disponibilità.", - - "go.cta.start": "Abbonati a Go", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "Abbonati a Go", - "go.cta.price": "$10/mese", - "go.cta.promo": "$5 il primo mese", - "go.pricing.body": - "Usalo con qualsiasi agente. $5 il primo mese, poi $10/mese. Ricarica il credito se necessario. Annulla in qualsiasi momento.", - "go.graph.free": "Gratis", - "go.graph.freePill": "Big Pickle e modelli gratuiti", - "go.graph.go": "Go", - "go.graph.label": "Richieste ogni 5 ore", - "go.graph.usageLimits": "Limiti di utilizzo", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "Richieste ogni 5h: {{free}} vs {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "ex-CEO, Terminal Products", - "go.testimonials.dax.quoteAfter": "ha cambiato la vita, è davvero una scelta ovvia.", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "ex-Founder, SEED, PM, Melt, Pop, Dapt, Cadmus, e ViewPoint", - "go.testimonials.jay.quoteBefore": "4 persone su 5 nel nostro team amano usare", - "go.testimonials.jay.quoteAfter": ".", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "ex-Hero, AWS", - "go.testimonials.adam.quoteBefore": "Non posso raccomandare", - "go.testimonials.adam.quoteAfter": "abbastanza. Seriamente, è davvero buono.", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "ex-Head of Design, Laravel", - "go.testimonials.david.quoteBefore": "Con", - "go.testimonials.david.quoteAfter": "so che tutti i modelli sono testati e perfetti per gli agenti di coding.", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "ex-Intern, Nvidia (4 volte)", - "go.testimonials.frank.quote": "Vorrei essere ancora a Nvidia.", - "go.problem.title": "Quale problema risolve Go?", - "go.problem.body": - "Ci concentriamo nel portare l'esperienza OpenCode a quante più persone possibile. OpenCode Go è un abbonamento a basso costo: $5 il primo mese, poi $10/mese. Offre limiti generosi e accesso affidabile ai modelli open source più capaci.", - "go.problem.subtitle": " ", - "go.problem.item1": "Prezzo di abbonamento a basso costo", - "go.problem.item2": "Limiti generosi e accesso affidabile", - "go.problem.item3": "Costruito per il maggior numero possibile di programmatori", - "go.problem.item4": - "Include GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro e DeepSeek V4 Flash", - "go.how.title": "Come funziona Go", - "go.how.body": "Go inizia a $5 per il primo mese, poi $10/mese. Puoi usarlo con OpenCode o qualsiasi agente.", - "go.how.step1.title": "Crea un account", - "go.how.step1.beforeLink": "segui le", - "go.how.step1.link": "istruzioni di configurazione", - "go.how.step2.title": "Abbonati a Go", - "go.how.step2.link": "$5 il primo mese", - "go.how.step2.afterLink": "poi $10/mese con limiti generosi", - "go.how.step3.title": "Inizia a programmare", - "go.how.step3.body": "con accesso affidabile ai modelli open source", - "go.privacy.title": "La tua privacy è importante per noi", - "go.privacy.body": - "Il piano è progettato principalmente per gli utenti internazionali, con modelli ospitati negli Stati Uniti, UE e Singapore per un accesso globale stabile.", - "go.privacy.contactAfter": "se hai domande.", - "go.privacy.beforeExceptions": - "I modelli Go sono ospitati negli Stati Uniti. I provider seguono una policy di zero-retention e non usano i tuoi dati per l'addestramento dei modelli, con le", - "go.privacy.exceptionsLink": "seguenti eccezioni", - "go.faq.q1": "Che cos'è OpenCode Go?", - "go.faq.a1": - "Go è un abbonamento a basso costo che ti dà un accesso affidabile a modelli open source capaci per il coding agentico.", - "go.faq.q2": "Quali modelli include Go?", - "go.faq.a2": "Go include i modelli elencati di seguito, con limiti generosi e accesso affidabile.", - "go.faq.q3": "Go è lo stesso di Zen?", - "go.faq.a3": - "No. Zen è a consumo, mentre Go inizia a $5 per il primo mese, poi $10/mese, con limiti generosi e accesso affidabile ai modelli open source GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro e DeepSeek V4 Flash.", - "go.faq.q4": "Quanto costa Go?", - "go.faq.a4.p1.beforePricing": "Go costa", - "go.faq.a4.p1.pricingLink": "$5 il primo mese", - "go.faq.a4.p1.afterPricing": "poi $10/mese con limiti generosi.", - "go.faq.a4.p2.beforeAccount": "Puoi gestire il tuo abbonamento nel tuo", - "go.faq.a4.p2.accountLink": "account", - "go.faq.a4.p3": "Annulla in qualsiasi momento.", - "go.faq.q5": "E per quanto riguarda dati e privacy?", - "go.faq.a5.body": - "Il piano è progettato principalmente per gli utenti internazionali, con modelli ospitati negli Stati Uniti, UE e Singapore per un accesso globale stabile. I nostri provider seguono una policy di zero-retention e non usano i tuoi dati per l'addestramento dei modelli.", - "go.faq.a5.beforeExceptions": - "I modelli Go sono ospitati negli Stati Uniti. I provider seguono una policy di zero-retention e non usano i tuoi dati per l'addestramento dei modelli, con le", - "go.faq.a5.exceptionsLink": "seguenti eccezioni", - "go.faq.q6": "Posso ricaricare il credito?", - "go.faq.a6": "Se hai bisogno di più utilizzo, puoi ricaricare il credito nel tuo account.", - "go.faq.q7": "Posso annullare?", - "go.faq.a7": "Sì, puoi annullare in qualsiasi momento.", - "go.faq.q8": "Posso usare Go con altri agenti di coding?", - "go.faq.a8": - "Sì, puoi usare Go con qualsiasi agente. Segui le istruzioni di configurazione nel tuo agente di coding preferito.", - - "go.faq.q9": "Qual è la differenza tra i modelli gratuiti e Go?", - "go.faq.a9": - "I modelli gratuiti includono Big Pickle più modelli promozionali disponibili al momento, con una quota di 200 richieste/giorno. Go include GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro e DeepSeek V4 Flash con quote di richiesta più elevate applicate su finestre mobili (5 ore, settimanale e mensile), approssimativamente equivalenti a $12 ogni 5 ore, $30 a settimana e $60 al mese (il conteggio effettivo delle richieste varia in base al modello e all'utilizzo).", - - "zen.api.error.rateLimitExceeded": "Limite di richieste superato. Riprova più tardi.", - "zen.api.error.modelNotSupported": "Modello {{model}} non supportato", - "zen.api.error.modelFormatNotSupported": "Modello {{model}} non supportato per il formato {{format}}", - "zen.api.error.noProviderAvailable": "Nessun provider disponibile", - "zen.api.error.providerNotSupported": "Provider {{provider}} non supportato", - "zen.api.error.missingApiKey": "Chiave API mancante.", - "zen.api.error.invalidApiKey": "Chiave API non valida.", - "zen.api.error.subscriptionQuotaExceeded": "Quota dell'abbonamento superata. Riprova tra {{retryIn}}.", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "Limite di utilizzo di 5 ore raggiunto. Si reimposta tra {{retryIn}}. Per continuare a usare questo modello ora, abilita l'utilizzo dal tuo saldo disponibile: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "Limite di utilizzo settimanale raggiunto. Si reimposta tra {{retryIn}}. Per continuare a usare questo modello ora, abilita l'utilizzo dal tuo saldo disponibile: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "Limite di utilizzo mensile raggiunto. Si reimposta tra {{retryIn}}. Per continuare a usare questo modello ora, abilita l'utilizzo dal tuo saldo disponibile: {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "Nessun metodo di pagamento. Aggiungi un metodo di pagamento qui: {{billingUrl}}", - "zen.api.error.insufficientBalance": "Saldo insufficiente. Gestisci la tua fatturazione qui: {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "La tua area di lavoro ha raggiunto il limite di spesa mensile di ${{amount}}. Gestisci i tuoi limiti qui: {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "Hai raggiunto il tuo limite di spesa mensile di ${{amount}}. Gestisci i tuoi limiti qui: {{membersUrl}}", - "zen.api.error.modelDisabled": "Il modello è disabilitato", - "zen.api.error.regionNotAllowed": - "Questo modello è ospitato in Cina. Se vuoi usare questo modello, abilitalo nelle tue impostazioni: {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "La promozione gratuita di {{model}} è terminata. Puoi continuare a usare il modello abbonandoti a OpenCode Go - {{link}}", - - "black.meta.title": "OpenCode Black | Accedi ai migliori modelli di coding al mondo", - "black.meta.description": - "Ottieni l'accesso a Claude, GPT, Gemini e altri con i piani di abbonamento OpenCode Black.", - "black.hero.title": "Accedi ai migliori modelli di coding al mondo", - "black.hero.subtitle": "Inclusi Claude, GPT, Gemini e altri", - "black.title": "OpenCode Black | Prezzi", - "black.paused": "L'iscrizione al piano Black è temporaneamente sospesa.", - "black.plan.icon20": "Piano Black 20", - "black.plan.icon100": "Piano Black 100", - "black.plan.icon200": "Piano Black 200", - "black.plan.multiplier100": "5x più utilizzo rispetto a Black 20", - "black.plan.multiplier200": "20x più utilizzo rispetto a Black 20", - "black.price.perMonth": "al mese", - "black.price.perPersonBilledMonthly": "per persona fatturato mensilmente", - "black.terms.1": "Il tuo abbonamento non inizierà immediatamente", - "black.terms.2": "Verrai aggiunto alla lista d'attesa e attivato presto", - "black.terms.3": "La tua carta verrà addebitata solo quando il tuo abbonamento sarà attivato", - "black.terms.4": - "Si applicano limiti di utilizzo, un uso fortemente automatizzato potrebbe raggiungere i limiti prima", - "black.terms.5": "Gli abbonamenti sono per individui, contatta Enterprise per i team", - "black.terms.6": "I limiti potrebbero essere modificati e i piani potrebbero essere interrotti in futuro", - "black.terms.7": "Annulla il tuo abbonamento in qualsiasi momento", - "black.action.continue": "Continua", - "black.finePrint.beforeTerms": "I prezzi mostrati non includono le tasse applicabili", - "black.finePrint.terms": "Termini di servizio", - "black.workspace.title": "OpenCode Black | Seleziona Workspace", - "black.workspace.selectPlan": "Seleziona un workspace per questo piano", - "black.workspace.name": "Workspace {{n}}", - "black.subscribe.title": "Abbonati a OpenCode Black", - "black.subscribe.paymentMethod": "Metodo di pagamento", - "black.subscribe.loadingPaymentForm": "Caricamento modulo di pagamento...", - "black.subscribe.selectWorkspaceToContinue": "Seleziona un workspace per continuare", - "black.subscribe.failurePrefix": "Oh no!", - "black.subscribe.error.generic": "Si è verificato un errore", - "black.subscribe.error.invalidPlan": "Piano non valido", - "black.subscribe.error.workspaceRequired": "ID Workspace richiesto", - "black.subscribe.error.alreadySubscribed": "Questo workspace ha già un abbonamento", - "black.subscribe.processing": "Elaborazione...", - "black.subscribe.submit": "Abbonati ${{plan}}", - "black.subscribe.form.chargeNotice": "Ti verrà addebitato solo quando il tuo abbonamento sarà attivato", - "black.subscribe.success.title": "Sei nella lista d'attesa di OpenCode Black", - "black.subscribe.success.subscriptionPlan": "Piano di abbonamento", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "Importo", - "black.subscribe.success.amountValue": "${{plan}} al mese", - "black.subscribe.success.paymentMethod": "Metodo di pagamento", - "black.subscribe.success.dateJoined": "Data di adesione", - "black.subscribe.success.chargeNotice": "La tua carta verrà addebitata quando il tuo abbonamento sarà attivato", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "Utilizzo", - "workspace.nav.apiKeys": "Chiavi API", - "workspace.nav.members": "Membri", - "workspace.nav.billing": "Fatturazione", - "workspace.nav.settings": "Impostazioni", - - "workspace.home.banner.beforeLink": "Modelli ottimizzati e affidabili per agenti di coding.", - "workspace.lite.banner.beforeLink": "Modelli di coding a basso costo per tutti.", - "workspace.home.billing.loading": "Caricamento...", - "workspace.home.billing.enable": "Abilita fatturazione", - "workspace.home.billing.currentBalance": "Saldo attuale", - - "workspace.newUser.feature.tested.title": "Modelli testati e verificati", - "workspace.newUser.feature.tested.body": - "Abbiamo benchmarkato e testato modelli specificamente per agenti di coding per garantire le migliori prestazioni.", - "workspace.newUser.feature.quality.title": "Massima qualità", - "workspace.newUser.feature.quality.body": - "Accedi a modelli configurati per prestazioni ottimali - nessun downgrade o instradamento verso provider più economici.", - "workspace.newUser.feature.lockin.title": "Nessun lock-in", - "workspace.newUser.feature.lockin.body": - "Usa Zen con qualsiasi agente di coding, e continua a usare altri provider con opencode quando vuoi.", - "workspace.newUser.copyApiKey": "Copia chiave API", - "workspace.newUser.copyKey": "Copia Chiave", - "workspace.newUser.copied": "Copiato!", - "workspace.newUser.step.enableBilling": "Abilita fatturazione", - "workspace.newUser.step.login.before": "Esegui", - "workspace.newUser.step.login.after": "e seleziona opencode", - "workspace.newUser.step.pasteKey": "Incolla la tua chiave API", - "workspace.newUser.step.models.before": "Avvia opencode ed esegui", - "workspace.newUser.step.models.after": "per selezionare un modello", - - "workspace.models.title": "Modelli", - "workspace.models.subtitle.beforeLink": "Gestisci i modelli a cui possono accedere i membri del workspace.", - "workspace.models.table.model": "Modello", - "workspace.models.table.enabled": "Abilitato", - - "workspace.providers.title": "Bring Your Own Key", - "workspace.providers.subtitle": "Configura le tue chiavi API dai provider di IA.", - "workspace.providers.placeholder": "Inserisci chiave API {{provider}} ({{prefix}}...)", - "workspace.providers.configure": "Configura", - "workspace.providers.edit": "Modifica", - "workspace.providers.delete": "Elimina", - "workspace.providers.saving": "Salvataggio...", - "workspace.providers.save": "Salva", - "workspace.providers.table.provider": "Provider", - "workspace.providers.table.apiKey": "Chiave API", - - "workspace.usage.title": "Cronologia Utilizzo", - "workspace.usage.subtitle": "Utilizzo API recente e costi.", - "workspace.usage.empty": "Effettua la tua prima chiamata API per iniziare.", - "workspace.usage.table.date": "Data", - "workspace.usage.table.model": "Modello", - "workspace.usage.table.input": "Input", - "workspace.usage.table.output": "Output", - "workspace.usage.table.cost": "Costo", - "workspace.usage.table.session": "Sessione", - "workspace.usage.breakdown.input": "Input", - "workspace.usage.breakdown.cacheRead": "Lettura Cache", - "workspace.usage.breakdown.cacheWrite": "Scrittura Cache", - "workspace.usage.breakdown.output": "Output", - "workspace.usage.breakdown.reasoning": "Reasoning", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "Costo", - "workspace.cost.subtitle": "Costi di utilizzo suddivisi per modello.", - "workspace.cost.allModels": "Tutti i Modelli", - "workspace.cost.allKeys": "Tutte le Chiavi", - "workspace.cost.deletedSuffix": "(eliminato)", - "workspace.cost.empty": "Nessun dato di utilizzo disponibile per il periodo selezionato.", - "workspace.cost.subscriptionShort": "sub", - - "workspace.keys.title": "Chiavi API", - "workspace.keys.subtitle": "Gestisci le tue chiavi API per accedere ai servizi opencode.", - "workspace.keys.create": "Crea Chiave API", - "workspace.keys.placeholder": "Inserisci nome chiave", - "workspace.keys.empty": "Crea una chiave API opencode Gateway", - "workspace.keys.table.name": "Nome", - "workspace.keys.table.key": "Chiave", - "workspace.keys.table.createdBy": "Creato da", - "workspace.keys.table.lastUsed": "Ultimo Utilizzo", - "workspace.keys.copyApiKey": "Copia chiave API", - "workspace.keys.delete": "Elimina", - - "workspace.members.title": "Membri", - "workspace.members.subtitle": "Gestisci i membri del workspace e le loro autorizzazioni.", - "workspace.members.invite": "Invita Membro", - "workspace.members.inviting": "Invito in corso...", - "workspace.members.beta.beforeLink": "I workspace sono gratuiti per i team durante la beta.", - "workspace.members.form.invitee": "Invitato", - "workspace.members.form.emailPlaceholder": "Inserisci email", - "workspace.members.form.role": "Ruolo", - "workspace.members.form.monthlyLimit": "Limite di spesa mensile", - "workspace.members.noLimit": "Nessun limite", - "workspace.members.noLimitLowercase": "nessun limite", - "workspace.members.invited": "invitato", - "workspace.members.edit": "Modifica", - "workspace.members.delete": "Elimina", - "workspace.members.saving": "Salvataggio...", - "workspace.members.save": "Salva", - "workspace.members.table.email": "Email", - "workspace.members.table.role": "Ruolo", - "workspace.members.table.monthLimit": "Limite mensile", - "workspace.members.role.admin": "Admin", - "workspace.members.role.adminDescription": "Può gestire modelli, membri e fatturazione", - "workspace.members.role.member": "Membro", - "workspace.members.role.memberDescription": "Può generare chiavi API solo per sé", - - "workspace.settings.title": "Impostazioni", - "workspace.settings.subtitle": "Aggiorna il nome e le preferenze del workspace.", - "workspace.settings.workspaceName": "Nome Workspace", - "workspace.settings.defaultName": "Predefinito", - "workspace.settings.updating": "Aggiornamento...", - "workspace.settings.save": "Salva", - "workspace.settings.edit": "Modifica", - - "workspace.billing.title": "Fatturazione", - "workspace.billing.subtitle.beforeLink": "Gestisci i metodi di pagamento.", - "workspace.billing.contactUs": "Contattaci", - "workspace.billing.subtitle.afterLink": "se hai domande.", - "workspace.billing.currentBalance": "Saldo Attuale", - "workspace.billing.add": "Aggiungi $", - "workspace.billing.enterAmount": "Inserisci importo", - "workspace.billing.loading": "Caricamento...", - "workspace.billing.addAction": "Aggiungi", - "workspace.billing.addBalance": "Aggiungi Saldo", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "Collegato a Stripe", - "workspace.billing.manage": "Gestisci", - "workspace.billing.enable": "Abilita Fatturazione", - - "workspace.monthlyLimit.title": "Limite Mensile", - "workspace.monthlyLimit.subtitle": "Imposta un limite di utilizzo mensile per il tuo account.", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "Impostazione...", - "workspace.monthlyLimit.set": "Impostato", - "workspace.monthlyLimit.edit": "Modifica Limite", - "workspace.monthlyLimit.noLimit": "Nessun limite di utilizzo impostato.", - "workspace.monthlyLimit.currentUsage.beforeMonth": "Utilizzo attuale per", - "workspace.monthlyLimit.currentUsage.beforeAmount": "è $", - - "workspace.redeem.title": "Riscatta Coupon", - "workspace.redeem.subtitle": "Riscatta un codice coupon per ottenere credito o vantaggi.", - "workspace.redeem.placeholder": "Inserisci il codice coupon", - "workspace.redeem.redeem": "Riscatta", - "workspace.redeem.redeeming": "Riscatto in corso...", - "workspace.redeem.success": "Coupon riscattato con successo.", - - "workspace.reload.title": "Ricarica Auto", - "workspace.reload.disabled.before": "La ricarica auto è", - "workspace.reload.disabled.state": "disabilitata", - "workspace.reload.disabled.after": "Abilita per ricaricare automaticamente quando il saldo è basso.", - "workspace.reload.enabled.before": "La ricarica auto è", - "workspace.reload.enabled.state": "abilitata", - "workspace.reload.enabled.middle": "Ricaricheremo", - "workspace.reload.processingFee": "commissione", - "workspace.reload.enabled.after": "quando il saldo raggiunge", - "workspace.reload.edit": "Modifica", - "workspace.reload.enable": "Abilita", - "workspace.reload.enableAutoReload": "Abilita Ricarica Auto", - "workspace.reload.reloadAmount": "Ricarica $", - "workspace.reload.whenBalanceReaches": "Quando il saldo raggiunge $", - "workspace.reload.saving": "Salvataggio...", - "workspace.reload.save": "Salva", - "workspace.reload.failedAt": "Ricarica fallita il", - "workspace.reload.reason": "Motivo:", - "workspace.reload.updatePaymentMethod": "Aggiorna il tuo metodo di pagamento e riprova.", - "workspace.reload.retrying": "Riprovo...", - "workspace.reload.retry": "Riprova", - "workspace.reload.error.paymentFailed": "Pagamento fallito.", - - "workspace.payments.title": "Cronologia Pagamenti", - "workspace.payments.subtitle": "Transazioni di pagamento recenti.", - "workspace.payments.table.date": "Data", - "workspace.payments.table.paymentId": "ID Pagamento", - "workspace.payments.table.amount": "Importo", - "workspace.payments.table.receipt": "Ricevuta", - "workspace.payments.type.credit": "credito", - "workspace.payments.type.subscription": "abbonamento", - "workspace.payments.view": "Visualizza", - - "workspace.black.loading": "Caricamento...", - "workspace.black.time.day": "giorno", - "workspace.black.time.days": "giorni", - "workspace.black.time.hour": "ora", - "workspace.black.time.hours": "ore", - "workspace.black.time.minute": "minuto", - "workspace.black.time.minutes": "minuti", - "workspace.black.time.fewSeconds": "pochi secondi", - "workspace.black.subscription.title": "Abbonamento", - "workspace.black.subscription.message": "Sei abbonato a OpenCode Black per ${{plan}} al mese.", - "workspace.black.subscription.manage": "Gestisci Abbonamento", - "workspace.black.subscription.rollingUsage": "Utilizzo 5-ore", - "workspace.black.subscription.weeklyUsage": "Utilizzo Settimanale", - "workspace.black.subscription.resetsIn": "Si resetta tra", - "workspace.black.subscription.useBalance": "Usa il tuo saldo disponibile dopo aver raggiunto i limiti di utilizzo", - "workspace.black.waitlist.title": "Waitlist", - "workspace.black.waitlist.joined": "Sei nella waitlist per il piano OpenCode Black da ${{plan}} al mese.", - "workspace.black.waitlist.ready": "Siamo pronti per iscriverti al piano OpenCode Black da ${{plan}} al mese.", - "workspace.black.waitlist.leave": "Lascia Waitlist", - "workspace.black.waitlist.leaving": "Uscita...", - "workspace.black.waitlist.left": "Uscito", - "workspace.black.waitlist.enroll": "Iscriviti", - "workspace.black.waitlist.enrolling": "Iscrizione...", - "workspace.black.waitlist.enrolled": "Iscritto", - "workspace.black.waitlist.enrollNote": - "Quando clicchi su Iscriviti, il tuo abbonamento inizia immediatamente e la tua carta verrà addebitata.", - - "workspace.lite.loading": "Caricamento...", - "workspace.lite.time.day": "giorno", - "workspace.lite.time.days": "giorni", - "workspace.lite.time.hour": "ora", - "workspace.lite.time.hours": "ore", - "workspace.lite.time.minute": "minuto", - "workspace.lite.time.minutes": "minuti", - "workspace.lite.time.fewSeconds": "pochi secondi", - "workspace.lite.subscription.message": "Sei abbonato a OpenCode Go.", - "workspace.lite.subscription.manage": "Gestisci Abbonamento", - "workspace.lite.subscription.rollingUsage": "Utilizzo Continuativo", - "workspace.lite.subscription.weeklyUsage": "Utilizzo Settimanale", - "workspace.lite.subscription.monthlyUsage": "Utilizzo Mensile", - "workspace.lite.subscription.resetsIn": "Si resetta tra", - "workspace.lite.subscription.useBalance": "Usa il tuo saldo disponibile dopo aver raggiunto i limiti di utilizzo", - "workspace.lite.subscription.selectProvider": - 'Seleziona "OpenCode Go" come provider nella tua configurazione opencode per utilizzare i modelli Go.', - "workspace.lite.providers.title": "Provider", - "workspace.lite.providers.description": "Controlla quali provider vengono usati per il routing.", - "workspace.lite.providers.useChina": "Abilita modelli ospitati in Cina", - "workspace.lite.black.message": - "Attualmente sei abbonato a OpenCode Black o sei in lista d'attesa. Annulla l'iscrizione prima se desideri passare a Go.", - "workspace.lite.other.message": - "Un altro membro in questo workspace è già abbonato a OpenCode Go. Solo un membro per workspace può abbonarsi.", - "workspace.lite.promo.description": - "OpenCode Go parte da {{price}}, poi $10/mese, e offre un accesso affidabile a popolari modelli di coding aperti con generosi limiti di utilizzo.", - "workspace.lite.promo.price": "$5 il primo mese", - "workspace.lite.promo.modelsTitle": "Cosa è incluso", - "workspace.lite.promo.footer": - "Il piano è progettato principalmente per gli utenti internazionali, con modelli ospitati in US, EU e Singapore per un accesso globale stabile. I prezzi e i limiti di utilizzo potrebbero cambiare man mano che impariamo dall'utilizzo iniziale e dal feedback.", - "workspace.lite.promo.subscribe": "Abbonati a Go", - "workspace.lite.promo.subscribing": "Reindirizzamento...", - "workspace.lite.promo.otherMethods": "Altri metodi di pagamento", - "workspace.lite.promo.selectMethod": "Seleziona metodo di pagamento", - - "workspace.referral.copyLink": "Copia link", - "workspace.referral.copied": "Copiato", - "workspace.referral.overview.title": "Invita amici", - "workspace.referral.overview.subtitle": "Guadagna $5 quando un amico si abbona. Anche lui riceverà $5.", - "workspace.referral.instructions.share": "Condividi il tuo link di referral", - "workspace.referral.instructions.subscribe": "Il tuo amico si iscrive e si abbona a Go", - "workspace.referral.instructions.claim": - "Entrambi ricevete un credito di utilizzo di $5 da applicare ai vostri limiti di utilizzo Go", - "workspace.referral.rewards.title": "Premi referral", - "workspace.referral.rewards.description": "Applica i crediti referral disponibili al tuo utilizzo di Go.", - "workspace.referral.rewards.subtitle": "{{applied}} / {{total}} premi utilizzati.", - "workspace.referral.rewards.empty": "Nessun premio referral ancora.", - "workspace.referral.table.reward": "Premio", - "workspace.referral.table.referral": "Descrizione", - "workspace.referral.table.date": "Data", - "workspace.referral.reward.description.inviter": "Hai invitato {{email}}", - "workspace.referral.reward.description.invitee": "Invitato da {{email}}", - "workspace.referral.reward.action.subscribeUnlock": "Abbonati per sbloccare", - "workspace.referral.reward.action.view": "Vedi premio", - "workspace.referral.reward.action.applied": "Premio utilizzato", - "workspace.referral.reward.source.pendingInviter": "In attesa che si abboni", - "workspace.referral.reward.source.pendingInvitee": "Abbonati per sbloccare il premio", - "workspace.referral.reward.source.available": "Premio pronto da utilizzare", - "workspace.referral.reward.source.applied": "Premio utilizzato", - "workspace.referral.reward.status.applied": "Premio utilizzato", - "workspace.referral.reward.status.pendingInviter": "Abbonati per sbloccare", - "workspace.referral.reward.status.pendingInvitee": "Abbonati per sbloccare", - "workspace.referral.apply.noGo": "Abbonati per sbloccare", - "workspace.referral.apply.preview": "Vedi premio", - "workspace.referral.apply.action": "Utilizza", - "workspace.referral.apply.confirmTitle": "Utilizza premio", - "workspace.referral.apply.confirmBody": "Utilizza {{amount}} per ridurre l'utilizzo attuale di questo workspace.", - "workspace.referral.apply.confirmAction": "Utilizza", - - "download.title": "OpenCode | Download", - "download.meta.description": "Scarica OpenCode per macOS, Windows e Linux", - "download.hero.title": "Scarica OpenCode", - "download.hero.subtitle": "Disponibile in Beta per macOS, Windows e Linux", - "download.hero.button": "Scarica per {{os}}", - "download.section.terminal": "OpenCode Terminal", - "download.section.desktop": "OpenCode Desktop (Beta)", - "download.section.extensions": "OpenCode Extensions", - "download.section.integrations": "OpenCode Integrations", - "download.action.download": "Scarica", - "download.action.install": "Installa", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "Non necessariamente, ma probabilmente. Avrai bisogno di un abbonamento IA se vuoi collegare OpenCode a un provider a pagamento, sebbene tu possa lavorare con", - "download.faq.a3.localLink": "modelli locali", - "download.faq.a3.afterLocal.beforeZen": "gratuitamente. Mentre incoraggiamo gli utenti a usare", - "download.faq.a3.afterZen": ", OpenCode funziona con tutti i provider popolari come OpenAI, Anthropic, xAI ecc.", - - "download.faq.a5.p1": "OpenCode è gratuito al 100%.", - "download.faq.a5.p2.beforeZen": - "Eventuali costi aggiuntivi proverranno dal tuo abbonamento a un provider di modelli. Mentre OpenCode funziona con qualsiasi provider di modelli, raccomandiamo di usare", - "download.faq.a5.p2.afterZen": ".", - - "download.faq.a6.p1": "I tuoi dati e informazioni sono archiviati solo quando crei link condivisibili in OpenCode.", - "download.faq.a6.p2.beforeShare": "Scopri di più sulle", - "download.faq.a6.shareLink": "pagine condivise", - - "enterprise.title": "OpenCode | Soluzioni Enterprise per la tua organizzazione", - "enterprise.meta.description": "Contatta OpenCode per soluzioni enterprise", - "enterprise.hero.title": "Il tuo codice è tuo", - "enterprise.hero.body1": - "OpenCode opera in modo sicuro all'interno della tua organizzazione senza dati o contesto archiviati e senza restrizioni di licenza o rivendicazioni di proprietà. Inizia una prova con il tuo team, poi distribuisci attraverso la tua organizzazione integrandolo con il tuo SSO e gateway IA interno.", - "enterprise.hero.body2": "Facci sapere come possiamo aiutare.", - "enterprise.form.name.label": "Nome completo", - "enterprise.form.name.placeholder": "Jeff Bezos", - "enterprise.form.role.label": "Ruolo", - "enterprise.form.role.placeholder": "Presidente Esecutivo", - "enterprise.form.company.label": "Azienda", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "Email aziendale", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "Numero di telefono", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "Quale problema stai cercando di risolvere?", - "enterprise.form.message.placeholder": "Abbiamo bisogno di aiuto con...", - "enterprise.form.send": "Invia", - "enterprise.form.sending": "Invio...", - "enterprise.form.success": "Messaggio inviato, ti contatteremo presto.", - "enterprise.form.success.submitted": "Modulo inviato con successo.", - "enterprise.form.error.allFieldsRequired": "Tutti i campi sono obbligatori.", - "enterprise.form.error.invalidEmailFormat": "Formato email non valido.", - "enterprise.form.error.internalServer": "Errore interno del server.", - "enterprise.faq.title": "FAQ", - "enterprise.faq.q1": "Cos'è OpenCode Enterprise?", - "enterprise.faq.a1": - "OpenCode Enterprise è per le organizzazioni che vogliono garantire che il loro codice e dati non lascino mai la loro infrastruttura. Può farlo usando una configurazione centralizzata che si integra con il tuo SSO e gateway IA interno.", - "enterprise.faq.q2": "Come inizio con OpenCode Enterprise?", - "enterprise.faq.a2": - "Inizia semplicemente con una prova interna con il tuo team. OpenCode per impostazione predefinita non archivia il tuo codice o dati di contesto, rendendo facile iniziare. Poi contattaci per discutere prezzi e opzioni di implementazione.", - "enterprise.faq.q3": "Come funziona il prezzo enterprise?", - "enterprise.faq.a3": - "Offriamo prezzi enterprise per postazione. Se hai il tuo gateway LLM, non addebitiamo per i token usati. Per ulteriori dettagli, contattaci per un preventivo personalizzato basato sulle esigenze della tua organizzazione.", - "enterprise.faq.q4": "I miei dati sono sicuri con OpenCode Enterprise?", - "enterprise.faq.a4": - "Sì. OpenCode non archivia il tuo codice o dati di contesto. Tutto il trattamento avviene localmente o attraverso chiamate API dirette al tuo provider IA. Con configurazione centrale e integrazione SSO, i tuoi dati rimangono sicuri all'interno dell'infrastruttura della tua organizzazione.", - - "brand.title": "OpenCode | Brand", - "brand.meta.description": "Linee guida del brand OpenCode", - "brand.heading": "Linee guida del brand", - "brand.subtitle": "Risorse e asset per aiutarti a lavorare con il brand OpenCode.", - "brand.downloadAll": "Scarica tutti gli asset", - - "changelog.title": "OpenCode | Changelog", - "changelog.meta.description": "Note di rilascio e changelog OpenCode", - "changelog.hero.title": "Changelog", - "changelog.hero.subtitle": "Nuovi aggiornamenti e miglioramenti a OpenCode", - "changelog.empty": "Nessuna voce del changelog trovata.", - "changelog.viewJson": "Vedi JSON", - - "bench.list.title": "Benchmark", - "bench.list.heading": "Benchmark", - "bench.list.table.agent": "Agente", - "bench.list.table.model": "Modello", - "bench.list.table.score": "Punteggio", - "bench.submission.error.allFieldsRequired": "Tutti i campi sono obbligatori.", - - "bench.detail.title": "Benchmark - {{task}}", - "bench.detail.notFound": "Task non trovato", - "bench.detail.na": "N/D", - "bench.detail.labels.agent": "Agente", - "bench.detail.labels.model": "Modello", - "bench.detail.labels.task": "Task", - "bench.detail.labels.repo": "Repo", - "bench.detail.labels.from": "Da", - "bench.detail.labels.to": "A", - "bench.detail.labels.prompt": "Prompt", - "bench.detail.labels.commit": "Commit", - "bench.detail.labels.averageDuration": "Durata Media", - "bench.detail.labels.averageScore": "Punteggio Medio", - "bench.detail.labels.averageCost": "Costo Medio", - "bench.detail.labels.summary": "Riepilogo", - "bench.detail.labels.runs": "Esecuzioni", - "bench.detail.labels.score": "Punteggio", - "bench.detail.labels.base": "Base", - "bench.detail.labels.penalty": "Penalità", - "bench.detail.labels.weight": "peso", - "bench.detail.table.run": "Esecuzione", - "bench.detail.table.score": "Punteggio (Base - Penalità)", - "bench.detail.table.cost": "Costo", - "bench.detail.table.duration": "Durata", - "bench.detail.run.title": "Esecuzione {{n}}", - "bench.detail.rawJson": "Raw JSON", -} satisfies Dict diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts deleted file mode 100644 index c3e7ff2d4c..0000000000 --- a/packages/console/app/src/i18n/ja.ts +++ /dev/null @@ -1,828 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "ドキュメント", - "nav.changelog": "変更履歴", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "エンタープライズ", - "nav.zen": "Zen", - "nav.login": "ログイン", - "nav.free": "ダウンロード", - "nav.home": "ホーム", - "nav.openMenu": "メニューを開く", - "nav.getStartedFree": "無料ではじめる", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "ロゴをSVGでコピー", - "nav.context.copyWordmark": "ワードマークをSVGでコピー", - "nav.context.brandAssets": "ブランド素材", - - "footer.github": "GitHub", - "footer.docs": "ドキュメント", - "footer.changelog": "変更履歴", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "ブランド", - "legal.privacy": "プライバシー", - "legal.terms": "利用規約", - - "email.title": "新製品リリースの情報をいち早く受け取る", - "email.subtitle": "早期アクセスのためにウェイトリストに登録してください。", - "email.placeholder": "メールアドレス", - "email.subscribe": "登録", - "email.success": "ほぼ完了です。受信トレイを確認してメールアドレスを認証してください", - - "notFound.title": "見つかりません | OpenCode", - "notFound.heading": "404 - ページが見つかりません", - "notFound.home": "ホーム", - "notFound.docs": "ドキュメント", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "opencodeのロゴ(ライト)", - "notFound.logoDarkAlt": "opencodeのロゴ(ダーク)", - - "user.logout": "ログアウト", - - "auth.callback.error.codeMissing": "認証コードが見つかりません。", - - "workspace.select": "ワークスペースを選択", - "workspace.createNew": "+ 新しいワークスペースを作成", - "workspace.modal.title": "新しいワークスペースを作成", - "workspace.modal.placeholder": "ワークスペース名を入力", - - "common.cancel": "キャンセル", - "common.creating": "作成中...", - "common.create": "作成", - - "common.videoUnsupported": "お使いのブラウザは video タグをサポートしていません。", - "common.figure": "図 {{n}}.", - "common.faq": "FAQ", - "common.learnMore": "詳しく見る", - - "error.invalidPlan": "無効なプラン", - "error.workspaceRequired": "ワークスペースIDが必要です", - "error.alreadySubscribed": "このワークスペースは既にサブスクリプションを持っています", - "error.limitRequired": "制限値が必要です。", - "error.monthlyLimitInvalid": "有効な月間制限を設定してください。", - "error.workspaceNameRequired": "ワークスペース名が必要です。", - "error.nameTooLong": "名前は255文字以下である必要があります。", - "error.emailRequired": "メールアドレスが必要です", - "error.roleRequired": "ロールが必要です", - "error.idRequired": "IDが必要です", - "error.nameRequired": "名前が必要です", - "error.providerRequired": "プロバイダーが必要です", - "error.apiKeyRequired": "APIキーが必要です", - "error.modelRequired": "モデルが必要です", - "error.reloadAmountMin": "リロード額は少なくとも ${{amount}} である必要があります", - "error.reloadTriggerMin": "残高トリガーは少なくとも ${{amount}} である必要があります", - - "app.meta.description": "OpenCode - オープンソースのコーディングエージェント。", - - "home.title": "OpenCode | オープンソースのAIコーディングエージェント", - - "temp.title": "OpenCode | ターミナル向けに構築されたAIコーディングエージェント", - "temp.hero.title": "ターミナル向けに構築されたAIコーディングエージェント", - "temp.zen": "OpenCode Zen", - "temp.getStarted": "はじめる", - "temp.feature.native.title": "ネイティブ TUI", - "temp.feature.native.body": "レスポンシブでネイティブ、テーマ変更可能なターミナルUI", - "temp.feature.zen.beforeLink": "OpenCodeが提供する", - "temp.feature.zen.link": "厳選されたモデルリスト", - "temp.feature.zen.afterLink": "", - "temp.feature.models.beforeLink": "ローカルモデルを含む、", - "temp.feature.models.afterLink": "を通じて75以上のLLMプロバイダーをサポート", - "temp.screenshot.caption": "tokyonight テーマを使用した OpenCode TUI", - "temp.screenshot.alt": "tokyonight テーマの OpenCode TUI", - "temp.logoLightAlt": "opencodeのロゴ(ライト)", - "temp.logoDarkAlt": "opencodeのロゴ(ダーク)", - - "home.banner.badge": "新着", - "home.banner.text": "デスクトップアプリのベータ版が利用可能", - "home.banner.platforms": "macOS、Windows、Linux で", - "home.banner.downloadNow": "今すぐダウンロード", - "home.banner.downloadBetaNow": "デスクトップベータ版を今すぐダウンロード", - - "home.hero.title": "オープンソースのAIコーディングエージェント", - "home.hero.subtitle.a": "無料モデルが含まれています。また、任意のプロバイダーの任意のモデルに接続でき、", - "home.hero.subtitle.b": "Claude、GPT、Gemini などにも対応します。", - - "home.install.ariaLabel": "インストールオプション", - - "home.what.title": "OpenCodeとは?", - "home.what.body": - "OpenCodeは、ターミナル、IDE、またはデスクトップでのコード作成を支援するオープンソースのエージェントです。", - "home.what.lsp.title": "LSP対応", - "home.what.lsp.body": "LLMに適したLSPを自動的に読み込みます", - "home.what.multiSession.title": "マルチセッション", - "home.what.multiSession.body": "同じプロジェクトで複数のエージェントを並行実行できます", - "home.what.shareLinks.title": "共有リンク", - "home.what.shareLinks.body": "参照やデバッグのために、任意のセッションへのリンクを共有できます", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "GitHubでログインしてCopilotアカウントを利用できます", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "OpenAIでログインしてChatGPT PlusまたはProアカウントを利用できます", - "home.what.anyModel.title": "あらゆるモデル", - "home.what.anyModel.body": "Models.dev経由で75以上のLLMプロバイダーに対応(ローカルモデル含む)", - "home.what.anyEditor.title": "あらゆるエディタ", - "home.what.anyEditor.body": "ターミナルインターフェース、デスクトップアプリ、IDE拡張機能として利用できます", - "home.what.readDocs": "ドキュメントを読む", - - "home.growth.title": "オープンソースのAIコーディングエージェント", - "home.growth.body": - "GitHubスター{{stars}}以上、コントリビューター{{contributors}}人、コミット{{commits}}件以上。毎月{{monthlyUsers}}人以上の開発者に利用・信頼されています。", - "home.growth.githubStars": "GitHubスター", - "home.growth.contributors": "コントリビューター", - "home.growth.monthlyDevs": "月間開発者数", - - "home.privacy.title": "プライバシーを最優先に設計", - "home.privacy.body": - "OpenCodeはコードやコンテキストデータを一切保存しないため、プライバシーが重視される環境でも利用できます。", - "home.privacy.learnMore": "詳しくは", - "home.privacy.link": "プライバシー", - - "home.faq.q1": "OpenCodeとは?", - "home.faq.a1": - "OpenCodeは、任意のAIモデルでコードの作成・実行を支援するオープンソースのエージェントです。ターミナルベースのインターフェース、デスクトップアプリ、IDE拡張として利用できます。", - "home.faq.q2": "OpenCodeの使い方は?", - "home.faq.a2.before": "最も簡単な始め方は", - "home.faq.a2.link": "イントロを読む", - "home.faq.q3": "OpenCodeには追加のAIサブスクリプションが必要ですか?", - "home.faq.a3.p1": "必ずしも必要ではありません。OpenCodeには、アカウント不要で使える無料モデルが含まれています。", - "home.faq.a3.p2.beforeZen": "これらに加えて、", - "home.faq.a3.p2.afterZen": " アカウントを作成することで、人気のコーディングモデルを利用できます。", - "home.faq.a3.p3": - "Zenの利用を推奨していますが、OpenCodeはOpenAI、Anthropic、xAIなどの主要プロバイダーにも対応しています。", - "home.faq.a3.p4.beforeLocal": "さらに、", - "home.faq.a3.p4.localLink": "ローカルモデル", - "home.faq.q4": "既存のAIサブスクリプションをOpenCodeで使えますか?", - "home.faq.a4.p1": - "はい、OpenCodeは主要プロバイダーのサブスクリプションプランに対応しています。Claude Pro/Max、ChatGPT Plus/Pro、GitHub Copilotのサブスクリプションを利用できます。", - "home.faq.q5": "ターミナルだけで使えますか?", - "home.faq.a5.beforeDesktop": "もう違います!OpenCodeは今は", - "home.faq.a5.desktop": "デスクトップ", - "home.faq.a5.and": "と", - "home.faq.a5.web": "ウェブ", - "home.faq.q6": "OpenCodeの価格は?", - "home.faq.a6": - "OpenCodeは100%無料で使えます。無料モデルも含まれています。他のプロバイダーに接続する場合は追加費用が発生することがあります。", - "home.faq.q7": "データとプライバシーは?", - "home.faq.a7.p1": "無料モデルを使う場合や共有リンクを作成する場合にのみ、データが保存されます。", - "home.faq.a7.p2.beforeModels": "詳しくは", - "home.faq.a7.p2.modelsLink": "モデルのプライバシー", - "home.faq.a7.p2.and": "と", - "home.faq.a7.p2.shareLink": "共有ページのプライバシー", - "home.faq.q8": "OpenCodeはオープンソースですか?", - "home.faq.a8.p1": "はい、OpenCodeは完全にオープンソースです。ソースコードは", - "home.faq.a8.p2": "の", - "home.faq.a8.mitLicense": "MITライセンス", - "home.faq.a8.p3": - "のもとで公開されており、誰でも使用、変更、開発への参加ができます。コミュニティの誰でもissueを起こしたり、pull requestを送ったり、機能を拡張できます。", - - "home.zenCta.title": "コーディングエージェント向けの信頼できる最適化モデル", - "home.zenCta.body": - "Zenは、OpenCodeがコーディングエージェント向けにテスト・ベンチマーク済みのAIモデルを厳選して提供します。プロバイダー間の性能・品質のブレを気にせず、検証済みのモデルを利用できます。", - "home.zenCta.link": "Zenについて知る", - - "zen.title": "OpenCode Zen | コーディングエージェント向けの信頼できる最適化モデル", - "zen.hero.title": "コーディングエージェント向けの信頼できる最適化モデル", - "zen.hero.body": - "Zenは、OpenCodeがコーディングエージェント向けにテスト・ベンチマーク済みのAIモデルを厳選して提供します。プロバイダー間の性能・品質のブレを気にせず、検証済みのモデルを利用できます。", - - "zen.faq.q1": "OpenCode Zenとは?", - "zen.faq.a1": - "Zenは、OpenCodeのチームが作成した、コーディングエージェント向けにテスト・ベンチマークされたAIモデルの厳選セットです。", - "zen.faq.q2": "Zenはなぜ精度が高いのですか?", - "zen.faq.a2": - "Zenはコーディングエージェント向けにテスト・ベンチマークされたモデルだけを提供します。ステーキを切るのにバターナイフを使わないように、コーディングには品質の低いモデルを使わないでください。", - "zen.faq.q3": "Zenは安いですか?", - "zen.faq.a3": - "Zenは営利目的ではありません。Zenはモデル提供元のコストをそのままあなたに渡します。Zenの利用が増えるほど、OpenCodeはより良いレートを交渉し、その分をあなたに還元できます。", - "zen.faq.q4": "Zenの料金は?", - "zen.faq.a4.p1.beforePricing": "Zenは", - "zen.faq.a4.p1.pricingLink": "リクエスト単位で課金", - "zen.faq.a4.p1.afterPricing": "し、マークアップはありません。つまり、モデル提供元の請求額をそのまま支払います。", - "zen.faq.a4.p2.beforeAccount": "総コストは利用量に依存し、月次の支出上限を", - "zen.faq.a4.p2.accountLink": "アカウント", - "zen.faq.a4.p3": "コストを賄うために、OpenCodeは$20の残高チャージあたり$1.23の小さな決済手数料のみを追加します。", - "zen.faq.q5": "データとプライバシーは?", - "zen.faq.a5.beforeExceptions": - "Zenのモデルはすべて米国でホストされています。プロバイダーはゼロ保持ポリシーを守り、データをモデル学習に使用しません(", - "zen.faq.a5.exceptionsLink": "以下の例外", - "zen.faq.q6": "支出上限を設定できますか?", - "zen.faq.a6": "はい、アカウントで月次の支出上限を設定できます。", - "zen.faq.q7": "キャンセルできますか?", - "zen.faq.a7": "はい、いつでも請求を無効化し、残りの残高を利用できます。", - "zen.faq.q8": "他のコーディングエージェントでもZenを使えますか?", - "zen.faq.a8": - "ZenはOpenCodeとの相性が良いですが、どのエージェントでもZenを利用できます。お使いのコーディングエージェントのセットアップ手順に従ってください。", - - "zen.cta.start": "Zenをはじめる", - "zen.pricing.title": "$20の従量課金制残高を追加", - "zen.pricing.fee": "(+$1.23 カード処理手数料)", - "zen.pricing.body": - "任意のエージェントと一緒に使用できます。毎月の支出制限を設定できます。いつでもキャンセルできます。", - "zen.problem.title": "Zenはどのような問題を解決していますか?", - "zen.problem.body": - "利用可能なモデルは非常に多くありますが、コーディングエージェントで適切に機能するモデルはほんのわずかです。ほとんどのプロバイダーは、それらを異なる設定で提供し、結果も異なります。", - "zen.problem.subtitle": "OpenCodeユーザーだけでなく、すべての人を対象にこの問題を修正しています。", - "zen.problem.item1": "選択したモデルをテストし、チームに相談する", - "zen.problem.item2": "プロバイダーと連携して適切に提供されるようにする", - "zen.problem.item3": "私たちが推奨するすべてのモデルとプロバイダーの組み合わせをベンチマークする", - "zen.how.title": "Zenの仕組み", - "zen.how.body": "ZenをOpenCodeとともに使用することをお勧めしますが、Zenはどのエージェントでも使用できます。", - "zen.how.step1.title": "サインアップして$20の残高を追加", - "zen.how.step1.beforeLink": "", - "zen.how.step1.link": "セットアップ手順", - "zen.how.step2.title": "透明性のある価格設定でZenを使用する", - "zen.how.step2.link": "リクエストごとに支払う", - "zen.how.step2.afterLink": "(マークアップなし)", - "zen.how.step3.title": "自動チャージ", - "zen.how.step3.body": "残高が$5に達すると、自動的に$20が追加されます", - "zen.privacy.title": "あなたのプライバシーは私たちにとって重要です", - "zen.privacy.beforeExceptions": - "すべてのZenモデルは米国でホストされています。プロバイダーはゼロ保持ポリシーに従い、モデルのトレーニングにデータを使用しません(", - "zen.privacy.exceptionsLink": "以下の例外", - - "go.title": "OpenCode Go | すべての人のための低価格なコーディングモデル", - "go.meta.description": - "Goは最初の月$5、その後$10/月で、GLM-5.2、GLM-5.1、Kimi K2.7 Code、Kimi K2.6、MiMo-V2.5-Pro、MiMo-V2.5、Qwen3.7 Max、Qwen3.7 Plus、Qwen3.6 Plus、MiniMax M2.7、MiniMax M3、DeepSeek V4 Pro、DeepSeek V4 Flashに対して5時間のゆとりあるリクエスト上限があります。", - "go.hero.title": "すべての人のための低価格なコーディングモデル", - "go.hero.body": - "Goは、世界中のプログラマーにエージェント型コーディングをもたらします。最も高性能なオープンソースモデルへの十分な制限と安定したアクセスを提供し、コストや可用性を気にすることなく強力なエージェントで構築できます。", - - "go.cta.start": "Goを購読する", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "Goを購読する", - "go.cta.price": "$10/月", - "go.cta.promo": "初月 $5", - "go.pricing.body": - "どのエージェントでも使えます。最初の月$5、その後$10/月。必要に応じてクレジットを追加。いつでもキャンセルできます。", - "go.graph.free": "無料", - "go.graph.freePill": "Big Pickleと無料モデル", - "go.graph.go": "Go", - "go.graph.label": "5時間あたりのリクエスト数", - "go.graph.usageLimits": "利用制限", - "go.graph.tick": "{{n}}倍", - "go.graph.aria": "5時間あたりのリクエスト数: {{free}} 対 {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "元CEO, Terminal Products", - "go.testimonials.dax.quoteAfter": "は人生を変えるものでした。本当に迷う必要はありません。", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "元創業者, SEED, PM, Melt, Pop, Dapt, Cadmus, ViewPoint", - "go.testimonials.jay.quoteBefore": "チームの5人中4人が", - "go.testimonials.jay.quoteAfter": "の使用を気に入っています。", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "元Hero, AWS", - "go.testimonials.adam.quoteBefore": "私は", - "go.testimonials.adam.quoteAfter": "をどれだけ推薦してもしきれません。真剣に、本当に良いです。", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "元デザイン責任者, Laravel", - "go.testimonials.david.quoteBefore": "", - "go.testimonials.david.quoteAfter": - "を使えば、すべてのモデルがテスト済みでコーディングエージェントに最適だと確信できます。", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "元インターン, Nvidia (4回)", - "go.testimonials.frank.quote": "まだNvidiaにいられたらよかったのに。", - "go.problem.title": "Goはどのような問題を解決していますか?", - "go.problem.body": - "私たちはOpenCodeの体験をできるだけ多くの人に届けることに注力しています。OpenCode Goは低価格のサブスクリプションで、最初の月は$5、その後は$10/月です。ゆとりある上限と、最も高性能なオープンソースモデルへの信頼できるアクセスを提供します。", - "go.problem.subtitle": " ", - "go.problem.item1": "低価格なサブスクリプション料金", - "go.problem.item2": "十分な制限と安定したアクセス", - "go.problem.item3": "できるだけ多くのプログラマーのために構築", - "go.problem.item4": - "GLM-5.2、GLM-5.1、Kimi K2.7 Code、Kimi K2.6、MiMo-V2.5-Pro、MiMo-V2.5、Qwen3.7 Max、Qwen3.7 Plus、Qwen3.6 Plus、MiniMax M2.7、MiniMax M3、DeepSeek V4 Pro、DeepSeek V4 Flashを含む", - "go.how.title": "Goの仕組み", - "go.how.body": "Goは最初の月$5、その後$10/月で始まります。OpenCodeまたは任意のエージェントで使えます。", - "go.how.step1.title": "アカウントを作成", - "go.how.step1.beforeLink": "", - "go.how.step1.link": "セットアップ手順はこちら", - "go.how.step2.title": "Goを購読する", - "go.how.step2.link": "最初の月$5", - "go.how.step2.afterLink": "その後$10/月、ゆとりある上限付き", - "go.how.step3.title": "コーディングを開始", - "go.how.step3.body": "オープンソースモデルへの安定したアクセスで", - "go.privacy.title": "あなたのプライバシーは私たちにとって重要です", - "go.privacy.body": - "このプランは主に海外ユーザー向けに設計されており、米国、EU、シンガポールでホストされたモデルにより安定したグローバルアクセスを提供します。", - "go.privacy.contactAfter": "ご質問がございましたら。", - "go.privacy.beforeExceptions": - "Goのモデルは米国でホストされています。プロバイダーはゼロ保持ポリシーに従い、モデルのトレーニングにデータを使用しません(", - "go.privacy.exceptionsLink": "以下の例外", - "go.faq.q1": "OpenCode Goとは?", - "go.faq.a1": - "Goは、エージェント型コーディングのための有能なオープンソースモデルへの安定したアクセスを提供する低価格なサブスクリプションです。", - "go.faq.q2": "Goにはどのモデルが含まれますか?", - "go.faq.a2": "Go には、十分な利用上限と安定したアクセスを備えた、以下のモデルが含まれます。", - "go.faq.q3": "GoはZenと同じですか?", - "go.faq.a3": - "いいえ。Zenは従量課金制ですが、Goは最初の月$5、その後$10/月で始まり、GLM-5.2、GLM-5.1、Kimi K2.7 Code、Kimi K2.6、MiMo-V2.5-Pro、MiMo-V2.5、Qwen3.7 Max、Qwen3.7 Plus、Qwen3.6 Plus、MiniMax M2.7、MiniMax M3、DeepSeek V4 Pro、DeepSeek V4 Flashのオープンソースモデルに対して、ゆとりある上限と信頼できるアクセスを提供します。", - "go.faq.q4": "Goの料金は?", - "go.faq.a4.p1.beforePricing": "Goは", - "go.faq.a4.p1.pricingLink": "最初の月$5", - "go.faq.a4.p1.afterPricing": "その後$10/月、ゆとりある上限付き。", - "go.faq.a4.p2.beforeAccount": "管理画面:", - "go.faq.a4.p2.accountLink": "アカウント", - "go.faq.a4.p3": "いつでもキャンセル可能です。", - "go.faq.q5": "データとプライバシーは?", - "go.faq.a5.body": - "このプランは主に海外ユーザー向けに設計されており、米国、EU、シンガポールでホストされたモデルにより安定したグローバルアクセスを提供します。プロバイダーはゼロ保持ポリシーに従い、お客様のデータをモデルのトレーニングに使用しません。", - "go.faq.a5.beforeExceptions": - "Goのモデルは米国でホストされています。プロバイダーはゼロ保持ポリシーに従い、モデルのトレーニングにデータを使用しません(", - "go.faq.a5.exceptionsLink": "以下の例外", - "go.faq.q6": "クレジットをチャージできますか?", - "go.faq.a6": "利用枠を追加したい場合は、アカウントでクレジットをチャージできます。", - "go.faq.q7": "キャンセルできますか?", - "go.faq.a7": "はい、いつでもキャンセル可能です。", - "go.faq.q8": "他のコーディングエージェントでGoを使えますか?", - "go.faq.a8": - "はい、Goは任意のエージェントで使用できます。お使いのコーディングエージェントのセットアップ手順に従ってください。", - - "go.faq.q9": "無料モデルとGoの違いは何ですか?", - "go.faq.a9": - "無料モデルにはBig Pickleと、その時点で利用可能なプロモーションモデルが含まれ、1日200リクエストの制限があります。GoにはGLM-5.2、GLM-5.1、Kimi K2.7 Code、Kimi K2.6、MiMo-V2.5-Pro、MiMo-V2.5、Qwen3.7 Max、Qwen3.7 Plus、Qwen3.6 Plus、MiniMax M2.7、MiniMax M3、DeepSeek V4 Pro、DeepSeek V4 Flashが含まれ、ローリングウィンドウ(5時間、週間、月間)全体でより高いリクエスト制限が適用されます。これは概算で5時間あたり$12、週間$30、月間$60相当です(実際のリクエスト数はモデルと使用状況により異なります)。", - - "zen.api.error.rateLimitExceeded": "レート制限を超えました。後でもう一度お試しください。", - "zen.api.error.modelNotSupported": "モデル {{model}} はサポートされていません", - "zen.api.error.modelFormatNotSupported": "フォーマット {{format}} ではモデル {{model}} はサポートされていません", - "zen.api.error.noProviderAvailable": "利用可能なプロバイダーがありません", - "zen.api.error.providerNotSupported": "プロバイダー {{provider}} はサポートされていません", - "zen.api.error.missingApiKey": "APIキーがありません。", - "zen.api.error.invalidApiKey": "無効なAPIキーです。", - "zen.api.error.subscriptionQuotaExceeded": - "サブスクリプションの制限を超えました。{{retryIn}} 後に再試行してください。", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "5時間の利用上限に達しました。{{retryIn}} 後にリセットされます。今すぐこのモデルの利用を続けるには、利用可能な残高からの利用を有効化してください: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "週間の利用上限に達しました。{{retryIn}} 後にリセットされます。今すぐこのモデルの利用を続けるには、利用可能な残高からの利用を有効化してください: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "月間の利用上限に達しました。{{retryIn}} 後にリセットされます。今すぐこのモデルの利用を続けるには、利用可能な残高からの利用を有効化してください: {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "お支払い方法がありません。こちらからお支払い方法を追加してください: {{billingUrl}}", - "zen.api.error.insufficientBalance": "残高が不足しています。こちらから請求を管理してください: {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "ワークスペースが月額の利用上限 ${{amount}} に達しました。こちらから上限を管理してください: {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "月額の利用上限 ${{amount}} に達しました。こちらから上限を管理してください: {{membersUrl}}", - "zen.api.error.modelDisabled": "モデルが無効です", - "zen.api.error.regionNotAllowed": - "このモデルは中国でホストされています。このモデルを使用したい場合は、設定で有効にしてください: {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "{{model}} の無料プロモーションは終了しました。OpenCode Go を購読するとモデルを引き続き使用できます - {{link}}", - - "black.meta.title": "OpenCode Black | 世界最高峰のコーディングモデルすべてにアクセス", - "black.meta.description": "OpenCode Black サブスクリプションプランで、Claude、GPT、Gemini などにアクセス。", - "black.hero.title": "世界最高峰のコーディングモデルすべてにアクセス", - "black.hero.subtitle": "Claude、GPT、Gemini などを含む", - "black.title": "OpenCode Black | 料金", - "black.paused": "Blackプランの登録は一時的に停止しています。", - "black.plan.icon20": "Black 20 プラン", - "black.plan.icon100": "Black 100 プラン", - "black.plan.icon200": "Black 200 プラン", - "black.plan.multiplier100": "Black 20 の5倍の利用量", - "black.plan.multiplier200": "Black 20 の20倍の利用量", - "black.price.perMonth": "/月", - "black.price.perPersonBilledMonthly": "1人あたり / 月額請求", - "black.terms.1": "サブスクリプションはすぐには開始されません", - "black.terms.2": "ウェイトリストに追加され、まもなく有効化されます", - "black.terms.3": "サブスクリプションが有効化された時点でのみカードに請求されます", - "black.terms.4": "利用制限が適用されます。過度な自動化利用は早く制限に達する可能性があります", - "black.terms.5": "サブスクリプションは個人向けです。チーム利用はエンタープライズにお問い合わせください", - "black.terms.6": "将来的に制限が調整されたり、プランが廃止される可能性があります", - "black.terms.7": "サブスクリプションはいつでもキャンセル可能です", - "black.action.continue": "続ける", - "black.finePrint.beforeTerms": "表示価格には適用される税金は含まれていません", - "black.finePrint.terms": "利用規約", - "black.workspace.title": "OpenCode Black | ワークスペースの選択", - "black.workspace.selectPlan": "このプランのワークスペースを選択してください", - "black.workspace.name": "ワークスペース {{n}}", - "black.subscribe.title": "OpenCode Black を購読する", - "black.subscribe.paymentMethod": "支払い方法", - "black.subscribe.loadingPaymentForm": "支払いフォームを読み込み中...", - "black.subscribe.selectWorkspaceToContinue": "続けるにはワークスペースを選択してください", - "black.subscribe.failurePrefix": "おっと!", - "black.subscribe.error.generic": "エラーが発生しました", - "black.subscribe.error.invalidPlan": "無効なプランです", - "black.subscribe.error.workspaceRequired": "ワークスペースIDが必要です", - "black.subscribe.error.alreadySubscribed": "このワークスペースは既にサブスクリプションを持っています", - "black.subscribe.processing": "処理中...", - "black.subscribe.submit": "購読する ${{plan}}", - "black.subscribe.form.chargeNotice": "サブスクリプションが有効化された時点でのみ請求されます", - "black.subscribe.success.title": "OpenCode Black ウェイトリストに登録されました", - "black.subscribe.success.subscriptionPlan": "サブスクリプションプラン", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "金額", - "black.subscribe.success.amountValue": "${{plan}} / 月", - "black.subscribe.success.paymentMethod": "支払い方法", - "black.subscribe.success.dateJoined": "登録日", - "black.subscribe.success.chargeNotice": "サブスクリプションが有効化された時点でカードに請求されます", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "利用", - "workspace.nav.apiKeys": "APIキー", - "workspace.nav.members": "メンバー", - "workspace.nav.billing": "請求", - "workspace.nav.settings": "設定", - - "workspace.home.banner.beforeLink": "コーディングエージェント向けに信頼性の高い最適化されたモデル。", - "workspace.lite.banner.beforeLink": "誰でも使える低コストコーディングモデル。", - "workspace.home.billing.loading": "読み込み中...", - "workspace.home.billing.enable": "課金を有効にする", - "workspace.home.billing.currentBalance": "現在の残高", - - "workspace.newUser.feature.tested.title": "テスト・検証済みモデル", - "workspace.newUser.feature.tested.body": - "最高のパフォーマンスを保証するために、コーディングエージェントに特化したモデルのベンチマークとテストを行いました。", - "workspace.newUser.feature.quality.title": "最高品質", - "workspace.newUser.feature.quality.body": - "最適なパフォーマンスを実現するように構成されたモデルにアクセスします。ダウングレードや安価なプロバイダーへのルーティングはありません。", - "workspace.newUser.feature.lockin.title": "ロックインなし", - "workspace.newUser.feature.lockin.body": - "任意のコーディングエージェントでZenを使用でき、必要に応じていつでもOpenCodeを備えた他のプロバイダーを使用し続けることができます。", - "workspace.newUser.copyApiKey": "APIキーをコピー", - "workspace.newUser.copyKey": "キーをコピー", - "workspace.newUser.copied": "コピーしました!", - "workspace.newUser.step.enableBilling": "課金を有効にする", - "workspace.newUser.step.login.before": "実行", - "workspace.newUser.step.login.after": "してOpenCodeを選択", - "workspace.newUser.step.pasteKey": "APIキーを貼り付け", - "workspace.newUser.step.models.before": "OpenCodeを起動し実行", - "workspace.newUser.step.models.after": "してモデルを選択", - - "workspace.models.title": "モデル", - "workspace.models.subtitle.beforeLink": "ワークスペースのメンバーがアクセスできるモデルを管理します。", - "workspace.models.table.model": "モデル", - "workspace.models.table.enabled": "有効", - - "workspace.providers.title": "APIキーの設定", - "workspace.providers.subtitle": "AIプロバイダーの独自のAPIキーを設定します。", - "workspace.providers.placeholder": "{{provider}} APIキーを入力 ({{prefix}}...)", - "workspace.providers.configure": "設定", - "workspace.providers.edit": "編集", - "workspace.providers.delete": "削除", - "workspace.providers.saving": "保存中...", - "workspace.providers.save": "保存", - "workspace.providers.table.provider": "プロバイダー", - "workspace.providers.table.apiKey": "APIキー", - - "workspace.usage.title": "利用履歴", - "workspace.usage.subtitle": "最近のAPIの使用状況とコスト。", - "workspace.usage.empty": "開始するには、最初のAPI呼び出しを行ってください。", - "workspace.usage.table.date": "日付", - "workspace.usage.table.model": "モデル", - "workspace.usage.table.input": "入力", - "workspace.usage.table.output": "出力", - "workspace.usage.table.cost": "コスト", - "workspace.usage.table.session": "セッション", - "workspace.usage.breakdown.input": "入力", - "workspace.usage.breakdown.cacheRead": "キャッシュ読み取り", - "workspace.usage.breakdown.cacheWrite": "キャッシュ書き込み", - "workspace.usage.breakdown.output": "出力", - "workspace.usage.breakdown.reasoning": "推論", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "コスト", - "workspace.cost.subtitle": "モデルごとの使用料金の内訳。", - "workspace.cost.allModels": "全モデル", - "workspace.cost.allKeys": "すべてのキー", - "workspace.cost.deletedSuffix": "(削除済み)", - "workspace.cost.empty": "選択した期間の使用状況データはありません。", - "workspace.cost.subscriptionShort": "サブ", - - "workspace.keys.title": "APIキー", - "workspace.keys.subtitle": "OpenCodeサービスにアクセスするためのAPIキーを管理します。", - "workspace.keys.create": "APIキーの作成", - "workspace.keys.placeholder": "キー名を入力してください", - "workspace.keys.empty": "OpenCodeゲートウェイAPIキーを作成する", - "workspace.keys.table.name": "名前", - "workspace.keys.table.key": "キー", - "workspace.keys.table.createdBy": "作成者", - "workspace.keys.table.lastUsed": "最終利用", - "workspace.keys.copyApiKey": "APIキーをコピー", - "workspace.keys.delete": "削除", - - "workspace.members.title": "メンバー", - "workspace.members.subtitle": "ワークスペースのメンバーとその権限を管理します。", - "workspace.members.invite": "メンバーを招待", - "workspace.members.inviting": "招待中...", - "workspace.members.beta.beforeLink": "ベータ期間中、チームはワークスペースを無料で利用できます。", - "workspace.members.form.invitee": "招待する人", - "workspace.members.form.emailPlaceholder": "メールアドレスを入力", - "workspace.members.form.role": "ロール", - "workspace.members.form.monthlyLimit": "月間支出上限", - "workspace.members.noLimit": "制限なし", - "workspace.members.noLimitLowercase": "制限なし", - "workspace.members.invited": "招待済み", - "workspace.members.edit": "編集", - "workspace.members.delete": "削除", - "workspace.members.saving": "保存中...", - "workspace.members.save": "保存", - "workspace.members.table.email": "メールアドレス", - "workspace.members.table.role": "ロール", - "workspace.members.table.monthLimit": "月間上限", - "workspace.members.role.admin": "管理者", - "workspace.members.role.adminDescription": "モデル、メンバー、請求を管理できます", - "workspace.members.role.member": "メンバー", - "workspace.members.role.memberDescription": "自分自身のAPIキーのみを生成できます", - - "workspace.settings.title": "設定", - "workspace.settings.subtitle": "ワークスペース名と設定を更新します。", - "workspace.settings.workspaceName": "ワークスペース名", - "workspace.settings.defaultName": "デフォルト", - "workspace.settings.updating": "更新中...", - "workspace.settings.save": "保存", - "workspace.settings.edit": "編集", - - "workspace.billing.title": "請求", - "workspace.billing.subtitle.beforeLink": "支払い方法を管理します。", - "workspace.billing.contactUs": "お問い合わせ", - "workspace.billing.subtitle.afterLink": "ご質問がございましたら。", - "workspace.billing.currentBalance": "現在の残高", - "workspace.billing.add": "$を追加", - "workspace.billing.enterAmount": "金額を入力", - "workspace.billing.loading": "読み込み中...", - "workspace.billing.addAction": "追加", - "workspace.billing.addBalance": "残高を追加", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "Stripeと連携済み", - "workspace.billing.manage": "管理", - "workspace.billing.enable": "課金を有効にする", - - "workspace.monthlyLimit.title": "月間上限", - "workspace.monthlyLimit.subtitle": "アカウントの月間使用制限を設定します。", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "設定中...", - "workspace.monthlyLimit.set": "設定", - "workspace.monthlyLimit.edit": "上限を編集", - "workspace.monthlyLimit.noLimit": "使用制限は設定されていません。", - "workspace.monthlyLimit.currentUsage.beforeMonth": "現在の使用状況(", - "workspace.monthlyLimit.currentUsage.beforeAmount": ")は $", - - "workspace.redeem.title": "クーポンを利用", - "workspace.redeem.subtitle": "クーポンコードを利用して、クレジットや特典を受け取ります。", - "workspace.redeem.placeholder": "クーポンコードを入力", - "workspace.redeem.redeem": "利用する", - "workspace.redeem.redeeming": "利用中...", - "workspace.redeem.success": "クーポンを利用しました。", - - "workspace.reload.title": "自動チャージ", - "workspace.reload.disabled.before": "自動チャージは", - "workspace.reload.disabled.state": "無効", - "workspace.reload.disabled.after": "です。残高が少なくなったときに自動的にチャージするには有効にしてください。", - "workspace.reload.enabled.before": "自動チャージは", - "workspace.reload.enabled.state": "有効", - "workspace.reload.enabled.middle": "チャージします(", - "workspace.reload.processingFee": "手数料", - "workspace.reload.enabled.after": ")。残高が以下に達したとき:", - "workspace.reload.edit": "編集", - "workspace.reload.enable": "有効にする", - "workspace.reload.enableAutoReload": "自動チャージを有効にする", - "workspace.reload.reloadAmount": "チャージ額 $", - "workspace.reload.whenBalanceReaches": "残高が $ に達したとき", - "workspace.reload.saving": "保存中...", - "workspace.reload.save": "保存", - "workspace.reload.failedAt": "チャージ失敗:", - "workspace.reload.reason": "理由:", - "workspace.reload.updatePaymentMethod": "支払い方法を更新して、もう一度お試しください。", - "workspace.reload.retrying": "再試行中...", - "workspace.reload.retry": "再試行", - "workspace.reload.error.paymentFailed": "支払いに失敗しました。", - - "workspace.payments.title": "支払い履歴", - "workspace.payments.subtitle": "最近の支払い取引。", - "workspace.payments.table.date": "日付", - "workspace.payments.table.paymentId": "支払いID", - "workspace.payments.table.amount": "金額", - "workspace.payments.table.receipt": "領収書", - "workspace.payments.type.credit": "クレジット", - "workspace.payments.type.subscription": "サブスクリプション", - "workspace.payments.view": "表示", - - "workspace.black.loading": "読み込み中...", - "workspace.black.time.day": "日", - "workspace.black.time.days": "日", - "workspace.black.time.hour": "時間", - "workspace.black.time.hours": "時間", - "workspace.black.time.minute": "分", - "workspace.black.time.minutes": "分", - "workspace.black.time.fewSeconds": "数秒", - "workspace.black.subscription.title": "サブスクリプション", - "workspace.black.subscription.message": "あなたは OpenCode Black を月額 ${{plan}} で購読しています。", - "workspace.black.subscription.manage": "サブスクリプションの管理", - "workspace.black.subscription.rollingUsage": "5時間利用", - "workspace.black.subscription.weeklyUsage": "週間利用量", - "workspace.black.subscription.resetsIn": "リセットまで", - "workspace.black.subscription.useBalance": "利用限度額に達したら利用可能な残高を使用する", - "workspace.black.waitlist.title": "ウェイトリスト", - "workspace.black.waitlist.joined": - "あなたは月額 ${{plan}} の OpenCode Black プランのウェイトリストに登録されています。", - "workspace.black.waitlist.ready": "月額 ${{plan}} の OpenCode Black プランに登録する準備ができました。", - "workspace.black.waitlist.leave": "ウェイトリストから抜ける", - "workspace.black.waitlist.leaving": "処理中...", - "workspace.black.waitlist.left": "退会済み", - "workspace.black.waitlist.enroll": "登録する", - "workspace.black.waitlist.enrolling": "登録中...", - "workspace.black.waitlist.enrolled": "登録済み", - "workspace.black.waitlist.enrollNote": - "「登録する」をクリックすると、サブスクリプションがすぐに開始され、カードに請求されます。", - - "workspace.lite.loading": "読み込み中...", - "workspace.lite.time.day": "日", - "workspace.lite.time.days": "日", - "workspace.lite.time.hour": "時間", - "workspace.lite.time.hours": "時間", - "workspace.lite.time.minute": "分", - "workspace.lite.time.minutes": "分", - "workspace.lite.time.fewSeconds": "数秒", - "workspace.lite.subscription.message": "あなたは OpenCode Go を購読しています。", - "workspace.lite.subscription.manage": "サブスクリプションの管理", - "workspace.lite.subscription.rollingUsage": "ローリング利用量", - "workspace.lite.subscription.weeklyUsage": "週間利用量", - "workspace.lite.subscription.monthlyUsage": "月間利用量", - "workspace.lite.subscription.resetsIn": "リセットまで", - "workspace.lite.subscription.useBalance": "利用限度額に達したら利用可能な残高を使用する", - "workspace.lite.subscription.selectProvider": - "Go モデルを使用するには、opencode の設定で「OpenCode Go」をプロバイダーとして選択してください。", - "workspace.lite.providers.title": "プロバイダー", - "workspace.lite.providers.description": "ルーティングに使用するプロバイダーを管理します。", - "workspace.lite.providers.useChina": "中国でホストされているモデルを有効にする", - "workspace.lite.black.message": - "現在 OpenCode Black を購読中、またはウェイティングリストに登録されています。Go に切り替える場合は、先に登録を解除してください。", - "workspace.lite.other.message": - "このワークスペースの別のメンバーが既に OpenCode Go を購読しています。ワークスペースにつき1人のメンバーのみが購読できます。", - "workspace.lite.promo.description": - "OpenCode Goは{{price}}で始まり、その後は$10/月で、人気の高いオープンコーディングモデルへの安定したアクセスと余裕のある利用枠を提供します。", - "workspace.lite.promo.price": "初月$5", - "workspace.lite.promo.modelsTitle": "含まれるもの", - "workspace.lite.promo.footer": - "このプランは主にグローバルユーザー向けに設計されており、米国、EU、シンガポールでホストされたモデルにより安定したグローバルアクセスを提供します。料金と利用制限は、初期の利用状況やフィードバックに基づいて変更される可能性があります。", - "workspace.lite.promo.subscribe": "Goを購読する", - "workspace.lite.promo.subscribing": "リダイレクト中...", - "workspace.lite.promo.otherMethods": "その他の支払い方法", - "workspace.lite.promo.selectMethod": "支払い方法を選択", - - "workspace.referral.copyLink": "リンクをコピー", - "workspace.referral.copied": "コピーしました", - "workspace.referral.overview.title": "友達を招待", - "workspace.referral.overview.subtitle": "友達がサブスクライブすると $5 を獲得。友達にも $5 が付与されます。", - "workspace.referral.instructions.share": "リファラルリンクをシェア", - "workspace.referral.instructions.subscribe": "友達が参加して Go にサブスクライブ", - "workspace.referral.instructions.claim": "二人とも $5 の利用クレジットを獲得し、Go の利用上限に充当できます", - "workspace.referral.rewards.title": "リファラル特典", - "workspace.referral.rewards.description": "利用可能なリファラルクレジットを Go の利用に適用します。", - "workspace.referral.rewards.subtitle": "{{applied}} / {{total}} 件の特典を適用済み。", - "workspace.referral.rewards.empty": "リファラル特典はまだありません。", - "workspace.referral.table.reward": "特典", - "workspace.referral.table.referral": "説明", - "workspace.referral.table.date": "日付", - "workspace.referral.reward.description.inviter": "{{email}} を招待しました", - "workspace.referral.reward.description.invitee": "{{email}} に招待されました", - "workspace.referral.reward.action.subscribeUnlock": "サブスクライブしてアンロック", - "workspace.referral.reward.action.view": "特典を表示", - "workspace.referral.reward.action.applied": "特典を適用済み", - "workspace.referral.reward.source.pendingInviter": "友達のサブスクライブ待ち", - "workspace.referral.reward.source.pendingInvitee": "サブスクライブして特典をアンロック", - "workspace.referral.reward.source.available": "特典は適用可能です", - "workspace.referral.reward.source.applied": "特典を適用済み", - "workspace.referral.reward.status.applied": "特典を適用済み", - "workspace.referral.reward.status.pendingInviter": "サブスクライブしてアンロック", - "workspace.referral.reward.status.pendingInvitee": "サブスクライブしてアンロック", - "workspace.referral.apply.noGo": "サブスクライブしてアンロック", - "workspace.referral.apply.preview": "特典を表示", - "workspace.referral.apply.action": "適用", - "workspace.referral.apply.confirmTitle": "特典を適用", - "workspace.referral.apply.confirmBody": "{{amount}} を適用して、このワークスペースの現在の使用量を減らします。", - "workspace.referral.apply.confirmAction": "適用", - - "download.title": "OpenCode | ダウンロード", - "download.meta.description": "OpenCode を macOS、Windows、Linux 向けにダウンロード", - "download.hero.title": "OpenCode をダウンロード", - "download.hero.subtitle": "macOS、Windows、Linux 向けベータ版を利用可能", - "download.hero.button": "{{os}} 向けダウンロード", - "download.section.terminal": "OpenCode Terminal", - "download.section.desktop": "OpenCode Desktop (Beta)", - "download.section.extensions": "OpenCode Extensions", - "download.section.integrations": "OpenCode Integrations", - "download.action.download": "ダウンロード", - "download.action.install": "インストール", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "必ずしもそうではありませんが、おそらく必要です。OpenCodeを有料プロバイダーに接続したい場合はAIサブスクリプションが必要ですが、", - "download.faq.a3.localLink": "ローカルモデル", - "download.faq.a3.afterLocal.beforeZen": "であれば無料で利用できます。ユーザーには", - "download.faq.a3.afterZen": - "の利用をお勧めしていますが、OpenCodeはOpenAI、Anthropic、xAIなどの主要なプロバイダーに対応しています。", - - "download.faq.a5.p1": "OpenCodeは100%無料で利用できます。", - "download.faq.a5.p2.beforeZen": - "追加コストはモデルプロバイダーのサブスクリプションから発生します。OpenCodeはどのモデルプロバイダーでも利用できますが、", - "download.faq.a5.p2.afterZen": "の利用をおすすめします。", - - "download.faq.a6.p1": "あなたのデータと情報は、OpenCodeで共有リンクを作成したときにのみ保存されます。", - "download.faq.a6.p2.beforeShare": "詳しくは", - "download.faq.a6.shareLink": "共有ページ", - - "enterprise.title": "OpenCode | 組織向けエンタープライズソリューション", - "enterprise.meta.description": "エンタープライズソリューションについてOpenCodeに問い合わせる", - "enterprise.hero.title": "あなたのコードはあなたのもの", - "enterprise.hero.body1": - "OpenCodeは、データやコンテキストを一切保存せず、ライセンス制限や所有権の主張もなく、組織内で安全に動作します。チームでのトライアルから始め、SSOや社内AIゲートウェイと統合して組織全体に展開できます。", - "enterprise.hero.body2": "どのような支援ができるか、お聞かせください。", - "enterprise.form.name.label": "氏名", - "enterprise.form.name.placeholder": "ジェフ・ベゾス", - "enterprise.form.role.label": "役職", - "enterprise.form.role.placeholder": "会長", - "enterprise.form.company.label": "会社名", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "会社メールアドレス", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "電話番号", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "どのような課題を解決したいですか?", - "enterprise.form.message.placeholder": "これについて支援が必要です...", - "enterprise.form.send": "送信", - "enterprise.form.sending": "送信中...", - "enterprise.form.success": "送信しました。まもなくご連絡いたします。", - "enterprise.form.success.submitted": "フォームが正常に送信されました。", - "enterprise.form.error.allFieldsRequired": "すべての項目は必須です。", - "enterprise.form.error.invalidEmailFormat": "無効なメール形式です。", - "enterprise.form.error.internalServer": "内部サーバーエラー。", - "enterprise.faq.title": "FAQ", - "enterprise.faq.q1": "OpenCode Enterpriseとは?", - "enterprise.faq.a1": - "OpenCode Enterpriseは、コードとデータが決してインフラの外に出ないことを保証したい組織向けです。SSOや社内AIゲートウェイと統合する集中設定を使用することでこれを実現します。", - "enterprise.faq.q2": "OpenCode Enterpriseを始めるには?", - "enterprise.faq.a2": - "まずはチームでの社内トライアルから始めてください。OpenCodeはデフォルトでコードやコンテキストデータを保存しないため、簡単に始められます。その後、価格や導入オプションについてお問い合わせください。", - "enterprise.faq.q3": "エンタープライズ価格の仕組みは?", - "enterprise.faq.a3": - "シート単位(ユーザー数)でのエンタープライズ価格を提供します。独自のLLMゲートウェイをお持ちの場合、使用トークンに対する課金はありません。詳細は、組織の要件に基づいた見積もりのためにお問い合わせください。", - "enterprise.faq.q4": "OpenCode Enterpriseでデータは安全ですか?", - "enterprise.faq.a4": - "はい。OpenCodeはコードやコンテキストデータを保存しません。すべての処理はローカル、またはAIプロバイダーへの直接API呼び出しを通じて行われます。集中設定とSSO統合により、データは組織のインフラ内で安全に保たれます。", - - "brand.title": "OpenCode | ブランド", - "brand.meta.description": "OpenCode ブランドガイドライン", - "brand.heading": "ブランドガイドライン", - "brand.subtitle": "OpenCodeブランドを扱うためのリソースと素材です。", - "brand.downloadAll": "すべての素材をダウンロード", - - "changelog.title": "OpenCode | 変更履歴", - "changelog.meta.description": "OpenCode リリースノートと変更履歴", - "changelog.hero.title": "変更履歴", - "changelog.hero.subtitle": "OpenCodeの新しいアップデートと改善", - "changelog.empty": "変更履歴が見つかりませんでした。", - "changelog.viewJson": "JSONを表示", - - "bench.list.title": "ベンチマーク", - "bench.list.heading": "ベンチマーク", - "bench.list.table.agent": "エージェント", - "bench.list.table.model": "モデル", - "bench.list.table.score": "スコア", - "bench.submission.error.allFieldsRequired": "すべての項目は必須です。", - - "bench.detail.title": "ベンチマーク - {{task}}", - "bench.detail.notFound": "タスクが見つかりません", - "bench.detail.na": "N/A", - "bench.detail.labels.agent": "エージェント", - "bench.detail.labels.model": "モデル", - "bench.detail.labels.task": "タスク", - "bench.detail.labels.repo": "リポジトリ", - "bench.detail.labels.from": "From", - "bench.detail.labels.to": "To", - "bench.detail.labels.prompt": "プロンプト", - "bench.detail.labels.commit": "コミット", - "bench.detail.labels.averageDuration": "平均所要時間", - "bench.detail.labels.averageScore": "平均スコア", - "bench.detail.labels.averageCost": "平均コスト", - "bench.detail.labels.summary": "概要", - "bench.detail.labels.runs": "実行回数", - "bench.detail.labels.score": "スコア", - "bench.detail.labels.base": "ベース", - "bench.detail.labels.penalty": "ペナルティ", - "bench.detail.labels.weight": "重み", - "bench.detail.table.run": "実行", - "bench.detail.table.score": "スコア (ベース - ペナルティ)", - "bench.detail.table.cost": "コスト", - "bench.detail.table.duration": "所要時間", - "bench.detail.run.title": "実行 {{n}}", - "bench.detail.rawJson": "Raw JSON", -} satisfies Dict diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts deleted file mode 100644 index 0245d0c970..0000000000 --- a/packages/console/app/src/i18n/ko.ts +++ /dev/null @@ -1,819 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "문서", - "nav.changelog": "변경 내역", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "엔터프라이즈", - "nav.zen": "Zen", - "nav.login": "로그인", - "nav.free": "다운로드", - "nav.home": "홈", - "nav.openMenu": "메뉴 열기", - "nav.getStartedFree": "무료로 시작하기", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "로고를 SVG로 복사", - "nav.context.copyWordmark": "워드마크를 SVG로 복사", - "nav.context.brandAssets": "브랜드 자산", - - "footer.github": "GitHub", - "footer.docs": "문서", - "footer.changelog": "변경 내역", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "브랜드", - "legal.privacy": "개인정보처리방침", - "legal.terms": "이용약관", - - "email.title": "새로운 제품 출시 소식을 가장 먼저 받아보세요", - "email.subtitle": "대기 명단에 등록하여 조기 이용 권한을 받으세요.", - "email.placeholder": "이메일 주소", - "email.subscribe": "구독", - "email.success": "거의 완료되었습니다. 이메일 수신함을 확인하고 주소를 인증해주세요.", - - "notFound.title": "페이지를 찾을 수 없음 | OpenCode", - "notFound.heading": "404 - 페이지를 찾을 수 없음", - "notFound.home": "홈", - "notFound.docs": "문서", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "opencode 밝은 로고", - "notFound.logoDarkAlt": "opencode 어두운 로고", - - "user.logout": "로그아웃", - - "auth.callback.error.codeMissing": "인증 코드를 찾을 수 없습니다.", - - "workspace.select": "워크스페이스 선택", - "workspace.createNew": "+ 새 워크스페이스 만들기", - "workspace.modal.title": "새 워크스페이스 만들기", - "workspace.modal.placeholder": "워크스페이스 이름 입력", - - "common.cancel": "취소", - "common.creating": "생성 중...", - "common.create": "만들기", - - "common.videoUnsupported": "브라우저가 비디오 태그를 지원하지 않습니다.", - "common.figure": "그림 {{n}}.", - "common.faq": "FAQ", - "common.learnMore": "더 알아보기", - - "error.invalidPlan": "유효하지 않은 플랜", - "error.workspaceRequired": "워크스페이스 ID가 필요합니다", - "error.alreadySubscribed": "이 워크스페이스는 이미 구독 중입니다", - "error.limitRequired": "한도가 필요합니다.", - "error.monthlyLimitInvalid": "유효한 월 한도를 설정하세요.", - "error.workspaceNameRequired": "워크스페이스 이름이 필요합니다.", - "error.nameTooLong": "이름은 255자 이하여야 합니다.", - "error.emailRequired": "이메일이 필요합니다", - "error.roleRequired": "역할이 필요합니다", - "error.idRequired": "ID가 필요합니다", - "error.nameRequired": "이름이 필요합니다", - "error.providerRequired": "제공자가 필요합니다", - "error.apiKeyRequired": "API 키가 필요합니다", - "error.modelRequired": "모델이 필요합니다", - "error.reloadAmountMin": "충전 금액은 최소 ${{amount}}이어야 합니다", - "error.reloadTriggerMin": "잔액 트리거는 최소 ${{amount}}이어야 합니다", - - "app.meta.description": "OpenCode - 오픈 소스 코딩 에이전트.", - - "home.title": "OpenCode | 오픈 소스 AI 코딩 에이전트", - - "temp.title": "OpenCode | 터미널을 위해 만들어진 AI 코딩 에이전트", - "temp.hero.title": "터미널을 위해 만들어진 AI 코딩 에이전트", - "temp.zen": "OpenCode Zen", - "temp.getStarted": "시작하기", - "temp.feature.native.title": "네이티브 TUI", - "temp.feature.native.body": "반응형, 네이티브, 테마 적용 가능한 터미널 UI", - "temp.feature.zen.beforeLink": "OpenCode가 제공하는", - "temp.feature.zen.link": "엄선된 모델 목록", - "temp.feature.zen.afterLink": "", - "temp.feature.models.beforeLink": "로컬 모델을 포함하여", - "temp.feature.models.afterLink": "를 통해 75개 이상의 LLM 제공자 지원", - "temp.screenshot.caption": "tokyonight 테마가 적용된 OpenCode TUI", - "temp.screenshot.alt": "tokyonight 테마가 적용된 OpenCode TUI", - "temp.logoLightAlt": "opencode 밝은 로고", - "temp.logoDarkAlt": "opencode 어두운 로고", - - "home.banner.badge": "신규", - "home.banner.text": "데스크톱 앱 베타 버전 출시", - "home.banner.platforms": "macOS, Windows, Linux 지원", - "home.banner.downloadNow": "지금 다운로드", - "home.banner.downloadBetaNow": "데스크톱 베타 다운로드", - - "home.hero.title": "오픈 소스 AI 코딩 에이전트", - "home.hero.subtitle.a": "무료 모델이 포함되어 있으며, 어떤 제공자의 모델이든 연결 가능합니다.", - "home.hero.subtitle.b": "Claude, GPT, Gemini 등을 포함합니다.", - - "home.install.ariaLabel": "설치 옵션", - - "home.what.title": "OpenCode란 무엇인가요?", - "home.what.body": - "OpenCode는 터미널, IDE, 또는 데스크톱에서 코드를 작성할 수 있도록 도와주는 오픈 소스 에이전트입니다.", - "home.what.lsp.title": "LSP 지원", - "home.what.lsp.body": "LLM에 적합한 LSP를 자동으로 로드합니다", - "home.what.multiSession.title": "멀티 세션", - "home.what.multiSession.body": "동일한 프로젝트에서 여러 에이전트를 병렬로 실행하세요", - "home.what.shareLinks.title": "링크 공유", - "home.what.shareLinks.body": "참조나 디버깅을 위해 세션 링크를 공유하세요", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "GitHub로 로그인하여 Copilot 계정을 사용하세요", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "OpenAI로 로그인하여 ChatGPT Plus 또는 Pro 계정을 사용하세요", - "home.what.anyModel.title": "모든 모델", - "home.what.anyModel.body": "Models.dev를 통해 로컬 모델 포함 75개 이상의 LLM 제공자 지원", - "home.what.anyEditor.title": "모든 에디터", - "home.what.anyEditor.body": "터미널 인터페이스, 데스크톱 앱, IDE 확장 프로그램으로 사용 가능", - "home.what.readDocs": "문서 읽기", - - "home.growth.title": "오픈 소스 AI 코딩 에이전트", - "home.growth.body": - "{{stars}}개 이상의 GitHub 스타, {{contributors}}명의 기여자, {{commits}}개 이상의 커밋과 함께, OpenCode는 매달 {{monthlyUsers}}명 이상의 개발자가 사용하고 신뢰합니다.", - "home.growth.githubStars": "GitHub 스타", - "home.growth.contributors": "기여자", - "home.growth.monthlyDevs": "월간 사용자", - - "home.privacy.title": "프라이버시를 최우선으로 설계", - "home.privacy.body": - "OpenCode는 코드나 컨텍스트 데이터를 저장하지 않으므로, 프라이버시에 민감한 환경에서도 안전하게 작동합니다.", - "home.privacy.learnMore": "더 알아보기:", - "home.privacy.link": "프라이버시", - - "home.faq.q1": "OpenCode란 무엇인가요?", - "home.faq.a1": - "OpenCode는 어떤 AI 모델로든 코드를 작성하고 실행할 수 있도록 도와주는 오픈 소스 에이전트입니다. 터미널 기반 인터페이스, 데스크톱 앱, 또는 IDE 확장 프로그램으로 사용할 수 있습니다.", - "home.faq.q2": "OpenCode는 어떻게 사용하나요?", - "home.faq.a2.before": "가장 쉬운 시작 방법은", - "home.faq.a2.link": "소개", - "home.faq.q3": "OpenCode를 사용하려면 별도의 AI 구독이 필요한가요?", - "home.faq.a3.p1": "꼭 그렇지는 않습니다. OpenCode에는 계정 없이도 사용할 수 있는 무료 모델 세트가 포함되어 있습니다.", - "home.faq.a3.p2.beforeZen": "이 외에도,", - "home.faq.a3.p2.afterZen": " 계정을 생성하여 인기 있는 코딩 모델들을 사용할 수 있습니다.", - "home.faq.a3.p3": "Zen 사용을 권장하지만, OpenCode는 OpenAI, Anthropic, xAI 등 모든 인기 제공자와도 작동합니다.", - "home.faq.a3.p4.beforeLocal": "또한", - "home.faq.a3.p4.localLink": "로컬 모델", - "home.faq.q4": "기존 AI 구독을 OpenCode에서 사용할 수 있나요?", - "home.faq.a4.p1": - "네, OpenCode는 모든 주요 제공자의 구독 플랜을 지원합니다. Claude Pro/Max, ChatGPT Plus/Pro, 또는 GitHub Copilot 구독을 사용할 수 있습니다.", - "home.faq.q5": "OpenCode는 터미널에서만 사용할 수 있나요?", - "home.faq.a5.beforeDesktop": "이제 아닙니다! OpenCode는 이제", - "home.faq.a5.desktop": "데스크톱", - "home.faq.a5.and": "및", - "home.faq.a5.web": "웹", - "home.faq.q6": "OpenCode 비용은 얼마인가요?", - "home.faq.a6": - "OpenCode는 100% 무료로 사용할 수 있습니다. 무료 모델 세트도 포함되어 있습니다. 다른 제공자를 연결할 경우 추가 비용이 발생할 수 있습니다.", - "home.faq.q7": "데이터와 프라이버시는 어떤가요?", - "home.faq.a7.p1": "데이터와 정보는 무료 모델을 사용하거나 공유 링크를 생성할 때만 저장됩니다.", - "home.faq.a7.p2.beforeModels": "더 알아보기:", - "home.faq.a7.p2.modelsLink": "모델", - "home.faq.a7.p2.and": "및", - "home.faq.a7.p2.shareLink": "공유 페이지", - "home.faq.q8": "OpenCode는 오픈 소스인가요?", - "home.faq.a8.p1": "네, OpenCode는 완전히 오픈 소스입니다. 소스 코드는", - "home.faq.a8.p2": "에 공개되어 있으며,", - "home.faq.a8.mitLicense": "MIT 라이선스", - "home.faq.a8.p3": - "를 따릅니다. 즉, 누구나 사용, 수정 또는 개발에 기여할 수 있습니다. 커뮤니티의 누구든지 이슈를 등록하고, 풀 리퀘스트를 제출하고, 기능을 확장할 수 있습니다.", - - "home.zenCta.title": "코딩 에이전트를 위한 신뢰할 수 있고 최적화된 모델", - "home.zenCta.body": - "Zen은 OpenCode가 코딩 에이전트를 위해 특별히 테스트하고 벤치마킹한 엄선된 AI 모델 세트에 대한 액세스를 제공합니다. 제공자 간의 일관되지 않은 성능과 품질에 대해 걱정할 필요 없이, 검증된 모델을 사용하세요.", - "home.zenCta.link": "Zen 알아보기", - - "zen.title": "OpenCode Zen | 코딩 에이전트를 위한 신뢰할 수 있고 최적화된 모델 세트", - "zen.hero.title": "코딩 에이전트를 위한 신뢰할 수 있고 최적화된 모델", - "zen.hero.body": - "Zen은 OpenCode가 코딩 에이전트를 위해 특별히 테스트하고 벤치마킹한 엄선된 AI 모델 세트에 대한 액세스를 제공합니다. 일관되지 않은 성능과 품질에 대해 걱정할 필요 없이, 검증된 모델을 사용하세요.", - - "zen.faq.q1": "OpenCode Zen이란 무엇인가요?", - "zen.faq.a1": "Zen은 OpenCode 팀이 코딩 에이전트를 위해 테스트하고 벤치마킹한 엄선된 AI 모델 세트입니다.", - "zen.faq.q2": "Zen은 왜 더 정확한가요?", - "zen.faq.a2": - "Zen은 코딩 에이전트를 위해 특별히 테스트되고 벤치마킹된 모델만 제공합니다. 스테이크를 버터 나이프로 자르지 않듯이, 코딩에 품질이 낮은 모델을 사용하지 마세요.", - "zen.faq.q3": "Zen이 더 저렴한가요?", - "zen.faq.a3": - "Zen은 영리를 목적으로 하지 않습니다. Zen은 모델 제공자의 비용을 사용자에게 그대로 전달합니다. Zen 사용량이 늘어날수록 OpenCode는 더 좋은 요율을 협상하여 그 혜택을 사용자에게 돌려드릴 수 있습니다.", - "zen.faq.q4": "Zen 비용은 얼마인가요?", - "zen.faq.a4.p1.beforePricing": "Zen은", - "zen.faq.a4.p1.pricingLink": "요청당 비용을 청구하며", - "zen.faq.a4.p1.afterPricing": ", 마크업이 0이므로 모델 제공자가 청구하는 금액 그대로 지불하게 됩니다.", - "zen.faq.a4.p2.beforeAccount": "총 비용은 사용량에 따라 달라지며, 월간 지출 한도를", - "zen.faq.a4.p2.accountLink": "계정", - "zen.faq.a4.p3": "비용을 충당하기 위해 OpenCode는 $20 잔액 충전 시 $1.23의 소액 결제 처리 수수료만 추가합니다.", - "zen.faq.q5": "데이터와 프라이버시는 어떤가요?", - "zen.faq.a5.beforeExceptions": - "모든 Zen 모델은 미국에서 호스팅됩니다. 제공자들은 데이터 보존 금지(zero-retention) 정책을 따르며, 모델 학습에 귀하의 데이터를 사용하지 않습니다. 단,", - "zen.faq.a5.exceptionsLink": "다음 예외", - "zen.faq.q6": "지출 한도를 설정할 수 있나요?", - "zen.faq.a6": "네, 계정에서 월간 지출 한도를 설정할 수 있습니다.", - "zen.faq.q7": "취소할 수 있나요?", - "zen.faq.a7": "네, 언제든지 결제를 비활성화하고 남은 잔액을 사용할 수 있습니다.", - "zen.faq.q8": "다른 코딩 에이전트와 Zen을 사용할 수 있나요?", - "zen.faq.a8": - "Zen은 OpenCode와 훌륭하게 작동하지만, 어떤 에이전트와도 Zen을 사용할 수 있습니다. 선호하는 코딩 에이전트의 설정 지침을 따르세요.", - - "zen.cta.start": "Zen 시작하기", - "zen.pricing.title": "$20 선불 잔액 추가", - "zen.pricing.fee": "(+$1.23 카드 처리 수수료)", - "zen.pricing.body": "모든 에이전트와 함께 사용하세요. 월간 지출 한도 설정 가능. 언제든지 취소 가능.", - "zen.problem.title": "Zen은 어떤 문제를 해결하나요?", - "zen.problem.body": - "사용 가능한 모델은 매우 많지만, 코딩 에이전트와 잘 작동하는 모델은 소수에 불과합니다. 대부분의 제공자들은 모델을 다르게 구성하여 결과가 제각각입니다.", - "zen.problem.subtitle": "우리는 OpenCode 사용자뿐만 아니라 모든 분들을 위해 이 문제를 해결하고 있습니다.", - "zen.problem.item1": "선별된 모델 테스트 및 팀 자문", - "zen.problem.item2": "제공자와 협력하여 올바른 모델 전달 보장", - "zen.problem.item3": "권장하는 모든 모델-제공자 조합 벤치마킹", - "zen.how.title": "Zen 작동 방식", - "zen.how.body": "OpenCode와 함께 사용하는 것을 권장하지만, Zen은 어떤 에이전트와도 사용할 수 있습니다.", - "zen.how.step1.title": "가입 및 $20 잔액 추가", - "zen.how.step1.beforeLink": "", - "zen.how.step1.link": "설정 지침", - "zen.how.step2.title": "투명한 가격으로 Zen 사용", - "zen.how.step2.link": "요청당 지불", - "zen.how.step2.afterLink": "(마크업 0)", - "zen.how.step3.title": "자동 충전", - "zen.how.step3.body": "잔액이 $5에 도달하면 자동으로 $20가 충전됩니다", - "zen.privacy.title": "귀하의 프라이버시는 우리에게 중요합니다", - "zen.privacy.beforeExceptions": - "모든 Zen 모델은 미국에서 호스팅됩니다. 제공자들은 데이터 보존 금지 정책을 따르며 모델 학습에 데이터를 사용하지 않습니다. 단,", - "zen.privacy.exceptionsLink": "다음 예외", - - "go.title": "OpenCode Go | 모두를 위한 저비용 코딩 모델", - "go.meta.description": - "Go는 첫 달 $5, 이후 $10/월로 시작하며, GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro, DeepSeek V4 Flash에 대해 넉넉한 5시간 요청 한도를 제공합니다.", - "go.hero.title": "모두를 위한 저비용 코딩 모델", - "go.hero.body": - "Go는 전 세계 프로그래머들에게 에이전트 코딩을 제공합니다. 가장 유능한 오픈 소스 모델에 대한 넉넉한 한도와 안정적인 액세스를 제공하므로, 비용이나 가용성 걱정 없이 강력한 에이전트로 빌드할 수 있습니다.", - - "go.cta.start": "Go 구독하기", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "Go 구독하기", - "go.cta.price": "$10/월", - "go.cta.promo": "첫 달 $5", - "go.pricing.body": - "어떤 에이전트와도 사용할 수 있습니다. 첫 달 $5, 이후 $10/월. 필요하면 크레딧을 충전하세요. 언제든지 취소할 수 있습니다.", - "go.graph.free": "무료", - "go.graph.freePill": "Big Pickle 및 무료 모델", - "go.graph.go": "Go", - "go.graph.label": "5시간당 요청 수", - "go.graph.usageLimits": "사용 한도", - "go.graph.tick": "{{n}}배", - "go.graph.aria": "5시간당 요청 수: {{free}} 대 {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "전 Terminal Products CEO", - "go.testimonials.dax.quoteAfter": "(은)는 삶을 변화시켰습니다. 정말 당연한 선택입니다.", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "전 Founder, SEED, PM, Melt, Pop, Dapt, Cadmus, ViewPoint", - "go.testimonials.jay.quoteBefore": "우리 팀 5명 중 4명이", - "go.testimonials.jay.quoteAfter": " 사용을 정말 좋아합니다.", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "전 AWS Hero", - "go.testimonials.adam.quoteBefore": "저는", - "go.testimonials.adam.quoteAfter": "를(을) 아무리 추천해도 부족합니다. 진심으로 정말 좋습니다.", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "전 Laravel 디자인 총괄", - "go.testimonials.david.quoteBefore": "", - "go.testimonials.david.quoteAfter": - "와(과) 함께라면 모든 모델이 테스트를 거쳤고 코딩 에이전트에 완벽하다는 것을 알 수 있습니다.", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "전 Nvidia 인턴 (4회)", - "go.testimonials.frank.quote": "아직 Nvidia에 있었으면 좋았을 텐데요.", - "go.problem.title": "Go는 어떤 문제를 해결하나요?", - "go.problem.body": - "우리는 가능한 많은 사람들에게 OpenCode 경험을 제공하는 데 집중하고 있습니다. OpenCode Go는 저렴한 구독 서비스로, 첫 달 $5, 이후 $10/월입니다. 넉넉한 한도와 가장 뛰어난 오픈 소스 모델에 대한 안정적인 액세스를 제공합니다.", - "go.problem.subtitle": " ", - "go.problem.item1": "저렴한 구독 가격", - "go.problem.item2": "넉넉한 한도와 안정적인 액세스", - "go.problem.item3": "가능한 한 많은 프로그래머를 위해 제작됨", - "go.problem.item4": - "GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro, DeepSeek V4 Flash 포함", - "go.how.title": "Go 작동 방식", - "go.how.body": "Go는 첫 달 $5, 이후 $10/월로 시작합니다. OpenCode 또는 어떤 에이전트와도 함께 사용할 수 있습니다.", - "go.how.step1.title": "계정 생성", - "go.how.step1.beforeLink": "", - "go.how.step1.link": "설정 지침을 따르세요", - "go.how.step2.title": "Go 구독", - "go.how.step2.link": "첫 달 $5", - "go.how.step2.afterLink": "이후 $10/월, 넉넉한 한도 포함", - "go.how.step3.title": "코딩 시작", - "go.how.step3.body": "오픈 소스 모델에 대한 안정적인 액세스와 함께", - "go.privacy.title": "귀하의 프라이버시는 우리에게 중요합니다", - "go.privacy.body": - "이 플랜은 주로 글로벌 사용자를 위해 설계되었으며, 안정적인 글로벌 액세스를 위해 미국, EU, 싱가포르에 모델이 호스팅되어 있습니다.", - "go.privacy.contactAfter": "질문이 있으시면 언제든지 문의해 주세요.", - "go.privacy.beforeExceptions": - "Go 모델은 미국에서 호스팅됩니다. 제공자들은 데이터 보존 금지 정책을 따르며 모델 학습에 데이터를 사용하지 않습니다. 단,", - "go.privacy.exceptionsLink": "다음 예외", - "go.faq.q1": "OpenCode Go란 무엇인가요?", - "go.faq.a1": "Go는 에이전트 코딩을 위한 유능한 오픈 소스 모델에 대해 안정적인 액세스를 제공하는 저비용 구독입니다.", - "go.faq.q2": "Go에는 어떤 모델이 포함되나요?", - "go.faq.a2": "Go에는 넉넉한 한도와 안정적인 액세스를 제공하는 아래 모델이 포함됩니다.", - "go.faq.q3": "Go는 Zen과 같은가요?", - "go.faq.a3": - "아니요. Zen은 종량제인 반면, Go는 첫 달 $5, 이후 $10/월로 시작하며, GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro, DeepSeek V4 Flash 오픈 소스 모델에 대한 넉넉한 한도와 안정적인 액세스를 제공합니다.", - "go.faq.q4": "Go 비용은 얼마인가요?", - "go.faq.a4.p1.beforePricing": "Go 비용은", - "go.faq.a4.p1.pricingLink": "첫 달 $5", - "go.faq.a4.p1.afterPricing": "이후 $10/월, 넉넉한 한도 포함.", - "go.faq.a4.p2.beforeAccount": "구독 관리는 다음에서 가능합니다:", - "go.faq.a4.p2.accountLink": "계정", - "go.faq.a4.p3": "언제든지 취소할 수 있습니다.", - "go.faq.q5": "데이터와 프라이버시는 어떤가요?", - "go.faq.a5.body": - "이 플랜은 주로 글로벌 사용자를 위해 설계되었으며, 안정적인 글로벌 액세스를 위해 미국, EU, 싱가포르에 모델이 호스팅되어 있습니다. 당사의 제공자들은 데이터 보존 금지 정책을 따르며 모델 학습에 데이터를 사용하지 않습니다.", - "go.faq.a5.beforeExceptions": - "Go 모델은 미국에서 호스팅됩니다. 제공자들은 데이터 보존 금지 정책을 따르며 모델 학습에 데이터를 사용하지 않습니다. 단,", - "go.faq.a5.exceptionsLink": "다음 예외", - "go.faq.q6": "크레딧을 충전할 수 있나요?", - "go.faq.a6": "사용량이 더 필요한 경우 계정에서 크레딧을 충전할 수 있습니다.", - "go.faq.q7": "취소할 수 있나요?", - "go.faq.a7": "네, 언제든지 취소할 수 있습니다.", - "go.faq.q8": "다른 코딩 에이전트와 Go를 사용할 수 있나요?", - "go.faq.a8": "네, Go는 어떤 에이전트와도 사용할 수 있습니다. 선호하는 코딩 에이전트의 설정 지침을 따르세요.", - - "go.faq.q9": "무료 모델과 Go의 차이점은 무엇인가요?", - "go.faq.a9": - "무료 모델에는 Big Pickle과 당시 사용 가능한 프로모션 모델이 포함되며, 하루 200회 요청 할당량이 적용됩니다. Go는 GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro, DeepSeek V4 Flash를 포함하며, 롤링 윈도우(5시간, 주간, 월간)에 걸쳐 더 높은 요청 할당량을 적용합니다. 이는 대략 5시간당 $12, 주당 $30, 월 $60에 해당합니다(실제 요청 수는 모델 및 사용량에 따라 다름).", - - "zen.api.error.rateLimitExceeded": "속도 제한을 초과했습니다. 나중에 다시 시도해 주세요.", - "zen.api.error.modelNotSupported": "{{model}} 모델은 지원되지 않습니다", - "zen.api.error.modelFormatNotSupported": "{{model}} 모델은 {{format}} 형식에 대해 지원되지 않습니다", - "zen.api.error.noProviderAvailable": "사용 가능한 제공자가 없습니다", - "zen.api.error.providerNotSupported": "{{provider}} 제공자는 지원되지 않습니다", - "zen.api.error.missingApiKey": "API 키가 누락되었습니다.", - "zen.api.error.invalidApiKey": "유효하지 않은 API 키입니다.", - "zen.api.error.subscriptionQuotaExceeded": "구독 할당량을 초과했습니다. {{retryIn}} 후 다시 시도해 주세요.", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "5시간 사용 한도에 도달했습니다. {{retryIn}} 후 초기화됩니다. 이 모델을 지금 계속 사용하려면 사용 가능한 잔액에서 사용을 활성화하세요: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "주간 사용 한도에 도달했습니다. {{retryIn}} 후 초기화됩니다. 이 모델을 지금 계속 사용하려면 사용 가능한 잔액에서 사용을 활성화하세요: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "월간 사용 한도에 도달했습니다. {{retryIn}} 후 초기화됩니다. 이 모델을 지금 계속 사용하려면 사용 가능한 잔액에서 사용을 활성화하세요: {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "결제 수단이 없습니다. 결제 수단을 추가하세요: {{billingUrl}}", - "zen.api.error.insufficientBalance": "잔액이 부족합니다. 결제 관리를 여기서 하세요: {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "워크스페이스의 월간 지출 한도인 ${{amount}}에 도달했습니다. 한도 관리를 여기서 하세요: {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "월간 지출 한도인 ${{amount}}에 도달했습니다. 한도 관리를 여기서 하세요: {{membersUrl}}", - "zen.api.error.modelDisabled": "모델이 비활성화되었습니다", - "zen.api.error.regionNotAllowed": - "이 모델은 중국에서 호스팅됩니다. 이 모델을 사용하려면 설정에서 활성화하세요: {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "{{model}}의 무료 프로모션이 종료되었습니다. OpenCode Go를 구독하면 모델을 계속 사용할 수 있습니다 - {{link}}", - - "black.meta.title": "OpenCode Black | 세계 최고의 코딩 모델에 액세스하세요", - "black.meta.description": "OpenCode Black 구독 플랜으로 Claude, GPT, Gemini 등에 액세스하세요.", - "black.hero.title": "세계 최고의 코딩 모델에 액세스하세요", - "black.hero.subtitle": "Claude, GPT, Gemini 등 포함", - "black.title": "OpenCode Black | 가격", - "black.paused": "Black 플랜 등록이 일시적으로 중단되었습니다.", - "black.plan.icon20": "Black 20 플랜", - "black.plan.icon100": "Black 100 플랜", - "black.plan.icon200": "Black 200 플랜", - "black.plan.multiplier100": "Black 20보다 5배 더 많은 사용량", - "black.plan.multiplier200": "Black 20보다 20배 더 많은 사용량", - "black.price.perMonth": "월", - "black.price.perPersonBilledMonthly": "인당 / 월 청구", - "black.terms.1": "구독이 즉시 시작되지 않습니다", - "black.terms.2": "대기 명단에 추가되며 곧 활성화됩니다", - "black.terms.3": "구독이 활성화될 때만 카드가 청구됩니다", - "black.terms.4": "사용량 제한이 적용되며, 과도한 자동화 사용 시 제한에 더 빨리 도달할 수 있습니다", - "black.terms.5": "구독은 개인용이며, 팀용은 엔터프라이즈에 문의하세요", - "black.terms.6": "향후 제한이 조정되거나 플랜이 중단될 수 있습니다", - "black.terms.7": "언제든지 구독을 취소할 수 있습니다", - "black.action.continue": "계속", - "black.finePrint.beforeTerms": "표시된 가격에는 해당 세금이 포함되어 있지 않습니다", - "black.finePrint.terms": "서비스 약관", - "black.workspace.title": "OpenCode Black | 워크스페이스 선택", - "black.workspace.selectPlan": "이 플랜을 사용할 워크스페이스를 선택하세요", - "black.workspace.name": "워크스페이스 {{n}}", - "black.subscribe.title": "OpenCode Black 구독하기", - "black.subscribe.paymentMethod": "결제 수단", - "black.subscribe.loadingPaymentForm": "결제 양식 로드 중...", - "black.subscribe.selectWorkspaceToContinue": "계속하려면 워크스페이스를 선택하세요", - "black.subscribe.failurePrefix": "이런!", - "black.subscribe.error.generic": "오류가 발생했습니다", - "black.subscribe.error.invalidPlan": "유효하지 않은 플랜", - "black.subscribe.error.workspaceRequired": "워크스페이스 ID가 필요합니다", - "black.subscribe.error.alreadySubscribed": "이 워크스페이스는 이미 구독 중입니다", - "black.subscribe.processing": "처리 중...", - "black.subscribe.submit": "${{plan}} 구독하기", - "black.subscribe.form.chargeNotice": "구독이 활성화될 때만 청구됩니다", - "black.subscribe.success.title": "OpenCode Black 대기 명단에 등록되었습니다", - "black.subscribe.success.subscriptionPlan": "구독 플랜", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "금액", - "black.subscribe.success.amountValue": "월 ${{plan}}", - "black.subscribe.success.paymentMethod": "결제 수단", - "black.subscribe.success.dateJoined": "가입일", - "black.subscribe.success.chargeNotice": "구독이 활성화되면 카드에 청구됩니다", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "사용량", - "workspace.nav.apiKeys": "API 키", - "workspace.nav.members": "멤버", - "workspace.nav.billing": "결제", - "workspace.nav.settings": "설정", - - "workspace.home.banner.beforeLink": "코딩 에이전트를 위한 신뢰할 수 있고 최적화된 모델.", - "workspace.lite.banner.beforeLink": "모두를 위한 저비용 코딩 모델.", - "workspace.home.billing.loading": "로드 중...", - "workspace.home.billing.enable": "결제 활성화", - "workspace.home.billing.currentBalance": "현재 잔액", - - "workspace.newUser.feature.tested.title": "테스트 및 검증된 모델", - "workspace.newUser.feature.tested.body": - "최고의 성능을 보장하기 위해 코딩 에이전트용 모델을 구체적으로 벤치마킹하고 테스트했습니다.", - "workspace.newUser.feature.quality.title": "최고 품질", - "workspace.newUser.feature.quality.body": - "최적의 성능을 위해 구성된 모델에 액세스하세요 - 다운그레이드나 저렴한 제공자로 라우팅되지 않습니다.", - "workspace.newUser.feature.lockin.title": "락인(Lock-in) 없음", - "workspace.newUser.feature.lockin.body": - "Zen을 어떤 코딩 에이전트와도 함께 사용할 수 있으며, 원할 때 언제든지 OpenCode와 함께 다른 제공자를 계속 사용할 수 있습니다.", - "workspace.newUser.copyApiKey": "API 키 복사", - "workspace.newUser.copyKey": "키 복사", - "workspace.newUser.copied": "복사됨!", - "workspace.newUser.step.enableBilling": "결제 활성화", - "workspace.newUser.step.login.before": "실행", - "workspace.newUser.step.login.after": "후 OpenCode 선택", - "workspace.newUser.step.pasteKey": "API 키 붙여넣기", - "workspace.newUser.step.models.before": "OpenCode를 시작하고 실행", - "workspace.newUser.step.models.after": "하여 모델 선택", - - "workspace.models.title": "모델", - "workspace.models.subtitle.beforeLink": "워크스페이스 멤버가 액세스할 수 있는 모델을 관리합니다.", - "workspace.models.table.model": "모델", - "workspace.models.table.enabled": "활성화됨", - - "workspace.providers.title": "나만의 키 가져오기 (BYOK)", - "workspace.providers.subtitle": "AI 제공자의 자체 API 키를 구성하세요.", - "workspace.providers.placeholder": "{{provider}} API 키 입력 ({{prefix}}...)", - "workspace.providers.configure": "구성", - "workspace.providers.edit": "편집", - "workspace.providers.delete": "삭제", - "workspace.providers.saving": "저장 중...", - "workspace.providers.save": "저장", - "workspace.providers.table.provider": "제공자", - "workspace.providers.table.apiKey": "API 키", - - "workspace.usage.title": "사용 내역", - "workspace.usage.subtitle": "최근 API 사용량 및 비용.", - "workspace.usage.empty": "시작하려면 첫 API 호출을 해보세요.", - "workspace.usage.table.date": "날짜", - "workspace.usage.table.model": "모델", - "workspace.usage.table.input": "입력", - "workspace.usage.table.output": "출력", - "workspace.usage.table.cost": "비용", - "workspace.usage.table.session": "세션", - "workspace.usage.breakdown.input": "입력", - "workspace.usage.breakdown.cacheRead": "캐시 읽기", - "workspace.usage.breakdown.cacheWrite": "캐시 쓰기", - "workspace.usage.breakdown.output": "출력", - "workspace.usage.breakdown.reasoning": "추론", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "비용", - "workspace.cost.subtitle": "모델별 사용 비용 내역.", - "workspace.cost.allModels": "모든 모델", - "workspace.cost.allKeys": "모든 키", - "workspace.cost.deletedSuffix": "(삭제됨)", - "workspace.cost.empty": "선택한 기간에 사용 데이터가 없습니다.", - "workspace.cost.subscriptionShort": "구독", - - "workspace.keys.title": "API 키", - "workspace.keys.subtitle": "OpenCode 서비스 액세스를 위한 API 키를 관리하세요.", - "workspace.keys.create": "API 키 생성", - "workspace.keys.placeholder": "키 이름 입력", - "workspace.keys.empty": "OpenCode 게이트웨이 API 키 생성", - "workspace.keys.table.name": "이름", - "workspace.keys.table.key": "키", - "workspace.keys.table.createdBy": "생성자", - "workspace.keys.table.lastUsed": "마지막 사용", - "workspace.keys.copyApiKey": "API 키 복사", - "workspace.keys.delete": "삭제", - - "workspace.members.title": "멤버", - "workspace.members.subtitle": "워크스페이스 멤버 및 권한을 관리합니다.", - "workspace.members.invite": "멤버 초대", - "workspace.members.inviting": "초대 중...", - "workspace.members.beta.beforeLink": "베타 기간 동안 팀 워크스페이스는 무료입니다.", - "workspace.members.form.invitee": "초대받는 사람", - "workspace.members.form.emailPlaceholder": "이메일 입력", - "workspace.members.form.role": "역할", - "workspace.members.form.monthlyLimit": "월간 지출 한도", - "workspace.members.noLimit": "제한 없음", - "workspace.members.noLimitLowercase": "제한 없음", - "workspace.members.invited": "초대됨", - "workspace.members.edit": "편집", - "workspace.members.delete": "삭제", - "workspace.members.saving": "저장 중...", - "workspace.members.save": "저장", - "workspace.members.table.email": "이메일", - "workspace.members.table.role": "역할", - "workspace.members.table.monthLimit": "월 한도", - "workspace.members.role.admin": "관리자", - "workspace.members.role.adminDescription": "모델, 멤버, 결제 관리 가능", - "workspace.members.role.member": "멤버", - "workspace.members.role.memberDescription": "자신의 API 키만 생성 가능", - - "workspace.settings.title": "설정", - "workspace.settings.subtitle": "워크스페이스 이름과 환경설정을 업데이트하세요.", - "workspace.settings.workspaceName": "워크스페이스 이름", - "workspace.settings.defaultName": "기본", - "workspace.settings.updating": "업데이트 중...", - "workspace.settings.save": "저장", - "workspace.settings.edit": "편집", - - "workspace.billing.title": "결제", - "workspace.billing.subtitle.beforeLink": "결제 수단을 관리하세요.", - "workspace.billing.contactUs": "문의하기", - "workspace.billing.subtitle.afterLink": "질문이 있으시면 언제든 연락주세요.", - "workspace.billing.currentBalance": "현재 잔액", - "workspace.billing.add": "추가 $", - "workspace.billing.enterAmount": "금액 입력", - "workspace.billing.loading": "로드 중...", - "workspace.billing.addAction": "추가", - "workspace.billing.addBalance": "잔액 추가", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "Stripe에 연결됨", - "workspace.billing.manage": "관리", - "workspace.billing.enable": "결제 활성화", - - "workspace.monthlyLimit.title": "월 한도", - "workspace.monthlyLimit.subtitle": "계정의 월간 사용 한도를 설정하세요.", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "설정 중...", - "workspace.monthlyLimit.set": "설정", - "workspace.monthlyLimit.edit": "한도 편집", - "workspace.monthlyLimit.noLimit": "사용 한도가 설정되지 않았습니다.", - "workspace.monthlyLimit.currentUsage.beforeMonth": "현재", - "workspace.monthlyLimit.currentUsage.beforeAmount": "사용량: $", - - "workspace.redeem.title": "쿠폰 사용", - "workspace.redeem.subtitle": "쿠폰 코드를 사용해 크레딧이나 혜택을 받으세요.", - "workspace.redeem.placeholder": "쿠폰 코드를 입력하세요", - "workspace.redeem.redeem": "사용", - "workspace.redeem.redeeming": "사용 중...", - "workspace.redeem.success": "쿠폰을 성공적으로 사용했습니다.", - - "workspace.reload.title": "자동 충전", - "workspace.reload.disabled.before": "자동 충전이", - "workspace.reload.disabled.state": "비활성화", - "workspace.reload.disabled.after": "되었습니다. 잔액이 부족할 때 자동으로 충전하려면 활성화하세요.", - "workspace.reload.enabled.before": "자동 충전이", - "workspace.reload.enabled.state": "활성화", - "workspace.reload.enabled.middle": "되었습니다. 잔액이", - "workspace.reload.processingFee": "처리 수수료", - "workspace.reload.enabled.after": "에 도달하면 충전합니다.", - "workspace.reload.edit": "편집", - "workspace.reload.enable": "활성화", - "workspace.reload.enableAutoReload": "자동 충전 활성화", - "workspace.reload.reloadAmount": "충전 금액 $", - "workspace.reload.whenBalanceReaches": "잔액이 다음 금액에 도달할 때 $", - "workspace.reload.saving": "저장 중...", - "workspace.reload.save": "저장", - "workspace.reload.failedAt": "충전 실패 시간:", - "workspace.reload.reason": "사유:", - "workspace.reload.updatePaymentMethod": "결제 수단을 업데이트하고 다시 시도해 주세요.", - "workspace.reload.retrying": "재시도 중...", - "workspace.reload.retry": "재시도", - "workspace.reload.error.paymentFailed": "결제에 실패했습니다.", - - "workspace.payments.title": "결제 내역", - "workspace.payments.subtitle": "최근 결제 거래 내역입니다.", - "workspace.payments.table.date": "날짜", - "workspace.payments.table.paymentId": "결제 ID", - "workspace.payments.table.amount": "금액", - "workspace.payments.table.receipt": "영수증", - "workspace.payments.type.credit": "크레딧", - "workspace.payments.type.subscription": "구독", - "workspace.payments.view": "보기", - - "workspace.black.loading": "로드 중...", - "workspace.black.time.day": "일", - "workspace.black.time.days": "일", - "workspace.black.time.hour": "시간", - "workspace.black.time.hours": "시간", - "workspace.black.time.minute": "분", - "workspace.black.time.minutes": "분", - "workspace.black.time.fewSeconds": "몇 초", - "workspace.black.subscription.title": "구독", - "workspace.black.subscription.message": "현재 월 ${{plan}} OpenCode Black 플랜을 구독 중입니다.", - "workspace.black.subscription.manage": "구독 관리", - "workspace.black.subscription.rollingUsage": "5시간 사용량", - "workspace.black.subscription.weeklyUsage": "주간 사용량", - "workspace.black.subscription.resetsIn": "초기화까지 남은 시간:", - "workspace.black.subscription.useBalance": "사용 한도 도달 후에는 보유 잔액 사용", - "workspace.black.waitlist.title": "대기 명단", - "workspace.black.waitlist.joined": "월 ${{plan}} OpenCode Black 플랜 대기 명단에 등록되었습니다.", - "workspace.black.waitlist.ready": "월 ${{plan}} OpenCode Black 플랜에 등록할 준비가 되었습니다.", - "workspace.black.waitlist.leave": "대기 명단에서 나가기", - "workspace.black.waitlist.leaving": "나가는 중...", - "workspace.black.waitlist.left": "나감", - "workspace.black.waitlist.enroll": "등록", - "workspace.black.waitlist.enrolling": "등록 중...", - "workspace.black.waitlist.enrolled": "등록됨", - "workspace.black.waitlist.enrollNote": "등록을 클릭하면 구독이 즉시 시작되며 카드에 요금이 청구됩니다.", - - "workspace.lite.loading": "로드 중...", - "workspace.lite.time.day": "일", - "workspace.lite.time.days": "일", - "workspace.lite.time.hour": "시간", - "workspace.lite.time.hours": "시간", - "workspace.lite.time.minute": "분", - "workspace.lite.time.minutes": "분", - "workspace.lite.time.fewSeconds": "몇 초", - "workspace.lite.subscription.message": "현재 OpenCode Go를 구독 중입니다.", - "workspace.lite.subscription.manage": "구독 관리", - "workspace.lite.subscription.rollingUsage": "롤링 사용량", - "workspace.lite.subscription.weeklyUsage": "주간 사용량", - "workspace.lite.subscription.monthlyUsage": "월간 사용량", - "workspace.lite.subscription.resetsIn": "초기화까지 남은 시간:", - "workspace.lite.subscription.useBalance": "사용 한도 도달 후에는 보유 잔액 사용", - "workspace.lite.subscription.selectProvider": - 'Go 모델을 사용하려면 opencode 설정에서 "OpenCode Go"를 공급자로 선택하세요.', - "workspace.lite.providers.title": "공급자", - "workspace.lite.providers.description": "라우팅에 사용할 공급자를 제어합니다.", - "workspace.lite.providers.useChina": "중국에서 호스팅되는 모델 활성화", - "workspace.lite.black.message": - "현재 OpenCode Black을 구독 중이거나 대기 명단에 등록되어 있습니다. Go로 전환하려면 먼저 구독을 취소해 주세요.", - "workspace.lite.other.message": - "이 워크스페이스의 다른 멤버가 이미 OpenCode Go를 구독 중입니다. 워크스페이스당 한 명의 멤버만 구독할 수 있습니다.", - "workspace.lite.promo.description": - "OpenCode Go는 {{price}}부터 시작하며, 이후 $10/월로 넉넉한 사용량 한도와 함께 인기 있는 오픈 코딩 모델에 대한 안정적인 액세스를 제공합니다.", - "workspace.lite.promo.price": "첫 달 $5", - "workspace.lite.promo.modelsTitle": "포함 내역", - "workspace.lite.promo.footer": - "이 플랜은 주로 글로벌 사용자를 위해 설계되었으며, 안정적인 글로벌 액세스를 위해 미국, EU 및 싱가포르에 모델이 호스팅되어 있습니다. 가격 및 사용 한도는 초기 사용을 통해 학습하고 피드백을 수집함에 따라 변경될 수 있습니다.", - "workspace.lite.promo.subscribe": "Go 구독하기", - "workspace.lite.promo.subscribing": "리디렉션 중...", - "workspace.lite.promo.otherMethods": "기타 결제 수단", - "workspace.lite.promo.selectMethod": "결제 수단 선택", - - "workspace.referral.copyLink": "링크 복사", - "workspace.referral.copied": "복사됨", - "workspace.referral.overview.title": "친구 초대", - "workspace.referral.overview.subtitle": "친구가 구독하면 $5를 받으세요. 친구도 $5를 받습니다.", - "workspace.referral.instructions.share": "추천 링크 공유", - "workspace.referral.instructions.subscribe": "친구가 가입하고 Go를 구독", - "workspace.referral.instructions.claim": "두 분 모두 $5 사용 크레딧을 받아 Go 사용 한도에 적용할 수 있습니다", - "workspace.referral.rewards.title": "추천 보상", - "workspace.referral.rewards.description": "사용 가능한 추천 크레딧을 Go 사용량에 적용합니다.", - "workspace.referral.rewards.subtitle": "{{applied}} / {{total}}개 보상 사용됨.", - "workspace.referral.rewards.empty": "아직 추천 보상이 없습니다.", - "workspace.referral.table.reward": "보상", - "workspace.referral.table.referral": "설명", - "workspace.referral.table.date": "날짜", - "workspace.referral.reward.description.inviter": "{{email}} 초대됨", - "workspace.referral.reward.description.invitee": "{{email}}님이 초대", - "workspace.referral.reward.action.subscribeUnlock": "구독하여 잠금 해제", - "workspace.referral.reward.action.view": "보상 보기", - "workspace.referral.reward.action.applied": "보상 사용됨", - "workspace.referral.reward.source.pendingInviter": "친구의 구독을 기다리는 중", - "workspace.referral.reward.source.pendingInvitee": "구독하여 보상 잠금 해제", - "workspace.referral.reward.source.available": "보상 사용 가능", - "workspace.referral.reward.source.applied": "보상 사용됨", - "workspace.referral.reward.status.applied": "보상 사용됨", - "workspace.referral.reward.status.pendingInviter": "구독하여 잠금 해제", - "workspace.referral.reward.status.pendingInvitee": "구독하여 잠금 해제", - "workspace.referral.apply.noGo": "구독하여 잠금 해제", - "workspace.referral.apply.preview": "보상 보기", - "workspace.referral.apply.action": "사용", - "workspace.referral.apply.confirmTitle": "보상 사용", - "workspace.referral.apply.confirmBody": "{{amount}}를 사용하여 이 워크스페이스의 현재 사용량을 줄입니다.", - "workspace.referral.apply.confirmAction": "사용", - - "download.title": "OpenCode | 다운로드", - "download.meta.description": "macOS, Windows, Linux용 OpenCode 다운로드", - "download.hero.title": "OpenCode 다운로드", - "download.hero.subtitle": "macOS, Windows, Linux용 베타 버전 사용 가능", - "download.hero.button": "{{os}}용 다운로드", - "download.section.terminal": "OpenCode 터미널", - "download.section.desktop": "OpenCode 데스크톱 (베타)", - "download.section.extensions": "OpenCode 확장 프로그램", - "download.section.integrations": "OpenCode 통합", - "download.action.download": "다운로드", - "download.action.install": "설치", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "꼭 그렇지는 않지만, 아마도 필요할 것입니다. OpenCode를 유료 제공자에 연결하려면 AI 구독이 필요할 수 있습니다. 하지만", - "download.faq.a3.localLink": "로컬 모델", - "download.faq.a3.afterLocal.beforeZen": "은 무료로 사용할 수 있습니다. 우리는", - "download.faq.a3.afterZen": " 사용을 권장하지만, OpenCode는 OpenAI, Anthropic, xAI 등 모든 인기 제공자와 작동합니다.", - - "download.faq.a5.p1": "OpenCode는 100% 무료로 사용할 수 있습니다.", - "download.faq.a5.p2.beforeZen": - "추가 비용은 모델 제공자 구독에서 발생합니다. OpenCode는 모든 모델 제공자와 작동하지만, 우리는", - "download.faq.a5.p2.afterZen": " 사용을 권장합니다.", - - "download.faq.a6.p1": "데이터와 정보는 OpenCode에서 공유 링크를 생성할 때만 저장됩니다.", - "download.faq.a6.p2.beforeShare": "더 알아보기:", - "download.faq.a6.shareLink": "공유 페이지", - - "enterprise.title": "OpenCode | 조직을 위한 엔터프라이즈 솔루션", - "enterprise.meta.description": "OpenCode 엔터프라이즈 솔루션 문의", - "enterprise.hero.title": "여러분의 코드는 여러분의 것입니다", - "enterprise.hero.body1": - "OpenCode는 조직 내부에서 안전하게 작동하며, 데이터나 컨텍스트를 저장하지 않고 라이선스 제한이나 소유권 주장도 없습니다. 팀과 함께 트라이얼을 시작한 후, SSO 및 내부 AI 게이트웨이와 통합하여 조직 전체에 배포하세요.", - "enterprise.hero.body2": "어떻게 도와드릴 수 있는지 알려주세요.", - "enterprise.form.name.label": "이름", - "enterprise.form.name.placeholder": "홍길동", - "enterprise.form.role.label": "직책", - "enterprise.form.role.placeholder": "CTO / 개발 팀장", - "enterprise.form.company.label": "회사", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "회사 이메일", - "enterprise.form.email.placeholder": "name@company.com", - "enterprise.form.phone.label": "전화번호", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "어떤 문제를 해결하고 싶으신가요?", - "enterprise.form.message.placeholder": "도움이 필요한 부분은...", - "enterprise.form.send": "전송", - "enterprise.form.sending": "전송 중...", - "enterprise.form.success": "메시지가 전송되었습니다. 곧 연락드리겠습니다.", - "enterprise.form.success.submitted": "양식이 성공적으로 제출되었습니다.", - "enterprise.form.error.allFieldsRequired": "모든 필드는 필수 항목입니다.", - "enterprise.form.error.invalidEmailFormat": "유효하지 않은 이메일 형식입니다.", - "enterprise.form.error.internalServer": "내부 서버 오류입니다.", - "enterprise.faq.title": "FAQ", - "enterprise.faq.q1": "OpenCode 엔터프라이즈란 무엇인가요?", - "enterprise.faq.a1": - "OpenCode 엔터프라이즈는 코드와 데이터가 인프라 외부로 유출되지 않도록 보장하려는 조직을 위한 솔루션입니다. SSO 및 내부 AI 게이트웨이와 통합되는 중앙 집중식 설정을 통해 이를 구현합니다.", - "enterprise.faq.q2": "OpenCode 엔터프라이즈는 어떻게 시작하나요?", - "enterprise.faq.a2": - "팀과 함께 내부 트라이얼로 간단히 시작해보세요. OpenCode는 기본적으로 코드나 컨텍스트 데이터를 저장하지 않아 시작하기 쉽습니다. 그 후 가격 및 구현 옵션에 대해 문의해주세요.", - "enterprise.faq.q3": "엔터프라이즈 가격은 어떻게 되나요?", - "enterprise.faq.a3": - "좌석(seat) 당 엔터프라이즈 가격을 제공합니다. 자체 LLM 게이트웨이를 보유한 경우, 사용된 토큰에 대해 비용을 청구하지 않습니다. 자세한 내용은 조직의 요구사항에 따른 맞춤 견적을 위해 문의해주세요.", - "enterprise.faq.q4": "OpenCode 엔터프라이즈에서 데이터는 안전한가요?", - "enterprise.faq.a4": - "네. OpenCode는 코드나 컨텍스트 데이터를 저장하지 않습니다. 모든 처리는 로컬에서 이루어지거나 AI 제공자에 대한 직접 API 호출을 통해 이루어집니다. 중앙 설정 및 SSO 통합을 통해 데이터는 조직의 인프라 내에서 안전하게 유지됩니다.", - - "brand.title": "OpenCode | 브랜드", - "brand.meta.description": "OpenCode 브랜드 가이드라인", - "brand.heading": "브랜드 가이드라인", - "brand.subtitle": "OpenCode 브랜드를 활용하는 데 도움이 되는 리소스와 자산입니다.", - "brand.downloadAll": "모든 자산 다운로드", - - "changelog.title": "OpenCode | 변경 내역", - "changelog.meta.description": "OpenCode 릴리스 노트 및 변경 내역", - "changelog.hero.title": "변경 내역", - "changelog.hero.subtitle": "OpenCode의 새로운 업데이트 및 개선 사항", - "changelog.empty": "변경 내역 항목을 찾을 수 없습니다.", - "changelog.viewJson": "JSON 보기", - - "bench.list.title": "벤치마크", - "bench.list.heading": "벤치마크", - "bench.list.table.agent": "에이전트", - "bench.list.table.model": "모델", - "bench.list.table.score": "점수", - "bench.submission.error.allFieldsRequired": "모든 필드는 필수 항목입니다.", - - "bench.detail.title": "벤치마크 - {{task}}", - "bench.detail.notFound": "태스크를 찾을 수 없음", - "bench.detail.na": "N/A", - "bench.detail.labels.agent": "에이전트", - "bench.detail.labels.model": "모델", - "bench.detail.labels.task": "태스크", - "bench.detail.labels.repo": "저장소", - "bench.detail.labels.from": "From", - "bench.detail.labels.to": "To", - "bench.detail.labels.prompt": "프롬프트", - "bench.detail.labels.commit": "커밋", - "bench.detail.labels.averageDuration": "평균 소요 시간", - "bench.detail.labels.averageScore": "평균 점수", - "bench.detail.labels.averageCost": "평균 비용", - "bench.detail.labels.summary": "요약", - "bench.detail.labels.runs": "실행 횟수", - "bench.detail.labels.score": "점수", - "bench.detail.labels.base": "기본", - "bench.detail.labels.penalty": "페널티", - "bench.detail.labels.weight": "가중치", - "bench.detail.table.run": "실행", - "bench.detail.table.score": "점수 (기본 - 페널티)", - "bench.detail.table.cost": "비용", - "bench.detail.table.duration": "소요 시간", - "bench.detail.run.title": "실행 {{n}}", - "bench.detail.rawJson": "Raw JSON", -} satisfies Dict diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts deleted file mode 100644 index bc2f9a935f..0000000000 --- a/packages/console/app/src/i18n/no.ts +++ /dev/null @@ -1,826 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "Dokumentasjon", - "nav.changelog": "Endringslogg", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "Enterprise", - "nav.zen": "Zen", - "nav.login": "Logg inn", - "nav.free": "Last ned", - "nav.home": "Hjem", - "nav.openMenu": "Åpne meny", - "nav.getStartedFree": "Kom i gang gratis", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "Kopier logo som SVG", - "nav.context.copyWordmark": "Kopier wordmark som SVG", - "nav.context.brandAssets": "Merkevareressurser", - - "footer.github": "GitHub", - "footer.docs": "Dokumentasjon", - "footer.changelog": "Endringslogg", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "Merkevare", - "legal.privacy": "Personvern", - "legal.terms": "Vilkår", - - "email.title": "Få beskjed først når vi lanserer nye produkter", - "email.subtitle": "Meld deg på ventelisten for tidlig tilgang.", - "email.placeholder": "E-postadresse", - "email.subscribe": "Abonner", - "email.success": "Nesten ferdig - sjekk innboksen din og bekreft e-postadressen", - - "notFound.title": "Ikke funnet | opencode", - "notFound.heading": "404 - Side ikke funnet", - "notFound.home": "Hjem", - "notFound.docs": "Dokumentasjon", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "opencode logo lys", - "notFound.logoDarkAlt": "opencode logo mørk", - - "user.logout": "Logg ut", - - "auth.callback.error.codeMissing": "Ingen autorisasjonskode funnet.", - - "workspace.select": "Velg arbeidsområde", - "workspace.createNew": "+ Opprett nytt arbeidsområde", - "workspace.modal.title": "Opprett nytt arbeidsområde", - "workspace.modal.placeholder": "Skriv inn navn på arbeidsområde", - - "common.cancel": "Avbryt", - "common.creating": "Oppretter...", - "common.create": "Opprett", - - "common.videoUnsupported": "Nettleseren din støtter ikke video-taggen.", - "common.figure": "Fig {{n}}.", - "common.faq": "FAQ", - "common.learnMore": "Les mer", - - "error.invalidPlan": "Ugyldig plan", - "error.workspaceRequired": "Arbeidsområde-ID er påkrevd", - "error.alreadySubscribed": "Dette arbeidsområdet har allerede et abonnement", - "error.limitRequired": "Grense er påkrevd.", - "error.monthlyLimitInvalid": "Angi en gyldig månedlig grense.", - "error.workspaceNameRequired": "Navn på arbeidsområde er påkrevd.", - "error.nameTooLong": "Navnet må være 255 tegn eller mindre.", - "error.emailRequired": "E-post er påkrevd", - "error.roleRequired": "Rolle er påkrevd", - "error.idRequired": "ID er påkrevd", - "error.nameRequired": "Navn er påkrevd", - "error.providerRequired": "Leverandør er påkrevd", - "error.apiKeyRequired": "API-nøkkel er påkrevd", - "error.modelRequired": "Modell er påkrevd", - "error.reloadAmountMin": "Påfyllingsbeløp må være minst ${{amount}}", - "error.reloadTriggerMin": "Saldo-trigger må være minst ${{amount}}", - - "app.meta.description": "OpenCode - Den åpne kildekode kodingsagenten.", - - "home.title": "OpenCode | Den åpne kildekode AI-kodingsagenten", - - "temp.title": "opencode | AI-kodingsagent bygget for terminalen", - "temp.hero.title": "AI-kodingsagenten bygget for terminalen", - "temp.zen": "opencode zen", - "temp.getStarted": "Kom i gang", - "temp.feature.native.title": "Native TUI", - "temp.feature.native.body": "Et responsivt, native terminal-brukergrensesnitt som kan temes", - "temp.feature.zen.beforeLink": "En", - "temp.feature.zen.link": "kuratert liste over modeller", - "temp.feature.zen.afterLink": "levert av opencode", - "temp.feature.models.beforeLink": "Støtter 75+ LLM-leverandører gjennom", - "temp.feature.models.afterLink": ", inkludert lokale modeller", - "temp.screenshot.caption": "opencode TUI med tokyonight-tema", - "temp.screenshot.alt": "opencode TUI med tokyonight-tema", - "temp.logoLightAlt": "opencode logo lys", - "temp.logoDarkAlt": "opencode logo mørk", - - "home.banner.badge": "Ny", - "home.banner.text": "Desktop-app tilgjengelig i beta", - "home.banner.platforms": "på macOS, Windows og Linux", - "home.banner.downloadNow": "Last ned nå", - "home.banner.downloadBetaNow": "Last ned desktop-betaen nå", - - "home.hero.title": "Den åpne kildekode AI-kodingsagenten", - "home.hero.subtitle.a": - "Gratis modeller inkludert, eller koble til hvilken som helst modell fra hvilken som helst leverandør,", - "home.hero.subtitle.b": "inkludert Claude, GPT, Gemini og mer.", - - "home.install.ariaLabel": "Installeringsalternativer", - - "home.what.title": "Hva er OpenCode?", - "home.what.body": "OpenCode er en åpen kildekode-agent som hjelper deg å skrive kode i terminal, IDE eller desktop.", - "home.what.lsp.title": "LSP aktivert", - "home.what.lsp.body": "Laster automatisk de riktige LSP-ene for LLM-en", - "home.what.multiSession.title": "Multi-sesjon", - "home.what.multiSession.body": "Start flere agenter parallelt på samme prosjekt", - "home.what.shareLinks.title": "Del lenker", - "home.what.shareLinks.body": "Del en lenke til en sesjon for referanse eller feilsøking", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "Logg inn med GitHub for å bruke Copilot-kontoen din", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "Logg inn med OpenAI for å bruke ChatGPT Plus- eller Pro-kontoen din", - "home.what.anyModel.title": "Hvilken som helst modell", - "home.what.anyModel.body": "75+ LLM-leverandører via Models.dev, inkludert lokale modeller", - "home.what.anyEditor.title": "Hvilken som helst editor", - "home.what.anyEditor.body": "Tilgjengelig som terminalgrensesnitt, desktop-app og IDE-utvidelse", - "home.what.readDocs": "Les dokumentasjonen", - - "home.growth.title": "Den åpne kildekode AI-kodingsagenten", - "home.growth.body": - "Med over {{stars}} GitHub-stjerner, {{contributors}} bidragsytere og over {{commits}} commits, brukes OpenCode av over {{monthlyUsers}} utviklere hver måned.", - "home.growth.githubStars": "GitHub-stjerner", - "home.growth.contributors": "Bidragsytere", - "home.growth.monthlyDevs": "Månedlige utviklere", - - "home.privacy.title": "Bygget med personvern først", - "home.privacy.body": - "OpenCode lagrer ikke koden din eller kontekstdata, slik at den kan fungere i personvernsensitive miljøer.", - "home.privacy.learnMore": "Les mer om", - "home.privacy.link": "personvern", - - "home.faq.q1": "Hva er OpenCode?", - "home.faq.a1": - "OpenCode er en åpen kildekode-agent som hjelper deg å skrive og kjøre kode med hvilken som helst AI-modell. Den er tilgjengelig som terminalgrensesnitt, desktop-app eller IDE-utvidelse.", - "home.faq.q2": "Hvordan bruker jeg OpenCode?", - "home.faq.a2.before": "Den enkleste måten å komme i gang på er å lese", - "home.faq.a2.link": "introen", - "home.faq.q3": "Trenger jeg ekstra AI-abonnementer for å bruke OpenCode?", - "home.faq.a3.p1": - "Ikke nødvendigvis. OpenCode kommer med et sett gratis modeller du kan bruke uten å opprette en konto.", - "home.faq.a3.p2.beforeZen": "I tillegg kan du bruke populære kodemodeller ved å opprette en", - "home.faq.a3.p2.afterZen": " konto.", - "home.faq.a3.p3": - "Vi oppfordrer til å bruke Zen, men OpenCode fungerer også med populære leverandører som OpenAI, Anthropic, xAI osv.", - "home.faq.a3.p4.beforeLocal": "Du kan til og med koble til dine", - "home.faq.a3.p4.localLink": "lokale modeller", - "home.faq.q4": "Kan jeg bruke mine eksisterende AI-abonnementer med OpenCode?", - "home.faq.a4.p1": - "Ja, OpenCode støtter abonnementer fra alle store leverandører. Du kan bruke Claude Pro/Max, ChatGPT Plus/Pro eller GitHub Copilot-abonnementer.", - "home.faq.q5": "Kan jeg bare bruke OpenCode i terminalen?", - "home.faq.a5.beforeDesktop": "Ikke lenger! OpenCode er nå tilgjengelig som en app for", - "home.faq.a5.desktop": "desktop", - "home.faq.a5.and": "og", - "home.faq.a5.web": "web", - "home.faq.q6": "Hva koster OpenCode?", - "home.faq.a6": - "OpenCode er 100% gratis å bruke. Det kommer også med et sett gratis modeller. Det kan være ekstra kostnader hvis du kobler til en annen leverandør.", - "home.faq.q7": "Hva med data og personvern?", - "home.faq.a7.p1": "Dataene dine lagres kun når du bruker våre gratis modeller eller lager delbare lenker.", - "home.faq.a7.p2.beforeModels": "Les mer om", - "home.faq.a7.p2.modelsLink": "våre modeller", - "home.faq.a7.p2.and": "og", - "home.faq.a7.p2.shareLink": "delingssider", - "home.faq.q8": "Er OpenCode åpen kildekode?", - "home.faq.a8.p1": "Ja, OpenCode er fullt open source. Kildekoden er offentlig på", - "home.faq.a8.p2": "under", - "home.faq.a8.mitLicense": "MIT-lisensen", - "home.faq.a8.p3": - ", som betyr at hvem som helst kan bruke, endre eller bidra til utviklingen. Alle i communityet kan opprette issues, sende inn pull requests og utvide funksjonalitet.", - - "home.zenCta.title": "Få tilgang til pålitelige, optimaliserte modeller for kodeagenter", - "home.zenCta.body": - "Zen gir deg tilgang til et håndplukket sett med AI-modeller som OpenCode har testet og benchmarked spesielt for kodeagenter. Du slipper å bekymre deg for ujevn ytelse og kvalitet på tvers av leverandører; bruk validerte modeller som fungerer.", - "home.zenCta.link": "Les om Zen", - - "zen.title": "OpenCode Zen | Et kuratert sett med pålitelige, optimaliserte modeller for kodeagenter", - "zen.hero.title": "Pålitelige optimaliserte modeller for kodeagenter", - "zen.hero.body": - "Zen gir deg tilgang til et kuratert sett med AI-modeller som OpenCode har testet og benchmarked spesielt for kodeagenter. Du slipper å bekymre deg for ujevn ytelse og kvalitet; bruk validerte modeller som fungerer.", - - "zen.faq.q1": "Hva er OpenCode Zen?", - "zen.faq.a1": - "Zen er et kuratert sett med AI-modeller testet og benchmarked for kodeagenter, laget av teamet bak OpenCode.", - "zen.faq.q2": "Hva gjør Zen mer presis?", - "zen.faq.a2": - "Zen tilbyr bare modeller som er testet og benchmarked spesifikt for kodeagenter. Du ville ikke brukt en smørkniv til å skjære biff; ikke bruk dårlige modeller til koding.", - "zen.faq.q3": "Er Zen billigere?", - "zen.faq.a3": - "Zen er ikke for profitt. Zen videreformidler kostnadene fra modellleverandørene direkte til deg. Jo mer Zen brukes, desto bedre priser kan OpenCode forhandle og gi videre til deg.", - "zen.faq.q4": "Hva koster Zen?", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "tar betalt per forespørsel", - "zen.faq.a4.p1.afterPricing": "uten påslag, så du betaler akkurat det modellleverandøren tar betalt.", - "zen.faq.a4.p2.beforeAccount": "Totalprisen avhenger av bruk, og du kan sette månedlige utgiftsgrenser i din", - "zen.faq.a4.p2.accountLink": "konto", - "zen.faq.a4.p3": - "For å dekke kostnader legger OpenCode til bare et lite betalingsbehandlingsgebyr på $1.23 per $20 saldo-påfyll.", - "zen.faq.q5": "Hva med data og personvern?", - "zen.faq.a5.beforeExceptions": - "Alle Zen-modeller hostes i USA. Leverandører følger en policy om null oppbevaring og bruker ikke dataene dine til modelltrening, med de", - "zen.faq.a5.exceptionsLink": "følgende unntakene", - "zen.faq.q6": "Kan jeg sette utgiftsgrenser?", - "zen.faq.a6": "Ja, du kan sette månedlige utgiftsgrenser i kontoen din.", - "zen.faq.q7": "Kan jeg avslutte?", - "zen.faq.a7": "Ja, du kan deaktivere fakturering når som helst og bruke gjenværende saldo.", - "zen.faq.q8": "Kan jeg bruke Zen med andre kodeagenter?", - "zen.faq.a8": - "Selv om Zen fungerer veldig bra med OpenCode, kan du bruke Zen med hvilken som helst agent. Følg oppsettinstruksjonene i din foretrukne kodeagent.", - - "zen.cta.start": "Kom i gang med Zen", - "zen.pricing.title": "Legg til $20 Pay as you go-saldo", - "zen.pricing.fee": "(+$1.23 kortbehandlingsgebyr)", - "zen.pricing.body": "Bruk med hvilken som helst agent. Angi månedlige forbruksgrenser. Avslutt når som helst.", - "zen.problem.title": "Hvilket problem løser Zen?", - "zen.problem.body": - "Det er så mange modeller tilgjengelig, men bare noen få fungerer bra med kodeagenter. De fleste leverandører konfigurerer dem annerledes med varierende resultater.", - "zen.problem.subtitle": "Vi fikser dette for alle, ikke bare OpenCode-brukere.", - "zen.problem.item1": "Tester utvalgte modeller og konsulterer teamene deres", - "zen.problem.item2": "Samarbeider med leverandører for å sikre at de blir levert riktig", - "zen.problem.item3": "Benchmarker alle modell-leverandør-kombinasjoner vi anbefaler", - "zen.how.title": "Hvordan Zen fungerer", - "zen.how.body": "Selv om vi foreslår at du bruker Zen med OpenCode, kan du bruke Zen med hvilken som helst agent.", - "zen.how.step1.title": "Registrer deg og legg til $20 saldo", - "zen.how.step1.beforeLink": "følg", - "zen.how.step1.link": "oppsettsinstruksjonene", - "zen.how.step2.title": "Bruk Zen med transparente priser", - "zen.how.step2.link": "betal per forespørsel", - "zen.how.step2.afterLink": "uten påslag", - "zen.how.step3.title": "Auto-påfyll", - "zen.how.step3.body": "når saldoen din når $5, fyller vi automatisk på $20", - "zen.privacy.title": "Personvernet ditt er viktig for oss", - "zen.privacy.beforeExceptions": - "Alle Zen-modeller hostes i USA. Leverandører følger en policy om null oppbevaring og bruker ikke dataene dine til modelltrening, med", - "zen.privacy.exceptionsLink": "følgende unntak", - - "go.title": "OpenCode Go | Rimelige kodemodeller for alle", - "go.meta.description": - "Go starter på $5 for den første måneden, deretter $10/måned, med sjenerøse 5-timers forespørselsgrenser for GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro og DeepSeek V4 Flash.", - "go.hero.title": "Rimelige kodemodeller for alle", - "go.hero.body": - "Go bringer agent-koding til programmerere over hele verden. Med rause grenser og pålitelig tilgang til de mest kapable åpen kildekode-modellene, kan du bygge med kraftige agenter uten å bekymre deg for kostnader eller tilgjengelighet.", - - "go.cta.start": "Abonner på Go", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "Abonner på Go", - "go.cta.price": "$10/måned", - "go.cta.promo": "$5 første måned", - "go.pricing.body": - "Bruk med hvilken som helst agent. $5 første måned, deretter $10/måned. Fyll på kreditt ved behov. Avslutt når som helst.", - "go.graph.free": "Gratis", - "go.graph.freePill": "Big Pickle og gratis modeller", - "go.graph.go": "Go", - "go.graph.label": "Forespørsler per 5 timer", - "go.graph.usageLimits": "Bruksgrenser", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "Forespørsler per 5t: {{free}} vs {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "tidligere CEO, Terminal Products", - "go.testimonials.dax.quoteAfter": "har endret livet mitt, det er virkelig en no-brainer.", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "tidligere grunnlegger, SEED, PM, Melt, Pop, Dapt, Cadmus og ViewPoint", - "go.testimonials.jay.quoteBefore": "4 av 5 personer på teamet vårt elsker å bruke", - "go.testimonials.jay.quoteAfter": ".", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "tidligere Hero, AWS", - "go.testimonials.adam.quoteBefore": "Jeg kan ikke anbefale", - "go.testimonials.adam.quoteAfter": "nok. Seriøst, det er virkelig bra.", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "tidligere Head of Design, Laravel", - "go.testimonials.david.quoteBefore": "Med", - "go.testimonials.david.quoteAfter": "vet jeg at alle modellene er testet og perfekte for kodeagenter.", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "tidligere intern, Nvidia (4 ganger)", - "go.testimonials.frank.quote": "Jeg skulle ønske jeg fortsatt var hos Nvidia.", - "go.problem.title": "Hvilket problem løser Go?", - "go.problem.body": - "Vi fokuserer på å bringe OpenCode-opplevelsen til så mange som mulig. OpenCode Go er et rimelig abonnement: $5 for den første måneden, deretter $10/måned. Det gir sjenerøse grenser og pålitelig tilgang til de mest kapable åpen kildekode-modellene.", - "go.problem.subtitle": " ", - "go.problem.item1": "Rimelig abonnementspris", - "go.problem.item2": "Rause grenser og pålitelig tilgang", - "go.problem.item3": "Bygget for så mange programmerere som mulig", - "go.problem.item4": - "Inkluderer GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro og DeepSeek V4 Flash", - "go.how.title": "Hvordan Go fungerer", - "go.how.body": - "Go starter på $5 for den første måneden, deretter $10/måned. Du kan bruke det med OpenCode eller hvilken som helst agent.", - "go.how.step1.title": "Opprett en konto", - "go.how.step1.beforeLink": "følg", - "go.how.step1.link": "oppsettsinstruksjonene", - "go.how.step2.title": "Abonner på Go", - "go.how.step2.link": "$5 første måned", - "go.how.step2.afterLink": "deretter $10/måned med sjenerøse grenser", - "go.how.step3.title": "Begynn å kode", - "go.how.step3.body": "med pålitelig tilgang til åpen kildekode-modeller", - "go.privacy.title": "Personvernet ditt er viktig for oss", - "go.privacy.body": - "Planen er primært designet for internasjonale brukere, med modeller driftet i USA, EU og Singapore for stabil global tilgang.", - "go.privacy.contactAfter": "hvis du har spørsmål.", - "go.privacy.beforeExceptions": - "Go-modeller hostes i USA. Leverandører følger en policy om null oppbevaring og bruker ikke dataene dine til modelltrening, med", - "go.privacy.exceptionsLink": "følgende unntak", - "go.faq.q1": "Hva er OpenCode Go?", - "go.faq.a1": - "Go er et rimelig abonnement som gir deg pålitelig tilgang til kapable åpen kildekode-modeller for agent-koding.", - "go.faq.q2": "Hvilke modeller inkluderer Go?", - "go.faq.a2": "Go inkluderer modellene nedenfor, med høye grenser og pålitelig tilgang.", - "go.faq.q3": "Er Go det samme som Zen?", - "go.faq.a3": - "Nei. Zen er betaling etter bruk, mens Go starter på $5 for den første måneden, deretter $10/måned, med sjenerøse grenser og pålitelig tilgang til åpen kildekode-modellene GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro og DeepSeek V4 Flash.", - "go.faq.q4": "Hva koster Go?", - "go.faq.a4.p1.beforePricing": "Go koster", - "go.faq.a4.p1.pricingLink": "$5 første måned", - "go.faq.a4.p1.afterPricing": "deretter $10/måned med sjenerøse grenser.", - "go.faq.a4.p2.beforeAccount": "Du kan administrere abonnementet ditt i din", - "go.faq.a4.p2.accountLink": "konto", - "go.faq.a4.p3": "Avslutt når som helst.", - "go.faq.q5": "Hva med data og personvern?", - "go.faq.a5.body": - "Planen er primært designet for internasjonale brukere, med modeller driftet i USA, EU og Singapore for stabil global tilgang. Våre leverandører følger en policy om null oppbevaring og bruker ikke dataene dine til modelltrening.", - "go.faq.a5.beforeExceptions": - "Go-modeller hostes i USA. Leverandører følger en policy om null oppbevaring og bruker ikke dataene dine til modelltrening, med", - "go.faq.a5.exceptionsLink": "følgende unntak", - "go.faq.q6": "Kan jeg fylle på kreditt?", - "go.faq.a6": "Hvis du trenger mer bruk, kan du fylle på kreditt i kontoen din.", - "go.faq.q7": "Kan jeg avslutte?", - "go.faq.a7": "Ja, du kan avslutte når som helst.", - "go.faq.q8": "Kan jeg bruke Go med andre kodeagenter?", - "go.faq.a8": - "Ja, du kan bruke Go med hvilken som helst agent. Følg oppsettinstruksjonene i din foretrukne kodeagent.", - - "go.faq.q9": "Hva er forskjellen mellom gratis modeller og Go?", - "go.faq.a9": - "Gratis modeller inkluderer Big Pickle pluss kampanjemodeller tilgjengelig på det tidspunktet, med en kvote på 200 forespørsler/dag. Go inkluderer GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro og DeepSeek V4 Flash med høyere kvoter håndhevet over rullerende vinduer (5 timer, ukentlig og månedlig), omtrent tilsvarende $12 per 5 timer, $30 per uke og $60 per måned (faktiske forespørselsantall varierer etter modell og bruk).", - - "zen.api.error.rateLimitExceeded": "Rate limit overskredet. Vennligst prøv igjen senere.", - "zen.api.error.modelNotSupported": "Modell {{model}} støttes ikke", - "zen.api.error.modelFormatNotSupported": "Modell {{model}} støttes ikke for format {{format}}", - "zen.api.error.noProviderAvailable": "Ingen leverandør tilgjengelig", - "zen.api.error.providerNotSupported": "Leverandør {{provider}} støttes ikke", - "zen.api.error.missingApiKey": "Mangler API-nøkkel.", - "zen.api.error.invalidApiKey": "Ugyldig API-nøkkel.", - "zen.api.error.subscriptionQuotaExceeded": "Abonnementskvote overskredet. Prøv igjen om {{retryIn}}.", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "5-timers bruksgrense nådd. Tilbakestilles om {{retryIn}}. For å fortsette å bruke denne modellen nå, aktiver bruk fra din tilgjengelige saldo: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "Ukentlig bruksgrense nådd. Tilbakestilles om {{retryIn}}. For å fortsette å bruke denne modellen nå, aktiver bruk fra din tilgjengelige saldo: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "Månedlig bruksgrense nådd. Tilbakestilles om {{retryIn}}. For å fortsette å bruke denne modellen nå, aktiver bruk fra din tilgjengelige saldo: {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "Ingen betalingsmetode. Legg til en betalingsmetode her: {{billingUrl}}", - "zen.api.error.insufficientBalance": "Utilstrekkelig saldo. Administrer faktureringen din her: {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "Arbeidsområdet ditt har nådd sin månedlige utgiftsgrense på ${{amount}}. Administrer grensene dine her: {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "Du har nådd din månedlige utgiftsgrense på ${{amount}}. Administrer grensene dine her: {{membersUrl}}", - "zen.api.error.modelDisabled": "Modellen er deaktivert", - "zen.api.error.regionNotAllowed": - "Denne modellen hostes i Kina. Hvis du vil bruke denne modellen, aktiver den i innstillingene dine: {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "Den gratis kampanjen for {{model}} er avsluttet. Du kan fortsette å bruke modellen ved å abonnere på OpenCode Go - {{link}}", - - "black.meta.title": "OpenCode Black | Få tilgang til verdens beste kodemodeller", - "black.meta.description": "Få tilgang til Claude, GPT, Gemini og mer med OpenCode Black-abonnementer.", - "black.hero.title": "Få tilgang til verdens beste kodemodeller", - "black.hero.subtitle": "Inkludert Claude, GPT, Gemini og mer", - "black.title": "OpenCode Black | Priser", - "black.paused": "Black-planregistrering er midlertidig satt på pause.", - "black.plan.icon20": "Black 20-plan", - "black.plan.icon100": "Black 100-plan", - "black.plan.icon200": "Black 200-plan", - "black.plan.multiplier100": "5x mer bruk enn Black 20", - "black.plan.multiplier200": "20x mer bruk enn Black 20", - "black.price.perMonth": "per måned", - "black.price.perPersonBilledMonthly": "per person fakturert månedlig", - "black.terms.1": "Abonnementet ditt starter ikke umiddelbart", - "black.terms.2": "Du blir lagt til i ventelisten og aktivert snart", - "black.terms.3": "Kortet ditt belastes kun når abonnementet aktiveres", - "black.terms.4": "Bruksgrenser gjelder, tung automatisert bruk kan nå grensene raskere", - "black.terms.5": "Abonnementer er for enkeltpersoner, kontakt Enterprise for team", - "black.terms.6": "Grenser kan justeres og planer kan avvikles i fremtiden", - "black.terms.7": "Avslutt abonnementet når som helst", - "black.action.continue": "Fortsett", - "black.finePrint.beforeTerms": "Priser vist inkluderer ikke gjeldende skatt", - "black.finePrint.terms": "Vilkår for bruk", - "black.workspace.title": "OpenCode Black | Velg arbeidsområde", - "black.workspace.selectPlan": "Velg et arbeidsområde for denne planen", - "black.workspace.name": "Arbeidsområde {{n}}", - "black.subscribe.title": "Abonner på OpenCode Black", - "black.subscribe.paymentMethod": "Betalingsmetode", - "black.subscribe.loadingPaymentForm": "Laster betalingsskjema...", - "black.subscribe.selectWorkspaceToContinue": "Velg et arbeidsområde for å fortsette", - "black.subscribe.failurePrefix": "Å nei!", - "black.subscribe.error.generic": "Det oppstod en feil", - "black.subscribe.error.invalidPlan": "Ugyldig plan", - "black.subscribe.error.workspaceRequired": "Arbeidsområde-ID er påkrevd", - "black.subscribe.error.alreadySubscribed": "Dette arbeidsområdet har allerede et abonnement", - "black.subscribe.processing": "Behandler...", - "black.subscribe.submit": "Abonner ${{plan}}", - "black.subscribe.form.chargeNotice": "Du blir kun belastet når abonnementet ditt aktiveres", - "black.subscribe.success.title": "Du er på ventelisten for OpenCode Black", - "black.subscribe.success.subscriptionPlan": "Abonnementsplan", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "Beløp", - "black.subscribe.success.amountValue": "${{plan}} per måned", - "black.subscribe.success.paymentMethod": "Betalingsmetode", - "black.subscribe.success.dateJoined": "Dato meldt på", - "black.subscribe.success.chargeNotice": "Kortet ditt vil bli belastet når abonnementet aktiveres", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "Bruk", - "workspace.nav.apiKeys": "API-nøkler", - "workspace.nav.members": "Medlemmer", - "workspace.nav.billing": "Fakturering", - "workspace.nav.settings": "Innstillinger", - - "workspace.home.banner.beforeLink": "Pålitelige optimaliserte modeller for kodeagenter.", - "workspace.lite.banner.beforeLink": "Lavkost kodemodeller for alle.", - "workspace.home.billing.loading": "Laster...", - "workspace.home.billing.enable": "Aktiver fakturering", - "workspace.home.billing.currentBalance": "Gjeldende saldo", - - "workspace.newUser.feature.tested.title": "Testede og verifiserte modeller", - "workspace.newUser.feature.tested.body": - "Vi har benchmarked og testet modeller spesifikt for kodeagenter for å sikre best mulig ytelse.", - "workspace.newUser.feature.quality.title": "Høyeste kvalitet", - "workspace.newUser.feature.quality.body": - "Få tilgang til modeller konfigurert for optimal ytelse – ingen nedgraderinger eller ruting til billigere leverandører.", - "workspace.newUser.feature.lockin.title": "Ingen innlåsing", - "workspace.newUser.feature.lockin.body": - "Bruk Zen med hvilken som helst kodeagent, og fortsett å bruke andre leverandører med opencode når du vil.", - "workspace.newUser.copyApiKey": "Kopier API-nøkkel", - "workspace.newUser.copyKey": "Kopier nøkkel", - "workspace.newUser.copied": "Kopiert!", - "workspace.newUser.step.enableBilling": "Aktiver fakturering", - "workspace.newUser.step.login.before": "Kjør", - "workspace.newUser.step.login.after": "og velg opencode", - "workspace.newUser.step.pasteKey": "Lim inn API-nøkkelen", - "workspace.newUser.step.models.before": "Start opencode og kjør", - "workspace.newUser.step.models.after": "for å velge en modell", - - "workspace.models.title": "Modeller", - "workspace.models.subtitle.beforeLink": "Administrer hvilke modeller medlemmene i arbeidsområdet har tilgang til.", - "workspace.models.table.model": "Modell", - "workspace.models.table.enabled": "Aktivert", - - "workspace.providers.title": "Ta med din egen nøkkel", - "workspace.providers.subtitle": "Konfigurer dine egne API-nøkler fra AI-leverandører.", - "workspace.providers.placeholder": "Skriv inn {{provider}} API-nøkkel ({{prefix}}...)", - "workspace.providers.configure": "Konfigurer", - "workspace.providers.edit": "Rediger", - "workspace.providers.delete": "Slett", - "workspace.providers.saving": "Lagrer...", - "workspace.providers.save": "Lagre", - "workspace.providers.table.provider": "Leverandør", - "workspace.providers.table.apiKey": "API-nøkkel", - - "workspace.usage.title": "Brukshistorikk", - "workspace.usage.subtitle": "Nylig API-bruk og kostnader.", - "workspace.usage.empty": "Gjør ditt første API-kall for å komme i gang.", - "workspace.usage.table.date": "Dato", - "workspace.usage.table.model": "Modell", - "workspace.usage.table.input": "Input", - "workspace.usage.table.output": "Output", - "workspace.usage.table.cost": "Kostnad", - "workspace.usage.table.session": "Økt", - "workspace.usage.breakdown.input": "Input", - "workspace.usage.breakdown.cacheRead": "Cache Lest", - "workspace.usage.breakdown.cacheWrite": "Cache Skrevet", - "workspace.usage.breakdown.output": "Output", - "workspace.usage.breakdown.reasoning": "Resonnering", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "Kostnad", - "workspace.cost.subtitle": "Brukskostnader fordelt på modell.", - "workspace.cost.allModels": "Alle modeller", - "workspace.cost.allKeys": "Alle nøkler", - "workspace.cost.deletedSuffix": "(slettet)", - "workspace.cost.empty": "Ingen bruksdata tilgjengelig for den valgte perioden.", - "workspace.cost.subscriptionShort": "sub", - - "workspace.keys.title": "API-nøkler", - "workspace.keys.subtitle": "Administrer API-nøklene dine for å få tilgang til opencode-tjenester.", - "workspace.keys.create": "Opprett API-nøkkel", - "workspace.keys.placeholder": "Skriv inn navn på nøkkel", - "workspace.keys.empty": "Opprett en opencode Gateway API-nøkkel", - "workspace.keys.table.name": "Navn", - "workspace.keys.table.key": "Nøkkel", - "workspace.keys.table.createdBy": "Opprettet av", - "workspace.keys.table.lastUsed": "Sist brukt", - "workspace.keys.copyApiKey": "Kopier API-nøkkel", - "workspace.keys.delete": "Slett", - - "workspace.members.title": "Medlemmer", - "workspace.members.subtitle": "Administrer medlemmer i arbeidsområdet og deres tillatelser.", - "workspace.members.invite": "Inviter medlem", - "workspace.members.inviting": "Inviterer...", - "workspace.members.beta.beforeLink": "Arbeidsområder er gratis for team i beta-perioden.", - "workspace.members.form.invitee": "Invitert", - "workspace.members.form.emailPlaceholder": "Skriv inn e-post", - "workspace.members.form.role": "Rolle", - "workspace.members.form.monthlyLimit": "Månedlig utgiftsgrense", - "workspace.members.noLimit": "Ingen grense", - "workspace.members.noLimitLowercase": "ingen grense", - "workspace.members.invited": "invitert", - "workspace.members.edit": "Rediger", - "workspace.members.delete": "Slett", - "workspace.members.saving": "Lagrer...", - "workspace.members.save": "Lagre", - "workspace.members.table.email": "E-post", - "workspace.members.table.role": "Rolle", - "workspace.members.table.monthLimit": "Månedsgrense", - "workspace.members.role.admin": "Admin", - "workspace.members.role.adminDescription": "Kan administrere modeller, medlemmer og fakturering", - "workspace.members.role.member": "Medlem", - "workspace.members.role.memberDescription": "Kan kun generere API-nøkler for seg selv", - - "workspace.settings.title": "Innstillinger", - "workspace.settings.subtitle": "Oppdater arbeidsområdets navn og preferanser.", - "workspace.settings.workspaceName": "Navn på arbeidsområde", - "workspace.settings.defaultName": "Standard", - "workspace.settings.updating": "Oppdaterer...", - "workspace.settings.save": "Lagre", - "workspace.settings.edit": "Rediger", - - "workspace.billing.title": "Fakturering", - "workspace.billing.subtitle.beforeLink": "Administrer betalingsmetoder.", - "workspace.billing.contactUs": "Kontakt oss", - "workspace.billing.subtitle.afterLink": "hvis du har spørsmål.", - "workspace.billing.currentBalance": "Gjeldende saldo", - "workspace.billing.add": "Legg til $", - "workspace.billing.enterAmount": "Angi beløp", - "workspace.billing.loading": "Laster...", - "workspace.billing.addAction": "Legg til", - "workspace.billing.addBalance": "Legg til saldo", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "Koblet til Stripe", - "workspace.billing.manage": "Administrer", - "workspace.billing.enable": "Aktiver fakturering", - - "workspace.monthlyLimit.title": "Månedlig grense", - "workspace.monthlyLimit.subtitle": "Angi en månedlig bruksgrense for kontoen din.", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "Angir...", - "workspace.monthlyLimit.set": "Sett", - "workspace.monthlyLimit.edit": "Rediger grense", - "workspace.monthlyLimit.noLimit": "Ingen bruksgrense satt.", - "workspace.monthlyLimit.currentUsage.beforeMonth": "Gjeldende forbruk for", - "workspace.monthlyLimit.currentUsage.beforeAmount": "er $", - - "workspace.redeem.title": "Løs inn kupong", - "workspace.redeem.subtitle": "Løs inn en kupongkode for å få kreditt eller fordeler.", - "workspace.redeem.placeholder": "Skriv inn kupongkode", - "workspace.redeem.redeem": "Løs inn", - "workspace.redeem.redeeming": "Løser inn...", - "workspace.redeem.success": "Kupongen ble løst inn.", - - "workspace.reload.title": "Auto-påfyll", - "workspace.reload.disabled.before": "Auto-påfyll er", - "workspace.reload.disabled.state": "deaktivert", - "workspace.reload.disabled.after": "Aktiver for å fylle på automatisk når saldoen er lav.", - "workspace.reload.enabled.before": "Auto-påfyll er", - "workspace.reload.enabled.state": "aktivert", - "workspace.reload.enabled.middle": "Vi fyller på", - "workspace.reload.processingFee": "behandlingsgebyr", - "workspace.reload.enabled.after": "når saldoen når", - "workspace.reload.edit": "Rediger", - "workspace.reload.enable": "Aktiver", - "workspace.reload.enableAutoReload": "Aktiver Auto-påfyll", - "workspace.reload.reloadAmount": "Fyll på $", - "workspace.reload.whenBalanceReaches": "Når saldoen når $", - "workspace.reload.saving": "Lagrer...", - "workspace.reload.save": "Lagre", - "workspace.reload.failedAt": "Påfylling mislyktes kl", - "workspace.reload.reason": "Årsak:", - "workspace.reload.updatePaymentMethod": "Vennligst oppdater betalingsmetoden din og prøv på nytt.", - "workspace.reload.retrying": "Prøver på nytt...", - "workspace.reload.retry": "Prøv på nytt", - "workspace.reload.error.paymentFailed": "Betaling mislyktes.", - - "workspace.payments.title": "Betalingshistorikk", - "workspace.payments.subtitle": "Nylige betalingstransaksjoner.", - "workspace.payments.table.date": "Dato", - "workspace.payments.table.paymentId": "Betalings-ID", - "workspace.payments.table.amount": "Beløp", - "workspace.payments.table.receipt": "Kvittering", - "workspace.payments.type.credit": "kreditt", - "workspace.payments.type.subscription": "abonnement", - "workspace.payments.view": "Vis", - - "workspace.black.loading": "Laster...", - "workspace.black.time.day": "dag", - "workspace.black.time.days": "dager", - "workspace.black.time.hour": "time", - "workspace.black.time.hours": "timer", - "workspace.black.time.minute": "minutt", - "workspace.black.time.minutes": "minutter", - "workspace.black.time.fewSeconds": "noen få sekunder", - "workspace.black.subscription.title": "Abonnement", - "workspace.black.subscription.message": "Du abonnerer på OpenCode Black for ${{plan}} per måned.", - "workspace.black.subscription.manage": "Administrer abonnement", - "workspace.black.subscription.rollingUsage": "5-timers bruk", - "workspace.black.subscription.weeklyUsage": "Ukentlig bruk", - "workspace.black.subscription.resetsIn": "Nullstilles om", - "workspace.black.subscription.useBalance": "Bruk din tilgjengelige saldo etter å ha nådd bruksgrensene", - "workspace.black.waitlist.title": "Venteliste", - "workspace.black.waitlist.joined": "Du står på venteliste for OpenCode Black-planen til ${{plan}} per måned.", - "workspace.black.waitlist.ready": "Vi er klare til å melde deg på OpenCode Black-planen til ${{plan}} per måned.", - "workspace.black.waitlist.leave": "Forlat venteliste", - "workspace.black.waitlist.leaving": "Forlater...", - "workspace.black.waitlist.left": "Forlot", - "workspace.black.waitlist.enroll": "Meld på", - "workspace.black.waitlist.enrolling": "Melder på...", - "workspace.black.waitlist.enrolled": "Påmeldt", - "workspace.black.waitlist.enrollNote": - "Når du klikker på Meld på, starter abonnementet umiddelbart og kortet ditt belastes.", - - "workspace.lite.loading": "Laster...", - "workspace.lite.time.day": "dag", - "workspace.lite.time.days": "dager", - "workspace.lite.time.hour": "time", - "workspace.lite.time.hours": "timer", - "workspace.lite.time.minute": "minutt", - "workspace.lite.time.minutes": "minutter", - "workspace.lite.time.fewSeconds": "noen få sekunder", - "workspace.lite.subscription.message": "Du abonnerer på OpenCode Go.", - "workspace.lite.subscription.manage": "Administrer abonnement", - "workspace.lite.subscription.rollingUsage": "Løpende bruk", - "workspace.lite.subscription.weeklyUsage": "Ukentlig bruk", - "workspace.lite.subscription.monthlyUsage": "Månedlig bruk", - "workspace.lite.subscription.resetsIn": "Nullstilles om", - "workspace.lite.subscription.useBalance": "Bruk din tilgjengelige saldo etter å ha nådd bruksgrensene", - "workspace.lite.subscription.selectProvider": - 'Velg "OpenCode Go" som leverandør i opencode-konfigurasjonen din for å bruke Go-modeller.', - "workspace.lite.providers.title": "Leverandører", - "workspace.lite.providers.description": "Kontroller hvilke leverandører som brukes til ruting.", - "workspace.lite.providers.useChina": "Aktiver modeller hostet i Kina", - "workspace.lite.black.message": - "Du abonnerer for øyeblikket på OpenCode Black eller står på venteliste. Vennligst avslutt abonnementet først hvis du vil bytte til Go.", - "workspace.lite.other.message": - "Et annet medlem i dette arbeidsområdet abonnerer allerede på OpenCode Go. Kun ett medlem per arbeidsområde kan abonnere.", - "workspace.lite.promo.description": - "OpenCode Go starter på {{price}}, deretter $10/måned, og gir pålitelig tilgang til populære åpne kodingsmodeller med sjenerøse bruksgrenser.", - "workspace.lite.promo.price": "$5 for den første måneden", - "workspace.lite.promo.modelsTitle": "Hva som er inkludert", - "workspace.lite.promo.footer": - "Planen er primært designet for internasjonale brukere, med modeller driftet i USA, EU og Singapore for stabil global tilgang. Priser og bruksgrenser kan endres etter hvert som vi lærer fra tidlig bruk og tilbakemeldinger.", - "workspace.lite.promo.subscribe": "Abonner på Go", - "workspace.lite.promo.subscribing": "Omdirigerer...", - "workspace.lite.promo.otherMethods": "Andre betalingsmetoder", - "workspace.lite.promo.selectMethod": "Velg betalingsmetode", - - "workspace.referral.copyLink": "Kopier lenke", - "workspace.referral.copied": "Kopiert", - "workspace.referral.overview.title": "Inviter venner", - "workspace.referral.overview.subtitle": "Få $5 når en venn abonnerer. De får også $5.", - "workspace.referral.instructions.share": "Del henvisningslenken din", - "workspace.referral.instructions.subscribe": "Vennen din blir med og abonnerer på Go", - "workspace.referral.instructions.claim": "Dere får begge $5 i brukskreditt å bruke på Go-bruksgrensene deres", - "workspace.referral.rewards.title": "Henvisningsbelønninger", - "workspace.referral.rewards.description": "Bruk tilgjengelige henvisningskreditter på Go-bruken din.", - "workspace.referral.rewards.subtitle": "{{applied}} / {{total}} belønninger brukt.", - "workspace.referral.rewards.empty": "Ingen henvisningsbelønninger ennå.", - "workspace.referral.table.reward": "Belønning", - "workspace.referral.table.referral": "Beskrivelse", - "workspace.referral.table.date": "Dato", - "workspace.referral.reward.description.inviter": "Inviterte {{email}}", - "workspace.referral.reward.description.invitee": "Invitert av {{email}}", - "workspace.referral.reward.action.subscribeUnlock": "Abonner for å låse opp", - "workspace.referral.reward.action.view": "Vis belønning", - "workspace.referral.reward.action.applied": "Belønning brukt", - "workspace.referral.reward.source.pendingInviter": "Venter på at de abonnerer", - "workspace.referral.reward.source.pendingInvitee": "Abonner for å låse opp belønningen", - "workspace.referral.reward.source.available": "Belønning klar til bruk", - "workspace.referral.reward.source.applied": "Belønning brukt", - "workspace.referral.reward.status.applied": "Belønning brukt", - "workspace.referral.reward.status.pendingInviter": "Abonner for å låse opp", - "workspace.referral.reward.status.pendingInvitee": "Abonner for å låse opp", - "workspace.referral.apply.noGo": "Abonner for å låse opp", - "workspace.referral.apply.preview": "Vis belønning", - "workspace.referral.apply.action": "Bruk", - "workspace.referral.apply.confirmTitle": "Bruk belønning", - "workspace.referral.apply.confirmBody": "Bruk {{amount}} for å redusere dette workspacets nåværende forbruk.", - "workspace.referral.apply.confirmAction": "Bruk", - - "download.title": "OpenCode | Last ned", - "download.meta.description": "Last ned OpenCode for macOS, Windows og Linux", - "download.hero.title": "Last ned OpenCode", - "download.hero.subtitle": "Tilgjengelig i beta for macOS, Windows og Linux", - "download.hero.button": "Last ned for {{os}}", - "download.section.terminal": "OpenCode Terminal", - "download.section.desktop": "OpenCode Desktop (Beta)", - "download.section.extensions": "OpenCode Extensions", - "download.section.integrations": "OpenCode Integrations", - "download.action.download": "Last ned", - "download.action.install": "Installer", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "Ikke nødvendigvis, men sannsynligvis. Du trenger et AI-abonnement hvis du vil koble OpenCode til en betalt leverandør, selv om du kan jobbe med", - "download.faq.a3.localLink": "lokale modeller", - "download.faq.a3.afterLocal.beforeZen": "gratis. Selv om vi oppfordrer brukere til å bruke", - "download.faq.a3.afterZen": ", fungerer OpenCode med alle populære leverandører som OpenAI, Anthropic, xAI osv.", - - "download.faq.a5.p1": "OpenCode er 100% gratis å bruke.", - "download.faq.a5.p2.beforeZen": - "Eventuelle ekstra kostnader kommer fra abonnementet ditt hos en modellleverandør. Selv om OpenCode fungerer med enhver modellleverandør, anbefaler vi å bruke", - "download.faq.a5.p2.afterZen": ".", - - "download.faq.a6.p1": "Dataene og informasjonen din lagres bare når du oppretter delbare lenker i OpenCode.", - "download.faq.a6.p2.beforeShare": "Les mer om", - "download.faq.a6.shareLink": "delingssider", - - "enterprise.title": "OpenCode | Enterprise-løsninger for din organisasjon", - "enterprise.meta.description": "Kontakt OpenCode for enterprise-løsninger", - "enterprise.hero.title": "Koden din er din", - "enterprise.hero.body1": - "OpenCode opererer sikkert inne i organisasjonen din uten at data eller kontekst lagres, og uten lisensbegrensninger eller eierskapskrav. Start en prøveperiode med teamet ditt, og rull den deretter ut i hele organisasjonen ved å integrere den med SSO og din interne AI-gateway.", - "enterprise.hero.body2": "Fortell oss hvordan vi kan hjelpe.", - "enterprise.form.name.label": "Fullt navn", - "enterprise.form.name.placeholder": "Jeff Bezos", - "enterprise.form.role.label": "Rolle", - "enterprise.form.role.placeholder": "Styreleder", - "enterprise.form.company.label": "Selskap", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "Bedrifts-e-post", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "Telefonnummer", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "Hvilket problem prøver dere å løse?", - "enterprise.form.message.placeholder": "Vi trenger hjelp med...", - "enterprise.form.send": "Send", - "enterprise.form.sending": "Sender...", - "enterprise.form.success": "Melding sendt, vi tar kontakt snart.", - "enterprise.form.success.submitted": "Skjemaet ble sendt inn.", - "enterprise.form.error.allFieldsRequired": "Alle felt er obligatoriske.", - "enterprise.form.error.invalidEmailFormat": "Ugyldig e-postformat.", - "enterprise.form.error.internalServer": "Intern serverfeil.", - "enterprise.faq.title": "FAQ", - "enterprise.faq.q1": "Hva er OpenCode Enterprise?", - "enterprise.faq.a1": - "OpenCode Enterprise er for organisasjoner som vil sikre at koden og dataene deres aldri forlater infrastrukturen. Dette kan gjøres med en sentral konfigurasjon som integreres med SSO og intern AI-gateway.", - "enterprise.faq.q2": "Hvordan kommer jeg i gang med OpenCode Enterprise?", - "enterprise.faq.a2": - "Start enkelt med en intern prøveperiode med teamet ditt. OpenCode lagrer som standard ikke koden din eller kontekstdata, noe som gjør det enkelt å komme i gang. Kontakt oss deretter for å diskutere priser og implementeringsalternativer.", - "enterprise.faq.q3": "Hvordan fungerer enterprise-prising?", - "enterprise.faq.a3": - "Vi tilbyr enterprise-prising per sete. Har du din egen LLM-gateway, tar vi ikke betalt for brukte tokens. Kontakt oss for flere detaljer og et tilpasset tilbud basert på organisasjonens behov.", - "enterprise.faq.q4": "Er dataene mine sikre med OpenCode Enterprise?", - "enterprise.faq.a4": - "Ja. OpenCode lagrer ikke koden din eller kontekstdata. All behandling skjer lokalt eller gjennom direkte API-kall til AI-leverandøren din. Med sentral konfigurasjon og SSO-integrasjon forblir dataene dine sikre innenfor organisasjonens infrastruktur.", - - "brand.title": "OpenCode | Merkevare", - "brand.meta.description": "OpenCode retningslinjer for merkevare", - "brand.heading": "Retningslinjer for merkevare", - "brand.subtitle": "Ressurser og assets som hjelper deg å jobbe med OpenCode-brandet.", - "brand.downloadAll": "Last ned alle assets", - - "changelog.title": "OpenCode | Endringslogg", - "changelog.meta.description": "Utgivelsesnotater og endringslogg for OpenCode", - "changelog.hero.title": "Endringslogg", - "changelog.hero.subtitle": "Nye oppdateringer og forbedringer for OpenCode", - "changelog.empty": "Ingen endringsloggoppføringer funnet.", - "changelog.viewJson": "Vis JSON", - - "bench.list.title": "Benchmark", - "bench.list.heading": "Benchmarks", - "bench.list.table.agent": "Agent", - "bench.list.table.model": "Modell", - "bench.list.table.score": "Poengsum", - "bench.submission.error.allFieldsRequired": "Alle felt er obligatoriske.", - - "bench.detail.title": "Benchmark - {{task}}", - "bench.detail.notFound": "Oppgave ikke funnet", - "bench.detail.na": "I/T", - "bench.detail.labels.agent": "Agent", - "bench.detail.labels.model": "Modell", - "bench.detail.labels.task": "Oppgave", - "bench.detail.labels.repo": "Repo", - "bench.detail.labels.from": "Fra", - "bench.detail.labels.to": "Til", - "bench.detail.labels.prompt": "Prompt", - "bench.detail.labels.commit": "Commit", - "bench.detail.labels.averageDuration": "Gjennomsnittlig varighet", - "bench.detail.labels.averageScore": "Gjennomsnittlig poengsum", - "bench.detail.labels.averageCost": "Gjennomsnittlig kostnad", - "bench.detail.labels.summary": "Sammendrag", - "bench.detail.labels.runs": "Kjøringer", - "bench.detail.labels.score": "Poengsum", - "bench.detail.labels.base": "Basis", - "bench.detail.labels.penalty": "Straff", - "bench.detail.labels.weight": "vekt", - "bench.detail.table.run": "Kjøring", - "bench.detail.table.score": "Poengsum (Basis - Straff)", - "bench.detail.table.cost": "Kostnad", - "bench.detail.table.duration": "Varighet", - "bench.detail.run.title": "Kjøring {{n}}", - "bench.detail.rawJson": "Rå JSON", -} satisfies Dict diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts deleted file mode 100644 index 6d7df39d2b..0000000000 --- a/packages/console/app/src/i18n/pl.ts +++ /dev/null @@ -1,832 +0,0 @@ -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "Dokumentacja", - "nav.changelog": "Dziennik zmian", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "Enterprise", - "nav.zen": "Zen", - "nav.login": "Zaloguj się", - "nav.free": "Pobierz", - "nav.home": "Strona główna", - "nav.openMenu": "Otwórz menu", - "nav.getStartedFree": "Zacznij za darmo", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "Skopiuj logo jako SVG", - "nav.context.copyWordmark": "Skopiuj logotyp jako SVG", - "nav.context.brandAssets": "Zasoby marki", - - "footer.github": "GitHub", - "footer.docs": "Dokumentacja", - "footer.changelog": "Dziennik zmian", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "Marka", - "legal.privacy": "Prywatność", - "legal.terms": "Warunki", - - "email.title": "Bądź pierwszym, który dowie się o nowych produktach", - "email.subtitle": "Dołącz do listy oczekujących na wczesny dostęp.", - "email.placeholder": "Adres e-mail", - "email.subscribe": "Subskrybuj", - "email.success": "Prawie gotowe, sprawdź skrzynkę i potwierdź swój adres e-mail", - - "notFound.title": "Nie znaleziono | opencode", - "notFound.heading": "404 - Nie znaleziono strony", - "notFound.home": "Strona główna", - "notFound.docs": "Dokumentacja", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "jasne logo opencode", - "notFound.logoDarkAlt": "ciemne logo opencode", - - "user.logout": "Wyloguj się", - - "auth.callback.error.codeMissing": "Nie znaleziono kodu autoryzacji.", - - "workspace.select": "Wybierz obszar roboczy", - "workspace.createNew": "+ Utwórz nowy obszar roboczy", - "workspace.modal.title": "Utwórz nowy obszar roboczy", - "workspace.modal.placeholder": "Wpisz nazwę obszaru roboczego", - - "common.cancel": "Anuluj", - "common.creating": "Tworzenie...", - "common.create": "Utwórz", - - "common.videoUnsupported": "Twoja przeglądarka nie obsługuje znacznika wideo.", - "common.figure": "Rys. {{n}}.", - "common.faq": "FAQ", - "common.learnMore": "Dowiedz się więcej", - - "error.invalidPlan": "Nieprawidłowy plan", - "error.workspaceRequired": "ID obszaru roboczego jest wymagane", - "error.alreadySubscribed": "Ten obszar roboczy ma już subskrypcję", - "error.limitRequired": "Limit jest wymagany.", - "error.monthlyLimitInvalid": "Ustaw prawidłowy limit miesięczny.", - "error.workspaceNameRequired": "Nazwa obszaru roboczego jest wymagana.", - "error.nameTooLong": "Nazwa musi mieć 255 znaków lub mniej.", - "error.emailRequired": "E-mail jest wymagany", - "error.roleRequired": "Rola jest wymagana", - "error.idRequired": "ID jest wymagane", - "error.nameRequired": "Nazwa jest wymagana", - "error.providerRequired": "Dostawca jest wymagany", - "error.apiKeyRequired": "Klucz API jest wymagany", - "error.modelRequired": "Model jest wymagany", - "error.reloadAmountMin": "Kwota doładowania musi wynosić co najmniej ${{amount}}", - "error.reloadTriggerMin": "Próg salda musi wynosić co najmniej ${{amount}}", - - "app.meta.description": "OpenCode - Otwartoźródłowy agent programistyczny.", - - "home.title": "OpenCode | Open source'owy agent AI do kodowania", - - "temp.title": "opencode | Agent AI do kodowania zbudowany dla terminala", - "temp.hero.title": "Agent AI do kodowania zbudowany dla terminala", - "temp.zen": "opencode zen", - "temp.getStarted": "Rozpocznij", - "temp.feature.native.title": "Natywny TUI", - "temp.feature.native.body": "Responsywny, natywny, tematyczny interfejs terminala", - "temp.feature.zen.beforeLink": "A", - "temp.feature.zen.link": "wyselekcjonowana lista modeli", - "temp.feature.zen.afterLink": "dostarczana przez opencode", - "temp.feature.models.beforeLink": "Obsługuje 75+ dostawców LLM przez", - "temp.feature.models.afterLink": ", w tym modele lokalne", - "temp.screenshot.caption": "OpenCode TUI z motywem tokyonight", - "temp.screenshot.alt": "OpenCode TUI z motywem tokyonight", - "temp.logoLightAlt": "jasne logo opencode", - "temp.logoDarkAlt": "ciemne logo opencode", - - "home.banner.badge": "Nowość", - "home.banner.text": "Aplikacja desktopowa dostępna w wersji beta", - "home.banner.platforms": "na macOS, Windows i Linux", - "home.banner.downloadNow": "Pobierz teraz", - "home.banner.downloadBetaNow": "Pobierz betę wersji desktopowej", - - "home.hero.title": "Open source'owy agent AI do kodowania", - "home.hero.subtitle.a": "Darmowe modele w zestawie lub podłącz dowolny model od dowolnego dostawcy,", - "home.hero.subtitle.b": "w tym Claude, GPT, Gemini i inne.", - - "home.install.ariaLabel": "Opcje instalacji", - - "home.what.title": "Czym jest OpenCode?", - "home.what.body": - "OpenCode to open source'owy agent, który pomaga pisać kod w terminalu, IDE lub aplikacji desktopowej.", - "home.what.lsp.title": "LSP włączone", - "home.what.lsp.body": "Automatycznie ładuje odpowiednie LSP dla LLM", - "home.what.multiSession.title": "Wielosesyjność", - "home.what.multiSession.body": "Uruchom wiele agentów równolegle w tym samym projekcie", - "home.what.shareLinks.title": "Udostępnianie linków", - "home.what.shareLinks.body": "Udostępnij link do dowolnej sesji w celach referencyjnych lub do debugowania", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "Zaloguj się przez GitHub, aby używać swojego konta Copilot", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "Zaloguj się przez OpenAI, aby używać swojego konta ChatGPT Plus lub Pro", - "home.what.anyModel.title": "Dowolny model", - "home.what.anyModel.body": "75+ dostawców LLM przez Models.dev, w tym modele lokalne", - "home.what.anyEditor.title": "Dowolny edytor", - "home.what.anyEditor.body": "Dostępny jako interfejs terminalowy, aplikacja desktopowa i rozszerzenie IDE", - "home.what.readDocs": "Czytaj dokumentację", - - "home.growth.title": "Open source'owy agent AI do kodowania", - "home.growth.body": - "Z ponad {{stars}} gwiazdkami na GitHubie, {{contributors}} współtwórcami i ponad {{commits}} commitami, OpenCode jest używany i ceniony przez ponad {{monthlyUsers}} deweloperów każdego miesiąca.", - "home.growth.githubStars": "Gwiazdki GitHub", - "home.growth.contributors": "Współtwórcy", - "home.growth.monthlyDevs": "Miesięczni użytkownicy", - - "home.privacy.title": "Zbudowany z myślą o prywatności", - "home.privacy.body": - "OpenCode nie przechowuje Twojego kodu ani danych kontekstowych, dzięki czemu może działać w środowiskach wrażliwych na prywatność.", - "home.privacy.learnMore": "Dowiedz się więcej o", - "home.privacy.link": "prywatności", - - "home.faq.q1": "Czym jest OpenCode?", - "home.faq.a1": - "OpenCode to open source'owy agent, który pomaga pisać i uruchamiać kod z dowolnym modelem AI. Jest dostępny jako interfejs terminalowy, aplikacja desktopowa lub rozszerzenie IDE.", - "home.faq.q2": "Jak korzystać z OpenCode?", - "home.faq.a2.before": "Najłatwiej zacząć od przeczytania", - "home.faq.a2.link": "wprowadzenia", - "home.faq.q3": "Czy potrzebuję dodatkowych subskrypcji AI, aby używać OpenCode?", - "home.faq.a3.p1": - "Niekoniecznie. OpenCode posiada zestaw darmowych modeli, z których możesz korzystać bez zakładania konta.", - "home.faq.a3.p2.beforeZen": "Poza tym możesz używać dowolnych popularnych modeli do kodowania, tworząc konto", - "home.faq.a3.p2.afterZen": ".", - "home.faq.a3.p3": - "Chociaż zachęcamy do korzystania z Zen, OpenCode działa również ze wszystkimi popularnymi dostawcami, takimi jak OpenAI, Anthropic, xAI itp.", - "home.faq.a3.p4.beforeLocal": "Możesz nawet podłączyć swoje", - "home.faq.a3.p4.localLink": "lokalne modele", - "home.faq.q4": "Czy mogę używać moich istniejących subskrypcji AI z OpenCode?", - "home.faq.a4.p1": - "Tak, OpenCode obsługuje plany subskrypcyjne od wszystkich głównych dostawców. Możesz używać swoich subskrypcji Claude Pro/Max, ChatGPT Plus/Pro lub GitHub Copilot.", - "home.faq.q5": "Czy mogę używać OpenCode tylko w terminalu?", - "home.faq.a5.beforeDesktop": "Już nie! OpenCode jest teraz dostępny jako aplikacja na", - "home.faq.a5.desktop": "pulpit (desktop)", - "home.faq.a5.and": "i", - "home.faq.a5.web": "web", - "home.faq.q6": "Ile kosztuje OpenCode?", - "home.faq.a6": - "OpenCode jest w 100% darmowy. Zawiera również zestaw darmowych modeli. Mogą pojawić się dodatkowe koszty, jeśli podłączysz innego dostawcę.", - "home.faq.q7": "A co z danymi i prywatnością?", - "home.faq.a7.p1": - "Twoje dane i informacje są przechowywane tylko wtedy, gdy używasz naszych darmowych modeli lub tworzysz linki do udostępniania.", - "home.faq.a7.p2.beforeModels": "Dowiedz się więcej o", - "home.faq.a7.p2.modelsLink": "naszych modelach", - "home.faq.a7.p2.and": "i", - "home.faq.a7.p2.shareLink": "stronach udostępniania", - "home.faq.q8": "Czy OpenCode jest open source?", - "home.faq.a8.p1": "Tak, OpenCode jest w pełni open source. Kod źródłowy jest publicznie dostępny na", - "home.faq.a8.p2": "na licencji", - "home.faq.a8.mitLicense": "MIT License", - "home.faq.a8.p3": - ", co oznacza, że każdy może go używać, modyfikować i wspierać jego rozwój. Każdy ze społeczności może zgłaszać błędy, przesyłać pull requesty i rozszerzać funkcjonalność.", - - "home.zenCta.title": "Uzyskaj dostęp do niezawodnych, zoptymalizowanych modeli dla agentów kodujących", - "home.zenCta.body": - "Zen daje dostęp do wyselekcjonowanego zestawu modeli AI, które OpenCode przetestował i sprawdził (benchmark) specjalnie dla agentów kodujących. Nie musisz martwić się o niespójną wydajność i jakość u różnych dostawców, używaj sprawdzonych modeli, które działają.", - "home.zenCta.link": "Dowiedz się więcej o Zen", - - "zen.title": "OpenCode Zen | Wyselekcjonowany zestaw niezawodnych, zoptymalizowanych modeli dla agentów kodujących", - "zen.hero.title": "Niezawodne, zoptymalizowane modele dla agentów kodujących", - "zen.hero.body": - "Zen daje dostęp do wyselekcjonowanego zestawu modeli AI, które OpenCode przetestował i sprawdził (benchmark) specjalnie dla agentów kodujących. Nie musisz martwić się o niespójną wydajność i jakość, używaj sprawdzonych modeli, które działają.", - - "zen.faq.q1": "Czym jest OpenCode Zen?", - "zen.faq.a1": - "Zen to wyselekcjonowany zestaw modeli AI przetestowanych i sprawdzonych pod kątem agentów kodujących, stworzony przez zespół stojący za OpenCode.", - "zen.faq.q2": "Co sprawia, że Zen jest bardziej precyzyjny?", - "zen.faq.a2": - "Zen oferuje tylko modele, które zostały specjalnie przetestowane i sprawdzone dla agentów kodujących. Nie używasz noża do masła do krojenia steku, więc nie używaj słabych modeli do kodowania.", - "zen.faq.q3": "Czy Zen jest tańszy?", - "zen.faq.a3": - "Zen nie jest nastawiony na zysk. Zen przekazuje koszty od dostawców modeli bezpośrednio do Ciebie. Im większe użycie Zen, tym lepsze stawki OpenCode może wynegocjować i przekazać Tobie.", - "zen.faq.q4": "Ile kosztuje Zen?", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "pobiera opłaty za żądanie", - "zen.faq.a4.p1.afterPricing": "bez marży, więc płacisz dokładnie tyle, ile pobiera dostawca modelu.", - "zen.faq.a4.p2.beforeAccount": - "Twój całkowity koszt zależy od użycia, i możesz ustawić miesięczne limity wydatków na swoim", - "zen.faq.a4.p2.accountLink": "koncie", - "zen.faq.a4.p3": - "Aby pokryć koszty, OpenCode dolicza jedynie niewielką opłatę za przetwarzanie płatności w wysokości $1.23 przy każdym doładowaniu salda o $20.", - "zen.faq.q5": "A co z danymi i prywatnością?", - "zen.faq.a5.beforeExceptions": - "Wszystkie modele Zen są hostowane w USA. Dostawcy stosują politykę zerowej retencji i nie używają Twoich danych do trenowania modeli, z", - "zen.faq.a5.exceptionsLink": "następującymi wyjątkami", - "zen.faq.q6": "Czy mogę ustawić limity wydatków?", - "zen.faq.a6": "Tak, możesz ustawić miesięczne limity wydatków na swoim koncie.", - "zen.faq.q7": "Czy mogę anulować?", - "zen.faq.a7": "Tak, możesz wyłączyć rozliczenia w dowolnym momencie i wykorzystać pozostałe saldo.", - "zen.faq.q8": "Czy mogę używać Zen z innymi agentami kodującymi?", - "zen.faq.a8": - "Chociaż Zen świetnie działa z OpenCode, możesz używać Zen z dowolnym agentem. Postępuj zgodnie z instrukcjami konfiguracji w swoim preferowanym agencie.", - - "zen.cta.start": "Zacznij korzystać z Zen", - "zen.pricing.title": "Dodaj 20$ salda Pay as you go", - "zen.pricing.fee": "(+$1.23 opłaty za przetwarzanie karty)", - "zen.pricing.body": "Używaj z dowolnym agentem. Ustaw miesięczne limity wydatków. Anuluj w dowolnym momencie.", - "zen.problem.title": "Jaki problem rozwiązuje Zen?", - "zen.problem.body": - "Dostępnych jest wiele modeli, ale tylko nieliczne dobrze współpracują z agentami kodującymi. Większość dostawców konfiguruje je inaczej, co daje różne wyniki.", - "zen.problem.subtitle": "Naprawiamy to dla wszystkich, nie tylko dla użytkowników OpenCode.", - "zen.problem.item1": "Testowanie wybranych modeli i konsultacje z ich zespołami", - "zen.problem.item2": "Współpraca z dostawcami w celu zapewnienia ich prawidłowego dostarczania", - "zen.problem.item3": "Benchmark wszystkich rekomendowanych przez nas kombinacji modeli i dostawców", - "zen.how.title": "Jak działa Zen", - "zen.how.body": "Chociaż sugerujemy używanie Zen z OpenCode, możesz używać Zen z dowolnym agentem.", - "zen.how.step1.title": "Zarejestruj się i doładuj saldo 20$", - "zen.how.step1.beforeLink": "postępuj zgodnie z", - "zen.how.step1.link": "instrukcją konfiguracji", - "zen.how.step2.title": "Używaj Zen z przejrzystym cennikiem", - "zen.how.step2.link": "płać za żądanie", - "zen.how.step2.afterLink": "bez marży", - "zen.how.step3.title": "Automatyczne doładowanie", - "zen.how.step3.body": "gdy Twoje saldo osiągnie 5$, automatycznie dodamy 20$", - "zen.privacy.title": "Twoja prywatność jest dla nas ważna", - "zen.privacy.beforeExceptions": - "Wszystkie modele Zen są hostowane w USA. Dostawcy stosują politykę zerowej retencji i nie wykorzystują Twoich danych do trenowania modeli, z", - "zen.privacy.exceptionsLink": "następującymi wyjątkami", - - "go.title": "OpenCode Go | Niskokosztowe modele do kodowania dla każdego", - "go.meta.description": - "Go zaczyna się od $5 za pierwszy miesiąc, potem $10/miesiąc, z hojnymi 5-godzinnymi limitami zapytań dla GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro i DeepSeek V4 Flash.", - "go.hero.title": "Niskokosztowe modele do kodowania dla każdego", - "go.hero.body": - "Go udostępnia programowanie z agentami programistom na całym świecie. Oferuje hojne limity i niezawodny dostęp do najzdolniejszych modeli open source, dzięki czemu możesz budować za pomocą potężnych agentów, nie martwiąc się o koszty czy dostępność.", - - "go.cta.start": "Zasubskrybuj Go", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "Zasubskrybuj Go", - "go.cta.price": "$10/miesiąc", - "go.cta.promo": "$5 pierwszy miesiąc", - "go.pricing.body": - "Używaj z dowolnym agentem. $5 za pierwszy miesiąc, potem $10/miesiąc. Doładuj konto w razie potrzeby. Anuluj w dowolnym momencie.", - "go.graph.free": "Darmowe", - "go.graph.freePill": "Big Pickle i darmowe modele", - "go.graph.go": "Go", - "go.graph.label": "Żądania na 5 godzin", - "go.graph.usageLimits": "Limity użycia", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "Żądania na 5h: {{free}} vs {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "ex-CEO, Terminal Products", - "go.testimonials.dax.quoteAfter": "zmieniło moje życie, to naprawdę oczywisty wybór.", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "ex-Founder, SEED, PM, Melt, Pop, Dapt, Cadmus, and ViewPoint", - "go.testimonials.jay.quoteBefore": "4 na 5 osób w naszym zespole uwielbia używać", - "go.testimonials.jay.quoteAfter": ".", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "ex-Hero, AWS", - "go.testimonials.adam.quoteBefore": "Nie mogę wystarczająco polecić", - "go.testimonials.adam.quoteAfter": ". Poważnie, to jest naprawdę dobre.", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "ex-Head of Design, Laravel", - "go.testimonials.david.quoteBefore": "Dzięki", - "go.testimonials.david.quoteAfter": "wiem, że wszystkie modele są przetestowane i idealne dla agentów kodujących.", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "ex-Intern, Nvidia (4 times)", - "go.testimonials.frank.quote": "Chciałbym wciąż być w Nvidia.", - "go.problem.title": "Jaki problem rozwiązuje Go?", - "go.problem.body": - "Skupiamy się na udostępnieniu doświadczenia OpenCode jak największej liczbie osób. OpenCode Go to tania subskrypcja: $5 za pierwszy miesiąc, potem $10/miesiąc. Zapewnia hojne limity i niezawodny dostęp do najbardziej wydajnych modeli open source.", - "go.problem.subtitle": " ", - "go.problem.item1": "Niskokosztowa cena subskrypcji", - "go.problem.item2": "Hojne limity i niezawodny dostęp", - "go.problem.item3": "Stworzony dla jak największej liczby programistów", - "go.problem.item4": - "Zawiera GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro i DeepSeek V4 Flash", - "go.how.title": "Jak działa Go", - "go.how.body": - "Go zaczyna się od $5 za pierwszy miesiąc, potem $10/miesiąc. Możesz go używać z OpenCode lub dowolnym agentem.", - "go.how.step1.title": "Załóż konto", - "go.how.step1.beforeLink": "postępuj zgodnie z", - "go.how.step1.link": "instrukcją konfiguracji", - "go.how.step2.title": "Zasubskrybuj Go", - "go.how.step2.link": "$5 za pierwszy miesiąc", - "go.how.step2.afterLink": "potem $10/miesiąc z hojnymi limitami", - "go.how.step3.title": "Zacznij kodować", - "go.how.step3.body": "z niezawodnym dostępem do modeli open source", - "go.privacy.title": "Twoja prywatność jest dla nas ważna", - "go.privacy.body": - "Plan został zaprojektowany głównie dla użytkowników międzynarodowych, z modelami hostowanymi w USA, UE i Singapurze, aby zapewnić stabilny globalny dostęp.", - "go.privacy.contactAfter": "jeśli masz jakiekolwiek pytania.", - "go.privacy.beforeExceptions": - "Modele Go są hostowane w USA. Dostawcy stosują politykę zerowej retencji i nie używają Twoich danych do trenowania modeli, z", - "go.privacy.exceptionsLink": "następującymi wyjątkami", - "go.faq.q1": "Czym jest OpenCode Go?", - "go.faq.a1": - "Go to niskokosztowa subskrypcja, która daje niezawodny dostęp do zdolnych modeli open source dla agentów kodujących.", - "go.faq.q2": "Jakie modele zawiera Go?", - "go.faq.a2": "Go obejmuje poniższe modele z wysokimi limitami i niezawodnym dostępem.", - "go.faq.q3": "Czy Go to to samo co Zen?", - "go.faq.a3": - "Nie. Zen to model płatności za użycie, podczas gdy Go zaczyna się od $5 za pierwszy miesiąc, potem $10/miesiąc, z hojnymi limitami i niezawodnym dostępem do modeli open source GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro i DeepSeek V4 Flash.", - "go.faq.q4": "Ile kosztuje Go?", - "go.faq.a4.p1.beforePricing": "Go kosztuje", - "go.faq.a4.p1.pricingLink": "$5 za pierwszy miesiąc", - "go.faq.a4.p1.afterPricing": "potem $10/miesiąc z hojnymi limitami.", - "go.faq.a4.p2.beforeAccount": "Możesz zarządzać subskrypcją na swoim", - "go.faq.a4.p2.accountLink": "koncie", - "go.faq.a4.p3": "Anuluj w dowolnym momencie.", - "go.faq.q5": "A co z danymi i prywatnością?", - "go.faq.a5.body": - "Plan został zaprojektowany głównie dla użytkowników międzynarodowych, z modelami hostowanymi w USA, UE i Singapurze, aby zapewnić stabilny globalny dostęp. Nasi dostawcy stosują politykę zerowej retencji i nie używają Twoich danych do trenowania modeli.", - "go.faq.a5.beforeExceptions": - "Modele Go są hostowane w USA. Dostawcy stosują politykę zerowej retencji i nie używają Twoich danych do trenowania modeli, z", - "go.faq.a5.exceptionsLink": "następującymi wyjątkami", - "go.faq.q6": "Czy mogę doładować środki?", - "go.faq.a6": "Jeśli potrzebujesz większego użycia, możesz doładować środki na swoim koncie.", - "go.faq.q7": "Czy mogę anulować?", - "go.faq.a7": "Tak, możesz anulować w dowolnym momencie.", - "go.faq.q8": "Czy mogę używać Go z innymi agentami kodującymi?", - "go.faq.a8": - "Tak, możesz używać Go z dowolnym agentem. Postępuj zgodnie z instrukcjami konfiguracji w swoim preferowanym agencie.", - - "go.faq.q9": "Jaka jest różnica między darmowymi modelami a Go?", - "go.faq.a9": - "Darmowe modele obejmują Big Pickle oraz modele promocyjne dostępne w danym momencie, z limitem 200 zapytań/dzień. Go zawiera GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro i DeepSeek V4 Flash z wyższymi limitami zapytań egzekwowanymi w oknach kroczących (5-godzinnych, tygodniowych i miesięcznych), w przybliżeniu równoważnymi $12 na 5 godzin, $30 tygodniowo i $60 miesięcznie (rzeczywista liczba zapytań zależy od modelu i użycia).", - - "zen.api.error.rateLimitExceeded": "Przekroczono limit zapytań. Spróbuj ponownie później.", - "zen.api.error.modelNotSupported": "Model {{model}} nie jest obsługiwany", - "zen.api.error.modelFormatNotSupported": "Model {{model}} nie jest obsługiwany dla formatu {{format}}", - "zen.api.error.noProviderAvailable": "Brak dostępnego dostawcy", - "zen.api.error.providerNotSupported": "Dostawca {{provider}} nie jest obsługiwany", - "zen.api.error.missingApiKey": "Brak klucza API.", - "zen.api.error.invalidApiKey": "Nieprawidłowy klucz API.", - "zen.api.error.subscriptionQuotaExceeded": "Przekroczono limit subskrypcji. Spróbuj ponownie za {{retryIn}}.", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "Osiągnięto 5-godzinny limit użycia. Resetuje się za {{retryIn}}. Aby nadal korzystać z tego modelu, włącz użycie z dostępnego salda: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "Osiągnięto tygodniowy limit użycia. Resetuje się za {{retryIn}}. Aby nadal korzystać z tego modelu, włącz użycie z dostępnego salda: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "Osiągnięto miesięczny limit użycia. Resetuje się za {{retryIn}}. Aby nadal korzystać z tego modelu, włącz użycie z dostępnego salda: {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "Brak metody płatności. Dodaj metodę płatności tutaj: {{billingUrl}}", - "zen.api.error.insufficientBalance": "Niewystarczające saldo. Zarządzaj swoimi płatnościami tutaj: {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "Twoja przestrzeń robocza osiągnęła miesięczny limit wydatków w wysokości ${{amount}}. Zarządzaj swoimi limitami tutaj: {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "Osiągnąłeś swój miesięczny limit wydatków w wysokości ${{amount}}. Zarządzaj swoimi limitami tutaj: {{membersUrl}}", - "zen.api.error.modelDisabled": "Model jest wyłączony", - "zen.api.error.regionNotAllowed": - "Ten model jest hostowany w Chinach. Jeśli chcesz korzystać z tego modelu, włącz go w swoich ustawieniach: {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "Bezpłatna promocja {{model}} dobiegła końca. Możesz dalej korzystać z modelu, subskrybując OpenCode Go - {{link}}", - - "black.meta.title": "OpenCode Black | Dostęp do najlepszych na świecie modeli kodujących", - "black.meta.description": "Uzyskaj dostęp do Claude, GPT, Gemini i innych dzięki planom subskrypcji OpenCode Black.", - "black.hero.title": "Dostęp do najlepszych na świecie modeli kodujących", - "black.hero.subtitle": "W tym Claude, GPT, Gemini i inne", - "black.title": "OpenCode Black | Cennik", - "black.paused": "Rejestracja planu Black jest tymczasowo wstrzymana.", - "black.plan.icon20": "Plan Black 20", - "black.plan.icon100": "Plan Black 100", - "black.plan.icon200": "Plan Black 200", - "black.plan.multiplier100": "5x większe użycie niż Black 20", - "black.plan.multiplier200": "20x większe użycie niż Black 20", - "black.price.perMonth": "miesięcznie", - "black.price.perPersonBilledMonthly": "za osobę rozliczane miesięcznie", - "black.terms.1": "Twoja subskrypcja nie rozpocznie się natychmiast", - "black.terms.2": "Zostaniesz dodany do listy oczekujących i aktywowany wkrótce", - "black.terms.3": "Twoja karta zostanie obciążona dopiero po aktywacji subskrypcji", - "black.terms.4": "Obowiązują limity użycia, intensywne automatyczne użycie może wyczerpać limity szybciej", - "black.terms.5": "Subskrypcje są dla osób indywidualnych, skontaktuj się z Enterprise dla zespołów", - "black.terms.6": "Limity mogą zostać dostosowane, a plany mogą zostać wycofane w przyszłości", - "black.terms.7": "Anuluj subskrypcję w dowolnym momencie", - "black.action.continue": "Kontynuuj", - "black.finePrint.beforeTerms": "Podane ceny nie zawierają stosownego podatku", - "black.finePrint.terms": "Warunki świadczenia usług", - "black.workspace.title": "OpenCode Black | Wybierz obszar roboczy", - "black.workspace.selectPlan": "Wybierz obszar roboczy dla tego planu", - "black.workspace.name": "Obszar roboczy {{n}}", - "black.subscribe.title": "Subskrybuj OpenCode Black", - "black.subscribe.paymentMethod": "Metoda płatności", - "black.subscribe.loadingPaymentForm": "Ładowanie formularza płatności...", - "black.subscribe.selectWorkspaceToContinue": "Wybierz obszar roboczy, aby kontynuować", - "black.subscribe.failurePrefix": "O nie!", - "black.subscribe.error.generic": "Wystąpił błąd", - "black.subscribe.error.invalidPlan": "Nieprawidłowy plan", - "black.subscribe.error.workspaceRequired": "ID obszaru roboczego jest wymagane", - "black.subscribe.error.alreadySubscribed": "Ten obszar roboczy ma już subskrypcję", - "black.subscribe.processing": "Przetwarzanie...", - "black.subscribe.submit": "Subskrybuj ${{plan}}", - "black.subscribe.form.chargeNotice": "Zostaniesz obciążony dopiero po aktywacji subskrypcji", - "black.subscribe.success.title": "Jesteś na liście oczekujących OpenCode Black", - "black.subscribe.success.subscriptionPlan": "Plan subskrypcji", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "Kwota", - "black.subscribe.success.amountValue": "${{plan}} miesięcznie", - "black.subscribe.success.paymentMethod": "Metoda płatności", - "black.subscribe.success.dateJoined": "Data dołączenia", - "black.subscribe.success.chargeNotice": "Twoja karta zostanie obciążona po aktywacji subskrypcji", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "Użycie", - "workspace.nav.apiKeys": "Klucze API", - "workspace.nav.members": "Członkowie", - "workspace.nav.billing": "Rozliczenia", - "workspace.nav.settings": "Ustawienia", - - "workspace.home.banner.beforeLink": "Niezawodne, zoptymalizowane modele dla agentów kodujących.", - "workspace.lite.banner.beforeLink": "Niskokosztowe modele kodowania dla każdego.", - "workspace.home.billing.loading": "Ładowanie...", - "workspace.home.billing.enable": "Włącz rozliczenia", - "workspace.home.billing.currentBalance": "Aktualne saldo", - - "workspace.newUser.feature.tested.title": "Przetestowane i zweryfikowane modele", - "workspace.newUser.feature.tested.body": - "Przeprowadziliśmy testy porównawcze i przetestowaliśmy modele specjalnie dla agentów kodujących, aby zapewnić najlepszą wydajność.", - "workspace.newUser.feature.quality.title": "Najwyższa jakość", - "workspace.newUser.feature.quality.body": - "Dostęp do modeli skonfigurowanych pod kątem optymalnej wydajności - bez degradacji jakości czy przekierowywania do tańszych dostawców.", - "workspace.newUser.feature.lockin.title": "Brak blokady (Lock-in)", - "workspace.newUser.feature.lockin.body": - "Używaj Zen z dowolnym agentem kodującym i kontynuuj korzystanie z innych dostawców z OpenCode, kiedy tylko chcesz.", - "workspace.newUser.copyApiKey": "Skopiuj klucz API", - "workspace.newUser.copyKey": "Skopiuj klucz", - "workspace.newUser.copied": "Skopiowano!", - "workspace.newUser.step.enableBilling": "Włącz rozliczenia", - "workspace.newUser.step.login.before": "Uruchom", - "workspace.newUser.step.login.after": "i wybierz opencode", - "workspace.newUser.step.pasteKey": "Wklej swój klucz API", - "workspace.newUser.step.models.before": "Uruchom opencode i wpisz", - "workspace.newUser.step.models.after": "aby wybrać model", - - "workspace.models.title": "Modele", - "workspace.models.subtitle.beforeLink": "Zarządzaj dostępem członków obszaru roboczego do modeli.", - "workspace.models.table.model": "Model", - "workspace.models.table.enabled": "Włączony", - - "workspace.providers.title": "Przynieś własny klucz (BYOK)", - "workspace.providers.subtitle": "Skonfiguruj własne klucze API od dostawców AI.", - "workspace.providers.placeholder": "Wprowadź klucz API {{provider}} ({{prefix}}...)", - "workspace.providers.configure": "Konfiguruj", - "workspace.providers.edit": "Edytuj", - "workspace.providers.delete": "Usuń", - "workspace.providers.saving": "Zapisywanie...", - "workspace.providers.save": "Zapisz", - "workspace.providers.table.provider": "Dostawca", - "workspace.providers.table.apiKey": "Klucz API", - - "workspace.usage.title": "Historia użycia", - "workspace.usage.subtitle": "Ostatnie użycie API i koszty.", - "workspace.usage.empty": "Wykonaj pierwsze wywołanie API, aby rozpocząć.", - "workspace.usage.table.date": "Data", - "workspace.usage.table.model": "Model", - "workspace.usage.table.input": "Wejście", - "workspace.usage.table.output": "Wyjście", - "workspace.usage.table.cost": "Koszt", - "workspace.usage.table.session": "Sesja", - "workspace.usage.breakdown.input": "Wejście", - "workspace.usage.breakdown.cacheRead": "Odczyt Cache", - "workspace.usage.breakdown.cacheWrite": "Zapis Cache", - "workspace.usage.breakdown.output": "Wyjście", - "workspace.usage.breakdown.reasoning": "Rozumowanie", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "Koszt", - "workspace.cost.subtitle": "Koszty użycia w podziale na modele.", - "workspace.cost.allModels": "Wszystkie modele", - "workspace.cost.allKeys": "Wszystkie klucze", - "workspace.cost.deletedSuffix": "(usunięte)", - "workspace.cost.empty": "Brak danych o użyciu dla wybranego okresu.", - "workspace.cost.subscriptionShort": "sub", - - "workspace.keys.title": "Klucze API", - "workspace.keys.subtitle": "Zarządzaj kluczami API do usług opencode.", - "workspace.keys.create": "Utwórz klucz API", - "workspace.keys.placeholder": "Wpisz nazwę klucza", - "workspace.keys.empty": "Utwórz klucz API bramy opencode", - "workspace.keys.table.name": "Nazwa", - "workspace.keys.table.key": "Klucz", - "workspace.keys.table.createdBy": "Utworzony przez", - "workspace.keys.table.lastUsed": "Ostatnio użyty", - "workspace.keys.copyApiKey": "Skopiuj klucz API", - "workspace.keys.delete": "Usuń", - - "workspace.members.title": "Członkowie", - "workspace.members.subtitle": "Zarządzaj członkami obszaru roboczego i ich uprawnieniami.", - "workspace.members.invite": "Zaproś członka", - "workspace.members.inviting": "Zapraszanie...", - "workspace.members.beta.beforeLink": "Obszary robocze są darmowe dla zespołów w fazie beta.", - "workspace.members.form.invitee": "Zaproszona osoba", - "workspace.members.form.emailPlaceholder": "Wpisz e-mail", - "workspace.members.form.role": "Rola", - "workspace.members.form.monthlyLimit": "Miesięczny limit wydatków", - "workspace.members.noLimit": "Bez limitu", - "workspace.members.noLimitLowercase": "bez limitu", - "workspace.members.invited": "zaproszono", - "workspace.members.edit": "Edytuj", - "workspace.members.delete": "Usuń", - "workspace.members.saving": "Zapisywanie...", - "workspace.members.save": "Zapisz", - "workspace.members.table.email": "E-mail", - "workspace.members.table.role": "Rola", - "workspace.members.table.monthLimit": "Limit miesięczny", - "workspace.members.role.admin": "Administrator", - "workspace.members.role.adminDescription": "Może zarządzać modelami, członkami i rozliczeniami", - "workspace.members.role.member": "Członek", - "workspace.members.role.memberDescription": "Może generować klucze API tylko dla siebie", - - "workspace.settings.title": "Ustawienia", - "workspace.settings.subtitle": "Zaktualizuj nazwę i preferencje obszaru roboczego.", - "workspace.settings.workspaceName": "Nazwa obszaru roboczego", - "workspace.settings.defaultName": "Domyślny", - "workspace.settings.updating": "Aktualizowanie...", - "workspace.settings.save": "Zapisz", - "workspace.settings.edit": "Edytuj", - - "workspace.billing.title": "Rozliczenia", - "workspace.billing.subtitle.beforeLink": "Zarządzaj metodami płatności.", - "workspace.billing.contactUs": "Skontaktuj się z nami", - "workspace.billing.subtitle.afterLink": "jeśli masz jakiekolwiek pytania.", - "workspace.billing.currentBalance": "Aktualne saldo", - "workspace.billing.add": "Dodaj $", - "workspace.billing.enterAmount": "Wpisz kwotę", - "workspace.billing.loading": "Ładowanie...", - "workspace.billing.addAction": "Dodaj", - "workspace.billing.addBalance": "Doładuj saldo", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "Połączono ze Stripe", - "workspace.billing.manage": "Zarządzaj", - "workspace.billing.enable": "Włącz rozliczenia", - - "workspace.monthlyLimit.title": "Limit miesięczny", - "workspace.monthlyLimit.subtitle": "Ustaw miesięczny limit użycia dla swojego konta.", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "Ustawianie...", - "workspace.monthlyLimit.set": "Ustaw", - "workspace.monthlyLimit.edit": "Edytuj limit", - "workspace.monthlyLimit.noLimit": "Brak ustawionego limitu użycia.", - "workspace.monthlyLimit.currentUsage.beforeMonth": "Aktualne użycie za", - "workspace.monthlyLimit.currentUsage.beforeAmount": "wynosi $", - - "workspace.redeem.title": "Zrealizuj kupon", - "workspace.redeem.subtitle": "Zrealizuj kod kuponu, aby otrzymać środki lub korzyści.", - "workspace.redeem.placeholder": "Wpisz kod kuponu", - "workspace.redeem.redeem": "Zrealizuj", - "workspace.redeem.redeeming": "Realizowanie...", - "workspace.redeem.success": "Kupon został zrealizowany.", - - "workspace.reload.title": "Automatyczne doładowanie", - "workspace.reload.disabled.before": "Automatyczne doładowanie jest", - "workspace.reload.disabled.state": "wyłączone", - "workspace.reload.disabled.after": "Włącz, aby automatycznie doładować, gdy saldo jest niskie.", - "workspace.reload.enabled.before": "Automatyczne doładowanie jest", - "workspace.reload.enabled.state": "włączone", - "workspace.reload.enabled.middle": "Doładujemy", - "workspace.reload.processingFee": "opłata procesowa", - "workspace.reload.enabled.after": "gdy saldo osiągnie", - "workspace.reload.edit": "Edytuj", - "workspace.reload.enable": "Włącz", - "workspace.reload.enableAutoReload": "Włącz automatyczne doładowanie", - "workspace.reload.reloadAmount": "Doładuj kwotą $", - "workspace.reload.whenBalanceReaches": "Gdy saldo osiągnie $", - "workspace.reload.saving": "Zapisywanie...", - "workspace.reload.save": "Zapisz", - "workspace.reload.failedAt": "Doładowanie nie powiodło się o", - "workspace.reload.reason": "Powód:", - "workspace.reload.updatePaymentMethod": "Zaktualizuj metodę płatności i spróbuj ponownie.", - "workspace.reload.retrying": "Ponawianie...", - "workspace.reload.retry": "Spróbuj ponownie", - "workspace.reload.error.paymentFailed": "Płatność nie powiodła się.", - - "workspace.payments.title": "Historia płatności", - "workspace.payments.subtitle": "Ostatnie transakcje płatnicze.", - "workspace.payments.table.date": "Data", - "workspace.payments.table.paymentId": "ID płatności", - "workspace.payments.table.amount": "Kwota", - "workspace.payments.table.receipt": "Rachunek", - "workspace.payments.type.credit": "środki", - "workspace.payments.type.subscription": "subskrypcja", - "workspace.payments.view": "Zobacz", - - "workspace.black.loading": "Ładowanie...", - "workspace.black.time.day": "dzień", - "workspace.black.time.days": "dni", - "workspace.black.time.hour": "godzina", - "workspace.black.time.hours": "godzin(y)", - "workspace.black.time.minute": "minuta", - "workspace.black.time.minutes": "minut(y)", - "workspace.black.time.fewSeconds": "kilka sekund", - "workspace.black.subscription.title": "Subskrypcja", - "workspace.black.subscription.message": "Subskrybujesz OpenCode Black za ${{plan}} miesięcznie.", - "workspace.black.subscription.manage": "Zarządzaj subskrypcją", - "workspace.black.subscription.rollingUsage": "Użycie (okno 5h)", - "workspace.black.subscription.weeklyUsage": "Użycie tygodniowe", - "workspace.black.subscription.resetsIn": "Resetuje się za", - "workspace.black.subscription.useBalance": "Użyj dostępnego salda po osiągnięciu limitów użycia", - "workspace.black.waitlist.title": "Lista oczekujących", - "workspace.black.waitlist.joined": "Jesteś na liście oczekujących na plan OpenCode Black za ${{plan}} miesięcznie.", - "workspace.black.waitlist.ready": "Jesteśmy gotowi zapisać Cię do planu OpenCode Black za ${{plan}} miesięcznie.", - "workspace.black.waitlist.leave": "Opuść listę oczekujących", - "workspace.black.waitlist.leaving": "Opuszczanie...", - "workspace.black.waitlist.left": "Opuszczono", - "workspace.black.waitlist.enroll": "Zapisz się", - "workspace.black.waitlist.enrolling": "Zapisywanie...", - "workspace.black.waitlist.enrolled": "Zapisano", - "workspace.black.waitlist.enrollNote": - "Po kliknięciu Zapisz się, Twoja subskrypcja rozpocznie się natychmiast, a karta zostanie obciążona.", - - "workspace.lite.loading": "Ładowanie...", - "workspace.lite.time.day": "dzień", - "workspace.lite.time.days": "dni", - "workspace.lite.time.hour": "godzina", - "workspace.lite.time.hours": "godzin(y)", - "workspace.lite.time.minute": "minuta", - "workspace.lite.time.minutes": "minut(y)", - "workspace.lite.time.fewSeconds": "kilka sekund", - "workspace.lite.subscription.message": "Subskrybujesz OpenCode Go.", - "workspace.lite.subscription.manage": "Zarządzaj subskrypcją", - "workspace.lite.subscription.rollingUsage": "Użycie kroczące", - "workspace.lite.subscription.weeklyUsage": "Użycie tygodniowe", - "workspace.lite.subscription.monthlyUsage": "Użycie miesięczne", - "workspace.lite.subscription.resetsIn": "Resetuje się za", - "workspace.lite.subscription.useBalance": "Użyj dostępnego salda po osiągnięciu limitów użycia", - "workspace.lite.subscription.selectProvider": - 'Wybierz "OpenCode Go" jako dostawcę w konfiguracji opencode, aby używać modeli Go.', - "workspace.lite.providers.title": "Dostawcy", - "workspace.lite.providers.description": "Kontroluj, którzy dostawcy są używani do routingu.", - "workspace.lite.providers.useChina": "Włącz modele hostowane w Chinach", - "workspace.lite.black.message": - "Obecnie subskrybujesz OpenCode Black lub jesteś na liście oczekujących. Jeśli chcesz przejść na Go, najpierw anuluj subskrypcję.", - "workspace.lite.other.message": - "Inny członek tego obszaru roboczego już subskrybuje OpenCode Go. Tylko jeden członek na obszar roboczy może subskrybować.", - "workspace.lite.promo.description": - "OpenCode Go zaczyna się od {{price}}, potem $10/miesiąc, i zapewnia niezawodny dostęp do popularnych otwartych modeli kodowania z hojnymi limitami użycia.", - "workspace.lite.promo.price": "$5 za pierwszy miesiąc", - "workspace.lite.promo.modelsTitle": "Co zawiera", - "workspace.lite.promo.footer": - "Plan został zaprojektowany głównie dla użytkowników międzynarodowych, z modelami hostowanymi w USA, UE i Singapurze, aby zapewnić stabilny globalny dostęp. Ceny i limity użycia mogą ulec zmianie w miarę analizy wczesnego użycia i zbierania opinii.", - "workspace.lite.promo.subscribe": "Subskrybuj Go", - "workspace.lite.promo.subscribing": "Przekierowywanie...", - "workspace.lite.promo.otherMethods": "Inne metody płatności", - "workspace.lite.promo.selectMethod": "Wybierz metodę płatności", - - "workspace.referral.copyLink": "Kopiuj link", - "workspace.referral.copied": "Skopiowano", - "workspace.referral.overview.title": "Zaproś znajomych", - "workspace.referral.overview.subtitle": "Zdobądź $5, gdy znajomy się zasubskrybuje. On też dostanie $5.", - "workspace.referral.instructions.share": "Udostępnij swój link polecający", - "workspace.referral.instructions.subscribe": "Twój znajomy dołącza i subskrybuje Go", - "workspace.referral.instructions.claim": "Oboje otrzymujecie kredyt $5 do wykorzystania na limity użycia Go", - "workspace.referral.rewards.title": "Nagrody za polecenia", - "workspace.referral.rewards.description": "Wykorzystaj dostępne środki za polecenia na swoje użycie Go.", - "workspace.referral.rewards.subtitle": "Wykorzystano {{applied}} / {{total}} nagród.", - "workspace.referral.rewards.empty": "Brak nagród za polecenia.", - "workspace.referral.table.reward": "Nagroda", - "workspace.referral.table.referral": "Opis", - "workspace.referral.table.date": "Data", - "workspace.referral.reward.description.inviter": "Zaproszono {{email}}", - "workspace.referral.reward.description.invitee": "Zaproszony przez {{email}}", - "workspace.referral.reward.action.subscribeUnlock": "Subskrybuj, aby odblokować", - "workspace.referral.reward.action.view": "Zobacz nagrodę", - "workspace.referral.reward.action.applied": "Nagroda wykorzystana", - "workspace.referral.reward.source.pendingInviter": "Oczekiwanie na jego subskrypcję", - "workspace.referral.reward.source.pendingInvitee": "Subskrybuj, aby odblokować nagrodę", - "workspace.referral.reward.source.available": "Nagroda gotowa do wykorzystania", - "workspace.referral.reward.source.applied": "Nagroda wykorzystana", - "workspace.referral.reward.status.applied": "Nagroda wykorzystana", - "workspace.referral.reward.status.pendingInviter": "Subskrybuj, aby odblokować", - "workspace.referral.reward.status.pendingInvitee": "Subskrybuj, aby odblokować", - "workspace.referral.apply.noGo": "Subskrybuj, aby odblokować", - "workspace.referral.apply.preview": "Zobacz nagrodę", - "workspace.referral.apply.action": "Wykorzystaj", - "workspace.referral.apply.confirmTitle": "Wykorzystaj nagrodę", - "workspace.referral.apply.confirmBody": "Wykorzystaj {{amount}}, aby zmniejszyć aktualne użycie w tym workspace.", - "workspace.referral.apply.confirmAction": "Wykorzystaj", - - "download.title": "OpenCode | Pobierz", - "download.meta.description": "Pobierz OpenCode na macOS, Windows i Linux", - "download.hero.title": "Pobierz OpenCode", - "download.hero.subtitle": "Dostępne w wersji Beta na macOS, Windows i Linux", - "download.hero.button": "Pobierz na {{os}}", - "download.section.terminal": "Terminal OpenCode", - "download.section.desktop": "Pulpit OpenCode (Beta)", - "download.section.extensions": "Rozszerzenia OpenCode", - "download.section.integrations": "Integracje OpenCode", - "download.action.download": "Pobierz", - "download.action.install": "Zainstaluj", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "Niekoniecznie, ale prawdopodobnie. Będziesz potrzebować subskrypcji AI, jeśli chcesz połączyć OpenCode z płatnym dostawcą, chociaż możesz pracować z", - "download.faq.a3.localLink": "modelami lokalnymi", - "download.faq.a3.afterLocal.beforeZen": "za darmo. Chociaż zachęcamy użytkowników do korzystania z", - "download.faq.a3.afterZen": - ", OpenCode współpracuje ze wszystkimi popularnymi dostawcami, takimi jak OpenAI, Anthropic, xAI itp.", - - "download.faq.a5.p1": "OpenCode jest w 100% darmowy.", - "download.faq.a5.p2.beforeZen": - "Wszelkie dodatkowe koszty będą pochodzić z Twojej subskrypcji u dostawcy modelu. Chociaż OpenCode współpracuje z dowolnym dostawcą modeli, zalecamy korzystanie z", - "download.faq.a5.p2.afterZen": ".", - - "download.faq.a6.p1": - "Twoje dane i informacje są przechowywane tylko wtedy, gdy tworzysz linki do udostępniania w OpenCode.", - "download.faq.a6.p2.beforeShare": "Dowiedz się więcej o", - "download.faq.a6.shareLink": "stronach udostępniania", - - "enterprise.title": "OpenCode | Rozwiązania Enterprise dla Twojej organizacji", - "enterprise.meta.description": "Skontaktuj się z OpenCode w sprawie rozwiązań dla przedsiębiorstw", - "enterprise.hero.title": "Twój kod jest Twój", - "enterprise.hero.body1": - "OpenCode działa bezpiecznie wewnątrz Twojej organizacji bez przechowywania danych czy kontekstu, oraz bez ograniczeń licencyjnych czy roszczeń własnościowych. Rozpocznij okres próbny ze swoim zespołem, a następnie wdróż go w całej organizacji, integrując z SSO i wewnętrzną bramą AI.", - "enterprise.hero.body2": "Daj nam znać, jak możemy pomóc.", - "enterprise.form.name.label": "Imię i nazwisko", - "enterprise.form.name.placeholder": "Jeff Bezos", - "enterprise.form.role.label": "Rola", - "enterprise.form.role.placeholder": "Prezes Zarządu", - "enterprise.form.company.label": "Firma", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "E-mail firmowy", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "Numer telefonu", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "Jaki problem próbujesz rozwiązać?", - "enterprise.form.message.placeholder": "Potrzebujemy pomocy z...", - "enterprise.form.send": "Wyślij", - "enterprise.form.sending": "Wysyłanie...", - "enterprise.form.success": "Wiadomość wysłana, skontaktujemy się wkrótce.", - "enterprise.form.success.submitted": "Formularz został pomyślnie wysłany.", - "enterprise.form.error.allFieldsRequired": "Wszystkie pola są wymagane.", - "enterprise.form.error.invalidEmailFormat": "Nieprawidłowy format adresu e-mail.", - "enterprise.form.error.internalServer": "Wewnętrzny błąd serwera.", - "enterprise.faq.title": "FAQ", - "enterprise.faq.q1": "Czym jest OpenCode Enterprise?", - "enterprise.faq.a1": - "OpenCode Enterprise jest dla organizacji, które chcą mieć pewność, że ich kod i dane nigdy nie opuszczą ich infrastruktury. Można to osiągnąć dzięki scentralizowanej konfiguracji, która integruje się z Twoim SSO i wewnętrzną bramą AI.", - "enterprise.faq.q2": "Jak zacząć z OpenCode Enterprise?", - "enterprise.faq.a2": - "Po prostu rozpocznij wewnętrzny okres próbny ze swoim zespołem. OpenCode domyślnie nie przechowuje Twojego kodu ani danych kontekstowych, co ułatwia start. Następnie skontaktuj się z nami, aby omówić opcje cenowe i wdrożeniowe.", - "enterprise.faq.q3": "Jak działa cennik enterprise?", - "enterprise.faq.a3": - "Oferujemy cennik enterprise za stanowisko (per-seat). Jeśli masz własną bramę LLM, nie pobieramy opłat za wykorzystane tokeny. Aby uzyskać więcej szczegółów, skontaktuj się z nami w celu uzyskania wyceny dostosowanej do potrzeb Twojej organizacji.", - "enterprise.faq.q4": "Czy moje dane są bezpieczne z OpenCode Enterprise?", - "enterprise.faq.a4": - "Tak. OpenCode nie przechowuje Twojego kodu ani danych kontekstowych. Całe przetwarzanie odbywa się lokalnie lub poprzez bezpośrednie wywołania API do Twojego dostawcy AI. Dzięki centralnej konfiguracji i integracji SSO, Twoje dane pozostają bezpieczne w infrastrukturze Twojej organizacji.", - - "brand.title": "OpenCode | Marka", - "brand.meta.description": "Wytyczne marki OpenCode", - "brand.heading": "Wytyczne marki", - "brand.subtitle": "Zasoby i aktywa, które pomogą Ci pracować z marką OpenCode.", - "brand.downloadAll": "Pobierz wszystkie zasoby", - - "changelog.title": "OpenCode | Dziennik zmian", - "changelog.meta.description": "Notatki o wydaniu i dziennik zmian OpenCode", - "changelog.hero.title": "Dziennik zmian", - "changelog.hero.subtitle": "Nowe aktualizacje i ulepszenia OpenCode", - "changelog.empty": "Nie znaleziono wpisów w dzienniku zmian.", - "changelog.viewJson": "Zobacz JSON", - - "bench.list.title": "Benchmark", - "bench.list.heading": "Benchmarki", - "bench.list.table.agent": "Agent", - "bench.list.table.model": "Model", - "bench.list.table.score": "Wynik", - "bench.submission.error.allFieldsRequired": "Wszystkie pola są wymagane.", - - "bench.detail.title": "Benchmark - {{task}}", - "bench.detail.notFound": "Nie znaleziono zadania", - "bench.detail.na": "Brak danych", - "bench.detail.labels.agent": "Agent", - "bench.detail.labels.model": "Model", - "bench.detail.labels.task": "Zadanie", - "bench.detail.labels.repo": "Repozytorium", - "bench.detail.labels.from": "Z", - "bench.detail.labels.to": "Do", - "bench.detail.labels.prompt": "Prompt", - "bench.detail.labels.commit": "Commit", - "bench.detail.labels.averageDuration": "Średni czas trwania", - "bench.detail.labels.averageScore": "Średni wynik", - "bench.detail.labels.averageCost": "Średni koszt", - "bench.detail.labels.summary": "Podsumowanie", - "bench.detail.labels.runs": "Uruchomienia", - "bench.detail.labels.score": "Wynik", - "bench.detail.labels.base": "Baza", - "bench.detail.labels.penalty": "Kara", - "bench.detail.labels.weight": "waga", - "bench.detail.table.run": "Uruchomienie", - "bench.detail.table.score": "Wynik (Baza - Kara)", - "bench.detail.table.cost": "Koszt", - "bench.detail.table.duration": "Czas trwania", - "bench.detail.run.title": "Uruchomienie {{n}}", - "bench.detail.rawJson": "Surowy JSON", -} as const - -export type Key = keyof typeof dict -export type Dict = Record diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts deleted file mode 100644 index 90d3c6c8c5..0000000000 --- a/packages/console/app/src/i18n/ru.ts +++ /dev/null @@ -1,836 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "Документация", - "nav.changelog": "Список изменений", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "Enterprise", - "nav.zen": "Zen", - "nav.login": "Войти", - "nav.free": "Скачать", - "nav.home": "Главная", - "nav.openMenu": "Открыть меню", - "nav.getStartedFree": "Начать бесплатно", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "Скопировать логотип как SVG", - "nav.context.copyWordmark": "Скопировать название как SVG", - "nav.context.brandAssets": "Ресурсы бренда", - - "footer.github": "GitHub", - "footer.docs": "Документация", - "footer.changelog": "Список изменений", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "Бренд", - "legal.privacy": "Конфиденциальность", - "legal.terms": "Условия", - - "email.title": "Узнайте первыми о выходе новых продуктов", - "email.subtitle": "Присоединяйтесь к списку ожидания для раннего доступа.", - "email.placeholder": "Email адрес", - "email.subscribe": "Подписаться", - "email.success": "Почти готово, проверьте почту и подтвердите ваш email", - - "notFound.title": "Не найдено | opencode", - "notFound.heading": "404 - Страница не найдена", - "notFound.home": "Главная", - "notFound.docs": "Документация", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "светлый логотип opencode", - "notFound.logoDarkAlt": "темный логотип opencode", - - "user.logout": "Выйти", - - "auth.callback.error.codeMissing": "Код авторизации не найден.", - - "workspace.select": "Выбрать рабочее пространство", - "workspace.createNew": "+ Создать рабочее пространство", - "workspace.modal.title": "Создать рабочее пространство", - "workspace.modal.placeholder": "Введите название рабочего пространства", - - "common.cancel": "Отмена", - "common.creating": "Создание...", - "common.create": "Создать", - - "common.videoUnsupported": "Ваш браузер не поддерживает видео тег.", - "common.figure": "Рис {{n}}.", - "common.faq": "FAQ", - "common.learnMore": "Подробнее", - - "error.invalidPlan": "Неверный план", - "error.workspaceRequired": "Требуется ID рабочего пространства", - "error.alreadySubscribed": "У этого рабочего пространства уже есть подписка", - "error.limitRequired": "Требуется лимит.", - "error.monthlyLimitInvalid": "Укажите корректный ежемесячный лимит.", - "error.workspaceNameRequired": "Требуется название рабочего пространства.", - "error.nameTooLong": "Название должно быть не более 255 символов.", - "error.emailRequired": "Требуется email", - "error.roleRequired": "Требуется роль", - "error.idRequired": "Требуется ID", - "error.nameRequired": "Требуется имя", - "error.providerRequired": "Требуется провайдер", - "error.apiKeyRequired": "Требуется API ключ", - "error.modelRequired": "Требуется модель", - "error.reloadAmountMin": "Сумма пополнения должна быть не менее ${{amount}}", - "error.reloadTriggerMin": "Порог баланса должен быть не менее ${{amount}}", - - "app.meta.description": "OpenCode - AI-агент с открытым кодом для программирования.", - - "home.title": "OpenCode | AI-агент с открытым кодом для программирования", - - "temp.title": "opencode | AI-агент для программирования в терминале", - "temp.hero.title": "AI-агент для программирования в терминале", - "temp.zen": "opencode zen", - "temp.getStarted": "Начать", - "temp.feature.native.title": "Нативный TUI", - "temp.feature.native.body": "Отзывчивый, нативный, темизируемый терминальный интерфейс", - "temp.feature.zen.beforeLink": "", - "temp.feature.zen.link": "Отобранный список моделей", - "temp.feature.zen.afterLink": "от opencode", - "temp.feature.models.beforeLink": "Поддерживает 75+ провайдеров LLM через", - "temp.feature.models.afterLink": ", включая локальные модели", - "temp.screenshot.caption": "OpenCode TUI с темой tokyonight", - "temp.screenshot.alt": "OpenCode TUI с темой tokyonight", - "temp.logoLightAlt": "светлый логотип opencode", - "temp.logoDarkAlt": "темный логотип opencode", - - "home.banner.badge": "Новое", - "home.banner.text": "Доступно десктопное приложение (бета)", - "home.banner.platforms": "на macOS, Windows и Linux", - "home.banner.downloadNow": "Скачать", - "home.banner.downloadBetaNow": "Скачать бету для десктопа", - - "home.hero.title": "AI-агент с открытым кодом для программирования", - "home.hero.subtitle.a": "Бесплатные модели включены, или подключите любую модель от любого провайдера,", - "home.hero.subtitle.b": "включая Claude, GPT, Gemini и другие.", - - "home.install.ariaLabel": "Варианты установки", - - "home.what.title": "Что такое OpenCode?", - "home.what.body": - "OpenCode — это агент с открытым исходным кодом, который помогает писать код в терминале, IDE или на десктопе.", - "home.what.lsp.title": "Поддержка LSP", - "home.what.lsp.body": "Автоматически загружает нужные LSP для LLM", - "home.what.multiSession.title": "Мульти-сессии", - "home.what.multiSession.body": "Запускайте несколько агентов параллельно в одном проекте", - "home.what.shareLinks.title": "Общие ссылки", - "home.what.shareLinks.body": "Делитесь ссылкой на любую сессию для справки или отладки", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "Войдите через GitHub, чтобы использовать ваш аккаунт Copilot", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "Войдите через OpenAI, чтобы использовать ваш аккаунт ChatGPT Plus или Pro", - "home.what.anyModel.title": "Любая модель", - "home.what.anyModel.body": "75+ провайдеров LLM через Models.dev, включая локальные модели", - "home.what.anyEditor.title": "Любой редактор", - "home.what.anyEditor.body": "Доступно как терминальный интерфейс, десктопное приложение и расширение для IDE", - "home.what.readDocs": "Читать документацию", - - "home.growth.title": "AI-агент с открытым кодом для программирования", - "home.growth.body": - "С более чем {{stars}} звезд на GitHub, {{contributors}} контрибьюторов и {{commits}} коммитов, OpenCode доверяют более {{monthlyUsers}} разработчиков ежемесячно.", - "home.growth.githubStars": "Звезд на GitHub", - "home.growth.contributors": "Контрибьюторов", - "home.growth.monthlyDevs": "Разработчиков в месяц", - - "home.privacy.title": "Создан с заботой о приватности", - "home.privacy.body": - "OpenCode не хранит ваш код или контекстные данные, поэтому он может работать в средах, чувствительных к приватности.", - "home.privacy.learnMore": "Подробнее о", - "home.privacy.link": "приватности", - - "home.faq.q1": "Что такое OpenCode?", - "home.faq.a1": - "OpenCode — это агент с открытым исходным кодом, который помогает писать и запускать код с любой AI-моделью. Доступен как терминальный интерфейс, десктопное приложение или расширение для IDE.", - "home.faq.q2": "Как использовать OpenCode?", - "home.faq.a2.before": "Проще всего начать с чтения", - "home.faq.a2.link": "введения", - "home.faq.q3": "Нужны ли дополнительные подписки на AI для использования OpenCode?", - "home.faq.a3.p1": - "Не обязательно, OpenCode поставляется с набором бесплатных моделей, которые можно использовать без создания аккаунта.", - "home.faq.a3.p2.beforeZen": - "Помимо этого, вы можете использовать любые популярные модели для кодинга, создав аккаунт", - "home.faq.a3.p2.afterZen": ".", - "home.faq.a3.p3": - "Хотя мы рекомендуем использовать Zen, OpenCode также работает со всеми популярными провайдерами, такими как OpenAI, Anthropic, xAI и др.", - "home.faq.a3.p4.beforeLocal": "Вы даже можете подключить ваши", - "home.faq.a3.p4.localLink": "локальные модели", - "home.faq.q4": "Могу ли я использовать мои существующие AI-подписки с OpenCode?", - "home.faq.a4.p1": - "Да, OpenCode поддерживает подписки всех основных провайдеров. Вы можете использовать ваши подписки Claude Pro/Max, ChatGPT Plus/Pro или GitHub Copilot.", - "home.faq.q5": "Можно ли использовать OpenCode только в терминале?", - "home.faq.a5.beforeDesktop": "Больше нет! OpenCode теперь доступен как приложение для", - "home.faq.a5.desktop": "десктопа", - "home.faq.a5.and": "и", - "home.faq.a5.web": "веба", - "home.faq.q6": "Сколько стоит OpenCode?", - "home.faq.a6": - "OpenCode на 100% бесплатен. Он также включает набор бесплатных моделей. Дополнительные расходы могут возникнуть, если вы подключите другого провайдера.", - "home.faq.q7": "Как насчет данных и приватности?", - "home.faq.a7.p1": - "Ваши данные сохраняются только тогда, когда вы используете наши бесплатные модели или создаете ссылки для шеринга.", - "home.faq.a7.p2.beforeModels": "Подробнее о", - "home.faq.a7.p2.modelsLink": "наших моделях", - "home.faq.a7.p2.and": "и", - "home.faq.a7.p2.shareLink": "страницах шеринга", - "home.faq.q8": "OpenCode — это open source?", - "home.faq.a8.p1": "Да, OpenCode полностью open source. Исходный код доступен публично на", - "home.faq.a8.p2": "под", - "home.faq.a8.mitLicense": "лицензией MIT", - "home.faq.a8.p3": - ", что означает, что любой может использовать, изменять или вносить вклад в его развитие. Любой участник сообщества может создавать issues, отправлять pull requests и расширять функциональность.", - - "home.zenCta.title": "Доступ к надежным оптимизированным моделям для кодинг-агентов", - "home.zenCta.body": - "Zen дает доступ к отобранному набору AI-моделей, которые OpenCode протестировал и проверил специально для кодинг-агентов. Не нужно беспокоиться о нестабильной производительности и качестве разных провайдеров, используйте проверенные модели, которые работают.", - "home.zenCta.link": "Узнать о Zen", - - "zen.title": "OpenCode Zen | Набор надежных оптимизированных моделей для кодинг-агентов", - "zen.hero.title": "Надежные оптимизированные модели для кодинг-агентов", - "zen.hero.body": - "Zen дает доступ к отобранному набору AI-моделей, которые OpenCode протестировал и проверил специально для кодинг-агентов. Не нужно беспокоиться о нестабильной производительности и качестве, используйте проверенные модели, которые работают.", - - "zen.faq.q1": "Что такое OpenCode Zen?", - "zen.faq.a1": - "Zen — это отобранный набор AI-моделей, протестированных и проверенных для кодинг-агентов командой, стоящей за OpenCode.", - "zen.faq.q2": "Почему Zen точнее?", - "zen.faq.a2": - "Zen предоставляет только те модели, которые были специально протестированы и проверены для кодинг-агентов. Вы же не режете стейк ножом для масла, не используйте плохие модели для кодинга.", - "zen.faq.q3": "Zen дешевле?", - "zen.faq.a3": - "Zen — некоммерческий проект. Zen транслирует расходы от провайдеров моделей вам. Чем больше использование Zen, тем лучшие тарифы OpenCode может согласовать и передать вам.", - "zen.faq.q4": "Сколько стоит Zen?", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "взимает плату за запрос", - "zen.faq.a4.p1.afterPricing": - "с нулевой наценкой, так что вы платите ровно столько, сколько взимает провайдер модели.", - "zen.faq.a4.p2.beforeAccount": - "Общая стоимость зависит от использования, и вы можете установить ежемесячные лимиты расходов в своем", - "zen.faq.a4.p2.accountLink": "аккаунте", - "zen.faq.a4.p3": - "Для покрытия расходов OpenCode добавляет лишь небольшую комиссию за обработку платежа в размере $1.23 при пополнении баланса на $20.", - "zen.faq.q5": "Как насчет данных и приватности?", - "zen.faq.a5.beforeExceptions": - "Все модели Zen размещены в США. Провайдеры следуют политике нулевого хранения и не используют ваши данные для обучения моделей, за", - "zen.faq.a5.exceptionsLink": "следующими исключениями", - "zen.faq.q6": "Могу ли я установить лимиты расходов?", - "zen.faq.a6": "Да, вы можете установить ежемесячные лимиты расходов в своем аккаунте.", - "zen.faq.q7": "Могу ли я отменить?", - "zen.faq.a7": "Да, вы можете отключить оплату в любое время и использовать оставшийся баланс.", - "zen.faq.q8": "Могу ли я использовать Zen с другими кодинг-агентами?", - "zen.faq.a8": - "Хотя Zen отлично работает с OpenCode, вы можете использовать Zen с любым агентом. Следуйте инструкциям по настройке в вашем любимом агенте.", - - "zen.cta.start": "Начать работу с Zen", - "zen.pricing.title": "Пополнить баланс на $20 (Pay as you go)", - "zen.pricing.fee": "(+$1.23 комиссия за обработку карты)", - "zen.pricing.body": "Используйте с любым агентом. Установите ежемесячные лимиты. Отмените в любое время.", - "zen.problem.title": "Какую проблему решает Zen?", - "zen.problem.body": - "Доступно множество моделей, но лишь немногие хорошо работают с кодинг-агентами. Большинство провайдеров настраивают их по-разному с разными результатами.", - "zen.problem.subtitle": "Мы исправляем это для всех, а не только для пользователей OpenCode.", - "zen.problem.item1": "Тестирование избранных моделей и консультации с их командами", - "zen.problem.item2": "Работа с провайдерами для обеспечения правильной доставки", - "zen.problem.item3": "Бенчмаркинг всех рекомендуемых нами комбинаций модель-провайдер", - "zen.how.title": "Как работает Zen", - "zen.how.body": "Хотя мы предлагаем использовать Zen с OpenCode, вы можете использовать его с любым агентом.", - "zen.how.step1.title": "Зарегистрируйтесь и пополните баланс на $20", - "zen.how.step1.beforeLink": "следуйте", - "zen.how.step1.link": "инструкциям по настройке", - "zen.how.step2.title": "Используйте Zen с прозрачным ценообразованием", - "zen.how.step2.link": "оплата за запрос", - "zen.how.step2.afterLink": "с нулевой наценкой", - "zen.how.step3.title": "Автопополнение", - "zen.how.step3.body": "когда ваш баланс достигнет $5, мы автоматически добавим $20", - "zen.privacy.title": "Ваша приватность важна для нас", - "zen.privacy.beforeExceptions": - "Все модели Zen размещены в США. Провайдеры следуют политике нулевого хранения и не используют ваши данные для обучения моделей, за", - "zen.privacy.exceptionsLink": "следующими исключениями", - - "go.title": "OpenCode Go | Недорогие модели для кодинга для всех", - "go.meta.description": - "Go начинается с $5 за первый месяц, затем $10/месяц, с щедрыми лимитами запросов за 5 часов для GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro и DeepSeek V4 Flash.", - "go.hero.title": "Недорогие модели для кодинга для всех", - "go.hero.body": - "Go открывает доступ к агентам-программистам разработчикам по всему миру. Предлагая щедрые лимиты и надежный доступ к наиболее способным моделям с открытым исходным кодом, вы можете создавать проекты с мощными агентами, не беспокоясь о затратах или доступности.", - - "go.cta.start": "Подписаться на Go", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "Подписаться на Go", - "go.cta.price": "$10/месяц", - "go.cta.promo": "$5 первый месяц", - "go.pricing.body": - "Используйте с любым агентом. $5 за первый месяц, затем $10/месяц. Пополняйте баланс при необходимости. Отменить можно в любое время.", - "go.graph.free": "Бесплатно", - "go.graph.freePill": "Big Pickle и бесплатные модели", - "go.graph.go": "Go", - "go.graph.label": "Запросов за 5 часов", - "go.graph.usageLimits": "Лимиты использования", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "Запросов за 5ч: {{free}} против {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "ex-CEO, Terminal Products", - "go.testimonials.dax.quoteAfter": "изменил мою жизнь, это действительно очевидный выбор.", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "ex-Founder, SEED, PM, Melt, Pop, Dapt, Cadmus, и ViewPoint", - "go.testimonials.jay.quoteBefore": "4 из 5 человек в нашей команде любят использовать", - "go.testimonials.jay.quoteAfter": ".", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "ex-Hero, AWS", - "go.testimonials.adam.quoteBefore": "Я не могу не порекомендовать", - "go.testimonials.adam.quoteAfter": "достаточно сильно. Серьезно, это очень круто.", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "ex-Head of Design, Laravel", - "go.testimonials.david.quoteBefore": "С", - "go.testimonials.david.quoteAfter": - "я знаю, что все модели протестированы и идеально подходят для агентов-программистов.", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "ex-Intern, Nvidia (4 раза)", - "go.testimonials.frank.quote": "Жаль, что я больше не в Nvidia.", - "go.problem.title": "Какую проблему решает Go?", - "go.problem.body": - "Мы стремимся сделать OpenCode доступным для как можно большего числа людей. OpenCode Go - это недорогая подписка: $5 за первый месяц, затем $10/месяц. Она предоставляет щедрые лимиты и надежный доступ к самым мощным моделям с открытым исходным кодом.", - "go.problem.subtitle": " ", - "go.problem.item1": "Недорогая подписка", - "go.problem.item2": "Щедрые лимиты и надежный доступ", - "go.problem.item3": "Создан для максимального числа программистов", - "go.problem.item4": - "Включает GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro и DeepSeek V4 Flash", - "go.how.title": "Как работает Go", - "go.how.body": - "Go начинается с $5 за первый месяц, затем $10/месяц. Вы можете использовать его с OpenCode или любым агентом.", - "go.how.step1.title": "Создайте аккаунт", - "go.how.step1.beforeLink": "следуйте", - "go.how.step1.link": "инструкциям по настройке", - "go.how.step2.title": "Подпишитесь на Go", - "go.how.step2.link": "$5 за первый месяц", - "go.how.step2.afterLink": "затем $10/месяц с щедрыми лимитами", - "go.how.step3.title": "Начните кодить", - "go.how.step3.body": "с надежным доступом к open-source моделям", - "go.privacy.title": "Ваша приватность важна для нас", - "go.privacy.body": - "План разработан в первую очередь для международных пользователей, с моделями, размещенными в США, ЕС и Сингапуре для стабильного глобального доступа.", - "go.privacy.contactAfter": "если у вас есть вопросы.", - "go.privacy.beforeExceptions": - "Модели Go размещены в США. Провайдеры следуют политике нулевого хранения и не используют ваши данные для обучения моделей, за", - "go.privacy.exceptionsLink": "следующими исключениями", - "go.faq.q1": "Что такое OpenCode Go?", - "go.faq.a1": - "Go — это недорогая подписка, дающая надежный доступ к мощным моделям с открытым исходным кодом для агентов-программистов.", - "go.faq.q2": "Какие модели включает Go?", - "go.faq.a2": "Go включает перечисленные ниже модели с щедрыми лимитами и надежным доступом.", - "go.faq.q3": "Go — это то же самое, что и Zen?", - "go.faq.a3": - "Нет. Zen - это оплата по мере использования, в то время как Go начинается с $5 за первый месяц, затем $10/месяц, с щедрыми лимитами и надежным доступом к моделям с открытым исходным кодом GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro и DeepSeek V4 Flash.", - "go.faq.q4": "Сколько стоит Go?", - "go.faq.a4.p1.beforePricing": "Go стоит", - "go.faq.a4.p1.pricingLink": "$5 за первый месяц", - "go.faq.a4.p1.afterPricing": "затем $10/месяц с щедрыми лимитами.", - "go.faq.a4.p2.beforeAccount": "Вы можете управлять подпиской в своем", - "go.faq.a4.p2.accountLink": "аккаунте", - "go.faq.a4.p3": "Отмена в любое время.", - "go.faq.q5": "Как насчет данных и приватности?", - "go.faq.a5.body": - "План разработан в первую очередь для международных пользователей, с моделями, размещенными в США, ЕС и Сингапуре для стабильного глобального доступа. Наши провайдеры следуют политике нулевого хранения и не используют ваши данные для обучения моделей.", - "go.faq.a5.beforeExceptions": - "Модели Go размещены в США. Провайдеры следуют политике нулевого хранения и не используют ваши данные для обучения моделей, за", - "go.faq.a5.exceptionsLink": "следующими исключениями", - "go.faq.q6": "Могу ли я пополнить баланс?", - "go.faq.a6": "Если вам нужно больше использования, вы можете пополнить баланс в своем аккаунте.", - "go.faq.q7": "Могу ли я отменить подписку?", - "go.faq.a7": "Да, вы можете отменить подписку в любое время.", - "go.faq.q8": "Могу ли я использовать Go с другими кодинг-агентами?", - "go.faq.a8": - "Да, вы можете использовать Go с любым агентом. Следуйте инструкциям по настройке в вашем предпочитаемом агенте.", - - "go.faq.q9": "В чем разница между бесплатными моделями и Go?", - "go.faq.a9": - "Бесплатные модели включают Big Pickle плюс промо-модели, доступные на данный момент, с квотой 200 запросов/день. Go включает GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro и DeepSeek V4 Flash с более высокими квотами запросов, применяемыми в скользящих окнах (5 часов, неделя и месяц), что примерно эквивалентно $12 за 5 часов, $30 в неделю и $60 в месяц (фактическое количество запросов зависит от модели и использования).", - - "zen.api.error.rateLimitExceeded": "Превышен лимит запросов. Пожалуйста, попробуйте позже.", - "zen.api.error.modelNotSupported": "Модель {{model}} не поддерживается", - "zen.api.error.modelFormatNotSupported": "Модель {{model}} не поддерживается для формата {{format}}", - "zen.api.error.noProviderAvailable": "Нет доступных провайдеров", - "zen.api.error.providerNotSupported": "Провайдер {{provider}} не поддерживается", - "zen.api.error.missingApiKey": "Отсутствует API ключ.", - "zen.api.error.invalidApiKey": "Неверный API ключ.", - "zen.api.error.subscriptionQuotaExceeded": "Квота подписки превышена. Повторите попытку через {{retryIn}}.", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "Достигнут лимит использования за 5 часов. Сбросится через {{retryIn}}. Чтобы продолжить использовать эту модель сейчас, включите оплату с доступного баланса: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "Достигнут недельный лимит использования. Сбросится через {{retryIn}}. Чтобы продолжить использовать эту модель сейчас, включите оплату с доступного баланса: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "Достигнут месячный лимит использования. Сбросится через {{retryIn}}. Чтобы продолжить использовать эту модель сейчас, включите оплату с доступного баланса: {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "Нет способа оплаты. Добавьте способ оплаты здесь: {{billingUrl}}", - "zen.api.error.insufficientBalance": "Недостаточно средств. Управляйте оплатой здесь: {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "Ваше рабочее пространство достигло ежемесячного лимита расходов в ${{amount}}. Управляйте лимитами здесь: {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "Вы достигли ежемесячного лимита расходов в ${{amount}}. Управляйте лимитами здесь: {{membersUrl}}", - "zen.api.error.modelDisabled": "Модель отключена", - "zen.api.error.regionNotAllowed": - "Эта модель размещена в Китае. Если вы хотите использовать эту модель, включите её в настройках: {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "Бесплатная акция для {{model}} завершена. Вы можете продолжить использование модели, подписавшись на OpenCode Go - {{link}}", - - "black.meta.title": "OpenCode Black | Доступ к лучшим моделям для кодинга в мире", - "black.meta.description": "Получите доступ к Claude, GPT, Gemini и другим моделям с подпиской OpenCode Black.", - "black.hero.title": "Доступ к лучшим моделям для кодинга в мире", - "black.hero.subtitle": "Включая Claude, GPT, Gemini и другие", - "black.title": "OpenCode Black | Цены", - "black.paused": "Регистрация на план Black временно приостановлена.", - "black.plan.icon20": "План Black 20", - "black.plan.icon100": "План Black 100", - "black.plan.icon200": "План Black 200", - "black.plan.multiplier100": "в 5x больше использования, чем Black 20", - "black.plan.multiplier200": "в 20x больше использования, чем Black 20", - "black.price.perMonth": "в месяц", - "black.price.perPersonBilledMonthly": "за человека при ежемесячной оплате", - "black.terms.1": "Ваша подписка начнется не сразу", - "black.terms.2": "Вы будете добавлены в список ожидания и активированы в ближайшее время", - "black.terms.3": "Оплата с карты будет списана только при активации подписки", - "black.terms.4": - "Действуют лимиты использования; интенсивное автоматизированное использование может исчерпать лимиты быстрее", - "black.terms.5": "Подписки предназначены для частных лиц, для команд обратитесь в Enterprise", - "black.terms.6": "Лимиты могут быть скорректированы, а планы могут быть прекращены в будущем", - "black.terms.7": "Отмените подписку в любое время", - "black.action.continue": "Продолжить", - "black.finePrint.beforeTerms": "Указанные цены не включают применимые налоги", - "black.finePrint.terms": "Условия обслуживания", - "black.workspace.title": "OpenCode Black | Выбор рабочего пространства", - "black.workspace.selectPlan": "Выберите рабочее пространство для этого плана", - "black.workspace.name": "Рабочее пространство {{n}}", - "black.subscribe.title": "Подписаться на OpenCode Black", - "black.subscribe.paymentMethod": "Способ оплаты", - "black.subscribe.loadingPaymentForm": "Загрузка формы оплаты...", - "black.subscribe.selectWorkspaceToContinue": "Выберите рабочее пространство для продолжения", - "black.subscribe.failurePrefix": "Ой!", - "black.subscribe.error.generic": "Произошла ошибка", - "black.subscribe.error.invalidPlan": "Неверный план", - "black.subscribe.error.workspaceRequired": "Требуется ID рабочего пространства", - "black.subscribe.error.alreadySubscribed": "У этого рабочего пространства уже есть подписка", - "black.subscribe.processing": "Обработка...", - "black.subscribe.submit": "Подписаться на ${{plan}}", - "black.subscribe.form.chargeNotice": "Оплата будет списана только при активации вашей подписки", - "black.subscribe.success.title": "Вы в списке ожидания OpenCode Black", - "black.subscribe.success.subscriptionPlan": "План подписки", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "Сумма", - "black.subscribe.success.amountValue": "${{plan}} в месяц", - "black.subscribe.success.paymentMethod": "Способ оплаты", - "black.subscribe.success.dateJoined": "Дата присоединения", - "black.subscribe.success.chargeNotice": "С вашей карты будет списана оплата при активации подписки", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "Использование", - "workspace.nav.apiKeys": "API Ключи", - "workspace.nav.members": "Участники", - "workspace.nav.billing": "Оплата", - "workspace.nav.settings": "Настройки", - - "workspace.home.banner.beforeLink": "Надежные оптимизированные модели для кодинг-агентов.", - "workspace.lite.banner.beforeLink": "Недорогие модели для кодинга, доступные каждому.", - "workspace.home.billing.loading": "Загрузка...", - "workspace.home.billing.enable": "Включить оплату", - "workspace.home.billing.currentBalance": "Текущий баланс", - - "workspace.newUser.feature.tested.title": "Протестированные и проверенные модели", - "workspace.newUser.feature.tested.body": - "Мы провели бенчмаркинг и тестирование моделей специально для кодинг-агентов, чтобы обеспечить лучшую производительность.", - "workspace.newUser.feature.quality.title": "Высочайшее качество", - "workspace.newUser.feature.quality.body": - "Доступ к моделям, настроенным для оптимальной производительности — никаких даунгрейдов или перенаправления к дешевым провайдерам.", - "workspace.newUser.feature.lockin.title": "Без привязки (Lock-in)", - "workspace.newUser.feature.lockin.body": - "Используйте Zen с любым кодинг-агентом и продолжайте использовать других провайдеров с opencode, когда захотите.", - "workspace.newUser.copyApiKey": "Копировать API ключ", - "workspace.newUser.copyKey": "Копировать ключ", - "workspace.newUser.copied": "Скопировано!", - "workspace.newUser.step.enableBilling": "Включить оплату", - "workspace.newUser.step.login.before": "Запустите", - "workspace.newUser.step.login.after": "и выберите opencode", - "workspace.newUser.step.pasteKey": "Вставьте ваш API ключ", - "workspace.newUser.step.models.before": "Запустите opencode и выполните", - "workspace.newUser.step.models.after": "для выбора модели", - - "workspace.models.title": "Модели", - "workspace.models.subtitle.beforeLink": - "Управляйте тем, к каким моделям имеют доступ участники рабочего пространства.", - "workspace.models.table.model": "Модель", - "workspace.models.table.enabled": "Включено", - - "workspace.providers.title": "Использовать свой ключ (BYOK)", - "workspace.providers.subtitle": "Настройте свои собственные API ключи от AI-провайдеров.", - "workspace.providers.placeholder": "Введите API ключ {{provider}} ({{prefix}}...)", - "workspace.providers.configure": "Настроить", - "workspace.providers.edit": "Изменить", - "workspace.providers.delete": "Удалить", - "workspace.providers.saving": "Сохранение...", - "workspace.providers.save": "Сохранить", - "workspace.providers.table.provider": "Провайдер", - "workspace.providers.table.apiKey": "API ключ", - - "workspace.usage.title": "История использования", - "workspace.usage.subtitle": "Недавнее использование API и расходы.", - "workspace.usage.empty": "Сделайте первый API вызов, чтобы начать.", - "workspace.usage.table.date": "Дата", - "workspace.usage.table.model": "Модель", - "workspace.usage.table.input": "Вход", - "workspace.usage.table.output": "Выход", - "workspace.usage.table.cost": "Стоимость", - "workspace.usage.table.session": "Сессия", - "workspace.usage.breakdown.input": "Вход", - "workspace.usage.breakdown.cacheRead": "Чтение кэша", - "workspace.usage.breakdown.cacheWrite": "Запись кэша", - "workspace.usage.breakdown.output": "Выход", - "workspace.usage.breakdown.reasoning": "Reasoning (рассуждения)", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "Расходы", - "workspace.cost.subtitle": "Расходы на использование с разбивкой по моделям.", - "workspace.cost.allModels": "Все модели", - "workspace.cost.allKeys": "Все ключи", - "workspace.cost.deletedSuffix": "(удалено)", - "workspace.cost.empty": "Нет данных об использовании за выбранный период.", - "workspace.cost.subscriptionShort": "подписка", - - "workspace.keys.title": "API Ключи", - "workspace.keys.subtitle": "Управляйте вашими API ключами для доступа к сервисам opencode.", - "workspace.keys.create": "Создать API ключ", - "workspace.keys.placeholder": "Введите название ключа", - "workspace.keys.empty": "Создайте API ключ для шлюза opencode", - "workspace.keys.table.name": "Название", - "workspace.keys.table.key": "Ключ", - "workspace.keys.table.createdBy": "Создан", - "workspace.keys.table.lastUsed": "Использован", - "workspace.keys.copyApiKey": "Копировать API ключ", - "workspace.keys.delete": "Удалить", - - "workspace.members.title": "Участники", - "workspace.members.subtitle": "Управляйте участниками рабочего пространства и их правами.", - "workspace.members.invite": "Пригласить участника", - "workspace.members.inviting": "Отправка приглашения...", - "workspace.members.beta.beforeLink": "Рабочие пространства бесплатны для команд во время беты.", - "workspace.members.form.invitee": "Приглашаемый", - "workspace.members.form.emailPlaceholder": "Введите email", - "workspace.members.form.role": "Роль", - "workspace.members.form.monthlyLimit": "Ежемесячный лимит расходов", - "workspace.members.noLimit": "Без лимита", - "workspace.members.noLimitLowercase": "без лимита", - "workspace.members.invited": "приглашен", - "workspace.members.edit": "Изменить", - "workspace.members.delete": "Удалить", - "workspace.members.saving": "Сохранение...", - "workspace.members.save": "Сохранить", - "workspace.members.table.email": "Email", - "workspace.members.table.role": "Роль", - "workspace.members.table.monthLimit": "Лимит на месяц", - "workspace.members.role.admin": "Админ", - "workspace.members.role.adminDescription": "Может управлять моделями, участниками и оплатой", - "workspace.members.role.member": "Участник", - "workspace.members.role.memberDescription": "Может создавать API ключи только для себя", - - "workspace.settings.title": "Настройки", - "workspace.settings.subtitle": "Обновите название и настройки вашего рабочего пространства.", - "workspace.settings.workspaceName": "Название рабочего пространства", - "workspace.settings.defaultName": "По умолчанию", - "workspace.settings.updating": "Обновление...", - "workspace.settings.save": "Сохранить", - "workspace.settings.edit": "Изменить", - - "workspace.billing.title": "Оплата", - "workspace.billing.subtitle.beforeLink": "Управление способами оплаты.", - "workspace.billing.contactUs": "Свяжитесь с нами", - "workspace.billing.subtitle.afterLink": "если у вас есть вопросы.", - "workspace.billing.currentBalance": "Текущий баланс", - "workspace.billing.add": "Пополнить $", - "workspace.billing.enterAmount": "Введите сумму", - "workspace.billing.loading": "Загрузка...", - "workspace.billing.addAction": "Пополнить", - "workspace.billing.addBalance": "Пополнить баланс", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "Привязано к Stripe", - "workspace.billing.manage": "Управление", - "workspace.billing.enable": "Включить оплату", - - "workspace.monthlyLimit.title": "Ежемесячный лимит", - "workspace.monthlyLimit.subtitle": "Установите ежемесячный лимит расходов для вашего аккаунта.", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "Сохранение...", - "workspace.monthlyLimit.set": "Установить", - "workspace.monthlyLimit.edit": "Изменить лимит", - "workspace.monthlyLimit.noLimit": "Лимит использования не установлен.", - "workspace.monthlyLimit.currentUsage.beforeMonth": "Текущее использование за", - "workspace.monthlyLimit.currentUsage.beforeAmount": "составляет $", - - "workspace.redeem.title": "Активировать купон", - "workspace.redeem.subtitle": "Активируйте код купона, чтобы получить кредит или бонусы.", - "workspace.redeem.placeholder": "Введите код купона", - "workspace.redeem.redeem": "Активировать", - "workspace.redeem.redeeming": "Активация...", - "workspace.redeem.success": "Купон успешно активирован.", - - "workspace.reload.title": "Автопополнение", - "workspace.reload.disabled.before": "Автопополнение", - "workspace.reload.disabled.state": "отключено", - "workspace.reload.disabled.after": "Включите для автоматического пополнения при низком балансе.", - "workspace.reload.enabled.before": "Автопополнение", - "workspace.reload.enabled.state": "включено", - "workspace.reload.enabled.middle": "Мы пополним на", - "workspace.reload.processingFee": "комиссия", - "workspace.reload.enabled.after": "когда баланс достигнет", - "workspace.reload.edit": "Изменить", - "workspace.reload.enable": "Включить", - "workspace.reload.enableAutoReload": "Включить автопополнение", - "workspace.reload.reloadAmount": "Пополнить на $", - "workspace.reload.whenBalanceReaches": "Когда баланс достигнет $", - "workspace.reload.saving": "Сохранение...", - "workspace.reload.save": "Сохранить", - "workspace.reload.failedAt": "Пополнение не удалось", - "workspace.reload.reason": "Причина:", - "workspace.reload.updatePaymentMethod": "Пожалуйста, обновите способ оплаты и попробуйте снова.", - "workspace.reload.retrying": "Повторная попытка...", - "workspace.reload.retry": "Повторить", - "workspace.reload.error.paymentFailed": "Ошибка оплаты.", - - "workspace.payments.title": "История платежей", - "workspace.payments.subtitle": "Недавние транзакции.", - "workspace.payments.table.date": "Дата", - "workspace.payments.table.paymentId": "ID платежа", - "workspace.payments.table.amount": "Сумма", - "workspace.payments.table.receipt": "Квитанция", - "workspace.payments.type.credit": "кредит", - "workspace.payments.type.subscription": "подписка", - "workspace.payments.view": "Просмотр", - - "workspace.black.loading": "Загрузка...", - "workspace.black.time.day": "день", - "workspace.black.time.days": "дней", - "workspace.black.time.hour": "час", - "workspace.black.time.hours": "часов", - "workspace.black.time.minute": "минута", - "workspace.black.time.minutes": "минут", - "workspace.black.time.fewSeconds": "несколько секунд", - "workspace.black.subscription.title": "Подписка", - "workspace.black.subscription.message": "Вы подписаны на OpenCode Black за ${{plan}} в месяц.", - "workspace.black.subscription.manage": "Управление подпиской", - "workspace.black.subscription.rollingUsage": "5-часовое использование", - "workspace.black.subscription.weeklyUsage": "Недельное использование", - "workspace.black.subscription.resetsIn": "Сброс через", - "workspace.black.subscription.useBalance": "Использовать доступный баланс после достижения лимитов", - "workspace.black.waitlist.title": "Список ожидания", - "workspace.black.waitlist.joined": "Вы в списке ожидания плана OpenCode Black за ${{plan}} в месяц.", - "workspace.black.waitlist.ready": "Мы готовы подключить вас к плану OpenCode Black за ${{plan}} в месяц.", - "workspace.black.waitlist.leave": "Покинуть список ожидания", - "workspace.black.waitlist.leaving": "Выход...", - "workspace.black.waitlist.left": "Вы покинули", - "workspace.black.waitlist.enroll": "Подключиться", - "workspace.black.waitlist.enrolling": "Подключение...", - "workspace.black.waitlist.enrolled": "Подключен", - "workspace.black.waitlist.enrollNote": - "Когда вы нажмете Подключиться, ваша подписка начнется немедленно, и с карты будет списана оплата.", - - "workspace.lite.loading": "Загрузка...", - "workspace.lite.time.day": "день", - "workspace.lite.time.days": "дней", - "workspace.lite.time.hour": "час", - "workspace.lite.time.hours": "часов", - "workspace.lite.time.minute": "минута", - "workspace.lite.time.minutes": "минут", - "workspace.lite.time.fewSeconds": "несколько секунд", - "workspace.lite.subscription.message": "Вы подписаны на OpenCode Go.", - "workspace.lite.subscription.manage": "Управление подпиской", - "workspace.lite.subscription.rollingUsage": "Скользящее использование", - "workspace.lite.subscription.weeklyUsage": "Недельное использование", - "workspace.lite.subscription.monthlyUsage": "Ежемесячное использование", - "workspace.lite.subscription.resetsIn": "Сброс через", - "workspace.lite.subscription.useBalance": "Использовать доступный баланс после достижения лимитов", - "workspace.lite.subscription.selectProvider": - 'Выберите "OpenCode Go" в качестве провайдера в настройках opencode для использования моделей Go.', - "workspace.lite.providers.title": "Провайдеры", - "workspace.lite.providers.description": "Управляйте провайдерами, используемыми для маршрутизации.", - "workspace.lite.providers.useChina": "Включить модели, размещенные в Китае", - "workspace.lite.black.message": - "Вы подписаны на OpenCode Black или находитесь в списке ожидания. Пожалуйста, сначала отмените подписку, если хотите перейти на Go.", - "workspace.lite.other.message": - "Другой участник в этом рабочем пространстве уже подписан на OpenCode Go. Только один участник в рабочем пространстве может оформить подписку.", - "workspace.lite.promo.description": - "OpenCode Go начинается с {{price}}, затем $10/месяц и предоставляет надежный доступ к популярным открытым моделям кодирования с щедрыми лимитами использования.", - "workspace.lite.promo.price": "$5 за первый месяц", - "workspace.lite.promo.modelsTitle": "Что включено", - "workspace.lite.promo.footer": - "План предназначен в первую очередь для международных пользователей. Модели размещены в США, ЕС и Сингапуре для стабильного глобального доступа. Цены и лимиты использования могут меняться по мере того, как мы изучаем раннее использование и собираем отзывы.", - "workspace.lite.promo.subscribe": "Подписаться на Go", - "workspace.lite.promo.subscribing": "Перенаправление...", - "workspace.lite.promo.otherMethods": "Другие способы оплаты", - "workspace.lite.promo.selectMethod": "Выберите способ оплаты", - - "workspace.referral.copyLink": "Копировать ссылку", - "workspace.referral.copied": "Скопировано", - "workspace.referral.overview.title": "Пригласите друзей", - "workspace.referral.overview.subtitle": "Получите $5, когда друг оформит подписку. Он тоже получит $5.", - "workspace.referral.instructions.share": "Поделитесь своей реферальной ссылкой", - "workspace.referral.instructions.subscribe": "Ваш друг присоединяется и оформляет подписку на Go", - "workspace.referral.instructions.claim": - "Вы оба получаете кредит на использование $5, который можно применить к лимитам использования Go", - "workspace.referral.rewards.title": "Реферальные награды", - "workspace.referral.rewards.description": "Используйте доступные реферальные кредиты для оплаты использования Go.", - "workspace.referral.rewards.subtitle": "Использовано {{applied}} / {{total}} наград.", - "workspace.referral.rewards.empty": "Реферальных наград пока нет.", - "workspace.referral.table.reward": "Награда", - "workspace.referral.table.referral": "Описание", - "workspace.referral.table.date": "Дата", - "workspace.referral.reward.description.inviter": "Приглашён {{email}}", - "workspace.referral.reward.description.invitee": "Приглашены пользователем {{email}}", - "workspace.referral.reward.action.subscribeUnlock": "Оформите подписку для разблокировки", - "workspace.referral.reward.action.view": "Посмотреть награду", - "workspace.referral.reward.action.applied": "Награда использована", - "workspace.referral.reward.source.pendingInviter": "Ожидание его подписки", - "workspace.referral.reward.source.pendingInvitee": "Подпишитесь, чтобы разблокировать награду", - "workspace.referral.reward.source.available": "Награда готова к применению", - "workspace.referral.reward.source.applied": "Награда использована", - "workspace.referral.reward.status.applied": "Награда использована", - "workspace.referral.reward.status.pendingInviter": "Оформите подписку для разблокировки", - "workspace.referral.reward.status.pendingInvitee": "Оформите подписку для разблокировки", - "workspace.referral.apply.noGo": "Оформите подписку для разблокировки", - "workspace.referral.apply.preview": "Посмотреть награду", - "workspace.referral.apply.action": "Применить", - "workspace.referral.apply.confirmTitle": "Применить награду", - "workspace.referral.apply.confirmBody": - "Используйте {{amount}}, чтобы уменьшить текущее использование этого workspace.", - "workspace.referral.apply.confirmAction": "Применить", - - "download.title": "OpenCode | Скачать", - "download.meta.description": "Скачать OpenCode для macOS, Windows и Linux", - "download.hero.title": "Скачать OpenCode", - "download.hero.subtitle": "Доступна бета для macOS, Windows и Linux", - "download.hero.button": "Скачать для {{os}}", - "download.section.terminal": "OpenCode Terminal", - "download.section.desktop": "OpenCode Desktop (Beta)", - "download.section.extensions": "Расширения OpenCode", - "download.section.integrations": "Интеграции OpenCode", - "download.action.download": "Скачать", - "download.action.install": "Установить", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "Не обязательно, но возможно. Вам понадобится AI подписка, если вы хотите подключить OpenCode к платному провайдеру, хотя вы можете работать с", - "download.faq.a3.localLink": "локальными моделями", - "download.faq.a3.afterLocal.beforeZen": "бесплатно. Хотя мы рекомендуем использовать", - "download.faq.a3.afterZen": - ", OpenCode работает со всеми популярными провайдерами, такими как OpenAI, Anthropic, xAI и др.", - - "download.faq.a5.p1": "OpenCode на 100% бесплатен.", - "download.faq.a5.p2.beforeZen": - "Любые дополнительные расходы будут связаны с вашей подпиской у провайдера моделей. Хотя OpenCode работает с любым провайдером моделей, мы рекомендуем использовать", - "download.faq.a5.p2.afterZen": ".", - - "download.faq.a6.p1": "Ваши данные и информация сохраняются только при создании ссылок для шеринга в OpenCode.", - "download.faq.a6.p2.beforeShare": "Подробнее о", - "download.faq.a6.shareLink": "страницах шеринга", - - "enterprise.title": "OpenCode | Корпоративные решения для вашей организации", - "enterprise.meta.description": "Свяжитесь с OpenCode для корпоративных решений", - "enterprise.hero.title": "Ваш код принадлежит вам", - "enterprise.hero.body1": - "OpenCode безопасно работает внутри вашей организации: не хранит данные и контекст, без лицензионных ограничений и претензий на собственность. Начните пробный период с командой, затем разверните по всей организации, интегрировав с SSO и внутренним AI-шлюзом.", - "enterprise.hero.body2": "Сообщите нам, чем мы можем помочь.", - "enterprise.form.name.label": "Полное имя", - "enterprise.form.name.placeholder": "Джефф Безос", - "enterprise.form.role.label": "Роль", - "enterprise.form.role.placeholder": "Исполнительный председатель", - "enterprise.form.company.label": "Компания", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "Корпоративная почта", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "Номер телефона", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "Какую проблему вы пытаетесь решить?", - "enterprise.form.message.placeholder": "Нам нужна помощь с...", - "enterprise.form.send": "Отправить", - "enterprise.form.sending": "Отправка...", - "enterprise.form.success": "Сообщение отправлено, мы скоро свяжемся с вами.", - "enterprise.form.success.submitted": "Форма успешно отправлена.", - "enterprise.form.error.allFieldsRequired": "Все поля обязательны.", - "enterprise.form.error.invalidEmailFormat": "Неверный формат email.", - "enterprise.form.error.internalServer": "Внутренняя ошибка сервера.", - "enterprise.faq.title": "FAQ", - "enterprise.faq.q1": "Что такое OpenCode Enterprise?", - "enterprise.faq.a1": - "OpenCode Enterprise предназначен для организаций, которые хотят гарантировать, что их код и данные никогда не покинут их инфраструктуру. Это достигается за счет централизованной конфигурации, интегрированной с вашим SSO и внутренним AI-шлюзом.", - "enterprise.faq.q2": "Как начать работу с OpenCode Enterprise?", - "enterprise.faq.a2": - "Просто начните с внутреннего триала с вашей командой. OpenCode по умолчанию не хранит ваш код или контекстные данные, поэтому начать легко. Затем свяжитесь с нами, чтобы обсудить цены и варианты внедрения.", - "enterprise.faq.q3": "Как работает корпоративное ценообразование?", - "enterprise.faq.a3": - "Мы предлагаем модель ценообразования за рабочее место (per-seat). Если у вас есть собственный LLM-шлюз, мы не взимаем плату за использованные токены. Для получения подробной информации свяжитесь с нами для индивидуального расчета на основе потребностей вашей организации.", - "enterprise.faq.q4": "Безопасны ли мои данные с OpenCode Enterprise?", - "enterprise.faq.a4": - "Да. OpenCode не хранит ваш код или контекстные данные. Вся обработка происходит локально или через прямые вызовы API к вашему AI-провайдеру. Благодаря централизованной конфигурации и интеграции SSO ваши данные остаются защищенными внутри инфраструктуры вашей организации.", - - "brand.title": "OpenCode | Бренд", - "brand.meta.description": "Гайдлайны бренда OpenCode", - "brand.heading": "Гайдлайны бренда", - "brand.subtitle": "Ресурсы и активы, которые помогут вам работать с брендом OpenCode.", - "brand.downloadAll": "Скачать все ресурсы", - - "changelog.title": "OpenCode | Список изменений", - "changelog.meta.description": "Примечания к релизам и список изменений OpenCode", - "changelog.hero.title": "Список изменений", - "changelog.hero.subtitle": "Новые обновления и улучшения OpenCode", - "changelog.empty": "Записи в списке изменений не найдены.", - "changelog.viewJson": "Посмотреть JSON", - - "bench.list.title": "Бенчмарк", - "bench.list.heading": "Бенчмарки", - "bench.list.table.agent": "Агент", - "bench.list.table.model": "Модель", - "bench.list.table.score": "Оценка", - "bench.submission.error.allFieldsRequired": "Все поля обязательны.", - - "bench.detail.title": "Бенчмарк - {{task}}", - "bench.detail.notFound": "Задача не найдена", - "bench.detail.na": "Н/Д", - "bench.detail.labels.agent": "Агент", - "bench.detail.labels.model": "Модель", - "bench.detail.labels.task": "Задача", - "bench.detail.labels.repo": "Репозиторий", - "bench.detail.labels.from": "От", - "bench.detail.labels.to": "До", - "bench.detail.labels.prompt": "Промпт", - "bench.detail.labels.commit": "Коммит", - "bench.detail.labels.averageDuration": "Средняя длительность", - "bench.detail.labels.averageScore": "Средняя оценка", - "bench.detail.labels.averageCost": "Средняя стоимость", - "bench.detail.labels.summary": "Сводка", - "bench.detail.labels.runs": "Запуски", - "bench.detail.labels.score": "Оценка", - "bench.detail.labels.base": "База", - "bench.detail.labels.penalty": "Штраф", - "bench.detail.labels.weight": "вес", - "bench.detail.table.run": "Запуск", - "bench.detail.table.score": "Оценка (База - Штраф)", - "bench.detail.table.cost": "Стоимость", - "bench.detail.table.duration": "Длительность", - "bench.detail.run.title": "Запуск {{n}}", - "bench.detail.rawJson": "Raw JSON", -} satisfies Dict diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts deleted file mode 100644 index bf7c2e58e4..0000000000 --- a/packages/console/app/src/i18n/th.ts +++ /dev/null @@ -1,822 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "เอกสาร", - "nav.changelog": "บันทึกการเปลี่ยนแปลง", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "องค์กร", - "nav.zen": "Zen", - "nav.login": "เข้าสู่ระบบ", - "nav.free": "ดาวน์โหลด", - "nav.home": "หน้าหลัก", - "nav.openMenu": "เปิดเมนู", - "nav.getStartedFree": "เริ่มต้นฟรี", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "คัดลอกโลโก้เป็น SVG", - "nav.context.copyWordmark": "คัดลอกตัวอักษรแบรนด์เป็น SVG", - "nav.context.brandAssets": "แอสเซทแบรนด์", - - "footer.github": "GitHub", - "footer.docs": "เอกสาร", - "footer.changelog": "บันทึกการเปลี่ยนแปลง", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "แบรนด์", - "legal.privacy": "ความเป็นส่วนตัว", - "legal.terms": "ข้อกำหนด", - - "email.title": "รู้ก่อนใครเมื่อเราปล่อยผลิตภัณฑ์ใหม่", - "email.subtitle": "เข้าร่วมรายชื่อรอเพื่อรับสิทธิ์เข้าถึงก่อนใคร", - "email.placeholder": "ที่อยู่อีเมล", - "email.subscribe": "สมัครรับข่าวสาร", - "email.success": "เกือบเสร็จแล้ว ตรวจสอบกล่องจดหมายและยืนยันที่อยู่อีเมลของคุณ", - - "notFound.title": "ไม่พบหน้า | OpenCode", - "notFound.heading": "404 - ไม่พบหน้าที่ค้นหา", - "notFound.home": "หน้าหลัก", - "notFound.docs": "เอกสาร", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "โลโก้ opencode แบบสว่าง", - "notFound.logoDarkAlt": "โลโก้ opencode แบบมืด", - - "user.logout": "ออกจากระบบ", - - "auth.callback.error.codeMissing": "ไม่พบ authorization code", - - "workspace.select": "เลือก Workspace", - "workspace.createNew": "+ สร้าง Workspace ใหม่", - "workspace.modal.title": "สร้าง Workspace ใหม่", - "workspace.modal.placeholder": "กรอกชื่อ Workspace", - - "common.cancel": "ยกเลิก", - "common.creating": "กำลังสร้าง...", - "common.create": "สร้าง", - - "common.videoUnsupported": "เบราว์เซอร์ของคุณไม่รองรับแท็ก video", - "common.figure": "รูปที่ {{n}}", - "common.faq": "คำถามที่พบบ่อย", - "common.learnMore": "ดูเพิ่มเติม", - - "error.invalidPlan": "แผนไม่ถูกต้อง", - "error.workspaceRequired": "จำเป็นต้องมี Workspace ID", - "error.alreadySubscribed": "Workspace นี้มีการสมัครสมาชิกอยู่แล้ว", - "error.limitRequired": "จำเป็นต้องระบุขีดจำกัด", - "error.monthlyLimitInvalid": "โปรดระบุขีดจำกัดรายเดือนที่ถูกต้อง", - "error.workspaceNameRequired": "จำเป็นต้องระบุชื่อ Workspace", - "error.nameTooLong": "ชื่อต้องมีความยาวไม่เกิน 255 ตัวอักษร", - "error.emailRequired": "จำเป็นต้องระบุอีเมล", - "error.roleRequired": "จำเป็นต้องระบุบทบาท", - "error.idRequired": "จำเป็นต้องระบุ ID", - "error.nameRequired": "จำเป็นต้องระบุชื่อ", - "error.providerRequired": "จำเป็นต้องระบุผู้ให้บริการ", - "error.apiKeyRequired": "จำเป็นต้องระบุ API key", - "error.modelRequired": "จำเป็นต้องระบุโมเดล", - "error.reloadAmountMin": "จำนวนเงินที่โหลดซ้ำต้องมีอย่างน้อย ${{amount}}", - "error.reloadTriggerMin": "ยอดคงเหลือที่กระตุ้นต้องมีอย่างน้อย ${{amount}}", - - "app.meta.description": "OpenCode - เอเจนต์เขียนโค้ดแบบโอเพนซอร์ส", - - "home.title": "OpenCode | เอเจนต์เขียนโค้ดด้วย AI แบบโอเพนซอร์ส", - - "temp.title": "OpenCode | เอเจนต์เขียนโค้ด AI ที่สร้างมาเพื่อเทอร์มินัล", - "temp.hero.title": "เอเจนต์เขียนโค้ด AI ที่สร้างมาเพื่อเทอร์มินัล", - "temp.zen": "OpenCode Zen", - "temp.getStarted": "เริ่มต้นใช้งาน", - "temp.feature.native.title": "Native TUI", - "temp.feature.native.body": "UI เทอร์มินัลแบบเนทีฟที่ตอบสนองไวและปรับแต่งธีมได้", - "temp.feature.zen.beforeLink": "", - "temp.feature.zen.link": "รายการโมเดลที่คัดสรรแล้ว", - "temp.feature.zen.afterLink": "โดย OpenCode", - "temp.feature.models.beforeLink": "รองรับผู้ให้บริการ LLM กว่า 75 รายผ่าน", - "temp.feature.models.afterLink": "รวมถึงโมเดล Local", - "temp.screenshot.caption": "OpenCode TUI พร้อมธีม tokyonight", - "temp.screenshot.alt": "OpenCode TUI พร้อมธีม tokyonight", - "temp.logoLightAlt": "โลโก้ opencode แบบสว่าง", - "temp.logoDarkAlt": "โลโก้ opencode แบบมืด", - - "home.banner.badge": "ใหม่", - "home.banner.text": "แอปเดสก์ท็อปพร้อมใช้งานในเวอร์ชันเบต้า", - "home.banner.platforms": "บน macOS, Windows และ Linux", - "home.banner.downloadNow": "ดาวน์โหลดตอนนี้", - "home.banner.downloadBetaNow": "ดาวน์โหลดเบต้าเดสก์ท็อปตอนนี้", - - "home.hero.title": "เอเจนต์เขียนโค้ดด้วย AI แบบโอเพนซอร์ส", - "home.hero.subtitle.a": "มีโมเดลฟรีรวมอยู่ หรือเชื่อมต่อโมเดลใดก็ได้จากผู้ให้บริการรายใดก็ได้,", - "home.hero.subtitle.b": "รวมถึง Claude, GPT, Gemini และอีกมากมาย", - - "home.install.ariaLabel": "ตัวเลือกการติดตั้ง", - - "home.what.title": "OpenCode คืออะไร?", - "home.what.body": "OpenCode คือเอเจนต์โอเพนซอร์สที่ช่วยคุณเขียนโค้ดในเทอร์มินัล, IDE หรือเดสก์ท็อป", - "home.what.lsp.title": "รองรับ LSP", - "home.what.lsp.body": "โหลด LSP ที่เหมาะสมสำหรับ LLM โดยอัตโนมัติ", - "home.what.multiSession.title": "หลายเซสชัน", - "home.what.multiSession.body": "เริ่มเอเจนต์หลายตัวทำงานคู่ขนานกันในโปรเจกต์เดียวกัน", - "home.what.shareLinks.title": "แชร์ลิงก์", - "home.what.shareLinks.body": "แชร์ลิงก์ไปยังเซสชันใดก็ได้เพื่อการอ้างอิงหรือ Debug", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "เข้าสู่ระบบด้วย GitHub เพื่อใช้บัญชี Copilot ของคุณ", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "เข้าสู่ระบบด้วย OpenAI เพื่อใช้บัญชี ChatGPT Plus หรือ Pro ของคุณ", - "home.what.anyModel.title": "โมเดลใดก็ได้", - "home.what.anyModel.body": "ผู้ให้บริการ LLM กว่า 75 รายผ่าน Models.dev รวมถึงโมเดล Local", - "home.what.anyEditor.title": "อีดิเตอร์ใดก็ได้", - "home.what.anyEditor.body": "ใช้งานได้ทั้งแบบเทอร์มินัล, แอปเดสก์ท็อป และส่วนขยาย IDE", - "home.what.readDocs": "อ่านเอกสาร", - - "home.growth.title": "เอเจนต์เขียนโค้ดด้วย AI แบบโอเพนซอร์ส", - "home.growth.body": - "ด้วยยอดดาวบน GitHub กว่า {{stars}} ดวง, ผู้ร่วมพัฒนา {{contributors}} คน, และการคอมมิตกว่า {{commits}} ครั้ง, OpenCode ได้รับความไว้วางใจจากนักพัฒนากว่า {{monthlyUsers}} คนในทุกเดือน", - "home.growth.githubStars": "GitHub Stars", - "home.growth.contributors": "ผู้ร่วมพัฒนา", - "home.growth.monthlyDevs": "นักพัฒนารายเดือน", - - "home.privacy.title": "สร้างโดยคำนึงถึงความเป็นส่วนตัวเป็นหลัก", - "home.privacy.body": - "OpenCode ไม่จัดเก็บโค้ดหรือข้อมูลบริบทของคุณ เพื่อให้สามารถทำงานในสภาพแวดล้อมที่ให้ความสำคัญกับความเป็นส่วนตัวได้", - "home.privacy.learnMore": "เรียนรู้เพิ่มเติมเกี่ยวกับ", - "home.privacy.link": "ความเป็นส่วนตัว", - - "home.faq.q1": "OpenCode คืออะไร?", - "home.faq.a1": - "OpenCode เป็นเอเจนต์โอเพนซอร์สที่ช่วยให้คุณเขียนและรันโค้ดด้วยโมเดล AI ใดก็ได้ มีให้เลือกใช้ทั้งแบบอินเทอร์เฟซเทอร์มินัล, แอปเดสก์ท็อป หรือส่วนขยาย IDE", - "home.faq.q2": "ฉันจะเริ่มใช้ OpenCode ได้อย่างไร?", - "home.faq.a2.before": "วิธีเริ่มต้นที่ง่ายที่สุดคืออ่าน", - "home.faq.a2.link": "บทนำ", - "home.faq.q3": "ต้องสมัครสมาชิก AI เพิ่มเติมเพื่อใช้ OpenCode หรือไม่?", - "home.faq.a3.p1": "ไม่จำเป็นเสมอไป OpenCode มาพร้อมกับชุดโมเดลฟรีที่คุณสามารถใช้ได้โดยไม่ต้องสร้างบัญชี", - "home.faq.a3.p2.beforeZen": "นอกจากนี้ คุณสามารถใช้โมเดลยอดนิยมใดก็ได้โดยการสร้างบัญชี", - "home.faq.a3.p2.afterZen": "", - "home.faq.a3.p3": - "แม้เราจะแนะนำให้ใช้ Zen แต่ OpenCode ก็ทำงานร่วมกับผู้ให้บริการยอดนิยมทั้งหมด เช่น OpenAI, Anthropic, xAI เป็นต้น", - "home.faq.a3.p4.beforeLocal": "คุณยังสามารถเชื่อมต่อกับ", - "home.faq.a3.p4.localLink": "โมเดล Local ของคุณ", - "home.faq.q4": "ฉันสามารถใช้การสมัครสมาชิก AI ที่มีอยู่กับ OpenCode ได้หรือไม่?", - "home.faq.a4.p1": - "ได้ OpenCode รองรับแผนการสมัครสมาชิกจากผู้ให้บริการหลักทั้งหมด คุณสามารถใช้การสมัครสมาชิก Claude Pro/Max, ChatGPT Plus/Pro หรือ GitHub Copilot ของคุณได้", - "home.faq.q5": "ฉันใช้ OpenCode ได้เฉพาะในเทอร์มินัลใช่หรือไม่?", - "home.faq.a5.beforeDesktop": "ไม่อีกต่อไป! OpenCode มีแอปสำหรับ", - "home.faq.a5.desktop": "เดสก์ท็อป", - "home.faq.a5.and": "และ", - "home.faq.a5.web": "เว็บ", - "home.faq.q6": "OpenCode ราคาเท่าไหร่?", - "home.faq.a6": - "OpenCode ใช้งานได้ฟรี 100% และมาพร้อมกับชุดโมเดลฟรี อาจมีค่าใช้จ่ายเพิ่มเติมหากคุณเชื่อมต่อกับผู้ให้บริการรายอื่น", - "home.faq.q7": "แล้วเรื่องข้อมูลและความเป็นส่วนตัวล่ะ?", - "home.faq.a7.p1": "ข้อมูลของคุณจะถูกจัดเก็บเฉพาะเมื่อคุณใช้โมเดลฟรีของเราหรือสร้างลิงก์ที่แชร์ได้", - "home.faq.a7.p2.beforeModels": "เรียนรู้เพิ่มเติมเกี่ยวกับ", - "home.faq.a7.p2.modelsLink": "โมเดลของเรา", - "home.faq.a7.p2.and": "และ", - "home.faq.a7.p2.shareLink": "หน้าแชร์", - "home.faq.q8": "OpenCode เป็นโอเพนซอร์สหรือไม่?", - "home.faq.a8.p1": "ใช่ OpenCode เป็นโอเพนซอร์สเต็มรูปแบบ ซอร์สโค้ดเปิดเผยต่อสาธารณะบน", - "home.faq.a8.p2": "ภายใต้", - "home.faq.a8.mitLicense": "MIT License", - "home.faq.a8.p3": - " ซึ่งหมายความว่าใครๆ ก็สามารถใช้ แก้ไข หรือร่วมพัฒนาได้ ทุกคนในชุมชนสามารถเปิด issue, ส่ง pull request และขยายฟังก์ชันการทำงานได้", - - "home.zenCta.title": "เข้าถึงโมเดลที่เชื่อถือได้และปรับแต่งมาแล้วสำหรับเอเจนต์เขียนโค้ด", - "home.zenCta.body": - "Zen ให้คุณเข้าถึงชุดโมเดล AI ที่คัดสรรมาแล้ว ซึ่ง OpenCode ได้ทดสอบและทำเบนช์มาร์กโดยเฉพาะสำหรับเอเจนต์เขียนโค้ด ไม่ต้องกังวลเรื่องประสิทธิภาพและคุณภาพที่ไม่สม่ำเสมอจากผู้ให้บริการ ใช้โมเดลที่ผ่านการตรวจสอบแล้วว่าใช้งานได้จริง", - "home.zenCta.link": "เรียนรู้เกี่ยวกับ Zen", - - "zen.title": "OpenCode Zen | ชุดโมเดลที่คัดสรรมาอย่างดี เชื่อถือได้ และปรับแต่งแล้วสำหรับเอเจนต์เขียนโค้ด", - "zen.hero.title": "โมเดลที่ปรับแต่งมาอย่างดีและเชื่อถือได้สำหรับเอเจนต์เขียนโค้ด", - "zen.hero.body": - "Zen ให้คุณเข้าถึงชุดโมเดล AI ที่คัดสรรมาแล้ว ซึ่ง OpenCode ได้ทดสอบและทำเบนช์มาร์กโดยเฉพาะสำหรับเอเจนต์เขียนโค้ด ไม่ต้องกังวลเรื่องประสิทธิภาพและคุณภาพที่ไม่สม่ำเสมอ ใช้โมเดลที่ผ่านการตรวจสอบแล้วว่าใช้งานได้จริง", - - "zen.faq.q1": "OpenCode Zen คืออะไร?", - "zen.faq.a1": - "Zen คือชุดโมเดล AI ที่คัดสรรมาอย่างดี ผ่านการทดสอบและทำเบนช์มาร์กสำหรับเอเจนต์เขียนโค้ด สร้างโดยทีมงานผู้อยู่เบื้องหลัง OpenCode", - "zen.faq.q2": "อะไรทำให้ Zen แม่นยำกว่า?", - "zen.faq.a2": - "Zen ให้บริการเฉพาะโมเดลที่ได้รับการทดสอบและทำเบนช์มาร์กสำหรับเอเจนต์เขียนโค้ดโดยเฉพาะ คุณคงไม่ใช้มีดทาเนยมาหั่นสเต็ก ดังนั้นอย่าใช้โมเดลคุณภาพต่ำสำหรับการเขียนโค้ด", - "zen.faq.q3": "Zen ราคาถูกกว่าหรือไม่?", - "zen.faq.a3": - "Zen ไม่ได้แสวงหากำไร Zen ส่งผ่านต้นทุนจากผู้ให้บริการโมเดลมาถึงคุณ ยิ่งมีการใช้งาน Zen มากเท่าไหร่ OpenCode ก็ยิ่งสามารถต่อรองเรตราคาที่ดีกว่าและส่งต่อให้คุณได้มากขึ้นเท่านั้น", - "zen.faq.q4": "Zen ราคาเท่าไหร่?", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "คิดค่าบริการต่อคำขอ", - "zen.faq.a4.p1.afterPricing": "โดยไม่มีการบวกเพิ่ม ดังนั้นคุณจ่ายเท่ากับที่ผู้ให้บริการโมเดลเรียกเก็บ", - "zen.faq.a4.p2.beforeAccount": - "ค่าใช้จ่ายรวมของคุณขึ้นอยู่กับการใช้งาน และคุณสามารถตั้งวงเงินการใช้จ่ายรายเดือนได้ใน", - "zen.faq.a4.p2.accountLink": "บัญชีของคุณ", - "zen.faq.a4.p3": - "เพื่อครอบคลุมต้นทุน OpenCode คิดค่าธรรมเนียมการประมวลผลการชำระเงินเพียงเล็กน้อย $1.23 ต่อการเติมเงิน $20", - "zen.faq.q5": "แล้วเรื่องข้อมูลและความเป็นส่วนตัวล่ะ?", - "zen.faq.a5.beforeExceptions": - "โมเดล Zen ทั้งหมดโฮสต์ในสหรัฐอเมริกา ผู้ให้บริการปฏิบัติตามนโยบายไม่เก็บรักษาข้อมูล (zero-retention policy) และไม่ใช้ข้อมูลของคุณสำหรับการฝึกโมเดล โดยมี", - "zen.faq.a5.exceptionsLink": "ข้อยกเว้นดังนี้", - "zen.faq.q6": "ฉันสามารถตั้งวงเงินการใช้จ่ายได้หรือไม่?", - "zen.faq.a6": "ได้ คุณสามารถตั้งวงเงินการใช้จ่ายรายเดือนได้ในบัญชีของคุณ", - "zen.faq.q7": "ฉันสามารถยกเลิกได้หรือไม่?", - "zen.faq.a7": "ได้ คุณสามารถปิดการเรียกเก็บเงินได้ตลอดเวลาและใช้ยอดเงินคงเหลือของคุณจนหมด", - "zen.faq.q8": "ฉันสามารถใช้ Zen กับเอเจนต์เขียนโค้ดอื่นได้หรือไม่?", - "zen.faq.a8": - "แม้ว่า Zen จะทำงานได้ดีเยี่ยมกับ OpenCode แต่คุณสามารถใช้ Zen กับเอเจนต์ใดก็ได้ เพียงทำตามคำแนะนำการตั้งค่าในเอเจนต์เขียนโค้ดที่คุณต้องการ", - - "zen.cta.start": "เริ่มต้นใช้งาน Zen", - "zen.pricing.title": "เติมเงิน $20 แบบ Pay as you go", - "zen.pricing.fee": "(+ค่าธรรมเนียมประมวลผลบัตร $1.23)", - "zen.pricing.body": "ใช้ได้กับทุกเอเจนต์ ตั้งวงเงินรายเดือนได้ ยกเลิกได้ตลอดเวลา", - "zen.problem.title": "Zen กำลังแก้ปัญหาอะไร?", - "zen.problem.body": - "มีโมเดลมากมายให้เลือก แต่มีเพียงไม่กี่ตัวที่ทำงานได้ดีกับเอเจนต์เขียนโค้ด ผู้ให้บริการส่วนใหญ่กำหนดค่าแตกต่างกันไปซึ่งให้ผลลัพธ์ที่หลากหลาย", - "zen.problem.subtitle": "เรากำลังแก้ไขปัญหานี้สำหรับทุกคน ไม่ใช่แค่ผู้ใช้ OpenCode เท่านั้น", - "zen.problem.item1": "ทดสอบโมเดลที่คัดเลือกมาและปรึกษากับทีมของโมเดลนั้นๆ", - "zen.problem.item2": "ทำงานร่วมกับผู้ให้บริการเพื่อให้มั่นใจว่าโมเดลถูกส่งมอบอย่างถูกต้อง", - "zen.problem.item3": "ทำเบนช์มาร์กทุกการจับคู่ระหว่างโมเดลและผู้ให้บริการที่เราแนะนำ", - "zen.how.title": "Zen ทำงานอย่างไร", - "zen.how.body": "แม้เราจะแนะนำให้คุณใช้ Zen กับ OpenCode แต่คุณสามารถใช้ Zen กับเอเจนต์ใดก็ได้", - "zen.how.step1.title": "ลงทะเบียนและเติมเงิน $20", - "zen.how.step1.beforeLink": "ทำตาม", - "zen.how.step1.link": "คำแนะนำการตั้งค่า", - "zen.how.step2.title": "ใช้ Zen ด้วยราคาที่โปร่งใส", - "zen.how.step2.link": "จ่ายตามคำขอ (pay per request)", - "zen.how.step2.afterLink": "โดยไม่มีการบวกเพิ่ม", - "zen.how.step3.title": "เติมเงินอัตโนมัติ", - "zen.how.step3.body": "เมื่อยอดเงินของคุณเหลือ $5 เราจะเติมเงิน $20 ให้โดยอัตโนมัติ", - "zen.privacy.title": "ความเป็นส่วนตัวของคุณสำคัญสำหรับเรา", - "zen.privacy.beforeExceptions": - "โมเดล Zen ทั้งหมดโฮสต์ในสหรัฐอเมริกา ผู้ให้บริการปฏิบัติตามนโยบายไม่เก็บรักษาข้อมูล (zero-retention policy) และไม่ใช้ข้อมูลของคุณสำหรับการฝึกโมเดล โดยมี", - "zen.privacy.exceptionsLink": "ข้อยกเว้นดังนี้", - - "go.title": "OpenCode Go | โมเดลเขียนโค้ดราคาประหยัดสำหรับทุกคน", - "go.meta.description": - "Go เริ่มต้นที่ $5 สำหรับเดือนแรก จากนั้น $10/เดือน พร้อมขีดจำกัดคำขอ 5 ชั่วโมงที่เอื้อเฟื้อสำหรับ GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro และ DeepSeek V4 Flash", - "go.hero.title": "โมเดลเขียนโค้ดราคาประหยัดสำหรับทุกคน", - "go.hero.body": - "Go นำการเขียนโค้ดแบบเอเจนต์มาสู่นักเขียนโปรแกรมทั่วโลก เสนอขีดจำกัดที่กว้างขวางและการเข้าถึงโมเดลโอเพนซอร์สที่มีความสามารถสูงสุดได้อย่างน่าเชื่อถือ เพื่อให้คุณสามารถสร้างสรรค์ด้วยเอเจนต์ที่ทรงพลังโดยไม่ต้องกังวลเรื่องค่าใช้จ่ายหรือความพร้อมใช้งาน", - - "go.cta.start": "สมัครสมาชิก Go", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "สมัครสมาชิก Go", - "go.cta.price": "$10/เดือน", - "go.cta.promo": "$5 เดือนแรก", - "go.pricing.body": "ใช้กับเอเจนต์ใดก็ได้ $5 ในเดือนแรก จากนั้น $10/เดือน เติมเครดิตหากจำเป็น ยกเลิกได้ตลอดเวลา", - "go.graph.free": "ฟรี", - "go.graph.freePill": "Big Pickle และโมเดลฟรี", - "go.graph.go": "Go", - "go.graph.label": "คำขอต่อ 5 ชั่วโมง", - "go.graph.usageLimits": "ขีดจำกัดการใช้งาน", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "คำขอต่อ 5 ชม.: {{free}} vs {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "อดีต CEO, Terminal Products", - "go.testimonials.dax.quoteAfter": "เปลี่ยนชีวิตไปเลย มันเป็นสิ่งที่ต้องมีจริงๆ", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "อดีตผู้ก่อตั้ง SEED, PM, Melt, Pop, Dapt, Cadmus และ ViewPoint", - "go.testimonials.jay.quoteBefore": "4 ใน 5 คนในทีมของเราชอบใช้", - "go.testimonials.jay.quoteAfter": "", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "อดีต Hero, AWS", - "go.testimonials.adam.quoteBefore": "ผมแนะนำ", - "go.testimonials.adam.quoteAfter": "ได้ไม่พอจริงๆ พูดจริงนะ มันดีมากๆ", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "อดีตหัวหน้าฝ่ายออกแบบ, Laravel", - "go.testimonials.david.quoteBefore": "ด้วย", - "go.testimonials.david.quoteAfter": "ผมรู้ว่าโมเดลทั้งหมดผ่านการทดสอบและสมบูรณ์แบบสำหรับเอเจนต์เขียนโค้ด", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "อดีตเด็กฝึกงาน, Nvidia (4 ครั้ง)", - "go.testimonials.frank.quote": "ผมหวังว่าผมจะยังอยู่ที่ Nvidia", - "go.problem.title": "Go แก้ปัญหาอะไร?", - "go.problem.body": - "เรามุ่งมั่นที่จะนำประสบการณ์ OpenCode ไปสู่ผู้คนให้ได้มากที่สุด OpenCode Go เป็นการสมัครสมาชิกราคาประหยัด: $5 สำหรับเดือนแรก จากนั้น $10/เดือน โดยมอบขีดจำกัดที่เอื้อเฟื้อและการเข้าถึงโมเดลโอเพนซอร์สที่มีความสามารถสูงสุดอย่างเชื่อถือได้", - "go.problem.subtitle": " ", - "go.problem.item1": "ราคาการสมัครสมาชิกที่ต่ำ", - "go.problem.item2": "ขีดจำกัดที่กว้างขวางและการเข้าถึงที่เชื่อถือได้", - "go.problem.item3": "สร้างขึ้นเพื่อโปรแกรมเมอร์จำนวนมากที่สุดเท่าที่จะเป็นไปได้", - "go.problem.item4": - "รวมถึง GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro และ DeepSeek V4 Flash", - "go.how.title": "Go ทำงานอย่างไร", - "go.how.body": "Go เริ่มต้นที่ $5 สำหรับเดือนแรก จากนั้น $10/เดือน คุณสามารถใช้กับ OpenCode หรือเอเจนต์ใดก็ได้", - "go.how.step1.title": "สร้างบัญชี", - "go.how.step1.beforeLink": "ทำตาม", - "go.how.step1.link": "คำแนะนำการตั้งค่า", - "go.how.step2.title": "สมัครสมาชิก Go", - "go.how.step2.link": "$5 เดือนแรก", - "go.how.step2.afterLink": "จากนั้น $10/เดือน พร้อมขีดจำกัดที่เอื้อเฟื้อ", - "go.how.step3.title": "เริ่มเขียนโค้ด", - "go.how.step3.body": "ด้วยการเข้าถึงโมเดลโอเพนซอร์สที่เชื่อถือได้", - "go.privacy.title": "ความเป็นส่วนตัวของคุณสำคัญสำหรับเรา", - "go.privacy.body": - "แผนนี้ออกแบบมาเพื่อผู้ใช้งานระหว่างประเทศเป็นหลัก โดยมีโมเดลโฮสต์ในสหรัฐอเมริกา สหภาพยุโรป และสิงคโปร์ เพื่อการเข้าถึงทั่วโลกที่เสถียร", - "go.privacy.contactAfter": "หากคุณมีคำถามใดๆ", - "go.privacy.beforeExceptions": - "โมเดล Go โฮสต์ในสหรัฐอเมริกา ผู้ให้บริการปฏิบัติตามนโยบายไม่เก็บรักษาข้อมูล (zero-retention policy) และไม่ใช้ข้อมูลของคุณสำหรับการฝึกโมเดล โดยมี", - "go.privacy.exceptionsLink": "ข้อยกเว้นดังนี้", - "go.faq.q1": "OpenCode Go คืออะไร?", - "go.faq.a1": - "Go คือการสมัครสมาชิกราคาประหยัดที่ให้คุณเข้าถึงโมเดลโอเพนซอร์สที่มีความสามารถสำหรับการเขียนโค้ดแบบเอเจนต์ได้อย่างน่าเชื่อถือ", - "go.faq.q2": "Go รวมโมเดลอะไรบ้าง?", - "go.faq.a2": "Go รวมโมเดลด้านล่างนี้ พร้อมขีดจำกัดที่มากและการเข้าถึงที่เชื่อถือได้", - "go.faq.q3": "Go เหมือนกับ Zen หรือไม่?", - "go.faq.a3": - "ไม่ Zen เป็นแบบจ่ายตามการใช้งาน ในขณะที่ Go เริ่มต้นที่ $5 สำหรับเดือนแรก จากนั้น $10/เดือน พร้อมขีดจำกัดที่เอื้อเฟื้อและการเข้าถึงโมเดลโอเพนซอร์ส GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro และ DeepSeek V4 Flash อย่างเชื่อถือได้", - "go.faq.q4": "Go ราคาเท่าไหร่?", - "go.faq.a4.p1.beforePricing": "Go ราคา", - "go.faq.a4.p1.pricingLink": "$5 เดือนแรก", - "go.faq.a4.p1.afterPricing": "จากนั้น $10/เดือน พร้อมขีดจำกัดที่เอื้อเฟื้อ", - "go.faq.a4.p2.beforeAccount": "คุณสามารถจัดการการสมัครสมาชิกของคุณได้ใน", - "go.faq.a4.p2.accountLink": "บัญชีของคุณ", - "go.faq.a4.p3": "ยกเลิกได้ตลอดเวลา", - "go.faq.q5": "แล้วเรื่องข้อมูลและความเป็นส่วนตัวล่ะ?", - "go.faq.a5.body": - "แผนนี้ออกแบบมาเพื่อผู้ใช้งานระหว่างประเทศเป็นหลัก โดยมีโมเดลโฮสต์ในสหรัฐอเมริกา สหภาพยุโรป และสิงคโปร์ เพื่อการเข้าถึงทั่วโลกที่เสถียร ผู้ให้บริการของเราปฏิบัติตามนโยบายไม่เก็บรักษาข้อมูลและไม่ใช้ข้อมูลของคุณสำหรับการฝึกโมเดล", - "go.faq.a5.beforeExceptions": - "โมเดล Go โฮสต์ในสหรัฐอเมริกา ผู้ให้บริการปฏิบัติตามนโยบายไม่เก็บรักษาข้อมูล (zero-retention policy) และไม่ใช้ข้อมูลของคุณสำหรับการฝึกโมเดล โดยมี", - "go.faq.a5.exceptionsLink": "ข้อยกเว้นดังนี้", - "go.faq.q6": "ฉันสามารถเติมเครดิตได้หรือไม่?", - "go.faq.a6": "หากคุณต้องการใช้งานเพิ่ม คุณสามารถเติมเครดิตในบัญชีของคุณได้", - "go.faq.q7": "ฉันสามารถยกเลิกได้หรือไม่?", - "go.faq.a7": "ได้ คุณสามารถยกเลิกได้ตลอดเวลา", - "go.faq.q8": "ฉันสามารถใช้ Go กับเอเจนต์เขียนโค้ดอื่นได้หรือไม่?", - "go.faq.a8": "ได้ คุณสามารถใช้ Go กับเอเจนต์ใดก็ได้ ทำตามคำแนะนำการตั้งค่าในเอเจนต์เขียนโค้ดที่คุณต้องการ", - - "go.faq.q9": "ความแตกต่างระหว่างโมเดลฟรีและ Go คืออะไร?", - "go.faq.a9": - "โมเดลฟรีรวมถึง Big Pickle บวกกับโมเดลโปรโมชั่นที่มีให้ในขณะนั้น ด้วยโควต้า 200 คำขอ/วัน Go รวมถึง GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro และ DeepSeek V4 Flash ที่มีโควต้าคำขอสูงกว่า ซึ่งบังคับใช้ผ่านช่วงเวลาหมุนเวียน (5 ชั่วโมง, รายสัปดาห์ และรายเดือน) เทียบเท่าประมาณ $12 ต่อ 5 ชั่วโมง, $30 ต่อสัปดาห์ และ $60 ต่อเดือน (จำนวนคำขอจริงจะแตกต่างกันไปตามโมเดลและการใช้งาน)", - - "zen.api.error.rateLimitExceeded": "เกินขีดจำกัดอัตราการใช้งาน กรุณาลองใหม่ในภายหลัง", - "zen.api.error.modelNotSupported": "ไม่รองรับโมเดล {{model}}", - "zen.api.error.modelFormatNotSupported": "ไม่รองรับโมเดล {{model}} สำหรับรูปแบบ {{format}}", - "zen.api.error.noProviderAvailable": "ไม่มีผู้ให้บริการที่พร้อมใช้งาน", - "zen.api.error.providerNotSupported": "ไม่รองรับผู้ให้บริการ {{provider}}", - "zen.api.error.missingApiKey": "ไม่มี API key", - "zen.api.error.invalidApiKey": "API key ไม่ถูกต้อง", - "zen.api.error.subscriptionQuotaExceeded": "โควต้าการสมัครสมาชิกเกินขีดจำกัด ลองใหม่ในอีก {{retryIn}}", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "ถึงขีดจำกัดการใช้งานในรอบ 5 ชั่วโมงแล้ว จะรีเซ็ตในอีก {{retryIn}} หากต้องการใช้โมเดลนี้ต่อทันที ให้เปิดใช้งานจากยอดเงินคงเหลือของคุณ: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "ถึงขีดจำกัดการใช้งานรายสัปดาห์แล้ว จะรีเซ็ตในอีก {{retryIn}} หากต้องการใช้โมเดลนี้ต่อทันที ให้เปิดใช้งานจากยอดเงินคงเหลือของคุณ: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "ถึงขีดจำกัดการใช้งานรายเดือนแล้ว จะรีเซ็ตในอีก {{retryIn}} หากต้องการใช้โมเดลนี้ต่อทันที ให้เปิดใช้งานจากยอดเงินคงเหลือของคุณ: {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "ไม่มีวิธีการชำระเงิน เพิ่มวิธีการชำระเงินที่นี่: {{billingUrl}}", - "zen.api.error.insufficientBalance": "ยอดเงินคงเหลือไม่เพียงพอ จัดการการเรียกเก็บเงินของคุณที่นี่: {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "Workspace ของคุณถึงขีดจำกัดการใช้จ่ายรายเดือนที่ ${{amount}} แล้ว จัดการขีดจำกัดของคุณที่นี่: {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "คุณถึงขีดจำกัดการใช้จ่ายรายเดือนที่ ${{amount}} แล้ว จัดการขีดจำกัดของคุณที่นี่: {{membersUrl}}", - "zen.api.error.modelDisabled": "โมเดลถูกปิดใช้งาน", - "zen.api.error.regionNotAllowed": - "โมเดลนี้โฮสต์อยู่ในประเทศจีน หากคุณต้องการใช้โมเดลนี้ ให้เปิดใช้งานในการตั้งค่าของคุณ: {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "โปรโมชันฟรีสำหรับ {{model}} สิ้นสุดแล้ว คุณสามารถใช้โมเดลต่อได้โดยสมัครสมาชิก OpenCode Go - {{link}}", - - "black.meta.title": "OpenCode Black | เข้าถึงโมเดลเขียนโค้ดที่ดีที่สุดในโลก", - "black.meta.description": "เข้าถึง Claude, GPT, Gemini และอื่นๆ ด้วยแผนสมาชิก OpenCode Black", - "black.hero.title": "เข้าถึงโมเดลเขียนโค้ดที่ดีที่สุดในโลก", - "black.hero.subtitle": "รวมถึง Claude, GPT, Gemini และอื่นๆ อีกมากมาย", - "black.title": "OpenCode Black | ราคา", - "black.paused": "การสมัครแผน Black หยุดชั่วคราว", - "black.plan.icon20": "แผน Black 20", - "black.plan.icon100": "แผน Black 100", - "black.plan.icon200": "แผน Black 200", - "black.plan.multiplier100": "ใช้งานได้มากกว่า Black 20 ถึง 5 เท่า", - "black.plan.multiplier200": "ใช้งานได้มากกว่า Black 20 ถึง 20 เท่า", - "black.price.perMonth": "ต่อเดือน", - "black.price.perPersonBilledMonthly": "ต่อคน เรียกเก็บรายเดือน", - "black.terms.1": "การสมัครสมาชิกของคุณจะยังไม่เริ่มต้นทันที", - "black.terms.2": "คุณจะถูกเพิ่มในรายชื่อรอและจะได้รับการเปิดใช้งานเร็วๆ นี้", - "black.terms.3": "บัตรของคุณจะถูกตัดเงินเมื่อการสมัครสมาชิกของคุณถูกเปิดใช้งานเท่านั้น", - "black.terms.4": "มีขีดจำกัดการใช้งาน การใช้ระบบอัตโนมัติอย่างหนักอาจทำให้ถึงขีดจำกัดเร็วขึ้น", - "black.terms.5": "การสมัครสมาชิกสำหรับบุคคลธรรมดา ติดต่อฝ่ายองค์กรสำหรับทีม", - "black.terms.6": "ขีดจำกัดอาจมีการปรับเปลี่ยนและแผนอาจถูกยกเลิกในอนาคต", - "black.terms.7": "ยกเลิกการสมัครสมาชิกได้ตลอดเวลา", - "black.action.continue": "ดำเนินการต่อ", - "black.finePrint.beforeTerms": "ราคาที่แสดงยังไม่รวมภาษีที่เกี่ยวข้อง", - "black.finePrint.terms": "ข้อกำหนดการให้บริการ", - "black.workspace.title": "OpenCode Black | เลือก Workspace", - "black.workspace.selectPlan": "เลือก Workspace สำหรับแผนนี้", - "black.workspace.name": "Workspace {{n}}", - "black.subscribe.title": "สมัครสมาชิก OpenCode Black", - "black.subscribe.paymentMethod": "วิธีการชำระเงิน", - "black.subscribe.loadingPaymentForm": "กำลังโหลดแบบฟอร์มการชำระเงิน...", - "black.subscribe.selectWorkspaceToContinue": "เลือก Workspace เพื่อดำเนินการต่อ", - "black.subscribe.failurePrefix": "โอ๊ะโอ!", - "black.subscribe.error.generic": "เกิดข้อผิดพลาด", - "black.subscribe.error.invalidPlan": "แผนไม่ถูกต้อง", - "black.subscribe.error.workspaceRequired": "จำเป็นต้องมี Workspace ID", - "black.subscribe.error.alreadySubscribed": "Workspace นี้มีการสมัครสมาชิกอยู่แล้ว", - "black.subscribe.processing": "กำลังดำเนินการ...", - "black.subscribe.submit": "สมัครสมาชิก ${{plan}}", - "black.subscribe.form.chargeNotice": "คุณจะถูกเรียกเก็บเงินเมื่อการสมัครสมาชิกของคุณถูกเปิดใช้งานเท่านั้น", - "black.subscribe.success.title": "คุณอยู่ในรายชื่อรอ OpenCode Black แล้ว", - "black.subscribe.success.subscriptionPlan": "แผนการสมัครสมาชิก", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "จำนวนเงิน", - "black.subscribe.success.amountValue": "${{plan}} ต่อเดือน", - "black.subscribe.success.paymentMethod": "วิธีการชำระเงิน", - "black.subscribe.success.dateJoined": "วันที่เข้าร่วม", - "black.subscribe.success.chargeNotice": "บัตรของคุณจะถูกเรียกเก็บเงินเมื่อการสมัครสมาชิกของคุณถูกเปิดใช้งาน", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "การใช้งาน", - "workspace.nav.apiKeys": "API Keys", - "workspace.nav.members": "สมาชิก", - "workspace.nav.billing": "การเรียกเก็บเงิน", - "workspace.nav.settings": "การตั้งค่า", - - "workspace.home.banner.beforeLink": "โมเดลที่เชื่อถือได้และปรับแต่งแล้วสำหรับเอเจนต์เขียนโค้ด", - "workspace.lite.banner.beforeLink": "โมเดลเขียนโค้ดต้นทุนต่ำสำหรับทุกคน", - "workspace.home.billing.loading": "กำลังโหลด...", - "workspace.home.billing.enable": "เปิดใช้งานการเรียกเก็บเงิน", - "workspace.home.billing.currentBalance": "ยอดคงเหลือปัจจุบัน", - - "workspace.newUser.feature.tested.title": "โมเดลที่ผ่านการทดสอบและตรวจสอบแล้ว", - "workspace.newUser.feature.tested.body": - "เราได้ทำเบนช์มาร์กและทดสอบโมเดลสำหรับเอเจนต์เขียนโค้ดโดยเฉพาะเพื่อให้มั่นใจถึงประสิทธิภาพที่ดีที่สุด", - "workspace.newUser.feature.quality.title": "คุณภาพสูงสุด", - "workspace.newUser.feature.quality.body": - "เข้าถึงโมเดลที่กำหนดค่าไว้เพื่อประสิทธิภาพสูงสุด - ไม่มีการลดเกรดหรือส่งงานไปยังผู้ให้บริการที่ราคาถูกกว่า", - "workspace.newUser.feature.lockin.title": "ไม่มีการผูกมัด (Lock-in)", - "workspace.newUser.feature.lockin.body": - "ใช้ Zen กับเอเจนต์เขียนโค้ดใดก็ได้ และกลับมาใช้ผู้ให้บริการรายอื่นด้วย OpenCode ได้ทุกเมื่อที่คุณต้องการ", - "workspace.newUser.copyApiKey": "คัดลอก API key", - "workspace.newUser.copyKey": "คัดลอก Key", - "workspace.newUser.copied": "คัดลอกแล้ว!", - "workspace.newUser.step.enableBilling": "เปิดใช้งานการเรียกเก็บเงิน", - "workspace.newUser.step.login.before": "รัน", - "workspace.newUser.step.login.after": "และเลือก OpenCode", - "workspace.newUser.step.pasteKey": "วาง API key ของคุณ", - "workspace.newUser.step.models.before": "เริ่ม OpenCode และรัน", - "workspace.newUser.step.models.after": "เพื่อเลือกโมเดล", - - "workspace.models.title": "โมเดล", - "workspace.models.subtitle.beforeLink": "จัดการว่าโมเดลใดที่สมาชิกใน Workspace สามารถเข้าถึงได้", - "workspace.models.table.model": "โมเดล", - "workspace.models.table.enabled": "เปิดใช้งาน", - - "workspace.providers.title": "Bring Your Own Key", - "workspace.providers.subtitle": "กำหนดค่า API keys ของคุณเองจากผู้ให้บริการ AI", - "workspace.providers.placeholder": "ป้อน {{provider}} API key ({{prefix}}...)", - "workspace.providers.configure": "กำหนดค่า", - "workspace.providers.edit": "แก้ไข", - "workspace.providers.delete": "ลบ", - "workspace.providers.saving": "กำลังบันทึก...", - "workspace.providers.save": "บันทึก", - "workspace.providers.table.provider": "ผู้ให้บริการ", - "workspace.providers.table.apiKey": "API Key", - - "workspace.usage.title": "ประวัติการใช้งาน", - "workspace.usage.subtitle": "การใช้งานและต้นทุน API ล่าสุด", - "workspace.usage.empty": "ทำการเรียก API ครั้งแรกเพื่อเริ่มต้น", - "workspace.usage.table.date": "วันที่", - "workspace.usage.table.model": "โมเดล", - "workspace.usage.table.input": "Input", - "workspace.usage.table.output": "Output", - "workspace.usage.table.cost": "ค่าใช้จ่าย", - "workspace.usage.table.session": "เซสชัน", - "workspace.usage.breakdown.input": "Input", - "workspace.usage.breakdown.cacheRead": "Cache Read", - "workspace.usage.breakdown.cacheWrite": "Cache Write", - "workspace.usage.breakdown.output": "Output", - "workspace.usage.breakdown.reasoning": "Reasoning", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "ค่าใช้จ่าย", - "workspace.cost.subtitle": "ต้นทุนการใช้งานแยกตามโมเดล", - "workspace.cost.allModels": "ทุกโมเดล", - "workspace.cost.allKeys": "ทุก Key", - "workspace.cost.deletedSuffix": "(ลบแล้ว)", - "workspace.cost.empty": "ไม่มีข้อมูลการใช้งานในช่วงเวลาที่เลือก", - "workspace.cost.subscriptionShort": "sub", - - "workspace.keys.title": "API Keys", - "workspace.keys.subtitle": "จัดการ API keys ของคุณสำหรับการเข้าถึงบริการ OpenCode", - "workspace.keys.create": "สร้าง API Key", - "workspace.keys.placeholder": "ป้อนชื่อ Key", - "workspace.keys.empty": "สร้าง OpenCode Gateway API key", - "workspace.keys.table.name": "ชื่อ", - "workspace.keys.table.key": "Key", - "workspace.keys.table.createdBy": "สร้างโดย", - "workspace.keys.table.lastUsed": "ใช้ล่าสุด", - "workspace.keys.copyApiKey": "คัดลอก API key", - "workspace.keys.delete": "ลบ", - - "workspace.members.title": "สมาชิก", - "workspace.members.subtitle": "จัดการสมาชิก Workspace และสิทธิ์ของพวกเขา", - "workspace.members.invite": "เชิญสมาชิก", - "workspace.members.inviting": "กำลังเชิญ...", - "workspace.members.beta.beforeLink": "Workspace ให้บริการฟรีสำหรับทีมในช่วงเบต้า", - "workspace.members.form.invitee": "ผู้ได้รับเชิญ", - "workspace.members.form.emailPlaceholder": "ใส่อีเมล", - "workspace.members.form.role": "บทบาท", - "workspace.members.form.monthlyLimit": "วงเงินการใช้จ่ายรายเดือน", - "workspace.members.noLimit": "ไม่มีขีดจำกัด", - "workspace.members.noLimitLowercase": "ไม่มีขีดจำกัด", - "workspace.members.invited": "เชิญแล้ว", - "workspace.members.edit": "แก้ไข", - "workspace.members.delete": "ลบ", - "workspace.members.saving": "กำลังบันทึก...", - "workspace.members.save": "บันทึก", - "workspace.members.table.email": "อีเมล", - "workspace.members.table.role": "บทบาท", - "workspace.members.table.monthLimit": "วงเงินเดือน", - "workspace.members.role.admin": "แอดมิน", - "workspace.members.role.adminDescription": "สามารถจัดการโมเดล สมาชิก และการเรียกเก็บเงินได้", - "workspace.members.role.member": "สมาชิก", - "workspace.members.role.memberDescription": "สามารถสร้าง API keys สำหรับตัวเองได้เท่านั้น", - - "workspace.settings.title": "การตั้งค่า", - "workspace.settings.subtitle": "อัปเดตชื่อ Workspace และการตั้งค่าของคุณ", - "workspace.settings.workspaceName": "ชื่อ Workspace", - "workspace.settings.defaultName": "ค่าเริ่มต้น", - "workspace.settings.updating": "กำลังอัปเดต...", - "workspace.settings.save": "บันทึก", - "workspace.settings.edit": "แก้ไข", - - "workspace.billing.title": "การเรียกเก็บเงิน", - "workspace.billing.subtitle.beforeLink": "จัดการวิธีการชำระเงิน", - "workspace.billing.contactUs": "ติดต่อเรา", - "workspace.billing.subtitle.afterLink": "หากคุณมีคำถามใดๆ", - "workspace.billing.currentBalance": "ยอดคงเหลือปัจจุบัน", - "workspace.billing.add": "เพิ่ม $", - "workspace.billing.enterAmount": "ใส่จำนวนเงิน", - "workspace.billing.loading": "กำลังโหลด...", - "workspace.billing.addAction": "เพิ่ม", - "workspace.billing.addBalance": "เพิ่มยอดคงเหลือ", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "เชื่อมโยงกับ Stripe", - "workspace.billing.manage": "จัดการ", - "workspace.billing.enable": "เปิดใช้งานการเรียกเก็บเงิน", - - "workspace.monthlyLimit.title": "วงเงินรายเดือน", - "workspace.monthlyLimit.subtitle": "ตั้งขีดจำกัดการใช้งานรายเดือนสำหรับบัญชีของคุณ", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "กำลังตั้งค่า...", - "workspace.monthlyLimit.set": "ตั้งค่า", - "workspace.monthlyLimit.edit": "แก้ไขขีดจำกัด", - "workspace.monthlyLimit.noLimit": "ไม่ได้ตั้งขีดจำกัดการใช้งาน", - "workspace.monthlyLimit.currentUsage.beforeMonth": "การใช้งานปัจจุบันสำหรับ", - "workspace.monthlyLimit.currentUsage.beforeAmount": "คือ $", - - "workspace.redeem.title": "แลกคูปอง", - "workspace.redeem.subtitle": "แลกรหัสคูปองเพื่อรับเครดิตหรือสิทธิพิเศษ", - "workspace.redeem.placeholder": "กรอกรหัสคูปอง", - "workspace.redeem.redeem": "แลก", - "workspace.redeem.redeeming": "กำลังแลก...", - "workspace.redeem.success": "แลกคูปองสำเร็จ", - - "workspace.reload.title": "โหลดซ้ำอัตโนมัติ", - "workspace.reload.disabled.before": "การโหลดซ้ำอัตโนมัติ", - "workspace.reload.disabled.state": "ปิดใช้งานอยู่", - "workspace.reload.disabled.after": "เปิดใช้งานเพื่อเติมเงินอัตโนมัติเมื่อยอดคงเหลือต่ำ", - "workspace.reload.enabled.before": "การโหลดซ้ำอัตโนมัติ", - "workspace.reload.enabled.state": "เปิดใช้งานอยู่", - "workspace.reload.enabled.middle": "เราจะเติมเงิน", - "workspace.reload.processingFee": "ค่าธรรมเนียมดำเนินการ", - "workspace.reload.enabled.after": "เมื่อยอดคงเหลือถึง", - "workspace.reload.edit": "แก้ไข", - "workspace.reload.enable": "เปิดใช้งาน", - "workspace.reload.enableAutoReload": "เปิดใช้งานการโหลดซ้ำอัตโนมัติ", - "workspace.reload.reloadAmount": "เติมเงิน $", - "workspace.reload.whenBalanceReaches": "เมื่อยอดถึง $", - "workspace.reload.saving": "กำลังบันทึก...", - "workspace.reload.save": "บันทึก", - "workspace.reload.failedAt": "เติมเงินล้มเหลวเมื่อ", - "workspace.reload.reason": "เหตุผล:", - "workspace.reload.updatePaymentMethod": "โปรดอัปเดตวิธีการชำระเงินของคุณแล้วลองอีกครั้ง", - "workspace.reload.retrying": "กำลังลองอีกครั้ง...", - "workspace.reload.retry": "ลองอีกครั้ง", - "workspace.reload.error.paymentFailed": "การชำระเงินล้มเหลว", - - "workspace.payments.title": "ประวัติการชำระเงิน", - "workspace.payments.subtitle": "รายการธุรกรรมการชำระเงินล่าสุด", - "workspace.payments.table.date": "วันที่", - "workspace.payments.table.paymentId": "Payment ID", - "workspace.payments.table.amount": "จำนวนเงิน", - "workspace.payments.table.receipt": "ใบเสร็จ", - "workspace.payments.type.credit": "credit", - "workspace.payments.type.subscription": "subscription", - "workspace.payments.view": "ดู", - - "workspace.black.loading": "กำลังโหลด...", - "workspace.black.time.day": "วัน", - "workspace.black.time.days": "วัน", - "workspace.black.time.hour": "ชั่วโมง", - "workspace.black.time.hours": "ชั่วโมง", - "workspace.black.time.minute": "นาที", - "workspace.black.time.minutes": "นาที", - "workspace.black.time.fewSeconds": "ไม่กี่วินาที", - "workspace.black.subscription.title": "การสมัครสมาชิก", - "workspace.black.subscription.message": "คุณสมัครสมาชิก OpenCode Black ในราคา ${{plan}} ต่อเดือน", - "workspace.black.subscription.manage": "จัดการการสมัครสมาชิก", - "workspace.black.subscription.rollingUsage": "การใช้งาน 5 ชั่วโมง", - "workspace.black.subscription.weeklyUsage": "การใช้งานรายสัปดาห์", - "workspace.black.subscription.resetsIn": "รีเซ็ตใน", - "workspace.black.subscription.useBalance": "ใช้ยอดเงินคงเหลือของคุณหลังจากถึงขีดจำกัดการใช้งานแล้ว", - "workspace.black.waitlist.title": "รายชื่อรอ", - "workspace.black.waitlist.joined": "คุณอยู่ในรายชื่อรอสำหรับแผน OpenCode Black ราคา ${{plan}} ต่อเดือน", - "workspace.black.waitlist.ready": "เราพร้อมที่จะลงทะเบียนให้คุณเข้าสู่แผน OpenCode Black ราคา ${{plan}} ต่อเดือนแล้ว", - "workspace.black.waitlist.leave": "ออกจากรายชื่อรอ", - "workspace.black.waitlist.leaving": "กำลังออกจาก...", - "workspace.black.waitlist.left": "ออกแล้ว", - "workspace.black.waitlist.enroll": "ลงทะเบียน", - "workspace.black.waitlist.enrolling": "กำลังลงทะเบียน...", - "workspace.black.waitlist.enrolled": "ลงทะเบียนแล้ว", - "workspace.black.waitlist.enrollNote": - "เมื่อคุณคลิกลงทะเบียน การสมัครสมาชิกของคุณจะเริ่มต้นทันทีและบัตรของคุณจะถูกเรียกเก็บเงิน", - - "workspace.lite.loading": "กำลังโหลด...", - "workspace.lite.time.day": "วัน", - "workspace.lite.time.days": "วัน", - "workspace.lite.time.hour": "ชั่วโมง", - "workspace.lite.time.hours": "ชั่วโมง", - "workspace.lite.time.minute": "นาที", - "workspace.lite.time.minutes": "นาที", - "workspace.lite.time.fewSeconds": "ไม่กี่วินาที", - "workspace.lite.subscription.message": "คุณได้สมัครสมาชิก OpenCode Go แล้ว", - "workspace.lite.subscription.manage": "จัดการการสมัครสมาชิก", - "workspace.lite.subscription.rollingUsage": "การใช้งานแบบหมุนเวียน", - "workspace.lite.subscription.weeklyUsage": "การใช้งานรายสัปดาห์", - "workspace.lite.subscription.monthlyUsage": "การใช้งานรายเดือน", - "workspace.lite.subscription.resetsIn": "รีเซ็ตใน", - "workspace.lite.subscription.useBalance": "ใช้ยอดคงเหลือของคุณหลังจากถึงขีดจำกัดการใช้งาน", - "workspace.lite.subscription.selectProvider": - 'เลือก "OpenCode Go" เป็นผู้ให้บริการในการตั้งค่า opencode ของคุณเพื่อใช้โมเดล Go', - "workspace.lite.providers.title": "ผู้ให้บริการ", - "workspace.lite.providers.description": "ควบคุมผู้ให้บริการที่ใช้สำหรับการกำหนดเส้นทาง", - "workspace.lite.providers.useChina": "เปิดใช้โมเดลที่โฮสต์ในจีน", - "workspace.lite.black.message": - "ขณะนี้คุณสมัครสมาชิก OpenCode Black หรืออยู่ในรายการรอ โปรดยกเลิกการสมัครก่อนหากต้องการเปลี่ยนไปใช้ Go", - "workspace.lite.other.message": - "สมาชิกคนอื่นใน Workspace นี้ได้สมัคร OpenCode Go แล้ว สามารถสมัครได้เพียงหนึ่งคนต่อหนึ่ง Workspace เท่านั้น", - "workspace.lite.promo.description": - "OpenCode Go เริ่มต้นที่ {{price}} จากนั้น $10/เดือน และมอบการเข้าถึงโมเดลการเขียนโค้ดแบบเปิดยอดนิยมอย่างเสถียรพร้อมขีดจำกัดการใช้งานที่ให้มาอย่างเหลือเฟือ", - "workspace.lite.promo.price": "$5 สำหรับเดือนแรก", - "workspace.lite.promo.modelsTitle": "สิ่งที่รวมอยู่ด้วย", - "workspace.lite.promo.footer": - "แผนนี้ออกแบบมาสำหรับผู้ใช้งานต่างประเทศเป็นหลัก โดยมีโมเดลโฮสต์อยู่ในสหรัฐอเมริกา สหภาพยุโรป และสิงคโปร์ เพื่อการเข้าถึงที่เสถียรทั่วโลก ราคาและขีดจำกัดการใช้งานอาจมีการเปลี่ยนแปลงตามที่เราได้เรียนรู้จากการใช้งานในช่วงแรกและข้อเสนอแนะ", - "workspace.lite.promo.subscribe": "สมัครสมาชิก Go", - "workspace.lite.promo.subscribing": "กำลังเปลี่ยนเส้นทาง...", - "workspace.lite.promo.otherMethods": "วิธีการชำระเงินอื่นๆ", - "workspace.lite.promo.selectMethod": "เลือกวิธีการชำระเงิน", - - "workspace.referral.copyLink": "คัดลอกลิงก์", - "workspace.referral.copied": "คัดลอกแล้ว", - "workspace.referral.overview.title": "ชวนเพื่อน", - "workspace.referral.overview.subtitle": "รับ $5 เมื่อเพื่อนสมัครสมาชิก เพื่อนก็จะได้รับ $5 เช่นกัน", - "workspace.referral.instructions.share": "แชร์ลิงก์แนะนำของคุณ", - "workspace.referral.instructions.subscribe": "เพื่อนของคุณเข้าร่วมและสมัครสมาชิก Go", - "workspace.referral.instructions.claim": "คุณทั้งคู่จะได้รับเครดิตการใช้งาน $5 เพื่อใช้กับขีดจำกัดการใช้งาน Go", - "workspace.referral.rewards.title": "รางวัลการแนะนำ", - "workspace.referral.rewards.description": "ใช้เครดิตการแนะนำที่มีอยู่กับการใช้งาน Go ของคุณ", - "workspace.referral.rewards.subtitle": "ใช้แล้ว {{applied}} / {{total}} รางวัล", - "workspace.referral.rewards.empty": "ยังไม่มีรางวัลการแนะนำ", - "workspace.referral.table.reward": "รางวัล", - "workspace.referral.table.referral": "คำอธิบาย", - "workspace.referral.table.date": "วันที่", - "workspace.referral.reward.description.inviter": "เชิญ {{email}}", - "workspace.referral.reward.description.invitee": "ได้รับเชิญจาก {{email}}", - "workspace.referral.reward.action.subscribeUnlock": "สมัครสมาชิกเพื่อปลดล็อก", - "workspace.referral.reward.action.view": "ดูรางวัล", - "workspace.referral.reward.action.applied": "ใช้รางวัลแล้ว", - "workspace.referral.reward.source.pendingInviter": "รอเพื่อนสมัครสมาชิก", - "workspace.referral.reward.source.pendingInvitee": "สมัครสมาชิกเพื่อปลดล็อกรางวัล", - "workspace.referral.reward.source.available": "รางวัลพร้อมใช้งาน", - "workspace.referral.reward.source.applied": "ใช้รางวัลแล้ว", - "workspace.referral.reward.status.applied": "ใช้รางวัลแล้ว", - "workspace.referral.reward.status.pendingInviter": "สมัครสมาชิกเพื่อปลดล็อก", - "workspace.referral.reward.status.pendingInvitee": "สมัครสมาชิกเพื่อปลดล็อก", - "workspace.referral.apply.noGo": "สมัครสมาชิกเพื่อปลดล็อก", - "workspace.referral.apply.preview": "ดูรางวัล", - "workspace.referral.apply.action": "ใช้", - "workspace.referral.apply.confirmTitle": "ใช้รางวัล", - "workspace.referral.apply.confirmBody": "ใช้ {{amount}} เพื่อลดการใช้งานปัจจุบันของ workspace นี้", - "workspace.referral.apply.confirmAction": "ใช้", - - "download.title": "OpenCode | ดาวน์โหลด", - "download.meta.description": "ดาวน์โหลด OpenCode สำหรับ macOS, Windows และ Linux", - "download.hero.title": "ดาวน์โหลด OpenCode", - "download.hero.subtitle": "พร้อมใช้งานในเวอร์ชันเบต้าสำหรับ macOS, Windows และ Linux", - "download.hero.button": "ดาวน์โหลดสำหรับ {{os}}", - "download.section.terminal": "OpenCode Terminal", - "download.section.desktop": "OpenCode Desktop (Beta)", - "download.section.extensions": "ส่วนขยาย OpenCode", - "download.section.integrations": "การเชื่อมต่อ OpenCode", - "download.action.download": "ดาวน์โหลด", - "download.action.install": "ติดตั้ง", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "ไม่จำเป็นเสมอไป แต่อาจจะต้องมี คุณจะต้องมีการสมัครสมาชิก AI หากต้องการเชื่อมต่อ OpenCode กับผู้ให้บริการที่มีค่าใช้จ่าย แม้ว่าคุณจะสามารถทำงานกับ", - "download.faq.a3.localLink": "โมเดล Local", - "download.faq.a3.afterLocal.beforeZen": "ได้ฟรี แม้ว่าเราจะแนะนำให้ผู้ใช้ใช้งาน", - "download.faq.a3.afterZen": ", OpenCode ก็ทำงานร่วมกับผู้ให้บริการยอดนิยมทั้งหมด เช่น OpenAI, Anthropic, xAI เป็นต้น", - - "download.faq.a5.p1": "OpenCode ใช้งานได้ฟรี 100%", - "download.faq.a5.p2.beforeZen": - "ค่าใช้จ่ายเพิ่มเติมใดๆ จะมาจากการสมัครสมาชิกของคุณกับผู้ให้บริการโมเดล แม้ว่า OpenCode จะทำงานร่วมกับผู้ให้บริการโมเดลใดก็ได้ แต่เราแนะนำให้ใช้", - "download.faq.a5.p2.afterZen": "", - - "download.faq.a6.p1": "ข้อมูลของคุณจะถูกจัดเก็บเฉพาะเมื่อคุณสร้างลิงก์ที่แชร์ได้ใน OpenCode เท่านั้น", - "download.faq.a6.p2.beforeShare": "เรียนรู้เพิ่มเติมเกี่ยวกับ", - "download.faq.a6.shareLink": "หน้าแชร์", - - "enterprise.title": "OpenCode | โซลูชันระดับองค์กรสำหรับองค์กรของคุณ", - "enterprise.meta.description": "ติดต่อ OpenCode สำหรับโซลูชันระดับองค์กร", - "enterprise.hero.title": "โค้ดของคุณเป็นของคุณ", - "enterprise.hero.body1": - "OpenCode ทำงานอย่างปลอดภัยภายในองค์กรของคุณ โดยไม่มีการจัดเก็บข้อมูลหรือบริบท และไม่มีข้อจำกัดด้านไลเซนส์หรือการอ้างสิทธิ์ความเป็นเจ้าของ เริ่มทดลองใช้งานกับทีมของคุณ แล้วนำไปใช้งานทั่วทั้งองค์กรโดยการผสานรวมกับ SSO และ AI gateway ภายในของคุณ", - "enterprise.hero.body2": "บอกเราว่าเราจะช่วยได้อย่างไร", - "enterprise.form.name.label": "ชื่อ-นามสกุล", - "enterprise.form.name.placeholder": "Jeff Bezos", - "enterprise.form.role.label": "ตำแหน่ง", - "enterprise.form.role.placeholder": "ประธานกรรมการบริหาร", - "enterprise.form.company.label": "บริษัท", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "อีเมลบริษัท", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "หมายเลขโทรศัพท์", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "คุณกำลังพยายามแก้ปัญหาอะไร?", - "enterprise.form.message.placeholder": "เราต้องการความช่วยเหลือเรื่อง...", - "enterprise.form.send": "ส่ง", - "enterprise.form.sending": "กำลังส่ง...", - "enterprise.form.success": "ส่งข้อความแล้ว เราจะติดต่อกลับเร็วๆ นี้", - "enterprise.form.success.submitted": "ส่งแบบฟอร์มสำเร็จแล้ว", - "enterprise.form.error.allFieldsRequired": "จำเป็นต้องกรอกทุกช่อง", - "enterprise.form.error.invalidEmailFormat": "รูปแบบอีเมลไม่ถูกต้อง", - "enterprise.form.error.internalServer": "เกิดข้อผิดพลาดภายในเซิร์ฟเวอร์", - "enterprise.faq.title": "คำถามที่พบบ่อย", - "enterprise.faq.q1": "OpenCode Enterprise คืออะไร?", - "enterprise.faq.a1": - "OpenCode Enterprise สำหรับองค์กรที่ต้องการให้มั่นใจว่าโค้ดและข้อมูลจะไม่ออกนอกโครงสร้างพื้นฐานของตน ทำได้โดยใช้การตั้งค่าแบบศูนย์กลางที่ผสานรวมกับ SSO และ AI gateway ภายในของคุณ", - "enterprise.faq.q2": "จะเริ่มต้นกับ OpenCode Enterprise ได้อย่างไร?", - "enterprise.faq.a2": - "เพียงเริ่มจากการทดลองใช้งานภายในกับทีมของคุณ โดยค่าเริ่มต้น OpenCode ไม่จัดเก็บโค้ดหรือข้อมูลบริบทของคุณ ทำให้เริ่มต้นได้ง่าย จากนั้นติดต่อเราเพื่อพูดคุยเรื่องราคาและตัวเลือกการติดตั้งใช้งาน", - "enterprise.faq.q3": "ราคาสำหรับองค์กรคิดอย่างไร?", - "enterprise.faq.a3": - "เราเสนอราคาแบบต่อที่นั่ง (per-seat) หากคุณมี LLM gateway ของคุณเอง เราจะไม่คิดค่าบริการตามโทเค็นที่ใช้ สำหรับรายละเอียดเพิ่มเติม โปรดติดต่อเราเพื่อขอใบเสนอราคาตามความต้องการขององค์กรของคุณ", - "enterprise.faq.q4": "ข้อมูลของฉันปลอดภัยกับ OpenCode Enterprise หรือไม่?", - "enterprise.faq.a4": - "ใช่ OpenCode ไม่จัดเก็บโค้ดหรือข้อมูลบริบทของคุณ การประมวลผลทั้งหมดเกิดขึ้นในเครื่องหรือผ่านการเรียก API โดยตรงไปยังผู้ให้บริการ AI ของคุณ ด้วยการตั้งค่าแบบศูนย์กลางและการผสานรวม SSO ข้อมูลของคุณจะยังคงปลอดภัยอยู่ภายในโครงสร้างพื้นฐานขององค์กร", - - "brand.title": "OpenCode | แบรนด์", - "brand.meta.description": "แนวทางการใช้แบรนด์ OpenCode", - "brand.heading": "แนวทางการใช้แบรนด์", - "brand.subtitle": "ทรัพยากรและแอสเซทเพื่อช่วยให้คุณใช้งานแบรนด์ OpenCode", - "brand.downloadAll": "ดาวน์โหลดแอสเซททั้งหมด", - - "changelog.title": "OpenCode | บันทึกการเปลี่ยนแปลง", - "changelog.meta.description": "บันทึกการออกรุ่นและบันทึกการเปลี่ยนแปลง OpenCode", - "changelog.hero.title": "บันทึกการเปลี่ยนแปลง", - "changelog.hero.subtitle": "การอัปเดตและการปรับปรุงใหม่ใน OpenCode", - "changelog.empty": "ไม่พบรายการบันทึกการเปลี่ยนแปลง", - "changelog.viewJson": "ดู JSON", - - "bench.list.title": "Benchmark", - "bench.list.heading": "Benchmarks", - "bench.list.table.agent": "เอเจนต์", - "bench.list.table.model": "โมเดล", - "bench.list.table.score": "คะแนน", - "bench.submission.error.allFieldsRequired": "จำเป็นต้องกรอกทุกช่อง", - - "bench.detail.title": "Benchmark - {{task}}", - "bench.detail.notFound": "ไม่พบงาน", - "bench.detail.na": "N/A", - "bench.detail.labels.agent": "เอเจนต์", - "bench.detail.labels.model": "โมเดล", - "bench.detail.labels.task": "งาน", - "bench.detail.labels.repo": "Repo", - "bench.detail.labels.from": "จาก", - "bench.detail.labels.to": "ถึง", - "bench.detail.labels.prompt": "Prompt", - "bench.detail.labels.commit": "Commit", - "bench.detail.labels.averageDuration": "ระยะเวลาเฉลี่ย", - "bench.detail.labels.averageScore": "คะแนนเฉลี่ย", - "bench.detail.labels.averageCost": "ค่าใช้จ่ายเฉลี่ย", - "bench.detail.labels.summary": "สรุป", - "bench.detail.labels.runs": "Runs", - "bench.detail.labels.score": "คะแนน", - "bench.detail.labels.base": "ฐาน", - "bench.detail.labels.penalty": "บทลงโทษ", - "bench.detail.labels.weight": "น้ำหนัก", - "bench.detail.table.run": "Run", - "bench.detail.table.score": "คะแนน (ฐาน - บทลงโทษ)", - "bench.detail.table.cost": "ค่าใช้จ่าย", - "bench.detail.table.duration": "ระยะเวลา", - "bench.detail.run.title": "Run {{n}}", - "bench.detail.rawJson": "Raw JSON", -} satisfies Dict diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts deleted file mode 100644 index 7bc45ee2e2..0000000000 --- a/packages/console/app/src/i18n/tr.ts +++ /dev/null @@ -1,832 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "Dokümantasyon", - "nav.changelog": "Değişiklik günlüğü", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "Kurumsal", - "nav.zen": "Zen", - "nav.login": "Giriş", - "nav.free": "İndir", - "nav.home": "Ana sayfa", - "nav.openMenu": "Menüyü aç", - "nav.getStartedFree": "Ücretsiz başla", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "Logoyu SVG olarak kopyala", - "nav.context.copyWordmark": "Wordmark'ı SVG olarak kopyala", - "nav.context.brandAssets": "Marka varlıkları", - - "footer.github": "GitHub", - "footer.docs": "Dokümantasyon", - "footer.changelog": "Değişiklik günlüğü", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "Marka", - "legal.privacy": "Gizlilik", - "legal.terms": "Koşullar", - - "email.title": "Yeni ürünler yayınladığımızda ilk siz haberdar olun", - "email.subtitle": "Erken erişim için bekleme listesine katılın.", - "email.placeholder": "E-posta adresi", - "email.subscribe": "Abone ol", - "email.success": "Neredeyse bitti, gelen kutunuzu kontrol edin ve e-postanızı onaylayın", - - "notFound.title": "Bulunamadı | opencode", - "notFound.heading": "404 - Sayfa bulunamadı", - "notFound.home": "Ana sayfa", - "notFound.docs": "Dokümantasyon", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "opencode açık logo", - "notFound.logoDarkAlt": "opencode koyu logo", - - "user.logout": "Çıkış", - - "auth.callback.error.codeMissing": "Yetkilendirme kodu bulunamadı.", - - "workspace.select": "Çalışma alanı seç", - "workspace.createNew": "+ Yeni çalışma alanı oluştur", - "workspace.modal.title": "Yeni çalışma alanı oluştur", - "workspace.modal.placeholder": "Çalışma alanı adını girin", - - "common.cancel": "İptal", - "common.creating": "Oluşturuluyor...", - "common.create": "Oluştur", - - "common.videoUnsupported": "Tarayıcınız video etiketini desteklemiyor.", - "common.figure": "Şekil {{n}}.", - "common.faq": "SSS", - "common.learnMore": "Daha fazla bilgi", - - "error.invalidPlan": "Geçersiz plan", - "error.workspaceRequired": "Çalışma alanı kimliği (ID) gerekli", - "error.alreadySubscribed": "Bu çalışma alanının zaten bir aboneliği var", - "error.limitRequired": "Limit gerekli.", - "error.monthlyLimitInvalid": "Geçerli bir aylık limit belirleyin.", - "error.workspaceNameRequired": "Çalışma alanı adı gerekli.", - "error.nameTooLong": "İsim 255 karakter veya daha az olmalıdır.", - "error.emailRequired": "E-posta gerekli", - "error.roleRequired": "Rol gerekli", - "error.idRequired": "Kimlik (ID) gerekli", - "error.nameRequired": "İsim gerekli", - "error.providerRequired": "Sağlayıcı gerekli", - "error.apiKeyRequired": "API anahtarı gerekli", - "error.modelRequired": "Model gerekli", - "error.reloadAmountMin": "Yükleme tutarı en az ${{amount}} olmalıdır", - "error.reloadTriggerMin": "Bakiye tetikleyicisi en az ${{amount}} olmalıdır", - - "app.meta.description": "OpenCode - Açık kaynaklı kodlama ajanı.", - - "home.title": "OpenCode | Açık kaynaklı yapay zeka kodlama ajanı", - - "temp.title": "opencode | Terminal için geliştirilmiş yapay zeka kodlama ajanı", - "temp.hero.title": "Terminal için geliştirilmiş yapay zeka kodlama ajanı", - "temp.zen": "opencode zen", - "temp.getStarted": "Başlayın", - "temp.feature.native.title": "Yerel (Native) TUI", - "temp.feature.native.body": "Duyarlı, yerel, temalandırılabilir bir terminal arayüzü", - "temp.feature.zen.beforeLink": "opencode tarafından sağlanan ", - "temp.feature.zen.link": "seçkin modeller listesi", - "temp.feature.zen.afterLink": "", - "temp.feature.models.beforeLink": "Yerel modeller dahil 75+ LLM sağlayıcısını ", - "temp.feature.models.afterLink": " üzerinden destekler", - "temp.screenshot.caption": "opencode TUI ve tokyonight teması", - "temp.screenshot.alt": "tokyonight temalı opencode TUI", - "temp.logoLightAlt": "opencode açık logo", - "temp.logoDarkAlt": "opencode koyu logo", - - "home.banner.badge": "Yeni", - "home.banner.text": "Masaüstü uygulaması beta olarak mevcut", - "home.banner.platforms": "macOS, Windows ve Linux'ta", - "home.banner.downloadNow": "Şimdi indir", - "home.banner.downloadBetaNow": "Masaüstü betayı şimdi indir", - - "home.hero.title": "Açık kaynaklı yapay zeka kodlama ajanı", - "home.hero.subtitle.a": "Ücretsiz modeller dahil veya herhangi bir sağlayıcıdan herhangi bir modeli bağlayın,", - "home.hero.subtitle.b": "Claude, GPT, Gemini ve daha fazlası dahil.", - - "home.install.ariaLabel": "Kurulum seçenekleri", - - "home.what.title": "OpenCode nedir?", - "home.what.body": - "OpenCode, terminalinizde, IDE'nizde veya masaüstünde kod yazmanıza yardım eden açık kaynaklı bir ajandır.", - "home.what.lsp.title": "LSP etkin", - "home.what.lsp.body": "LLM için doğru LSP'leri otomatik olarak yükler", - "home.what.multiSession.title": "Çoklu oturum", - "home.what.multiSession.body": "Aynı projede birden fazla ajanı paralel çalıştırın", - "home.what.shareLinks.title": "Paylaşım bağlantıları", - "home.what.shareLinks.body": "Referans veya hata ayıklama için herhangi bir oturumu bağlantı olarak paylaşın", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "Copilot hesabınızı kullanmak için GitHub ile giriş yapın", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "ChatGPT Plus veya Pro hesabınızı kullanmak için OpenAI ile giriş yapın", - "home.what.anyModel.title": "Herhangi bir model", - "home.what.anyModel.body": "Models.dev üzerinden 75+ LLM sağlayıcısı, yerel modeller dahil", - "home.what.anyEditor.title": "Herhangi bir editör", - "home.what.anyEditor.body": "Terminal arayüzü, masaüstü uygulaması ve IDE uzantısı olarak kullanılabilir", - "home.what.readDocs": "Dokümanları oku", - - "home.growth.title": "Açık kaynaklı yapay zeka kodlama ajanı", - "home.growth.body": - "GitHub'da {{stars}}+ yıldız, {{contributors}} katılımcı ve {{commits}}+ commit ile OpenCode, her ay {{monthlyUsers}}+ geliştirici tarafından kullanılıyor ve güveniliyor.", - "home.growth.githubStars": "GitHub Yıldızları", - "home.growth.contributors": "Katılımcılar", - "home.growth.monthlyDevs": "Aylık Geliştiriciler", - - "home.privacy.title": "Gizlilik öncelikli tasarlandı", - "home.privacy.body": - "OpenCode kodunuzu veya bağlam verilerinizi saklamaz; bu sayede gizliliğe duyarlı ortamlarda çalışabilir.", - "home.privacy.learnMore": "Hakkında daha fazla bilgi:", - "home.privacy.link": "gizlilik", - - "home.faq.q1": "OpenCode nedir?", - "home.faq.a1": - "OpenCode, herhangi bir AI modeliyle kod yazmanıza ve çalıştırmanıza yardım eden açık kaynaklı bir ajandır. Terminal arayüzü, masaüstü uygulaması veya IDE uzantısı olarak kullanılabilir.", - "home.faq.q2": "OpenCode'u nasıl kullanırım?", - "home.faq.a2.before": "Başlamanın en kolay yolu", - "home.faq.a2.link": "girişi okumaktır", - "home.faq.q3": "OpenCode için ek AI aboneliklerine ihtiyacım var mı?", - "home.faq.a3.p1": "Şart değil. OpenCode, hesap açmadan kullanabileceğiniz ücretsiz modellerle gelir.", - "home.faq.a3.p2.beforeZen": "Bunun dışında, popüler kodlama modellerini kullanmak için bir", - "home.faq.a3.p2.afterZen": " hesabı oluşturabilirsiniz.", - "home.faq.a3.p3": "Zen'i öneriyoruz, ancak OpenCode OpenAI, Anthropic, xAI gibi popüler sağlayıcılarla da çalışır.", - "home.faq.a3.p4.beforeLocal": "Hatta", - "home.faq.a3.p4.localLink": "yerel modellerinizi bağlayabilirsiniz", - "home.faq.q4": "Mevcut AI aboneliklerimi OpenCode ile kullanabilir miyim?", - "home.faq.a4.p1": - "Evet. OpenCode tüm büyük sağlayıcıların aboneliklerini destekler. Claude Pro/Max, ChatGPT Plus/Pro veya GitHub Copilot kullanabilirsiniz.", - "home.faq.q5": "OpenCode'u sadece terminalde mi kullanabilirim?", - "home.faq.a5.beforeDesktop": "Artık hayır! OpenCode artık sizin bu cihazlarınıza", - "home.faq.a5.desktop": "masaüstü", - "home.faq.a5.and": "ve", - "home.faq.a5.web": "web", - "home.faq.q6": "OpenCode ne kadar?", - "home.faq.a6": - "OpenCode %100 ücretsizdir. Ayrıca ücretsiz model setiyle gelir. Başka bir sağlayıcı bağlarsanız ek maliyetler olabilir.", - "home.faq.q7": "Veri ve gizlilik ne olacak?", - "home.faq.a7.p1": - "Verileriniz yalnızca ücretsiz modellerimizi kullandığınızda veya paylaşılabilir bağlantılar oluşturduğunuzda saklanır.", - "home.faq.a7.p2.beforeModels": "Daha fazla bilgi:", - "home.faq.a7.p2.modelsLink": "modellerimiz", - "home.faq.a7.p2.and": "ve", - "home.faq.a7.p2.shareLink": "paylaşım sayfaları", - "home.faq.q8": "OpenCode açık kaynak mı?", - "home.faq.a8.p1": "Evet, OpenCode tamamen açık kaynaktır. Kaynak kodu", - "home.faq.a8.p2": "'da", - "home.faq.a8.mitLicense": "MIT Lisansı", - "home.faq.a8.p3": - "altında herkese açıktır, yani herkes kullanabilir, değiştirebilir veya geliştirmeye katkıda bulunabilir. Topluluktan herkes issue açabilir, pull request gönderebilir ve işlevselliği genişletebilir.", - - "home.zenCta.title": "Kodlama ajanları için güvenilir, optimize modeller", - "home.zenCta.body": - "Zen, OpenCode'un kodlama ajanları için özel olarak test edip benchmark ettiği seçilmiş AI modellerine erişim sağlar. Sağlayıcılar arasında tutarsız performans ve kalite konusunda endişelenmeyin; çalışan, doğrulanmış modelleri kullanın.", - "home.zenCta.link": "Zen hakkında", - - "zen.title": "OpenCode Zen | Kodlama ajanları için güvenilir, optimize edilmiş modellerin seçilmiş seti", - "zen.hero.title": "Kodlama ajanları için güvenilir, optimize modeller", - "zen.hero.body": - "Zen, OpenCode'un kodlama ajanları için özel olarak test edip benchmark ettiği seçilmiş AI modellerine erişim sağlar. Sağlayıcılar arasında tutarsız performans ve kalite konusunda endişelenmeyin; çalışan, doğrulanmış modelleri kullanın.", - - "zen.faq.q1": "OpenCode Zen nedir?", - "zen.faq.a1": - "Zen, OpenCode ekibi tarafından oluşturulan ve kodlama ajanları için test edilip benchmark edilen seçilmiş bir AI model setidir.", - "zen.faq.q2": "Zen'i daha doğru yapan nedir?", - "zen.faq.a2": - "Zen yalnızca kodlama ajanları için özel olarak test edilip benchmark edilmiş modelleri sunar. Biftek kesmek için tereyağı bıçağı kullanmazsın; kodlama için kötü modeller kullanma.", - "zen.faq.q3": "Zen daha ucuz mu?", - "zen.faq.a3": - "Zen kâr amaçlı değildir. Zen, model sağlayıcılarının maliyetlerini size yansıtır. Zen'in kullanımı arttıkça OpenCode daha iyi fiyatlar pazarlayabilir ve bunları size yansıtabilir.", - "zen.faq.q4": "Zen ne kadar?", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "istek başı ücret alır", - "zen.faq.a4.p1.afterPricing": - "ve hiçbir markup eklemez, yani model sağlayıcının ücretlendirdiği tutarı aynen ödersiniz.", - "zen.faq.a4.p2.beforeAccount": "Toplam maliyetiniz kullanım miktarına bağlıdır ve aylık harcama limitlerini", - "zen.faq.a4.p2.accountLink": "hesabınızda ayarlayabilirsiniz", - "zen.faq.a4.p3": - "Maliyetleri karşılamak için OpenCode, $20 bakiye yüklemesi başına yalnızca $1.23 tutarında küçük bir ödeme işleme ücreti ekler.", - "zen.faq.q5": "Veri ve gizlilik ne olacak?", - "zen.faq.a5.beforeExceptions": - "Tüm Zen modelleri ABD'de barındırılır. Sağlayıcılar sıfır-retention politikasını uygular ve verilerinizi model eğitimi için kullanmaz; şu", - "zen.faq.a5.exceptionsLink": "istisnalarla", - "zen.faq.q6": "Harcama limitleri ayarlayabilir miyim?", - "zen.faq.a6": "Evet, hesabınızda aylık harcama limitleri ayarlayabilirsiniz.", - "zen.faq.q7": "İptal edebilir miyim?", - "zen.faq.a7": - "Evet, istediğiniz zaman faturalandırmayı devre dışı bırakabilir ve kalan bakiyenizi kullanabilirsiniz.", - "zen.faq.q8": "Zen'i diğer kodlama ajanlarıyla kullanabilir miyim?", - "zen.faq.a8": - "Zen OpenCode ile harika çalışır, ama Zen'i herhangi bir ajan ile kullanabilirsiniz. Tercih ettiğiniz kodlama ajanında kurulum talimatlarını izleyin.", - - "zen.cta.start": "Zen'i kullanmaya başlayın", - "zen.pricing.title": "20$ Kullandıkça öde bakiyesi ekle", - "zen.pricing.fee": "(+1,23$ kart işlem ücreti)", - "zen.pricing.body": - "Herhangi bir ajan ile kullanın. Aylık harcama limitlerini belirleyin. İstediğiniz zaman iptal edin.", - "zen.problem.title": "Zen hangi sorunu çözüyor?", - "zen.problem.body": - "Pek çok model mevcut ancak yalnızca birkaçı kodlama ajanlarıyla iyi çalışıyor. Çoğu sağlayıcı, bunları değişen sonuçlarla farklı şekilde yapılandırır.", - "zen.problem.subtitle": "Bu sorunu yalnızca OpenCode kullanıcıları için değil, herkes için düzeltiyoruz.", - "zen.problem.item1": "Seçilen modelleri test etme ve ekiplerine danışmanlık yapma", - "zen.problem.item2": "Düzgün bir şekilde teslim edildiklerinden emin olmak için sağlayıcılarla çalışmak", - "zen.problem.item3": "Önerdiğimiz tüm model-sağlayıcı kombinasyonlarının karşılaştırılması", - "zen.how.title": "Zen nasıl çalışır?", - "zen.how.body": "Zen'i OpenCode ile kullanmanızı önersek de, Zen'i herhangi bir ajan ile kullanabilirsiniz.", - "zen.how.step1.title": "Kaydolun ve 20$ bakiye ekleyin", - "zen.how.step1.beforeLink": "takip edin", - "zen.how.step1.link": "kurulum talimatları", - "zen.how.step2.title": "Şeffaf fiyatlandırmayla Zen kullanın", - "zen.how.step2.link": "istek başına ödeme", - "zen.how.step2.afterLink": "sıfır işaretlemeyle", - "zen.how.step3.title": "Otomatik yükleme", - "zen.how.step3.body": "bakiyeniz 5$'a ulaştığında otomatik olarak 20$ ekleyeceğiz", - "zen.privacy.title": "Gizliliğiniz bizim için önemlidir", - "zen.privacy.beforeExceptions": - "Tüm Zen modelleri ABD'de barındırılmaktadır. Sağlayıcılar sıfır saklama politikası izler ve verilerinizi model eğitimi için kullanmaz; şu", - "zen.privacy.exceptionsLink": "aşağıdaki istisnalar", - - "go.title": "OpenCode Go | Herkes için düşük maliyetli kodlama modelleri", - "go.meta.description": - "Go ilk ay $5, sonrasında ayda 10$ fiyatıyla başlar; GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro ve DeepSeek V4 Flash için cömert 5 saatlik istek limitleri sunar.", - "go.hero.title": "Herkes için düşük maliyetli kodlama modelleri", - "go.hero.body": - "Go, dünya çapındaki programcılara ajan tabanlı kodlama getiriyor. En yetenekli açık kaynaklı modellere cömert limitler ve güvenilir erişim sunarak, maliyet veya erişilebilirlik konusunda endişelenmeden güçlü ajanlarla geliştirme yapmanızı sağlar.", - - "go.cta.start": "Go'ya abone ol", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "Go'ya abone ol", - "go.cta.price": "Ayda 10$", - "go.cta.promo": "İlk ay $5", - "go.pricing.body": - "Herhangi bir ajanla kullanın. İlk ay $5, sonrasında ayda 10$. Gerekirse kredi yükleyin. İstediğiniz zaman iptal edin.", - "go.graph.free": "Ücretsiz", - "go.graph.freePill": "Big Pickle ve ücretsiz modeller", - "go.graph.go": "Go", - "go.graph.label": "5 saat başına istekler", - "go.graph.usageLimits": "Kullanım limitleri", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "5 saatlik istekler: {{free}} vs {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "Eski CEO, Terminal Ürünleri", - "go.testimonials.dax.quoteAfter": "hayat değiştirdi, gerçekten düşünmeye bile gerek yok.", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "Eski Kurucu, SEED, PM, Melt, Pop, Dapt, Cadmus ve ViewPoint", - "go.testimonials.jay.quoteBefore": "Ekibimizdeki 5 kişiden 4'ü", - "go.testimonials.jay.quoteAfter": "kullanmayı seviyor.", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "Eski Hero, AWS", - "go.testimonials.adam.quoteBefore": "", - "go.testimonials.adam.quoteAfter": "için tavsiyem sonsuz. Cidden, gerçekten çok iyi.", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "Eski Tasarım Başkanı, Laravel", - "go.testimonials.david.quoteBefore": "", - "go.testimonials.david.quoteAfter": - " ile modellerin test edildiğini ve kodlama ajanları için mükemmel olduğunu biliyorum.", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "Eski Stajyer, Nvidia (4 kez)", - "go.testimonials.frank.quote": "Keşke hala Nvidia'da olsaydım.", - "go.problem.title": "Go hangi sorunu çözüyor?", - "go.problem.body": - "OpenCode deneyimini mümkün olduğunca çok kişiye ulaştırmaya odaklandık. OpenCode Go düşük maliyetli bir aboneliktir: İlk ay $5, sonrasında ayda 10$. Cömert limitler ve en yetenekli açık kaynak modellere güvenilir erişim sağlar.", - "go.problem.subtitle": " ", - "go.problem.item1": "Düşük maliyetli abonelik fiyatlandırması", - "go.problem.item2": "Cömert limitler ve güvenilir erişim", - "go.problem.item3": "Mümkün olduğunca çok programcı için geliştirildi", - "go.problem.item4": - "GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro ve DeepSeek V4 Flash içerir", - "go.how.title": "Go nasıl çalışır?", - "go.how.body": - "Go ilk ay $5, sonrasında ayda 10$ fiyatıyla başlar. OpenCode veya herhangi bir ajanla kullanabilirsiniz.", - "go.how.step1.title": "Bir hesap oluşturun", - "go.how.step1.beforeLink": "takip edin", - "go.how.step1.link": "kurulum talimatları", - "go.how.step2.title": "Go'ya abone olun", - "go.how.step2.link": "İlk ay $5", - "go.how.step2.afterLink": "sonrasında cömert limitlerle ayda 10$", - "go.how.step3.title": "Kodlamaya başlayın", - "go.how.step3.body": "açık kaynaklı modellere güvenilir erişimle", - "go.privacy.title": "Gizliliğiniz bizim için önemlidir", - "go.privacy.body": - "Bu plan öncelikle uluslararası kullanıcılar için tasarlanmış olup, istikrarlı küresel erişim için modeller ABD, AB ve Singapur'da barındırılmaktadır.", - "go.privacy.contactAfter": "herhangi bir sorunuz varsa.", - "go.privacy.beforeExceptions": - "Go modelleri ABD'de barındırılmaktadır. Sağlayıcılar sıfır saklama politikası izler ve verilerinizi model eğitimi için kullanmaz; şu", - "go.privacy.exceptionsLink": "aşağıdaki istisnalar", - "go.faq.q1": "OpenCode Go nedir?", - "go.faq.a1": - "Go, ajan tabanlı kodlama için yetenekli açık kaynaklı modellere güvenilir erişim sağlayan düşük maliyetli bir aboneliktir.", - "go.faq.q2": "Go hangi modelleri içerir?", - "go.faq.a2": "Go, aşağıda listelenen modelleri cömert limitler ve güvenilir erişimle sunar.", - "go.faq.q3": "Go, Zen ile aynı mı?", - "go.faq.a3": - "Hayır. Zen kullandıkça öde modelidir, Go ise ilk ay $5, sonrasında ayda 10$ fiyatıyla başlar; GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro ve DeepSeek V4 Flash açık kaynak modellerine cömert limitler ve güvenilir erişim sunar.", - "go.faq.q4": "Go ne kadar?", - "go.faq.a4.p1.beforePricing": "Go'nun maliyeti", - "go.faq.a4.p1.pricingLink": "İlk ay $5", - "go.faq.a4.p1.afterPricing": "sonrasında cömert limitlerle ayda 10$.", - "go.faq.a4.p2.beforeAccount": "Aboneliğinizi", - "go.faq.a4.p2.accountLink": "hesabınızdan", - "go.faq.a4.p3": "yönetebilirsiniz. İstediğiniz zaman iptal edin.", - "go.faq.q5": "Veri ve gizlilik ne olacak?", - "go.faq.a5.body": - "Bu plan öncelikle uluslararası kullanıcılar için tasarlanmış olup, istikrarlı küresel erişim için modeller ABD, AB ve Singapur'da barındırılmaktadır. Sağlayıcılarımız sıfır saklama politikası izler ve verilerinizi model eğitimi için kullanmaz.", - "go.faq.a5.beforeExceptions": - "Go modelleri ABD'de barındırılmaktadır. Sağlayıcılar sıfır saklama politikası izler ve verilerinizi model eğitimi için kullanmaz; şu", - "go.faq.a5.exceptionsLink": "aşağıdaki istisnalar", - "go.faq.q6": "Kredi yükleyebilir miyim?", - "go.faq.a6": "Daha fazla kullanıma ihtiyacınız varsa, hesabınıza kredi yükleyebilirsiniz.", - "go.faq.q7": "İptal edebilir miyim?", - "go.faq.a7": "Evet, istediğiniz zaman iptal edebilirsiniz.", - "go.faq.q8": "Go'yu diğer kodlama ajanlarıyla kullanabilir miyim?", - "go.faq.a8": - "Evet, Go'yu herhangi bir ajanla kullanabilirsiniz. Tercih ettiğiniz kodlama ajanındaki kurulum talimatlarını izleyin.", - - "go.faq.q9": "Ücretsiz modeller ve Go arasındaki fark nedir?", - "go.faq.a9": - "Ücretsiz modeller, günlük 200 istek kotası ile Big Pickle ve o sırada mevcut olan promosyonel modelleri içerir. Go ise GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro ve DeepSeek V4 Flash modellerini; yuvarlanan pencereler (5 saatlik, haftalık ve aylık) üzerinden uygulanan daha yüksek istek kotalarıyla içerir. Bu kotalar kabaca her 5 saatte 12$, haftada 30$ ve ayda 60$ değerine eşdeğerdir (gerçek istek sayıları modele ve kullanıma göre değişir).", - - "zen.api.error.rateLimitExceeded": "İstek limiti aşıldı. Lütfen daha sonra tekrar deneyin.", - "zen.api.error.modelNotSupported": "{{model}} modeli desteklenmiyor", - "zen.api.error.modelFormatNotSupported": "{{model}} modeli {{format}} formatı için desteklenmiyor", - "zen.api.error.noProviderAvailable": "Kullanılabilir sağlayıcı yok", - "zen.api.error.providerNotSupported": "{{provider}} sağlayıcısı desteklenmiyor", - "zen.api.error.missingApiKey": "API anahtarı eksik.", - "zen.api.error.invalidApiKey": "Geçersiz API anahtarı.", - "zen.api.error.subscriptionQuotaExceeded": "Abonelik kotası aşıldı. {{retryIn}} içinde tekrar deneyin.", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "5 saatlik kullanım limitine ulaşıldı. {{retryIn}} içinde sıfırlanır. Bu modeli şimdi kullanmaya devam etmek için kullanılabilir bakiyenizden kullanımı etkinleştirin: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "Haftalık kullanım limitine ulaşıldı. {{retryIn}} içinde sıfırlanır. Bu modeli şimdi kullanmaya devam etmek için kullanılabilir bakiyenizden kullanımı etkinleştirin: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "Aylık kullanım limitine ulaşıldı. {{retryIn}} içinde sıfırlanır. Bu modeli şimdi kullanmaya devam etmek için kullanılabilir bakiyenizden kullanımı etkinleştirin: {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "Ödeme yöntemi bulunamadı. Buradan bir ödeme yöntemi ekleyin: {{billingUrl}}", - "zen.api.error.insufficientBalance": "Yetersiz bakiye. Faturalandırmanızı buradan yönetin: {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "Çalışma alanınız aylık ${{amount}} harcama limitine ulaştı. Limitlerinizi buradan yönetin: {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "Aylık ${{amount}} harcama limitinize ulaştınız. Limitlerinizi buradan yönetin: {{membersUrl}}", - "zen.api.error.modelDisabled": "Model devre dışı", - "zen.api.error.regionNotAllowed": - "Bu model Çin'de barındırılıyor. Bu modeli kullanmak istiyorsanız ayarlarınızdan etkinleştirin: {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "{{model}} için ücretsiz promosyon sona erdi. OpenCode Go'ya abone olarak modeli kullanmaya devam edebilirsiniz - {{link}}", - - "black.meta.title": "OpenCode Black | Dünyanın en iyi kodlama modellerine erişin", - "black.meta.description": "OpenCode Black abonelik planlarıyla Claude, GPT, Gemini ve daha fazlasına erişin.", - "black.hero.title": "Dünyanın en iyi kodlama modellerine erişin", - "black.hero.subtitle": "Claude, GPT, Gemini ve daha fazlası dahil", - "black.title": "OpenCode Black | Fiyatlandırma", - "black.paused": "Black plan kaydı geçici olarak duraklatıldı.", - "black.plan.icon20": "Black 20 planı", - "black.plan.icon100": "Black 100 planı", - "black.plan.icon200": "Black 200 planı", - "black.plan.multiplier100": "Black 20'den 5 kat daha fazla kullanım", - "black.plan.multiplier200": "Black 20'den 20 kat daha fazla kullanım", - "black.price.perMonth": "aylık", - "black.price.perPersonBilledMonthly": "kişi başı aylık faturalandırılır", - "black.terms.1": "Aboneliğiniz hemen başlamayacak", - "black.terms.2": "Bekleme listesine ekleneceksiniz ve yakında aktive edileceksiniz", - "black.terms.3": "Kartınızdan sadece aboneliğiniz aktive edildiğinde ödeme alınacaktır", - "black.terms.4": "Kullanım limitleri geçerlidir, yoğun otomatik kullanım limitlere daha erken ulaşabilir", - "black.terms.5": "Abonelikler bireyler içindir, ekipler için Enterprise ile iletişime geçin", - "black.terms.6": "Limitler ayarlanabilir ve planlar gelecekte sonlandırılabilir", - "black.terms.7": "Aboneliğinizi istediğiniz zaman iptal edin", - "black.action.continue": "Devam et", - "black.finePrint.beforeTerms": "Gösterilen fiyatlara geçerli vergiler dahil değildir", - "black.finePrint.terms": "Hizmet Şartları", - "black.workspace.title": "OpenCode Black | Çalışma Alanı Seç", - "black.workspace.selectPlan": "Bu plan için bir çalışma alanı seçin", - "black.workspace.name": "Çalışma Alanı {{n}}", - "black.subscribe.title": "OpenCode Black'e Abone Ol", - "black.subscribe.paymentMethod": "Ödeme yöntemi", - "black.subscribe.loadingPaymentForm": "Ödeme formu yükleniyor...", - "black.subscribe.selectWorkspaceToContinue": "Devam etmek için bir çalışma alanı seçin", - "black.subscribe.failurePrefix": "Olamaz!", - "black.subscribe.error.generic": "Bir hata oluştu", - "black.subscribe.error.invalidPlan": "Geçersiz plan", - "black.subscribe.error.workspaceRequired": "Çalışma alanı ID'si gerekli", - "black.subscribe.error.alreadySubscribed": "Bu çalışma alanının zaten bir aboneliği var", - "black.subscribe.processing": "İşleniyor...", - "black.subscribe.submit": "${{plan}} Abone Ol", - "black.subscribe.form.chargeNotice": "Sadece aboneliğiniz aktive edildiğinde ücretlendirileceksiniz", - "black.subscribe.success.title": "OpenCode Black bekleme listesindesiniz", - "black.subscribe.success.subscriptionPlan": "Abonelik planı", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "Tutar", - "black.subscribe.success.amountValue": "Aylık ${{plan}}", - "black.subscribe.success.paymentMethod": "Ödeme yöntemi", - "black.subscribe.success.dateJoined": "Katılma tarihi", - "black.subscribe.success.chargeNotice": "Aboneliğiniz aktive edildiğinde kartınızdan ödeme alınacaktır", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "Kullanım", - "workspace.nav.apiKeys": "API Anahtarları", - "workspace.nav.members": "Üyeler", - "workspace.nav.billing": "Faturalandırma", - "workspace.nav.settings": "Ayarlar", - - "workspace.home.banner.beforeLink": "Kodlama ajanları için güvenilir optimize edilmiş modeller.", - "workspace.lite.banner.beforeLink": "Herkes için düşük maliyetli kodlama modelleri.", - "workspace.home.billing.loading": "Yükleniyor...", - "workspace.home.billing.enable": "Faturalandırmayı etkinleştir", - "workspace.home.billing.currentBalance": "Mevcut bakiye", - - "workspace.newUser.feature.tested.title": "Test Edilmiş ve Doğrulanmış Modeller", - "workspace.newUser.feature.tested.body": - "En iyi performansı sağlamak için modelleri özellikle kodlama ajanlarına yönelik olarak karşılaştırdık ve test ettik.", - "workspace.newUser.feature.quality.title": "En Yüksek Kalite", - "workspace.newUser.feature.quality.body": - "Optimum performans için yapılandırılmış modellere erişin; sürüm düşürme veya daha ucuz sağlayıcılara yönlendirme yok.", - "workspace.newUser.feature.lockin.title": "Kilitlenme Yok", - "workspace.newUser.feature.lockin.body": - "Zen'i herhangi bir kodlama ajanıyla kullanın ve istediğiniz zaman opencode ile diğer sağlayıcıları kullanmaya devam edin.", - "workspace.newUser.copyApiKey": "API anahtarını kopyala", - "workspace.newUser.copyKey": "Anahtarı Kopyala", - "workspace.newUser.copied": "Kopyalandı!", - "workspace.newUser.step.enableBilling": "Faturalandırmayı etkinleştir", - "workspace.newUser.step.login.before": "Çalıştır", - "workspace.newUser.step.login.after": "ve opencode seçeneğini seçin", - "workspace.newUser.step.pasteKey": "API anahtarınızı yapıştırın", - "workspace.newUser.step.models.before": "opencode'u başlatın ve çalıştırın", - "workspace.newUser.step.models.after": "bir model seçmek için", - - "workspace.models.title": "Modeller", - "workspace.models.subtitle.beforeLink": "Çalışma alanı üyelerinin hangi modellere erişebileceğini yönetin.", - "workspace.models.table.model": "Model", - "workspace.models.table.enabled": "Etkin", - - "workspace.providers.title": "Kendi Anahtarınızı Getirin", - "workspace.providers.subtitle": "Yapay zeka sağlayıcılarından kendi API anahtarlarınızı yapılandırın.", - "workspace.providers.placeholder": "{{provider}} API anahtarını girin ({{prefix}}...)", - "workspace.providers.configure": "Yapılandır", - "workspace.providers.edit": "Düzenle", - "workspace.providers.delete": "Sil", - "workspace.providers.saving": "Kaydediliyor...", - "workspace.providers.save": "Kaydet", - "workspace.providers.table.provider": "Sağlayıcı", - "workspace.providers.table.apiKey": "API Anahtarı", - - "workspace.usage.title": "Kullanım Geçmişi", - "workspace.usage.subtitle": "Son API kullanımı ve maliyetleri.", - "workspace.usage.empty": "Başlamak için ilk API çağrınızı yapın.", - "workspace.usage.table.date": "Tarih", - "workspace.usage.table.model": "Model", - "workspace.usage.table.input": "Giriş", - "workspace.usage.table.output": "Çıkış", - "workspace.usage.table.cost": "Maliyet", - "workspace.usage.table.session": "Oturum", - "workspace.usage.breakdown.input": "Giriş", - "workspace.usage.breakdown.cacheRead": "Önbellek Okuması", - "workspace.usage.breakdown.cacheWrite": "Önbellek Yazma", - "workspace.usage.breakdown.output": "Çıkış", - "workspace.usage.breakdown.reasoning": "Muhakeme", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "Maliyet", - "workspace.cost.subtitle": "Modele göre ayrılmış kullanım maliyetleri.", - "workspace.cost.allModels": "Tüm Modeller", - "workspace.cost.allKeys": "Tüm Anahtarlar", - "workspace.cost.deletedSuffix": "(silindi)", - "workspace.cost.empty": "Seçilen döneme ait kullanım verisi yok.", - "workspace.cost.subscriptionShort": "abonelik", - - "workspace.keys.title": "API Anahtarları", - "workspace.keys.subtitle": "opencode hizmetlerine erişim için API anahtarlarınızı yönetin.", - "workspace.keys.create": "API Anahtarı Oluştur", - "workspace.keys.placeholder": "Anahtar adını girin", - "workspace.keys.empty": "Bir opencode Gateway API anahtarı oluşturun", - "workspace.keys.table.name": "İsim", - "workspace.keys.table.key": "Anahtar", - "workspace.keys.table.createdBy": "Oluşturan", - "workspace.keys.table.lastUsed": "Son Kullanılan", - "workspace.keys.copyApiKey": "API anahtarını kopyala", - "workspace.keys.delete": "Sil", - - "workspace.members.title": "Üyeler", - "workspace.members.subtitle": "Çalışma alanı üyelerini ve izinlerini yönetin.", - "workspace.members.invite": "Üyeyi Davet Et", - "workspace.members.inviting": "Davet ediliyor...", - "workspace.members.beta.beforeLink": "Beta süresince çalışma alanları ekipler için ücretsizdir.", - "workspace.members.form.invitee": "Davetli", - "workspace.members.form.emailPlaceholder": "E-posta girin", - "workspace.members.form.role": "Rol", - "workspace.members.form.monthlyLimit": "Aylık harcama limiti", - "workspace.members.noLimit": "Limit yok", - "workspace.members.noLimitLowercase": "limit yok", - "workspace.members.invited": "davet edildi", - "workspace.members.edit": "Düzenle", - "workspace.members.delete": "Sil", - "workspace.members.saving": "Kaydediliyor...", - "workspace.members.save": "Kaydet", - "workspace.members.table.email": "E-posta", - "workspace.members.table.role": "Rol", - "workspace.members.table.monthLimit": "Ay limiti", - "workspace.members.role.admin": "Yönetici", - "workspace.members.role.adminDescription": "Modelleri, üyeleri ve faturalamayı yönetebilir", - "workspace.members.role.member": "Üye", - "workspace.members.role.memberDescription": "Yalnızca kendileri için API anahtarları oluşturabilirler", - - "workspace.settings.title": "Ayarlar", - "workspace.settings.subtitle": "Çalışma alanı adınızı ve tercihlerinizi güncelleyin.", - "workspace.settings.workspaceName": "Çalışma alanı adı", - "workspace.settings.defaultName": "Varsayılan", - "workspace.settings.updating": "Güncelleniyor...", - "workspace.settings.save": "Kaydet", - "workspace.settings.edit": "Düzenle", - - "workspace.billing.title": "Faturalandırma", - "workspace.billing.subtitle.beforeLink": "Ödeme yöntemlerini yönetin.", - "workspace.billing.contactUs": "Bize Ulaşın", - "workspace.billing.subtitle.afterLink": "herhangi bir sorunuz varsa.", - "workspace.billing.currentBalance": "Güncel Bakiye", - "workspace.billing.add": "$ ekle", - "workspace.billing.enterAmount": "Tutarı girin", - "workspace.billing.loading": "Yükleniyor...", - "workspace.billing.addAction": "Ekle", - "workspace.billing.addBalance": "Bakiye Ekle", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "Stripe'a bağlı", - "workspace.billing.manage": "Yönet", - "workspace.billing.enable": "Faturalandırmayı Etkinleştir", - - "workspace.monthlyLimit.title": "Aylık Limit", - "workspace.monthlyLimit.subtitle": "Hesabınız için aylık kullanım limiti belirleyin.", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "Ayarlanıyor...", - "workspace.monthlyLimit.set": "Ayarla", - "workspace.monthlyLimit.edit": "Limiti Düzenle", - "workspace.monthlyLimit.noLimit": "Kullanım limiti belirlenmedi.", - "workspace.monthlyLimit.currentUsage.beforeMonth": "Şu anki kullanım", - "workspace.monthlyLimit.currentUsage.beforeAmount": "$", - - "workspace.redeem.title": "Kupon Kullan", - "workspace.redeem.subtitle": "Kredi veya avantajlardan yararlanmak için bir kupon kodu kullanın.", - "workspace.redeem.placeholder": "Kupon kodunu girin", - "workspace.redeem.redeem": "Kullan", - "workspace.redeem.redeeming": "Kullanılıyor...", - "workspace.redeem.success": "Kupon başarıyla kullanıldı.", - - "workspace.reload.title": "Otomatik Yeniden Yükleme", - "workspace.reload.disabled.before": "Otomatik yeniden yükleme:", - "workspace.reload.disabled.state": "devre dışı", - "workspace.reload.disabled.after": "Bakiye azaldığında otomatik olarak yeniden yüklemeyi etkinleştirin.", - "workspace.reload.enabled.before": "Otomatik yeniden yükleme:", - "workspace.reload.enabled.state": "etkin", - "workspace.reload.enabled.middle": "Yeniden yükleyeceğiz", - "workspace.reload.processingFee": "işlem ücreti", - "workspace.reload.enabled.after": "dengeye ulaşıldığında", - "workspace.reload.edit": "Düzenle", - "workspace.reload.enable": "Etkinleştir", - "workspace.reload.enableAutoReload": "Otomatik Yeniden Yüklemeyi Etkinleştir", - "workspace.reload.reloadAmount": "Yükle $", - "workspace.reload.whenBalanceReaches": "Bakiye $ seviyesine ulaştığında", - "workspace.reload.saving": "Kaydediliyor...", - "workspace.reload.save": "Kaydet", - "workspace.reload.failedAt": "Yeniden yükleme başarısız oldu:", - "workspace.reload.reason": "Sebep:", - "workspace.reload.updatePaymentMethod": "Lütfen ödeme yönteminizi güncelleyin ve tekrar deneyin.", - "workspace.reload.retrying": "Yeniden deneniyor...", - "workspace.reload.retry": "Yeniden dene", - "workspace.reload.error.paymentFailed": "Ödeme başarısız.", - - "workspace.payments.title": "Ödeme Geçmişi", - "workspace.payments.subtitle": "Son ödeme işlemleri.", - "workspace.payments.table.date": "Tarih", - "workspace.payments.table.paymentId": "Ödeme Kimliği", - "workspace.payments.table.amount": "Tutar", - "workspace.payments.table.receipt": "Makbuz", - "workspace.payments.type.credit": "kredi", - "workspace.payments.type.subscription": "abonelik", - "workspace.payments.view": "Görüntüle", - - "workspace.black.loading": "Yükleniyor...", - "workspace.black.time.day": "gün", - "workspace.black.time.days": "gün", - "workspace.black.time.hour": "saat", - "workspace.black.time.hours": "saat", - "workspace.black.time.minute": "dakika", - "workspace.black.time.minutes": "dakika", - "workspace.black.time.fewSeconds": "birkaç saniye", - "workspace.black.subscription.title": "Abonelik", - "workspace.black.subscription.message": "Aylık ${{plan}} karşılığında OpenCode Black'e abonesiniz.", - "workspace.black.subscription.manage": "Aboneliği Yönet", - "workspace.black.subscription.rollingUsage": "5 Saatlik Kullanım", - "workspace.black.subscription.weeklyUsage": "Haftalık Kullanım", - "workspace.black.subscription.resetsIn": "Sıfırlama süresi", - "workspace.black.subscription.useBalance": "Kullanım limitlerine ulaştıktan sonra mevcut bakiyenizi kullanın", - "workspace.black.waitlist.title": "Bekleme listesi", - "workspace.black.waitlist.joined": "Aylık ${{plan}} OpenCode Black planı için bekleme listesindesiniz.", - "workspace.black.waitlist.ready": "Sizi ayda {{plan}} $ tutarındaki OpenCode Black planına kaydetmeye hazırız.", - "workspace.black.waitlist.leave": "Bekleme Listesinden Ayrıl", - "workspace.black.waitlist.leaving": "Ayrılıyor...", - "workspace.black.waitlist.left": "Ayrıldı", - "workspace.black.waitlist.enroll": "Kayıt ol", - "workspace.black.waitlist.enrolling": "Kaydediliyor...", - "workspace.black.waitlist.enrolled": "Kayıtlı", - "workspace.black.waitlist.enrollNote": - "Kayıt Ol'a tıkladığınızda aboneliğiniz hemen başlar ve kartınızdan çekim yapılır.", - - "workspace.lite.loading": "Yükleniyor...", - "workspace.lite.time.day": "gün", - "workspace.lite.time.days": "gün", - "workspace.lite.time.hour": "saat", - "workspace.lite.time.hours": "saat", - "workspace.lite.time.minute": "dakika", - "workspace.lite.time.minutes": "dakika", - "workspace.lite.time.fewSeconds": "birkaç saniye", - "workspace.lite.subscription.message": "OpenCode Go abonesisiniz.", - "workspace.lite.subscription.manage": "Aboneliği Yönet", - "workspace.lite.subscription.rollingUsage": "Devam Eden Kullanım", - "workspace.lite.subscription.weeklyUsage": "Haftalık Kullanım", - "workspace.lite.subscription.monthlyUsage": "Aylık Kullanım", - "workspace.lite.subscription.resetsIn": "Sıfırlama süresi", - "workspace.lite.subscription.useBalance": "Kullanım limitlerine ulaştıktan sonra mevcut bakiyenizi kullanın", - "workspace.lite.subscription.selectProvider": - 'Go modellerini kullanmak için opencode yapılandırmanızda "OpenCode Go"\'yu sağlayıcı olarak seçin.', - "workspace.lite.providers.title": "Sağlayıcılar", - "workspace.lite.providers.description": "Yönlendirme için hangi sağlayıcıların kullanılacağını kontrol edin.", - "workspace.lite.providers.useChina": "Çin'de barındırılan modelleri etkinleştir", - "workspace.lite.black.message": - "Şu anda OpenCode Black abonesisiniz veya bekleme listesindesiniz. Go'ya geçmek istiyorsanız lütfen önce aboneliğinizi iptal edin.", - "workspace.lite.other.message": - "Bu çalışma alanındaki başka bir üye zaten OpenCode Go abonesi. Çalışma alanı başına yalnızca bir üye abone olabilir.", - "workspace.lite.promo.description": - "OpenCode Go {{price}} fiyatından başlar, sonrasında ayda 10$ olur ve cömert kullanım limitleriyle popüler açık kodlama modellerine güvenilir erişim sağlar.", - "workspace.lite.promo.price": "İlk ay $5", - "workspace.lite.promo.modelsTitle": "Neler Dahil", - "workspace.lite.promo.footer": - "Plan öncelikle uluslararası kullanıcılar için tasarlanmıştır; modeller istikrarlı küresel erişim için ABD, AB ve Singapur'da barındırılmaktadır. Erken kullanımdan öğrendikçe ve geri bildirim topladıkça fiyatlandırma ve kullanım limitleri değişebilir.", - "workspace.lite.promo.subscribe": "Go'ya Abone Ol", - "workspace.lite.promo.subscribing": "Yönlendiriliyor...", - "workspace.lite.promo.otherMethods": "Diğer ödeme yöntemleri", - "workspace.lite.promo.selectMethod": "Ödeme yöntemini seçin", - - "workspace.referral.copyLink": "Bağlantıyı Kopyala", - "workspace.referral.copied": "Kopyalandı", - "workspace.referral.overview.title": "Arkadaşlarını davet et", - "workspace.referral.overview.subtitle": "Bir arkadaşın abone olduğunda $5 kazan. O da $5 alacak.", - "workspace.referral.instructions.share": "Referans bağlantını paylaş", - "workspace.referral.instructions.subscribe": "Arkadaşın katılır ve Go'ya abone olur", - "workspace.referral.instructions.claim": - "İkiniz de Go kullanım limitlerinize uygulamak için $5 kullanım kredisi alırsınız", - "workspace.referral.rewards.title": "Davet ödülleri", - "workspace.referral.rewards.description": "Mevcut davet kredilerini Go kullanımınıza uygulayın.", - "workspace.referral.rewards.subtitle": "{{applied}} / {{total}} ödül kullanıldı.", - "workspace.referral.rewards.empty": "Henüz davet ödülü yok.", - "workspace.referral.table.reward": "Ödül", - "workspace.referral.table.referral": "Açıklama", - "workspace.referral.table.date": "Tarih", - "workspace.referral.reward.description.inviter": "{{email}} davet edildi", - "workspace.referral.reward.description.invitee": "{{email}} tarafından davet edildi", - "workspace.referral.reward.action.subscribeUnlock": "Kilidi açmak için abone ol", - "workspace.referral.reward.action.view": "Ödülü Görüntüle", - "workspace.referral.reward.action.applied": "Ödül Kullanıldı", - "workspace.referral.reward.source.pendingInviter": "Abone olması bekleniyor", - "workspace.referral.reward.source.pendingInvitee": "Ödülün kilidini açmak için abone ol", - "workspace.referral.reward.source.available": "Ödül kullanıma hazır", - "workspace.referral.reward.source.applied": "Ödül kullanıldı", - "workspace.referral.reward.status.applied": "Ödül Kullanıldı", - "workspace.referral.reward.status.pendingInviter": "Kilidi açmak için abone ol", - "workspace.referral.reward.status.pendingInvitee": "Kilidi açmak için abone ol", - "workspace.referral.apply.noGo": "Kilidi açmak için abone ol", - "workspace.referral.apply.preview": "Ödülü Görüntüle", - "workspace.referral.apply.action": "Kullan", - "workspace.referral.apply.confirmTitle": "Ödülü kullan", - "workspace.referral.apply.confirmBody": "Bu workspace'in mevcut kullanımını azaltmak için {{amount}} kullan.", - "workspace.referral.apply.confirmAction": "Kullan", - - "download.title": "OpenCode | İndir", - "download.meta.description": "OpenCode'u macOS, Windows ve Linux için indirin", - "download.hero.title": "OpenCode'u İndir", - "download.hero.subtitle": "macOS, Windows ve Linux için Beta olarak sunuluyor", - "download.hero.button": "{{os}} için indir", - "download.section.terminal": "OpenCode Terminal", - "download.section.desktop": "OpenCode Desktop (Beta)", - "download.section.extensions": "OpenCode Eklentileri", - "download.section.integrations": "OpenCode Entegrasyonları", - "download.action.download": "İndir", - "download.action.install": "Kur", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "Tam olarak değil, ama muhtemelen. OpenCode'u ücretli bir sağlayıcıya bağlamak istiyorsanız bir AI aboneliği gerekir, ancak", - "download.faq.a3.localLink": "yerel modeller", - "download.faq.a3.afterLocal.beforeZen": "ile ücretsiz çalışabilirsiniz. Kullanıcıları", - "download.faq.a3.afterZen": - " kullanmaya teşvik ediyoruz, ancak OpenCode OpenAI, Anthropic, xAI vb. gibi tüm popüler sağlayıcılarla çalışır.", - - "download.faq.a5.p1": "OpenCode %100 ücretsizdir.", - "download.faq.a5.p2.beforeZen": - "Ek maliyetler, bir model sağlayıcısına olan aboneliğinizden gelir. OpenCode herhangi bir model sağlayıcısıyla çalışır, ancak", - "download.faq.a5.p2.afterZen": " kullanmanızı öneririz.", - - "download.faq.a6.p1": - "Verileriniz ve bilginiz yalnızca OpenCode'da paylaşılabilir bağlantılar oluşturduğunuzda saklanır.", - "download.faq.a6.p2.beforeShare": "Daha fazla bilgi:", - "download.faq.a6.shareLink": "paylaşım sayfaları", - - "enterprise.title": "OpenCode | Kurumunuz için kurumsal çözümler", - "enterprise.meta.description": "Kurumsal çözümler için OpenCode ile iletişime geçin", - "enterprise.hero.title": "Kodunuz size aittir", - "enterprise.hero.body1": - "OpenCode, hiçbir veri veya bağlam saklamadan ve lisans kısıtlamaları ya da sahiplik iddiaları olmadan kuruluşunuzun içinde güvenli şekilde çalışır. Ekibinizle bir deneme başlatın, ardından SSO'nuz ve dahili AI geçidiniz ile entegre ederek tüm kuruluşunuzda devreye alın.", - "enterprise.hero.body2": "Nasıl yardımcı olabileceğimizi bize söyleyin.", - "enterprise.form.name.label": "Ad soyad", - "enterprise.form.name.placeholder": "Jeff Bezos", - "enterprise.form.role.label": "Rol", - "enterprise.form.role.placeholder": "Yönetim Kurulu Başkanı", - "enterprise.form.company.label": "Şirket", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "Şirket e-postası", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "Telefon numarası", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "Hangi problemi çözmeye çalışıyorsunuz?", - "enterprise.form.message.placeholder": "Şu konuda yardıma ihtiyacımız var...", - "enterprise.form.send": "Gönder", - "enterprise.form.sending": "Gönderiliyor...", - "enterprise.form.success": "Mesaj gönderildi, yakında size dönüş yapacağız.", - "enterprise.form.success.submitted": "Form başarıyla gönderildi.", - "enterprise.form.error.allFieldsRequired": "Tüm alanlar gereklidir.", - "enterprise.form.error.invalidEmailFormat": "Geçersiz e-posta formatı.", - "enterprise.form.error.internalServer": "İç sunucu hatası.", - "enterprise.faq.title": "SSS", - "enterprise.faq.q1": "OpenCode Enterprise nedir?", - "enterprise.faq.a1": - "OpenCode Enterprise, kodunuzun ve verilerinizin asla altyapınızı terk etmemesini sağlamak isteyen kurumlar içindir. Bunu, SSO'nuz ve dahili AI geçidiniz ile entegre olan merkezileştirilmiş bir konfigürasyonla sağlar.", - "enterprise.faq.q2": "OpenCode Enterprise'a nasıl başlarım?", - "enterprise.faq.a2": - "Ekibinizle dahili bir deneme ile başlayın. OpenCode varsayılan olarak kodunuzu veya bağlam verilerinizi saklamaz, bu da başlamayı kolaylaştırır. Ardından fiyatlandırma ve uygulama seçeneklerini görüşmek için bize ulaşın.", - "enterprise.faq.q3": "Kurumsal fiyatlandırma nasıl çalışır?", - "enterprise.faq.a3": - "Kullanıcı başı (per-seat) kurumsal fiyatlandırma sunuyoruz. Kendi LLM geçidiniz varsa, kullanılan tokenlar için ücret almıyoruz. Daha fazla bilgi için, kurumunuzun ihtiyaçlarına göre özel bir teklif için bize ulaşın.", - "enterprise.faq.q4": "OpenCode Enterprise ile verilerim güvende mi?", - "enterprise.faq.a4": - "Evet. OpenCode kodunuzu veya bağlam verilerinizi saklamaz. Tüm işleme yerel olarak ya da AI sağlayıcınıza doğrudan API çağrıları ile gerçekleştirilir. Merkezileştirilmiş konfigürasyon ve SSO entegrasyonu ile verileriniz kurumunuzun altyapısı içinde güvende kalır.", - - "brand.title": "OpenCode | Marka", - "brand.meta.description": "OpenCode marka kılavuzu", - "brand.heading": "Marka kılavuzu", - "brand.subtitle": "OpenCode markası ile çalışmanıza yardımcı olacak kaynaklar ve varlıklar.", - "brand.downloadAll": "Tüm varlıkları indir", - - "changelog.title": "OpenCode | Değişiklik günlüğü", - "changelog.meta.description": "OpenCode sürüm notları ve değişiklik günlüğü", - "changelog.hero.title": "Değişiklik günlüğü", - "changelog.hero.subtitle": "OpenCode için yeni güncellemeler ve iyileştirmeler", - "changelog.empty": "Değişiklik günlüğü kaydı bulunamadı.", - "changelog.viewJson": "JSON'u görüntüle", - - "bench.list.title": "Benchmark", - "bench.list.heading": "Benchmarklar", - "bench.list.table.agent": "Ajan", - "bench.list.table.model": "Model", - "bench.list.table.score": "Puan", - "bench.submission.error.allFieldsRequired": "Tüm alanlar gereklidir.", - - "bench.detail.title": "Benchmark - {{task}}", - "bench.detail.notFound": "Görev bulunamadı", - "bench.detail.na": "N/A", - "bench.detail.labels.agent": "Ajan", - "bench.detail.labels.model": "Model", - "bench.detail.labels.task": "Görev", - "bench.detail.labels.repo": "Repo", - "bench.detail.labels.from": "Başlangıç", - "bench.detail.labels.to": "Bitiş", - "bench.detail.labels.prompt": "İstem", - "bench.detail.labels.commit": "Commit", - "bench.detail.labels.averageDuration": "Ortalama Süre", - "bench.detail.labels.averageScore": "Ortalama Puan", - "bench.detail.labels.averageCost": "Ortalama Maliyet", - "bench.detail.labels.summary": "Özet", - "bench.detail.labels.runs": "Çalıştırmalar", - "bench.detail.labels.score": "Puan", - "bench.detail.labels.base": "Baz", - "bench.detail.labels.penalty": "Ceza", - "bench.detail.labels.weight": "ağırlık", - "bench.detail.table.run": "Çalıştırma", - "bench.detail.table.score": "Puan (Baz - Ceza)", - "bench.detail.table.cost": "Maliyet", - "bench.detail.table.duration": "Süre", - "bench.detail.run.title": "Çalıştırma {{n}}", - "bench.detail.rawJson": "Ham JSON", -} satisfies Dict diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts deleted file mode 100644 index 8486fa81b5..0000000000 --- a/packages/console/app/src/i18n/uk.ts +++ /dev/null @@ -1,790 +0,0 @@ -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "Документація", - "nav.changelog": "Журнал змін", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "Enterprise", - "nav.zen": "Zen", - "nav.login": "Увійти", - "nav.free": "Завантажити", - "nav.home": "Головна", - "nav.openMenu": "Відкрити меню", - "nav.getStartedFree": "Почати безкоштовно", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "Копіювати логотип як SVG", - "nav.context.copyWordmark": "Копіювати знак як SVG", - "nav.context.brandAssets": "Бренд-матеріали", - - "footer.github": "GitHub", - "footer.docs": "Документація", - "footer.changelog": "Журнал змін", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "Бренд", - "legal.privacy": "Конфіденційність", - "legal.terms": "Умови", - - "email.title": "Дізнайтеся першими про нові продукти", - "email.subtitle": "Приєднуйтесь до списку очікування для раннього доступу.", - "email.placeholder": "Електронна адреса", - "email.subscribe": "Підписатися", - "email.success": "Майже готово! Перевірте пошту та підтвердьте адресу", - - "notFound.title": "Не знайдено | opencode", - "notFound.heading": "404 — Сторінку не знайдено", - "notFound.home": "Головна", - "notFound.docs": "Документація", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "світлий логотип opencode", - "notFound.logoDarkAlt": "темний логотип opencode", - - "user.logout": "Вийти", - - "auth.callback.error.codeMissing": "Не знайдено код авторизації.", - - "workspace.select": "Виберіть робочий простір", - "workspace.createNew": "+ Створити новий робочий простір", - "workspace.modal.title": "Створити новий робочий простір", - "workspace.modal.placeholder": "Введіть назву робочого простору", - - "common.cancel": "Скасувати", - "common.creating": "Створення...", - "common.create": "Створити", - "common.contactUs": "Зв'яжіться з нами", - - "common.videoUnsupported": "Ваш браузер не підтримує відео.", - "common.figure": "Рис. {{n}}.", - "common.faq": "FAQ", - "common.learnMore": "Дізнатися більше", - - "error.invalidPlan": "Недійсний план", - "error.workspaceRequired": "ID робочого простору обов'язкове", - "error.alreadySubscribed": "Цей робочий простір уже має підписку", - "error.limitRequired": "Ліміт обов'язковий.", - "error.monthlyLimitInvalid": "Встановіть дійсний місячний ліміт.", - "error.workspaceNameRequired": "Назва робочого простору обов'язкова.", - "error.nameTooLong": "Назва має містити не більше 255 символів.", - "error.emailRequired": "Електронна адреса обов'язкова", - "error.roleRequired": "Роль обов'язкова", - "error.idRequired": "ID обов'язкове", - "error.nameRequired": "Назва обов'язкова", - "error.providerRequired": "Провайдер обов'язковий", - "error.apiKeyRequired": "Ключ API обов'язковий", - "error.modelRequired": "Модель обов'язкова", - "error.reloadAmountMin": "Сума поповнення має бути щонайменше ${{amount}}", - "error.reloadTriggerMin": "Поріг балансу має бути щонайменше ${{amount}}", - - "app.meta.description": "OpenCode — відкритий агент для програмування.", - - "home.title": "OpenCode | Відкритий AI-агент для кодування", - - "temp.title": "opencode | AI-агент для кодування, створений для термінала", - "temp.hero.title": "AI-агент для кодування, створений для термінала", - "temp.zen": "opencode zen", - "temp.getStarted": "Почати", - "temp.feature.native.title": "Рідний TUI", - "temp.feature.native.body": "Чуйний, рідний інтерфейс термінала з темами", - "temp.feature.zen.beforeLink": "A", - "temp.feature.zen.link": "добірка моделей", - "temp.feature.zen.afterLink": "від opencode", - "temp.feature.models.beforeLink": "Підтримує 75+ LLM-провайдерів через", - "temp.feature.models.afterLink": ", включаючи локальні моделі", - "temp.screenshot.caption": "OpenCode TUI з темою tokyonight", - "temp.screenshot.alt": "OpenCode TUI з темою tokyonight", - "temp.logoLightAlt": "світлий логотип opencode", - "temp.logoDarkAlt": "темний логотип opencode", - - "home.banner.badge": "Нове", - "home.banner.text": "Десктопний застосунок доступний у бета-версії", - "home.banner.platforms": "на macOS, Windows та Linux", - "home.banner.downloadNow": "Завантажити зараз", - "home.banner.downloadBetaNow": "Завантажити бета-версію десктопного застосунку", - - "home.hero.title": "Відкритий AI-агент для кодування", - "home.hero.subtitle.a": "Безкоштовні моделі включено або підключіть будь-яку модель від будь-якого провайдера,", - "home.hero.subtitle.b": "включно з Claude, GPT, Gemini та іншими.", - - "home.install.ariaLabel": "Параметри встановлення", - - "home.what.title": "Що таке OpenCode?", - "home.what.body": "OpenCode — це відкритий агент, який допомагає писати код у терміналі, IDE або на десктопі.", - "home.what.lsp.title": "LSP увімкнено", - "home.what.lsp.body": "Автоматично завантажує потрібні LSP для LLM", - "home.what.multiSession.title": "Багатосесійність", - "home.what.multiSession.body": "Запускайте кількох агентів паралельно в одному проекті", - "home.what.shareLinks.title": "Посилання для обміну", - "home.what.shareLinks.body": "Діліться посиланням на будь-яку сесію для обговорення або налагодження", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "Увійдіть через GitHub, щоб використовувати свій обліковий запис Copilot", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "Увійдіть через OpenAI, щоб використовувати ChatGPT Plus або Pro", - "home.what.anyModel.title": "Будь-яка модель", - "home.what.anyModel.body": "75+ LLM-провайдерів через Models.dev, включаючи локальні моделі", - "home.what.anyEditor.title": "Будь-який редактор", - "home.what.anyEditor.body": "Доступний як термінальний інтерфейс, десктопний застосунок та розширення IDE", - "home.what.readDocs": "Читати документацію", - - "home.growth.title": "Відкритий AI-агент для кодування", - "home.growth.body": - "З понад {{stars}} зірками на GitHub, {{contributors}} учасниками та понад {{commits}} комітами, OpenCode використовують понад {{monthlyUsers}} розробників щомісяця.", - "home.growth.githubStars": "Зірки GitHub", - "home.growth.contributors": "Учасники", - "home.growth.monthlyDevs": "Розробників на місяць", - - "home.privacy.title": "Створено для конфіденційності", - "home.privacy.body": - "OpenCode не зберігає ваш код або контекстні дані, тому може працювати в середовищах з чутливими даними.", - "home.privacy.learnMore": "Дізнатися більше про", - "home.privacy.link": "конфіденційність", - - "home.faq.q1": "Що таке OpenCode?", - "home.faq.a1": - "OpenCode — це відкритий агент, який допомагає писати та запускати код з будь-якою AI-моделлю. Доступний як термінальний інтерфейс, десктопний застосунок або розширення IDE.", - "home.faq.q2": "Як почати користуватися OpenCode?", - "home.faq.a2.before": "Найпростіший спосіб почати — прочитати", - "home.faq.a2.link": "вступ", - "home.faq.q3": "Чи потрібні додаткові AI-підписки для використання OpenCode?", - "home.faq.a3.p1": - "Не обов'язково, OpenCode має набір безкоштовних моделей, які можна використовувати без реєстрації.", - "home.faq.a3.p2.beforeZen": - "Крім цього, ви можете використовувати будь-які популярні моделі, створивши обліковий запис", - "home.faq.a3.p2.afterZen": ".", - "home.faq.a3.p3": - "Хоча ми рекомендуємо Zen, OpenCode також працює з усіма популярними провайдерами, такими як OpenAI, Anthropic, xAI тощо.", - "home.faq.a3.p4.beforeLocal": "Ви навіть можете підключити свої", - "home.faq.a3.p4.localLink": "локальні моделі", - "home.faq.q4": "Чи можу я використовувати свої наявні AI-підписки з OpenCode?", - "home.faq.a4.p1": - "Так, OpenCode підтримує підписки всіх основних провайдерів. Ви можете використовувати Claude Pro/Max, ChatGPT Plus/Pro або GitHub Copilot.", - "home.faq.q5": "Чи можна використовувати OpenCode лише в терміналі?", - "home.faq.a5.beforeDesktop": "Вже ні! OpenCode тепер доступний як застосунок для", - "home.faq.a5.desktop": "десктопа", - "home.faq.a5.and": "та", - "home.faq.a5.web": "вебу", - "home.faq.q6": "Скільки коштує OpenCode?", - "home.faq.a6": - "OpenCode є 100% безкоштовним. Він також має набір безкоштовних моделей. Додаткові витрати можливі, якщо ви підключите іншого провайдера.", - "home.faq.q7": "А як щодо даних та конфіденційності?", - "home.faq.a7.p1": - "Ваші дані зберігаються лише тоді, коли ви використовуєте безкоштовні моделі або створюєте посилання для обміну.", - "home.faq.a7.p2.beforeModels": "Дізнайтеся більше про", - "home.faq.a7.p2.modelsLink": "наші моделі", - "home.faq.a7.p2.and": "та", - "home.faq.a7.p2.shareLink": "сторінки обміну", - "home.faq.q8": "Чи є OpenCode відкритим?", - "home.faq.a8.p1": "Так, OpenCode повністю відкритий. Вихідний код доступний публічно на", - "home.faq.a8.p2": "під ліцензією", - "home.faq.a8.mitLicense": "MIT License", - "home.faq.a8.p3": - ", тобто кожен може використовувати, змінювати або сприяти його розвитку. Будь-хто зі спільноти може створювати issues, надсилати pull request'и та розширювати функціональність.", - - "home.zenCta.title": "Отримайте доступ до надійних оптимізованих моделей для агентів кодування", - "home.zenCta.body": - "Zen дає доступ до добірки AI-моделей, які OpenCode протестував спеціально для агентів кодування. Не турбуйтеся про нестабільну якість — використовуйте перевірені моделі.", - "home.zenCta.link": "Дізнатися про Zen", - - "zen.title": "OpenCode Zen | Добірка надійних оптимізованих моделей для агентів кодування", - "zen.hero.title": "Надійні оптимізовані моделі для агентів кодування", - "zen.hero.body": - "Zen дає доступ до добірки AI-моделей, які OpenCode протестував спеціально для агентів кодування. Не турбуйтеся про нестабільну якість — використовуйте перевірені моделі.", - - "zen.faq.q1": "Що таке OpenCode Zen?", - "zen.faq.a1": "Zen — це добірка AI-моделей, протестованих для агентів кодування, створена командою OpenCode.", - "zen.faq.q2": "Чому Zen точніший?", - "zen.faq.a2": - "Zen надає лише моделі, спеціально протестовані для агентів кодування. Ви ж не використовуєте масло ніж для стейка — не використовуйте погані моделі для кодування.", - "zen.faq.q3": "Чи Zen дешевший?", - "zen.faq.a3": - "Zen не є прибутковим. Zen передає вам вартість від провайдерів моделей. Чим вище використання Zen, тим кращі ціни OpenCode може узгодити та передати вам.", - "zen.faq.q4": "Скільки коштує Zen?", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "стягує плату за запит", - "zen.faq.a4.p1.afterPricing": "без націнок — ви платите рівно стільки, скільки стягує провайдер моделі.", - "zen.faq.a4.p2.beforeAccount": "Загальна вартість залежить від використання. Ви можете встановити місячні ліміти в", - "zen.faq.a4.p2.accountLink": "обліковому записі", - "zen.faq.a4.p3": - "Щоб покрити витрати, OpenCode додає лише невелику комісію за обробку платежу в розмірі $1.23 за кожне поповнення балансу $20.", - "zen.faq.q5": "А як щодо даних та конфіденційності?", - "zen.faq.a5.beforeExceptions": - "Усі моделі Zen розміщені в США. Провайдери дотримуються політики нульового зберігання та не використовують ваші дані для навчання моделей, за", - "zen.faq.a5.exceptionsLink": "такими винятками", - "zen.faq.q6": "Чи можна встановити ліміти витрат?", - "zen.faq.a6": "Так, ви можете встановити місячні ліміти витрат в обліковому записі.", - "zen.faq.q7": "Чи можна скасувати?", - "zen.faq.a7": "Так, ви можете вимкнути оплату в будь-який час і використовувати залишок.", - "zen.faq.q8": "Чи можна використовувати Zen з іншими агентами кодування?", - "zen.faq.a8": - "Хоча Zen чудово працює з OpenCode, ви можете використовувати Zen з будь-яким агентом. Дотримуйтесь інструкцій з налаштування у вашому агенті.", - - "zen.cta.start": "Почати з Zen", - "zen.pricing.title": "Додати $20 балансу Pay as you go", - "zen.pricing.fee": "(+$1.23 комісія за обробку карти)", - "zen.pricing.body": "Використовуйте з будь-яким агентом. Встановлюйте місячні ліміти. Скасуйте в будь-який час.", - "zen.problem.title": "Яку проблему вирішує Zen?", - "zen.problem.body": - "Доступно багато моделей, але лише деякі добре працюють з агентами кодування. Більшість провайдерів налаштовують їх по-різному з різними результатами.", - "zen.problem.subtitle": "Ми вирішуємо це для всіх, а не лише для користувачів OpenCode.", - "zen.problem.item1": "Тестування вибраних моделей та консультації з їхніми командами", - "zen.problem.item2": "Співпраця з провайдерами для забезпечення правильної доставки", - "zen.problem.item3": "Бенчмаркінг усіх комбінацій моделей та провайдерів, які ми рекомендуємо", - "zen.how.title": "Як працює Zen", - "zen.how.body": - "Хоча ми пропонуємо використовувати Zen з OpenCode, ви можете використовувати Zen з будь-яким агентом.", - "zen.how.step1.title": "Зареєструйтеся та додайте $20 балансу", - "zen.how.step1.beforeLink": "дотримуйтесь", - "zen.how.step1.link": "інструкцій з налаштування", - "zen.how.step2.title": "Використовуйте Zen із прозорими цінами", - "zen.how.step2.link": "платіть за запит", - "zen.how.step2.afterLink": "без націнок", - "zen.how.step3.title": "Автоматичне поповнення", - "zen.how.step3.body": "коли баланс досягає $5, ми автоматично додаємо $20", - "zen.privacy.title": "Ваша конфіденційність важлива для нас", - "zen.privacy.beforeExceptions": - "Усі моделі Zen розміщені в США. Провайдери дотримуються політики нульового зберігання та не використовують ваші дані для навчання моделей, за", - "zen.privacy.exceptionsLink": "такими винятками", - - "go.title": "OpenCode Go | Недорогі моделі кодування для всіх", - "go.meta.description": - "Go починається від $5 за перший місяць, потім $10/місяць, з generous 5-годинними лімітами запитів для GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro та DeepSeek V4 Flash.", - "go.hero.title": "Недорогі моделі кодування для всіх", - "go.hero.body": - "Go надає агентне програмування програмістам у всьому світі, пропонуючи щедрі ліміти та надійний доступ до найкращих моделей з відкритим кодом.", - - "go.cta.start": "Підписатися на Go", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "Підписатися на Go", - "go.cta.price": "$10/місяць", - "go.cta.promo": "$5 перший місяць", - "go.pricing.body": - "Використовуйте з будь-яким агентом. $5 перший місяць, потім $10/місяць. Поповнюйте за потреби. Скасуйте в будь-який час.", - "go.graph.free": "Безкоштовно", - "go.graph.freePill": "Big Pickle та безкоштовні моделі", - "go.graph.go": "Go", - "go.graph.label": "Запитів за 5 годин", - "go.graph.usageLimits": "Ліміти використання", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "Запитів за 5 год: {{free}} vs {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "ex-CEO, Terminal Products", - "go.testimonials.dax.quoteAfter": "змінило моє життя, це справді очевидний вибір.", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "ex-Founder, SEED, PM, Melt, Pop, Dapt, Cadmus, and ViewPoint", - "go.testimonials.jay.quoteBefore": "4 з 5 людей у нашій команді люблять використовувати", - "go.testimonials.jay.quoteAfter": ".", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "ex-Hero, AWS", - "go.testimonials.adam.quoteBefore": "Я не можу достатньо рекомендувати", - "go.testimonials.adam.quoteAfter": ". Серйозно, це дійсно добре.", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "ex-Head of Design, Laravel", - "go.testimonials.david.quoteBefore": "Завдяки", - "go.testimonials.david.quoteAfter": "я знаю, що всі моделі протестовані та ідеальні для агентів кодування.", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "ex-Intern, Nvidia (4 times)", - "go.testimonials.frank.quote": "Хотів би я досі бути в Nvidia.", - "go.problem.title": "Яку проблему вирішує Go?", - "go.problem.body": - "Ми зосереджені на тому, щоб зробити досвід OpenCode доступним для якомога більшої кількості людей. OpenCode Go — це недорога підписка: $5 за перший місяць, потім $10/місяць. Вона надає щедрі ліміти та надійний доступ до найкращих моделей з відкритим кодом.", - "go.problem.subtitle": " ", - "go.problem.item1": "Недорога підписка", - "go.problem.item2": "Щедрі ліміти та надійний доступ", - "go.problem.item3": "Створено для якомога більшої кількості програмістів", - "go.problem.item4": - "Включає GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro та DeepSeek V4 Flash", - "go.how.title": "Як працює Go", - "go.how.body": - "Go починається від $5 за перший місяць, потім $10/місяць. Використовуйте з OpenCode або будь-яким агентом.", - "go.how.step1.title": "Створіть обліковий запис", - "go.how.step1.beforeLink": "дотримуйтесь", - "go.how.step1.link": "інструкцій з налаштування", - "go.how.step2.title": "Підпишіться на Go", - "go.how.step2.link": "$5 перший місяць", - "go.how.step2.afterLink": "потім $10/місяць із щедрими лімітами", - "go.how.step3.title": "Почніть кодувати", - "go.how.step3.body": "з надійним доступом до моделей з відкритим кодом", - "go.privacy.title": "Ваша конфіденційність важлива для нас", - "go.privacy.body": - "План розроблений переважно для міжнародних користувачів, з моделями, розміщеними в США, ЄС та Сінгапурі для стабільного глобального доступу.", - "go.privacy.contactAfter": "якщо у вас є запитання.", - "go.privacy.beforeExceptions": - "Моделі Go розміщені в США. Провайдери дотримуються політики нульового зберігання та не використовують ваші дані для навчання моделей, за", - "go.privacy.exceptionsLink": "такими винятками", - "go.faq.q1": "Що таке OpenCode Go?", - "go.faq.a1": - "Go — це недорога підписка, яка надає надійний доступ до найкращих моделей з відкритим кодом для агентного кодування.", - "go.faq.q2": "Які моделі включає Go?", - "go.faq.a2": "Go включає моделі, перелічені нижче, із щедрими лімітами та надійним доступом.", - "go.faq.q3": "Чи Go те саме, що Zen?", - "go.faq.a3": - "Ні. Zen — це плата за використання, тоді як Go починається від $5 за перший місяць, потім $10/місяць, із щедрими лімітами та надійним доступом до моделей з відкритим кодом GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro та DeepSeek V4 Flash.", - "go.faq.q4": "Скільки коштує Go?", - "go.faq.a4.p1.beforePricing": "Go коштує", - "go.faq.a4.p1.pricingLink": "$5 за перший місяць", - "go.faq.a4.p1.afterPricing": "потім $10/місяць із щедрими лімітами.", - "go.faq.a4.p2.beforeAccount": "Ви можете керувати підпискою в", - "go.faq.a4.p2.accountLink": "обліковому записі", - "go.faq.a4.p3": "Скасуйте в будь-який час.", - "go.faq.q5": "А як щодо даних та конфіденційності?", - "go.faq.a5.body": - "План розроблений переважно для міжнародних користувачів, з моделями в США, ЄС та Сінгапурі. Провайдери дотримуються політики нульового зберігання.", - "go.faq.a5.beforeExceptions": - "Моделі Go розміщені в США. Провайдери дотримуються політики нульового зберігання та не використовують ваші дані для навчання моделей, за", - "go.faq.a5.exceptionsLink": "такими винятками", - "go.faq.q6": "Чи можна поповнити баланс?", - "go.faq.a6": "Якщо вам потрібно більше використання, ви можете поповнити баланс в обліковому записі.", - "go.faq.q7": "Чи можна скасувати?", - "go.faq.a7": "Так, ви можете скасувати в будь-який час.", - "go.faq.q8": "Чи можна використовувати Go з іншими агентами кодування?", - "go.faq.a8": "Так, ви можете використовувати Go з будь-яким агентом.", - - "go.faq.q9": "Яка різниця між безкоштовними моделями та Go?", - "go.faq.a9": - "Безкоштовні моделі включають Big Pickle та акційні моделі з лімітом 200 запитів/день. Go включає GLM-5.2, GLM-5.1, Kimi K2.7 Code, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7, MiniMax M3, DeepSeek V4 Pro та DeepSeek V4 Flash із вищими лімітами.", - - "zen.api.error.rateLimitExceeded": "Перевищено ліміт запитів. Спробуйте пізніше.", - "zen.api.error.modelNotSupported": "Модель {{model}} не підтримується", - "zen.api.error.modelFormatNotSupported": "Модель {{model}} не підтримується для формату {{format}}", - "zen.api.error.noProviderAvailable": "Немає доступного провайдера", - "zen.api.error.providerNotSupported": "Провайдер {{provider}} не підтримується", - "zen.api.error.missingApiKey": "Відсутній ключ API.", - "zen.api.error.invalidApiKey": "Недійсний ключ API.", - "zen.api.error.subscriptionQuotaExceeded": "Перевищено квоту підписки. Повторіть через {{retryIn}}.", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "Досягнуто 5-годинного ліміту використання. Скидається через {{retryIn}}. Щоб продовжити, увімкніть використання з доступного балансу: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "Досягнуто тижневого ліміту використання. Скидається через {{retryIn}}. Щоб продовжити, увімкніть використання з доступного балансу: {{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "Досягнуто місячного ліміту використання. Скидається через {{retryIn}}. Щоб продовжити, увімкніть використання з доступного балансу: {{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "Немає способу оплати. Додайте метод оплати: {{billingUrl}}", - "zen.api.error.insufficientBalance": "Недостатньо коштів. Керуйте оплатою: {{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "Ваш робочий простір досяг місячного ліміту витрат ${{amount}}. Керуйте лімітами: {{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": - "Ви досягли місячного ліміту витрат ${{amount}}. Керуйте лімітами: {{membersUrl}}", - "zen.api.error.modelDisabled": "Модель вимкнено", - "zen.api.error.regionNotAllowed": - "Ця модель розміщена в Китаї. Якщо ви хочете використовувати цю модель, увімкніть її в налаштуваннях: {{consoleGoUrl}}", - "zen.api.error.trialEnded": - "Безкоштовна акція для {{model}} закінчилася. Ви можете продовжити використання, підписавшись на OpenCode Go — {{link}}", - - "black.meta.title": "OpenCode Black | Доступ до найкращих моделей кодування", - "black.meta.description": "Отримайте доступ до Claude, GPT, Gemini та інших із планами підписки OpenCode Black.", - "black.hero.title": "Доступ до найкращих моделей кодування", - "black.hero.subtitle": "Включаючи Claude, GPT, Gemini та інші", - "black.title": "OpenCode Black | Ціни", - "black.paused": "Реєстрація в план Black тимчасово призупинена.", - "black.plan.icon20": "План Black 20", - "black.plan.icon100": "План Black 100", - "black.plan.icon200": "План Black 200", - "black.plan.multiplier100": "5x більше використання ніж Black 20", - "black.plan.multiplier200": "20x більше використання ніж Black 20", - "black.price.perMonth": "на місяць", - "black.price.perPersonBilledMonthly": "за особу з щомісячною оплатою", - "black.terms.1": "Ваша підписка не розпочнеться негайно", - "black.terms.2": "Вас додадуть до списку очікування та активують незабаром", - "black.terms.3": "Картку буде списано лише після активації підписки", - "black.terms.4": "Діють ліміти використання, інтенсивне автоматичне використання може швидше вичерпати ліміти", - "black.terms.5": "Підписки призначені для фізичних осіб, зверніться в Enterprise для команд", - "black.terms.6": "Ліміти можуть бути змінені, а плани можуть бути припинені в майбутньому", - "black.terms.7": "Скасуйте підписку в будь-який час", - "black.action.continue": "Продовжити", - "black.finePrint.beforeTerms": "Зазначені ціни не включають податки", - "black.finePrint.terms": "Умови надання послуг", - "black.workspace.title": "OpenCode Black | Виберіть робочий простір", - "black.workspace.selectPlan": "Виберіть робочий простір для цього плану", - "black.workspace.name": "Робочий простір {{n}}", - "black.subscribe.title": "Підписатися на OpenCode Black", - "black.subscribe.paymentMethod": "Спосіб оплати", - "black.subscribe.loadingPaymentForm": "Завантаження форми оплати...", - "black.subscribe.selectWorkspaceToContinue": "Виберіть робочий простір для продовження", - "black.subscribe.failurePrefix": "Ой!", - "black.subscribe.error.generic": "Сталася помилка", - "black.subscribe.error.invalidPlan": "Недійсний план", - "black.subscribe.error.workspaceRequired": "ID робочого простору обов'язкове", - "black.subscribe.error.alreadySubscribed": "Цей робочий простір уже має підписку", - "black.subscribe.processing": "Обробка...", - "black.subscribe.submit": "Підписатися ${{plan}}", - "black.subscribe.form.chargeNotice": "Платіж буде списано лише після активації підписки", - "black.subscribe.success.title": "Ви в списку очікування OpenCode Black", - "black.subscribe.success.subscriptionPlan": "План підписки", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "Сума", - "black.subscribe.success.amountValue": "${{plan}} на місяць", - "black.subscribe.success.paymentMethod": "Спосіб оплати", - "black.subscribe.success.dateJoined": "Дата приєднання", - "black.subscribe.success.chargeNotice": "Вашу картку буде списано після активації підписки", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "Використання", - "workspace.nav.apiKeys": "Ключі API", - "workspace.nav.members": "Учасники", - "workspace.nav.billing": "Оплата", - "workspace.nav.settings": "Налаштування", - - "workspace.home.banner.beforeLink": "Надійні оптимізовані моделі для агентів кодування.", - "workspace.lite.banner.beforeLink": "Недорогі моделі кодування для всіх.", - "workspace.home.billing.loading": "Завантаження...", - "workspace.home.billing.enable": "Увімкнути оплату", - "workspace.home.billing.currentBalance": "Поточний баланс", - - "workspace.newUser.feature.tested.title": "Протестовані та перевірені моделі", - "workspace.newUser.feature.tested.body": - "Ми протестували моделі спеціально для агентів кодування, щоб забезпечити найкращу продуктивність.", - "workspace.newUser.feature.quality.title": "Найвища якість", - "workspace.newUser.feature.quality.body": - "Доступ до моделей, налаштованих для оптимальної продуктивності — без зниження якості.", - "workspace.newUser.feature.lockin.title": "Без блокування (Lock-in)", - "workspace.newUser.feature.lockin.body": - "Використовуйте Zen з будь-яким агентом і продовжуйте користуватися іншими провайдерами.", - "workspace.newUser.copyApiKey": "Копіювати ключ API", - "workspace.newUser.copyKey": "Копіювати ключ", - "workspace.newUser.copied": "Скопійовано!", - "workspace.newUser.step.enableBilling": "Увімкнути оплату", - "workspace.newUser.step.login.before": "Запустіть", - "workspace.newUser.step.login.after": "і виберіть opencode", - "workspace.newUser.step.pasteKey": "Вставте ключ API", - "workspace.newUser.step.models.before": "Запустіть opencode і виконайте", - "workspace.newUser.step.models.after": "щоб вибрати модель", - - "workspace.models.title": "Моделі", - "workspace.models.subtitle.beforeLink": "Керуйте доступом учасників до моделей.", - "workspace.models.table.model": "Модель", - "workspace.models.table.enabled": "Увімкнено", - - "workspace.providers.title": "Принесіть власний ключ (BYOK)", - "workspace.providers.subtitle": "Налаштуйте власні ключі API від AI-провайдерів.", - "workspace.providers.placeholder": "Введіть ключ API {{provider}} ({{prefix}}...)", - "workspace.providers.configure": "Налаштувати", - "workspace.providers.edit": "Редагувати", - "workspace.providers.delete": "Видалити", - "workspace.providers.saving": "Збереження...", - "workspace.providers.save": "Зберегти", - "workspace.providers.table.provider": "Провайдер", - "workspace.providers.table.apiKey": "Ключ API", - - "workspace.usage.title": "Історія використання", - "workspace.usage.subtitle": "Останнє використання API та витрати.", - "workspace.usage.empty": "Зробіть перший API-запит, щоб почати.", - "workspace.usage.table.date": "Дата", - "workspace.usage.table.model": "Модель", - "workspace.usage.table.input": "Вхід", - "workspace.usage.table.output": "Вихід", - "workspace.usage.table.cost": "Вартість", - "workspace.usage.table.session": "Сесія", - "workspace.usage.breakdown.input": "Вхід", - "workspace.usage.breakdown.cacheRead": "Читання кешу", - "workspace.usage.breakdown.cacheWrite": "Запис кешу", - "workspace.usage.breakdown.output": "Вихід", - "workspace.usage.breakdown.reasoning": "Міркування", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "Вартість", - "workspace.cost.subtitle": "Витрати в розрізі моделей.", - "workspace.cost.allModels": "Усі моделі", - "workspace.cost.allKeys": "Усі ключі", - "workspace.cost.deletedSuffix": "(видалено)", - "workspace.cost.empty": "Немає даних про використання за вибраний період.", - "workspace.cost.subscriptionShort": "підп", - - "workspace.keys.title": "Ключі API", - "workspace.keys.subtitle": "Керуйте ключами API для доступу до сервісів opencode.", - "workspace.keys.create": "Створити ключ API", - "workspace.keys.placeholder": "Введіть назву ключа", - "workspace.keys.empty": "Створіть ключ API шлюзу opencode", - "workspace.keys.table.name": "Назва", - "workspace.keys.table.key": "Ключ", - "workspace.keys.table.createdBy": "Створено", - "workspace.keys.table.lastUsed": "Останнє використання", - "workspace.keys.copyApiKey": "Копіювати ключ API", - "workspace.keys.delete": "Видалити", - - "workspace.members.title": "Учасники", - "workspace.members.subtitle": "Керуйте учасниками робочого простору та їхніми дозволами.", - "workspace.members.invite": "Запросити учасника", - "workspace.members.inviting": "Запрошення...", - "workspace.members.beta.beforeLink": "Робочі простори безкоштовні для команд під час бета-версії.", - "workspace.members.form.invitee": "Запрошений", - "workspace.members.form.emailPlaceholder": "Введіть email", - "workspace.members.form.role": "Роль", - "workspace.members.form.monthlyLimit": "Місячний ліміт витрат", - "workspace.members.noLimit": "Без ліміту", - "workspace.members.noLimitLowercase": "без ліміту", - "workspace.members.invited": "запрошено", - "workspace.members.edit": "Редагувати", - "workspace.members.delete": "Видалити", - "workspace.members.saving": "Збереження...", - "workspace.members.save": "Зберегти", - "workspace.members.table.email": "Email", - "workspace.members.table.role": "Роль", - "workspace.members.table.monthLimit": "Ліміт на місяць", - "workspace.members.role.admin": "Адміністратор", - "workspace.members.role.adminDescription": "Може керувати моделями, учасниками та оплатою", - "workspace.members.role.member": "Учасник", - "workspace.members.role.memberDescription": "Може створювати ключі API лише для себе", - - "workspace.settings.title": "Налаштування", - "workspace.settings.subtitle": "Оновіть назву робочого простору та налаштування.", - "workspace.settings.workspaceName": "Назва робочого простору", - "workspace.settings.defaultName": "Стандартна", - "workspace.settings.updating": "Оновлення...", - "workspace.settings.save": "Зберегти", - "workspace.settings.edit": "Редагувати", - - "workspace.billing.title": "Оплата", - "workspace.billing.subtitle.beforeLink": "Керуйте способами оплати.", - "workspace.billing.contactUs": "Зв'яжіться з нами", - "workspace.billing.subtitle.afterLink": "якщо у вас є запитання.", - "workspace.billing.currentBalance": "Поточний баланс", - "workspace.billing.add": "Додати $", - "workspace.billing.enterAmount": "Введіть суму", - "workspace.billing.loading": "Завантаження...", - "workspace.billing.addAction": "Додати", - "workspace.billing.addBalance": "Поповнити баланс", - "workspace.billing.alipay": "Alipay", - "workspace.billing.wechat": "WeChat Pay", - "workspace.billing.linkedToStripe": "Підключено до Stripe", - "workspace.billing.manage": "Керувати", - "workspace.billing.enable": "Увімкнути оплату", - - "workspace.monthlyLimit.title": "Місячний ліміт", - "workspace.monthlyLimit.subtitle": "Встановіть місячний ліміт використання для облікового запису.", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "Встановлення...", - "workspace.monthlyLimit.set": "Встановити", - "workspace.monthlyLimit.edit": "Редагувати ліміт", - "workspace.monthlyLimit.noLimit": "Ліміт використання не встановлено.", - "workspace.monthlyLimit.currentUsage.beforeMonth": "Поточне використання за", - "workspace.monthlyLimit.currentUsage.beforeAmount": "становить $", - - "workspace.redeem.title": "Активувати купон", - "workspace.redeem.subtitle": "Активуйте код купона для отримання коштів або бонусів.", - "workspace.redeem.placeholder": "Введіть код купона", - "workspace.redeem.redeem": "Активувати", - "workspace.redeem.redeeming": "Активація...", - "workspace.redeem.success": "Купон успішно активовано.", - - "workspace.reload.title": "Автоматичне поповнення", - "workspace.reload.disabled.before": "Автоматичне поповнення", - "workspace.reload.disabled.state": "вимкнено", - "workspace.reload.disabled.after": "Увімкніть для автоматичного поповнення при низькому балансі.", - "workspace.reload.enabled.before": "Автоматичне поповнення", - "workspace.reload.enabled.state": "увімкнено", - "workspace.reload.enabled.middle": "Ми поповнимо", - "workspace.reload.processingFee": "комісія за обробку", - "workspace.reload.enabled.after": "коли баланс досягне", - "workspace.reload.edit": "Редагувати", - "workspace.reload.enable": "Увімкнути", - "workspace.reload.enableAutoReload": "Увімкнути автоматичне поповнення", - "workspace.reload.reloadAmount": "Поповнити на $", - "workspace.reload.whenBalanceReaches": "Коли баланс досягне $", - "workspace.reload.saving": "Збереження...", - "workspace.reload.save": "Зберегти", - "workspace.reload.failedAt": "Поповнення не вдалося о", - "workspace.reload.reason": "Причина:", - "workspace.reload.updatePaymentMethod": "Оновіть спосіб оплати та спробуйте ще раз.", - "workspace.reload.retrying": "Повтор...", - "workspace.reload.retry": "Повторити", - "workspace.reload.error.paymentFailed": "Платіж не вдався.", - - "workspace.payments.title": "Історія платежів", - "workspace.payments.subtitle": "Останні платіжні транзакції.", - "workspace.payments.table.date": "Дата", - "workspace.payments.table.paymentId": "ID платежу", - "workspace.payments.table.amount": "Сума", - "workspace.payments.table.receipt": "Квитанція", - "workspace.payments.type.credit": "кредит", - "workspace.payments.type.subscription": "підписка", - "workspace.payments.view": "Переглянути", - - "workspace.black.loading": "Завантаження...", - "workspace.black.time.day": "день", - "workspace.black.time.days": "дні", - "workspace.black.time.hour": "година", - "workspace.black.time.hours": "годин(и)", - "workspace.black.time.minute": "хвилина", - "workspace.black.time.minutes": "хвилин(и)", - "workspace.black.time.fewSeconds": "кілька секунд", - "workspace.black.subscription.title": "Підписка", - "workspace.black.subscription.message": "Ви підписані на OpenCode Black за ${{plan}} на місяць.", - "workspace.black.subscription.manage": "Керувати підпискою", - "workspace.black.subscription.rollingUsage": "Використання (5 год)", - "workspace.black.subscription.weeklyUsage": "Тижневе використання", - "workspace.black.subscription.resetsIn": "Скидається через", - "workspace.black.subscription.useBalance": "Використовуйте доступний баланс після досягнення лімітів", - "workspace.black.waitlist.title": "Список очікування", - "workspace.black.waitlist.joined": "Ви в списку очікування на план OpenCode Black за ${{plan}} на місяць.", - "workspace.black.waitlist.ready": "Ми готові зареєструвати вас на план OpenCode Black за ${{plan}} на місяць.", - "workspace.black.waitlist.leave": "Залишити список очікування", - "workspace.black.waitlist.leaving": "Вихід...", - "workspace.black.waitlist.left": "Вишли", - "workspace.black.waitlist.enroll": "Зареєструватися", - "workspace.black.waitlist.enrolling": "Реєстрація...", - "workspace.black.waitlist.enrolled": "Зареєстровано", - "workspace.black.waitlist.enrollNote": - "Після натискання «Зареєструватися» підписка почнеться негайно, а картку буде списано.", - - "workspace.lite.loading": "Завантаження...", - "workspace.lite.time.day": "день", - "workspace.lite.time.days": "дні", - "workspace.lite.time.hour": "година", - "workspace.lite.time.hours": "годин(и)", - "workspace.lite.time.minute": "хвилина", - "workspace.lite.time.minutes": "хвилин(и)", - "workspace.lite.time.fewSeconds": "кілька секунд", - "workspace.lite.subscription.message": "Ви підписані на OpenCode Go.", - "workspace.lite.subscription.manage": "Керувати підпискою", - "workspace.lite.subscription.rollingUsage": "Ковзне використання", - "workspace.lite.subscription.weeklyUsage": "Тижневе використання", - "workspace.lite.subscription.monthlyUsage": "Місячне використання", - "workspace.lite.subscription.resetsIn": "Скидається через", - "workspace.lite.subscription.useBalance": "Використовуйте доступний баланс після досягнення лімітів", - "workspace.lite.subscription.selectProvider": 'Виберіть "OpenCode Go" як провайдера в конфігурації opencode.', - "workspace.lite.providers.title": "Провайдери", - "workspace.lite.providers.description": "Керуйте провайдерами, які використовуються для маршрутизації.", - "workspace.lite.providers.useChina": "Увімкнути моделі, розміщені в Китаї", - "workspace.lite.black.message": - "Ви вже підписані на OpenCode Black або в списку очікування. Спочатку скасуйте підписку, якщо хочете перейти на Go.", - "workspace.lite.other.message": "Інший учасник цього робочого простору вже підписаний на OpenCode Go.", - "workspace.lite.promo.description": "OpenCode Go починається від {{price}}, потім $10/місяць, із щедрими лімітами.", - "workspace.lite.promo.price": "$5 за перший місяць", - "workspace.lite.promo.modelsTitle": "Що включено", - "workspace.lite.promo.footer": "План призначений для міжнародних користувачів. Ціни можуть змінюватися.", - "workspace.lite.promo.subscribe": "Підписатися на Go", - "workspace.lite.promo.subscribing": "Перенаправлення...", - "workspace.lite.promo.otherMethods": "Інші способи оплати", - "workspace.lite.promo.selectMethod": "Виберіть спосіб оплати", - - "download.title": "OpenCode | Завантажити", - "download.meta.description": "Завантажте OpenCode для macOS, Windows та Linux", - "download.hero.title": "Завантажити OpenCode", - "download.hero.subtitle": "Доступно в бета-версії для macOS, Windows та Linux", - "download.hero.button": "Завантажити для {{os}}", - "download.section.terminal": "Термінал OpenCode", - "download.section.desktop": "Десктоп OpenCode (Бета)", - "download.section.extensions": "Розширення OpenCode", - "download.section.integrations": "Інтеграції OpenCode", - "download.action.download": "Завантажити", - "download.action.install": "Встановити", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "Не обов'язково, але ймовірно. Вам знадобиться AI-підписка, якщо ви хочете підключити платного провайдера, хоча ви можете працювати з", - "download.faq.a3.localLink": "локальними моделями", - "download.faq.a3.afterLocal.beforeZen": "безкоштовно. Хоча ми рекомендуємо", - "download.faq.a3.afterZen": - ", OpenCode працює з усіма популярними провайдерами, такими як OpenAI, Anthropic, xAI тощо.", - - "download.faq.a5.p1": "OpenCode є 100% безкоштовним.", - "download.faq.a5.p2.beforeZen": - "Будь-які додаткові витрати будуть з вашої підписки у провайдера моделі. Ми рекомендуємо", - "download.faq.a5.p2.afterZen": ".", - - "download.faq.a6.p1": "Ваші дані зберігаються лише при створенні посилань для обміну в OpenCode.", - "download.faq.a6.p2.beforeShare": "Дізнайтеся більше про", - "download.faq.a6.shareLink": "сторінки обміну", - - "enterprise.title": "OpenCode | Enterprise-рішення для вашої організації", - "enterprise.meta.description": "Зв'яжіться з OpenCode для Enterprise-рішень", - "enterprise.hero.title": "Ваш код належить вам", - "enterprise.hero.body1": - "OpenCode працює безпечно всередині вашої організації без зберігання даних, ліцензійних обмежень. Почніть пробний період із командою, потім розгорніть через SSO та внутрішній AI-шлюз.", - "enterprise.hero.body2": "Дайте знати, чим ми можемо допомогти.", - "enterprise.form.name.label": "Повне ім'я", - "enterprise.form.name.placeholder": "Джеф Безос", - "enterprise.form.role.label": "Посада", - "enterprise.form.role.placeholder": "Голова правління", - "enterprise.form.company.label": "Компанія", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "Робоча електронна адреса", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "Номер телефону", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "Яку проблему ви намагаєтеся вирішити?", - "enterprise.form.message.placeholder": "Нам потрібна допомога з...", - "enterprise.form.send": "Надіслати", - "enterprise.form.sending": "Надсилання...", - "enterprise.form.success": "Повідомлення надіслано, ми зв'яжемося найближчим часом.", - "enterprise.form.success.submitted": "Форму успішно надіслано.", - "enterprise.form.error.allFieldsRequired": "Усі поля обов'язкові.", - "enterprise.form.error.invalidEmailFormat": "Недійсний формат email.", - "enterprise.form.error.internalServer": "Внутрішня помилка сервера.", - "enterprise.faq.title": "FAQ", - "enterprise.faq.q1": "Що таке OpenCode Enterprise?", - "enterprise.faq.a1": - "OpenCode Enterprise для організацій, які хочуть гарантувати, що код і дані ніколи не залишають їхню інфраструктуру.", - "enterprise.faq.q2": "Як почати з OpenCode Enterprise?", - "enterprise.faq.a2": - "Почніть із внутрішнього тестування з командою. OpenCode за замовчуванням не зберігає код. Потім зв'яжіться з нами для обговорення цін.", - "enterprise.faq.q3": "Як працює ціноутворення enterprise?", - "enterprise.faq.a3": - "Ми пропонуємо ціну за робоче місце. Якщо у вас власний LLM-шлюз, ми не стягуємо плату за токени.", - "enterprise.faq.q4": "Чи безпечні мої дані з OpenCode Enterprise?", - "enterprise.faq.a4": - "Так. OpenCode не зберігає ваш код або контекст. Вся обробка відбувається локально або через прямі API-виклики.", - - "brand.title": "OpenCode | Бренд", - "brand.meta.description": "Рекомендації щодо бренду OpenCode", - "brand.heading": "Рекомендації щодо бренду", - "brand.subtitle": "Ресурси та матеріали для роботи з брендом OpenCode.", - "brand.downloadAll": "Завантажити всі матеріали", - - "changelog.title": "OpenCode | Журнал змін", - "changelog.meta.description": "Нотатки про випуски та журнал змін OpenCode", - "changelog.hero.title": "Журнал змін", - "changelog.hero.subtitle": "Нові оновлення та покращення OpenCode", - "changelog.empty": "Записів у журналі змін не знайдено.", - "changelog.viewJson": "Переглянути JSON", - - "bench.list.title": "Бенчмарк", - "bench.list.heading": "Бенчмарки", - "bench.list.table.agent": "Агент", - "bench.list.table.model": "Модель", - "bench.list.table.score": "Результат", - "bench.submission.error.allFieldsRequired": "Усі поля обов'язкові.", - - "bench.detail.title": "Бенчмарк — {{task}}", - "bench.detail.notFound": "Завдання не знайдено", - "bench.detail.na": "Н/Д", - "bench.detail.labels.agent": "Агент", - "bench.detail.labels.model": "Модель", - "bench.detail.labels.task": "Завдання", - "bench.detail.labels.repo": "Репозиторій", - "bench.detail.labels.from": "Від", - "bench.detail.labels.to": "До", - "bench.detail.labels.prompt": "Prompt", - "bench.detail.labels.commit": "Коміт", - "bench.detail.labels.averageDuration": "Середня тривалість", - "bench.detail.labels.averageScore": "Середній результат", - "bench.detail.labels.averageCost": "Середня вартість", - "bench.detail.labels.summary": "Підсумок", - "bench.detail.labels.runs": "Запуски", - "bench.detail.labels.score": "Результат", - "bench.detail.labels.base": "База", - "bench.detail.labels.penalty": "Штраф", - "bench.detail.labels.weight": "вага", - "bench.detail.table.run": "Запуск", - "bench.detail.table.score": "Результат (База — Штраф)", - "bench.detail.table.cost": "Вартість", - "bench.detail.table.duration": "Тривалість", - "bench.detail.run.title": "Запуск {{n}}", - "bench.detail.rawJson": "Сирий JSON", -} diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts deleted file mode 100644 index 5bcb84ac82..0000000000 --- a/packages/console/app/src/i18n/zh.ts +++ /dev/null @@ -1,801 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "文档", - "nav.changelog": "更新日志", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "企业版", - "nav.zen": "Zen", - "nav.login": "登录", - "nav.free": "下载", - "nav.home": "首页", - "nav.openMenu": "打开菜单", - "nav.getStartedFree": "免费开始", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "复制 Logo (SVG)", - "nav.context.copyWordmark": "复制商标 (SVG)", - "nav.context.brandAssets": "品牌资产", - - "footer.github": "GitHub", - "footer.docs": "文档", - "footer.changelog": "更新日志", - "footer.feishu": "飞书", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "品牌", - "legal.privacy": "隐私", - "legal.terms": "条款", - - "email.title": "第一时间获知我们的新产品发布", - "email.subtitle": "加入候补名单,获取抢先体验资格。", - "email.placeholder": "电子邮箱地址", - "email.subscribe": "订阅", - "email.success": "即将完成,请检查您的收件箱并确认您的邮箱地址", - - "notFound.title": "未找到页面 | OpenCode", - "notFound.heading": "404 - 页面未找到", - "notFound.home": "首页", - "notFound.docs": "文档", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "opencode logo 亮色", - "notFound.logoDarkAlt": "opencode logo 暗色", - - "user.logout": "退出登录", - - "auth.callback.error.codeMissing": "未找到授权码。", - - "workspace.select": "选择工作区", - "workspace.createNew": "+ 新建工作区", - "workspace.modal.title": "新建工作区", - "workspace.modal.placeholder": "输入工作区名称", - - "common.cancel": "取消", - "common.creating": "正在创建...", - "common.create": "创建", - - "common.videoUnsupported": "您的浏览器不支持 video 标签。", - "common.figure": "图 {{n}}.", - "common.faq": "常见问题", - "common.learnMore": "了解更多", - - "error.invalidPlan": "无效的计划", - "error.workspaceRequired": "缺少工作区 ID", - "error.alreadySubscribed": "此工作区已有订阅", - "error.limitRequired": "缺少限制设置。", - "error.monthlyLimitInvalid": "设置有效的每月限额。", - "error.workspaceNameRequired": "缺少工作区名称。", - "error.nameTooLong": "名称必须少于 255 个字符。", - "error.emailRequired": "缺少电子邮箱", - "error.roleRequired": "缺少角色", - "error.idRequired": "缺少 ID", - "error.nameRequired": "缺少名称", - "error.providerRequired": "缺少提供商", - "error.apiKeyRequired": "缺少 API 密钥", - "error.modelRequired": "缺少模型", - "error.reloadAmountMin": "充值金额必须至少为 ${{amount}}", - "error.reloadTriggerMin": "余额触发阈值必须至少为 ${{amount}}", - - "app.meta.description": "OpenCode - 开源编程代理。", - - "home.title": "OpenCode | 开源 AI 编程代理", - - "temp.title": "OpenCode | 专为终端打造的 AI 编程代理", - "temp.hero.title": "专为终端打造的 AI 编程代理", - "temp.zen": "OpenCode Zen", - "temp.getStarted": "开始使用", - "temp.feature.native.title": "原生 TUI", - "temp.feature.native.body": "响应迅速、原生的、可定制主题的终端 UI", - "temp.feature.zen.beforeLink": "由 OpenCode 提供的", - "temp.feature.zen.link": "精选模型列表", - "temp.feature.zen.afterLink": "", - "temp.feature.models.beforeLink": "通过 Models.dev 支持 75+ LLM 提供商", - "temp.feature.models.afterLink": ",包括本地模型", - "temp.screenshot.caption": "使用 Tokyonight 主题的 OpenCode TUI", - "temp.screenshot.alt": "使用 Tokyonight 主题的 OpenCode TUI", - "temp.logoLightAlt": "opencode logo 亮色", - "temp.logoDarkAlt": "opencode logo 暗色", - - "home.banner.badge": "新", - "home.banner.text": "桌面应用 Beta 版现已推出", - "home.banner.platforms": "支持 macOS, Windows, 和 Linux", - "home.banner.downloadNow": "立即下载", - "home.banner.downloadBetaNow": "立即下载桌面 Beta 版", - - "home.hero.title": "开源 AI 编程代理", - "home.hero.subtitle.a": "内置免费模型,或连接任意提供商的任意模型,", - "home.hero.subtitle.b": "包括 Claude, GPT, Gemini 等。", - - "home.install.ariaLabel": "安装选项", - - "home.what.title": "什么是 OpenCode?", - "home.what.body": "OpenCode 是一个开源代理,帮助您在终端、IDE 或桌面端编写代码。", - "home.what.lsp.title": "支持 LSP", - "home.what.lsp.body": "为 LLM 自动加载合适的 LSP", - "home.what.multiSession.title": "多会话", - "home.what.multiSession.body": "在同一个项目中并行启动多个代理", - "home.what.shareLinks.title": "分享链接", - "home.what.shareLinks.body": "分享任意会话链接以供参考或调试", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "使用 GitHub 登录以使用您的 Copilot 账户", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "使用 OpenAI 登录以使用您的 ChatGPT Plus 或 Pro 账户", - "home.what.anyModel.title": "任意模型", - "home.what.anyModel.body": "通过 Models.dev 支持 75+ LLM 提供商,包括本地模型", - "home.what.anyEditor.title": "任意编辑器", - "home.what.anyEditor.body": "提供终端界面、桌面应用及 IDE 扩展", - "home.what.readDocs": "阅读文档", - - "home.growth.title": "开源 AI 编程代理", - "home.growth.body": - "拥有超过 {{stars}} 颗 GitHub Star,{{contributors}} 位贡献者,以及超过 {{commits}} 次提交,OpenCode 每月被超过 {{monthlyUsers}} 名开发者使用并信赖。", - "home.growth.githubStars": "GitHub Stars", - "home.growth.contributors": "贡献者", - "home.growth.monthlyDevs": "月活开发者", - - "home.privacy.title": "隐私优先的设计", - "home.privacy.body": "OpenCode 不存储您的任何代码或上下文数据,确保可以在对隐私敏感的环境中运行。", - "home.privacy.learnMore": "了解更多关于", - "home.privacy.link": "隐私", - - "home.faq.q1": "什么是 OpenCode?", - "home.faq.a1": "OpenCode 是一个开源代理,帮助您使用任意 AI 模型编写和运行代码。它提供终端界面、桌面应用及 IDE 扩展。", - "home.faq.q2": "如何使用 OpenCode?", - "home.faq.a2.before": "最简单的入门方式是阅读", - "home.faq.a2.link": "介绍", - "home.faq.q3": "使用 OpenCode 需要额外的 AI 订阅吗?", - "home.faq.a3.p1": "不一定。OpenCode 自带一组免费模型,无需创建账户即可使用。", - "home.faq.a3.p2.beforeZen": "此外,您可以通过创建", - "home.faq.a3.p2.afterZen": "账户来使用流行的编程模型。", - "home.faq.a3.p3": "虽然我们鼓励使用 Zen,但 OpenCode 也支持所有主流提供商,如 OpenAI, Anthropic, xAI 等。", - "home.faq.a3.p4.beforeLocal": "您甚至可以连接您的", - "home.faq.a3.p4.localLink": "本地模型", - "home.faq.q4": "我可以使用现有的 AI 订阅吗?", - "home.faq.a4.p1": - "可以,OpenCode 支持所有主流提供商的订阅计划。您可以使用您的 Claude Pro/Max, ChatGPT Plus/Pro, 或 GitHub Copilot 订阅。", - "home.faq.q5": "OpenCode 只能在终端使用吗?", - "home.faq.a5.beforeDesktop": "不再是了!OpenCode 现在也提供", - "home.faq.a5.desktop": "桌面端应用", - "home.faq.a5.and": "和", - "home.faq.a5.web": "网页端", - "home.faq.q6": "OpenCode 多少钱?", - "home.faq.a6": "OpenCode 是 100% 免费使用的。它还自带一组免费模型。如果您连接其他提供商,可能会产生额外费用。", - "home.faq.q7": "数据和隐私如何?", - "home.faq.a7.p1": "只有当您使用我们的免费模型或创建分享链接时,您的数据和信息才会被存储。", - "home.faq.a7.p2.beforeModels": "了解更多关于", - "home.faq.a7.p2.modelsLink": "我们的模型", - "home.faq.a7.p2.and": "和", - "home.faq.a7.p2.shareLink": "分享页面", - "home.faq.q8": "OpenCode 是开源的吗?", - "home.faq.a8.p1": "是的,OpenCode 是完全开源的。源代码公开在", - "home.faq.a8.p2": "遵循", - "home.faq.a8.mitLicense": "MIT 许可证", - "home.faq.a8.p3": - ",这意味着任何人都可以使用、修改或为它的发展做贡献。社区中的任何人都可以提交 issue、提交 PR 并扩展功能。", - - "home.zenCta.title": "访问可靠、优化的编程代理模型", - "home.zenCta.body": - "Zen 为您提供一组精选的 AI 模型,这些模型经过 OpenCode 专门针对编程代理的测试和基准测试。无需担心不同提供商之间不稳定的性能和质量,直接使用行之有效的验证模型。", - "home.zenCta.link": "了解 Zen", - - "zen.title": "OpenCode Zen | 为编程代理精选的可靠、优化模型", - "zen.hero.title": "为编程代理打造的可靠、优化模型", - "zen.hero.body": - "Zen 为您提供一组精选的 AI 模型,这些模型经过 OpenCode 专门针对编程代理的测试和基准测试。无需担心不稳定的性能和质量,直接使用行之有效的验证模型。", - - "zen.faq.q1": "什么是 OpenCode Zen?", - "zen.faq.a1": "Zen 是一组由 OpenCode 团队创建的,专门针对编程代理进行测试和基准测试的 AI 模型精选集。", - "zen.faq.q2": "为什么 Zen 更准确?", - "zen.faq.a2": - "Zen 仅提供经过专门针对编程代理测试和基准测试的模型。正如你不会用黄油刀切牛排一样,也不要用糟糕的模型来写代码。", - "zen.faq.q3": "Zen 更便宜吗?", - "zen.faq.a3": - "Zen 不以盈利为目的。Zen 将模型提供商的成本直接传递给您。Zen 的使用量越高,OpenCode 就越能协商出更好的费率并回馈给您。", - "zen.faq.q4": "Zen 多少钱?", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "按请求收费", - "zen.faq.a4.p1.afterPricing": "零加价,所以您只需支付模型提供商收取的费用。", - "zen.faq.a4.p2.beforeAccount": "您的总费用取决于使用量,且您可以在您的", - "zen.faq.a4.p2.accountLink": "账户中设置每月支出限额", - "zen.faq.a4.p3": "为覆盖成本,OpenCode 仅收取少量支付处理费,每充值 $20 收取 $1.23。", - "zen.faq.q5": "数据和隐私如何?", - "zen.faq.a5.beforeExceptions": "所有 Zen 模型均托管在美国。提供商遵循零留存政策,不使用您的数据进行模型训练,", - "zen.faq.a5.exceptionsLink": "以下例外情况除外", - "zen.faq.q6": "我可以设置支出限额吗?", - "zen.faq.a6": "可以,您可以在账户中设置每月支出限额。", - "zen.faq.q7": "我可以取消吗?", - "zen.faq.a7": "可以,您可以随时禁用计费并使用剩余余额。", - "zen.faq.q8": "我可以在其他编程代理中使用 Zen 吗?", - "zen.faq.a8": - "虽然 Zen 与 OpenCode 配合效果极佳,但您可以在任何代理中使用 Zen。请按照您首选编程代理中的设置说明进行操作。", - - "zen.cta.start": "开始使用 Zen", - "zen.pricing.title": "充值 $20 (即用即付)", - "zen.pricing.fee": "(+ $1.23 银行卡手续费)", - "zen.pricing.body": "可配合任何代理使用。支持设置月度消费限额。随时取消。", - "zen.problem.title": "Zen 解决了什么问题?", - "zen.problem.body": "市面上有太多模型,但只有少数能与编程代理良好配合。大多数提供商配置不同,导致结果参差不齐。", - "zen.problem.subtitle": "我们要为所有人解决这个问题,不仅仅是 OpenCode 用户。", - "zen.problem.item1": "测试精选模型并咨询其团队", - "zen.problem.item2": "与提供商合作确保正确交付", - "zen.problem.item3": "对所有推荐的模型-提供商组合进行基准测试", - "zen.how.title": "Zen 如何工作", - "zen.how.body": "虽然我们建议您配合 OpenCode 使用 Zen,但您也可以将其用于任何代理。", - "zen.how.step1.title": "注册并充值 $20", - "zen.how.step1.beforeLink": "遵循", - "zen.how.step1.link": "设置说明", - "zen.how.step2.title": "使用 Zen,价格透明", - "zen.how.step2.link": "按请求付费", - "zen.how.step2.afterLink": "零加价", - "zen.how.step3.title": "自动充值", - "zen.how.step3.body": "当您的余额低于 $5 时,我们将自动充值 $20", - "zen.privacy.title": "您的隐私对我们很重要", - "zen.privacy.beforeExceptions": "所有 Zen 模型均托管在美国。提供商遵循零留存政策,不使用您的数据进行模型训练,", - "zen.privacy.exceptionsLink": "以下例外情况除外", - - "go.title": "OpenCode Go | 人人可用的低成本编程模型", - "go.meta.description": - "Go 首月 $5,之后 $10/月,提供对 GLM-5.2、GLM-5.1、Kimi K2.7 Code、Kimi K2.6、MiMo-V2.5-Pro、MiMo-V2.5、Qwen3.7 Max、Qwen3.7 Plus、Qwen3.6 Plus、MiniMax M2.7、MiniMax M3、DeepSeek V4 Pro 和 DeepSeek V4 Flash 的 5 小时充裕请求额度。", - "go.hero.title": "人人可用的低成本编程模型", - "go.hero.body": - "Go 将代理编程带给全世界的程序员。提供充裕的限额和对最强大的开源模型的可靠访问,让您可以利用强大的代理进行构建,而无需担心成本或可用性。", - - "go.cta.start": "订阅 Go", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "订阅 Go", - "go.cta.price": "$10/月", - "go.cta.promo": "首月 $5", - "go.pricing.body": "可配合任何代理使用。首月 $5,之后 $10/月。如有需要可充值。随时取消。", - "go.graph.free": "免费", - "go.graph.freePill": "Big Pickle 和免费模型", - "go.graph.go": "Go", - "go.graph.label": "每 5 小时请求数", - "go.graph.usageLimits": "使用限制", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "每 5 小时请求数: {{free}} vs {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "前 CEO, Terminal Products", - "go.testimonials.dax.quoteAfter": "彻底改变了我的生活,这绝对是不二之选。", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "前创始人, SEED, PM, Melt, Pop, Dapt, Cadmus, 和 ViewPoint", - "go.testimonials.jay.quoteBefore": "我们团队 5 个人里有 4 个都爱用", - "go.testimonials.jay.quoteAfter": "。", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "前 Hero, AWS", - "go.testimonials.adam.quoteBefore": "我强烈推荐", - "go.testimonials.adam.quoteAfter": "。真的,非常好用。", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "前设计主管, Laravel", - "go.testimonials.david.quoteBefore": "有了", - "go.testimonials.david.quoteAfter": "我知道所有模型都经过测试,非常适合编程代理。", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "前实习生, Nvidia (4 次)", - "go.testimonials.frank.quote": "我希望我还在 Nvidia。", - "go.problem.title": "Go 解决了什么问题?", - "go.problem.body": - "我们致力于将 OpenCode 体验带给尽可能多的人。OpenCode Go 是一款低成本订阅服务:首月 $5,之后 $10/月。它提供充裕的额度,并让您能可靠地使用最强大的开源模型。", - "go.problem.subtitle": " ", - "go.problem.item1": "低成本订阅定价", - "go.problem.item2": "充裕的限额和可靠的访问", - "go.problem.item3": "为尽可能多的程序员打造", - "go.problem.item4": - "包含 GLM-5.2, GLM-5.1, Kimi K2.7 Code、Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7、MiniMax M3、DeepSeek V4 Pro 和 DeepSeek V4 Flash", - "go.how.title": "Go 如何工作", - "go.how.body": "Go 起价为首月 $5,之后 $10/月。您可以将其与 OpenCode 或任何代理搭配使用。", - "go.how.step1.title": "创建账户", - "go.how.step1.beforeLink": "遵循", - "go.how.step1.link": "设置说明", - "go.how.step2.title": "订阅 Go", - "go.how.step2.link": "首月 $5", - "go.how.step2.afterLink": "之后 $10/月,额度充裕", - "go.how.step3.title": "开始编程", - "go.how.step3.body": "可靠访问开源模型", - "go.privacy.title": "您的隐私对我们很重要", - "go.privacy.body": "该计划主要面向国际用户设计,模型部署在美国、欧盟和新加坡,以确保稳定的全球访问。", - "go.privacy.contactAfter": "如果您有任何问题。", - "go.privacy.beforeExceptions": "Go 模型托管在美国。提供商遵循零留存政策,不使用您的数据进行模型训练,", - "go.privacy.exceptionsLink": "以下例外情况除外", - "go.faq.q1": "什么是 OpenCode Go?", - "go.faq.a1": "Go 是一项低成本订阅服务,为您提供对强大的开源模型的可靠访问,用于代理编程。", - "go.faq.q2": "Go 包含哪些模型?", - "go.faq.a2": "Go 包含下方列出的模型,提供充足的限额和可靠的访问。", - "go.faq.q3": "Go 和 Zen 一样吗?", - "go.faq.a3": - "不。Zen 是按量付费,而 Go 首月 $5,之后 $10/月,提供充裕的额度,并可可靠地访问 GLM-5.2、GLM-5.1、Kimi K2.7 Code、Kimi K2.6、MiMo-V2.5-Pro、MiMo-V2.5、Qwen3.7 Max、Qwen3.7 Plus、Qwen3.6 Plus、MiniMax M2.7、MiniMax M3、DeepSeek V4 Pro 和 DeepSeek V4 Flash 等开源模型。", - "go.faq.q4": "Go 多少钱?", - "go.faq.a4.p1.beforePricing": "Go 费用为", - "go.faq.a4.p1.pricingLink": "首月 $5", - "go.faq.a4.p1.afterPricing": "之后 $10/月,额度充裕。", - "go.faq.a4.p2.beforeAccount": "您可以在您的", - "go.faq.a4.p2.accountLink": "账户", - "go.faq.a4.p3": "中管理订阅。随时取消。", - "go.faq.q5": "数据和隐私如何?", - "go.faq.a5.body": - "该计划主要面向国际用户设计,模型部署在美国、欧盟和新加坡,以确保稳定的全球访问。我们的提供商遵循零留存政策,不使用您的数据进行模型训练。", - "go.faq.a5.beforeExceptions": "Go 模型托管在美国。提供商遵循零留存政策,不使用您的数据进行模型训练,", - "go.faq.a5.exceptionsLink": "以下例外情况除外", - "go.faq.q6": "我可以充值余额吗?", - "go.faq.a6": "如果您需要更多用量,可以在账户中充值余额。", - "go.faq.q7": "我可以取消吗?", - "go.faq.a7": "可以,您可以随时取消。", - "go.faq.q8": "我可以在其他编程代理中使用 Go 吗?", - "go.faq.a8": "可以,您可以在任何代理中使用 Go。请遵循您首选编程代理中的设置说明。", - - "go.faq.q9": "免费模型和 Go 之间的区别是什么?", - "go.faq.a9": - "免费模型包含 Big Pickle 加上当时可用的促销模型,每天有 200 次请求的配额。Go 包含 GLM-5.2, GLM-5.1, Kimi K2.7 Code、Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.6 Plus, MiniMax M2.7、MiniMax M3、DeepSeek V4 Pro 和 DeepSeek V4 Flash,并在滚动窗口(5 小时、每周和每月)内执行更高的请求配额,大致相当于每 5 小时 $12、每周 $30 和每月 $60(实际请求计数因模型和使用情况而异)。", - - "zen.api.error.rateLimitExceeded": "超出速率限制。请稍后重试。", - "zen.api.error.modelNotSupported": "不支持模型 {{model}}", - "zen.api.error.modelFormatNotSupported": "格式 {{format}} 不支持模型 {{model}}", - "zen.api.error.noProviderAvailable": "没有可用的提供商", - "zen.api.error.providerNotSupported": "不支持提供商 {{provider}}", - "zen.api.error.missingApiKey": "缺少 API 密钥。", - "zen.api.error.invalidApiKey": "无效的 API 密钥。", - "zen.api.error.subscriptionQuotaExceeded": "超出订阅配额。请在 {{retryIn}} 后重试。", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "已达到 5 小时使用限额。将在 {{retryIn}} 后重置。如需立即继续使用该模型,请启用从可用余额扣费:{{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "已达到每周使用限额。将在 {{retryIn}} 后重置。如需立即继续使用该模型,请启用从可用余额扣费:{{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "已达到每月使用限额。将在 {{retryIn}} 后重置。如需立即继续使用该模型,请启用从可用余额扣费:{{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "没有付款方式。请在此处添加付款方式:{{billingUrl}}", - "zen.api.error.insufficientBalance": "余额不足。请在此处管理您的计费:{{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "您的工作区已达到每月支出限额 ${{amount}}。请在此处管理您的限额:{{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": "您已达到每月支出限额 ${{amount}}。请在此处管理您的限额:{{membersUrl}}", - "zen.api.error.modelDisabled": "模型已禁用", - "zen.api.error.regionNotAllowed": "该模型部署在中国。如果你想使用该模型,请在设置中启用它:{{consoleGoUrl}}", - "zen.api.error.trialEnded": "{{model}} 的限免活动已结束。您可以订阅 OpenCode Go 继续使用该模型 - {{link}}", - - "black.meta.title": "OpenCode Black | 访问全球顶尖编程模型", - "black.meta.description": "通过 OpenCode Black 订阅计划使用 Claude, GPT, Gemini 等模型。", - "black.hero.title": "访问全球顶尖编程模型", - "black.hero.subtitle": "包括 Claude, GPT, Gemini 等", - "black.title": "OpenCode Black | 定价", - "black.paused": "Black 订阅已暂时暂停注册。", - "black.plan.icon20": "Black 20 计划", - "black.plan.icon100": "Black 100 计划", - "black.plan.icon200": "Black 200 计划", - "black.plan.multiplier100": "用量是 Black 20 的 5 倍", - "black.plan.multiplier200": "用量是 Black 20 的 20 倍", - "black.price.perMonth": "/ 月", - "black.price.perPersonBilledMonthly": "每人每月", - "black.terms.1": "您的订阅不会立即开始", - "black.terms.2": "您将被加入候补名单,并很快激活", - "black.terms.3": "您的卡只会在订阅激活时扣费", - "black.terms.4": "适用使用限制,高度自动化的使用可能会更快达到限制", - "black.terms.5": "订阅仅限个人,团队请联系企业版", - "black.terms.6": "未来可能会调整限制或停止计划", - "black.terms.7": "随时取消订阅", - "black.action.continue": "继续", - "black.finePrint.beforeTerms": "显示价格不含税", - "black.finePrint.terms": "服务条款", - "black.workspace.title": "OpenCode Black | 选择工作区", - "black.workspace.selectPlan": "为此计划选择一个工作区", - "black.workspace.name": "工作区 {{n}}", - "black.subscribe.title": "订阅 OpenCode Black", - "black.subscribe.paymentMethod": "付款方式", - "black.subscribe.loadingPaymentForm": "正在加载付款表单...", - "black.subscribe.selectWorkspaceToContinue": "选择一个工作区以继续", - "black.subscribe.failurePrefix": "哎呀!", - "black.subscribe.error.generic": "发生错误", - "black.subscribe.error.invalidPlan": "无效的计划", - "black.subscribe.error.workspaceRequired": "缺少工作区 ID", - "black.subscribe.error.alreadySubscribed": "此工作区已有订阅", - "black.subscribe.processing": "处理中...", - "black.subscribe.submit": "订阅 ${{plan}}", - "black.subscribe.form.chargeNotice": "您的卡只会在订阅激活时扣费", - "black.subscribe.success.title": "您已加入 OpenCode Black 候补名单", - "black.subscribe.success.subscriptionPlan": "订阅计划", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "金额", - "black.subscribe.success.amountValue": "${{plan}} / 月", - "black.subscribe.success.paymentMethod": "付款方式", - "black.subscribe.success.dateJoined": "加入日期", - "black.subscribe.success.chargeNotice": "您的卡将在订阅激活时扣费", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "使用量", - "workspace.nav.apiKeys": "API 密钥", - "workspace.nav.members": "成员", - "workspace.nav.billing": "计费", - "workspace.nav.settings": "设置", - - "workspace.home.banner.beforeLink": "可靠、优化的编程代理模型。", - "workspace.lite.banner.beforeLink": "低成本编码模型,人人可用。", - "workspace.home.billing.loading": "加载中...", - "workspace.home.billing.enable": "启用计费", - "workspace.home.billing.currentBalance": "当前余额", - - "workspace.newUser.feature.tested.title": "经过测试与验证的模型", - "workspace.newUser.feature.tested.body": "我们专门针对编程代理对模型进行了基准测试和测试,以确保最佳性能。", - "workspace.newUser.feature.quality.title": "最高质量", - "workspace.newUser.feature.quality.body": "访问配置为最佳性能的模型 - 无需降级或路由到更便宜的提供商。", - "workspace.newUser.feature.lockin.title": "无锁定", - "workspace.newUser.feature.lockin.body": - "将 Zen 与任何编程代理结合使用,并在需要时继续在 OpenCode 中使用其他提供商。", - "workspace.newUser.copyApiKey": "复制 API 密钥", - "workspace.newUser.copyKey": "复制密钥", - "workspace.newUser.copied": "已复制!", - "workspace.newUser.step.enableBilling": "启用计费", - "workspace.newUser.step.login.before": "运行", - "workspace.newUser.step.login.after": "并选择 OpenCode", - "workspace.newUser.step.pasteKey": "粘贴您的 API 密钥", - "workspace.newUser.step.models.before": "启动 OpenCode 并运行", - "workspace.newUser.step.models.after": "以选择模型", - - "workspace.models.title": "模型", - "workspace.models.subtitle.beforeLink": "管理工作区成员可以访问哪些模型。", - "workspace.models.table.model": "模型", - "workspace.models.table.enabled": "已启用", - - "workspace.providers.title": "自带密钥 (BYOK)", - "workspace.providers.subtitle": "配置您自己的 AI 提供商 API 密钥。", - "workspace.providers.placeholder": "输入 {{provider}} API 密钥 ({{prefix}}...)", - "workspace.providers.configure": "配置", - "workspace.providers.edit": "编辑", - "workspace.providers.delete": "删除", - "workspace.providers.saving": "正在保存...", - "workspace.providers.save": "保存", - "workspace.providers.table.provider": "提供商", - "workspace.providers.table.apiKey": "API 密钥", - - "workspace.usage.title": "使用历史", - "workspace.usage.subtitle": "近期 API 使用情况和成本。", - "workspace.usage.empty": "发起第一个 API 调用以开始。", - "workspace.usage.table.date": "日期", - "workspace.usage.table.model": "模型", - "workspace.usage.table.input": "输入", - "workspace.usage.table.output": "输出", - "workspace.usage.table.cost": "成本", - "workspace.usage.table.session": "会话", - "workspace.usage.breakdown.input": "输入", - "workspace.usage.breakdown.cacheRead": "缓存读取", - "workspace.usage.breakdown.cacheWrite": "缓存写入", - "workspace.usage.breakdown.output": "输出", - "workspace.usage.breakdown.reasoning": "推理", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "成本", - "workspace.cost.subtitle": "按模型细分的使用成本。", - "workspace.cost.allModels": "所有模型", - "workspace.cost.allKeys": "所有密钥", - "workspace.cost.deletedSuffix": "(已删除)", - "workspace.cost.empty": "所选期间无可用使用数据。", - "workspace.cost.subscriptionShort": "订阅", - - "workspace.keys.title": "API 密钥", - "workspace.keys.subtitle": "管理访问 OpenCode 服务的 API 密钥。", - "workspace.keys.create": "创建 API 密钥", - "workspace.keys.placeholder": "输入密钥名称", - "workspace.keys.empty": "创建 OpenCode 网关 API 密钥", - "workspace.keys.table.name": "名称", - "workspace.keys.table.key": "密钥", - "workspace.keys.table.createdBy": "创建者", - "workspace.keys.table.lastUsed": "最后使用", - "workspace.keys.copyApiKey": "复制 API 密钥", - "workspace.keys.delete": "删除", - - "workspace.members.title": "成员", - "workspace.members.subtitle": "管理工作区成员及其权限。", - "workspace.members.invite": "邀请成员", - "workspace.members.inviting": "正在邀请...", - "workspace.members.beta.beforeLink": "Beta 期间工作区对团队免费。", - "workspace.members.form.invitee": "受邀者", - "workspace.members.form.emailPlaceholder": "输入电子邮箱", - "workspace.members.form.role": "角色", - "workspace.members.form.monthlyLimit": "每月消费限额", - "workspace.members.noLimit": "无限制", - "workspace.members.noLimitLowercase": "无限制", - "workspace.members.invited": "已邀请", - "workspace.members.edit": "编辑", - "workspace.members.delete": "删除", - "workspace.members.saving": "正在保存...", - "workspace.members.save": "保存", - "workspace.members.table.email": "邮箱", - "workspace.members.table.role": "角色", - "workspace.members.table.monthLimit": "月限额", - "workspace.members.role.admin": "管理员", - "workspace.members.role.adminDescription": "可以管理模型、成员和计费", - "workspace.members.role.member": "成员", - "workspace.members.role.memberDescription": "只能为自己生成 API 密钥", - - "workspace.settings.title": "设置", - "workspace.settings.subtitle": "更新您的工作区名称和偏好。", - "workspace.settings.workspaceName": "工作区名称", - "workspace.settings.defaultName": "默认", - "workspace.settings.updating": "正在更新...", - "workspace.settings.save": "保存", - "workspace.settings.edit": "编辑", - - "workspace.billing.title": "计费", - "workspace.billing.subtitle.beforeLink": "管理付款方式。", - "workspace.billing.contactUs": "联系我们", - "workspace.billing.subtitle.afterLink": "如果您有任何问题。", - "workspace.billing.currentBalance": "当前余额", - "workspace.billing.add": "充值 $", - "workspace.billing.enterAmount": "输入金额", - "workspace.billing.loading": "加载中...", - "workspace.billing.addAction": "充值", - "workspace.billing.addBalance": "充值余额", - "workspace.billing.alipay": "支付宝", - "workspace.billing.wechat": "微信支付", - "workspace.billing.linkedToStripe": "已关联 Stripe", - "workspace.billing.manage": "管理", - "workspace.billing.enable": "启用计费", - - "workspace.monthlyLimit.title": "每月限额", - "workspace.monthlyLimit.subtitle": "为您的账户设置每月使用限额。", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "正在设置...", - "workspace.monthlyLimit.set": "设置", - "workspace.monthlyLimit.edit": "编辑限额", - "workspace.monthlyLimit.noLimit": "未设置使用限额。", - "workspace.monthlyLimit.currentUsage.beforeMonth": "当前", - "workspace.monthlyLimit.currentUsage.beforeAmount": "的使用量为 $", - - "workspace.redeem.title": "兑换优惠券", - "workspace.redeem.subtitle": "兑换优惠码以领取充值额度或权益。", - "workspace.redeem.placeholder": "输入优惠码", - "workspace.redeem.redeem": "兑换", - "workspace.redeem.redeeming": "兑换中...", - "workspace.redeem.success": "优惠券兑换成功。", - - "workspace.reload.title": "自动充值", - "workspace.reload.disabled.before": "自动充值已", - "workspace.reload.disabled.state": "禁用", - "workspace.reload.disabled.after": "启用后将在余额不足时自动充值。", - "workspace.reload.enabled.before": "自动充值已", - "workspace.reload.enabled.state": "启用", - "workspace.reload.enabled.middle": "我们将自动充值", - "workspace.reload.processingFee": "手续费", - "workspace.reload.enabled.after": "当余额达到", - "workspace.reload.edit": "编辑", - "workspace.reload.enable": "启用", - "workspace.reload.enableAutoReload": "启用自动充值", - "workspace.reload.reloadAmount": "充值 $", - "workspace.reload.whenBalanceReaches": "当余额达到 $", - "workspace.reload.saving": "正在保存...", - "workspace.reload.save": "保存", - "workspace.reload.failedAt": "充值失败于", - "workspace.reload.reason": "原因:", - "workspace.reload.updatePaymentMethod": "请更新您的付款方式并重试。", - "workspace.reload.retrying": "正在重试...", - "workspace.reload.retry": "重试", - "workspace.reload.error.paymentFailed": "支付失败。", - - "workspace.payments.title": "支付历史", - "workspace.payments.subtitle": "近期支付交易。", - "workspace.payments.table.date": "日期", - "workspace.payments.table.paymentId": "支付 ID", - "workspace.payments.table.amount": "金额", - "workspace.payments.table.receipt": "收据", - "workspace.payments.type.credit": "充值", - "workspace.payments.type.subscription": "订阅", - "workspace.payments.view": "查看", - - "workspace.black.loading": "加载中...", - "workspace.black.time.day": "天", - "workspace.black.time.days": "天", - "workspace.black.time.hour": "小时", - "workspace.black.time.hours": "小时", - "workspace.black.time.minute": "分钟", - "workspace.black.time.minutes": "分钟", - "workspace.black.time.fewSeconds": "几秒钟", - "workspace.black.subscription.title": "订阅", - "workspace.black.subscription.message": "您已订阅 OpenCode Black,价格为每月 ${{plan}}。", - "workspace.black.subscription.manage": "管理订阅", - "workspace.black.subscription.rollingUsage": "5 小时用量", - "workspace.black.subscription.weeklyUsage": "每周用量", - "workspace.black.subscription.resetsIn": "重置于", - "workspace.black.subscription.useBalance": "达到使用限额后使用您的可用余额", - "workspace.black.waitlist.title": "候补名单", - "workspace.black.waitlist.joined": "您已加入每月 ${{plan}} 的 OpenCode Black 计划候补名单。", - "workspace.black.waitlist.ready": "我们已准备好将您加入每月 ${{plan}} 的 OpenCode Black 计划。", - "workspace.black.waitlist.leave": "退出候补名单", - "workspace.black.waitlist.leaving": "正在退出...", - "workspace.black.waitlist.left": "已退出", - "workspace.black.waitlist.enroll": "加入", - "workspace.black.waitlist.enrolling": "正在加入...", - "workspace.black.waitlist.enrolled": "已加入", - "workspace.black.waitlist.enrollNote": "点击加入后,您的订阅将立即开始,并将从您的卡中扣费。", - - "workspace.lite.loading": "加载中...", - "workspace.lite.time.day": "天", - "workspace.lite.time.days": "天", - "workspace.lite.time.hour": "小时", - "workspace.lite.time.hours": "小时", - "workspace.lite.time.minute": "分钟", - "workspace.lite.time.minutes": "分钟", - "workspace.lite.time.fewSeconds": "几秒钟", - "workspace.lite.subscription.message": "您已订阅 OpenCode Go。", - "workspace.lite.subscription.manage": "管理订阅", - "workspace.lite.subscription.rollingUsage": "滚动用量", - "workspace.lite.subscription.weeklyUsage": "每周用量", - "workspace.lite.subscription.monthlyUsage": "每月用量", - "workspace.lite.subscription.resetsIn": "重置于", - "workspace.lite.subscription.useBalance": "达到使用限额后使用您的可用余额", - "workspace.lite.subscription.selectProvider": - "在你的 opencode 配置中选择「OpenCode Go」作为提供商,即可使用 Go 模型。", - "workspace.lite.providers.title": "提供商", - "workspace.lite.providers.description": "控制用于路由的提供商。", - "workspace.lite.providers.useChina": "启用部署在中国的模型", - "workspace.lite.black.message": "您当前已订阅 OpenCode Black 或在候补名单中。如需切换到 Go,请先取消订阅。", - "workspace.lite.other.message": "此工作区中的另一位成员已经订阅了 OpenCode Go。每个工作区只有一名成员可以订阅。", - "workspace.lite.promo.description": - "OpenCode Go 起价为 {{price}},之后 $10/月,并提供对流行开放编码模型的可靠访问,同时享有充裕的使用限额。", - "workspace.lite.promo.price": "首月 $5", - "workspace.lite.promo.modelsTitle": "包含模型", - "workspace.lite.promo.footer": - "该计划主要面向国际用户设计,模型部署在美国、欧盟和新加坡,以确保全球范围内的稳定访问体验。定价和使用额度可能会根据早期用户的使用情况和反馈持续调整与优化。", - "workspace.lite.promo.subscribe": "订阅 Go", - "workspace.lite.promo.subscribing": "正在重定向...", - "workspace.lite.promo.otherMethods": "其他付款方式", - "workspace.lite.promo.selectMethod": "选择付款方式", - - "workspace.referral.copyLink": "复制链接", - "workspace.referral.copied": "已复制", - "workspace.referral.overview.title": "邀请好友", - "workspace.referral.overview.subtitle": "好友订阅后,您可获得 $5,对方也可获得 $5。", - "workspace.referral.instructions.share": "分享您的推荐链接。", - "workspace.referral.instructions.subscribe": "好友加入并订阅 Go。", - "workspace.referral.instructions.claim": "你们都将获得 $5 使用额度,可用于您的 Go 使用限额。", - "workspace.referral.rewards.title": "邀请奖励", - "workspace.referral.rewards.description": "将可用的邀请积分应用到您的 Go 用量。", - "workspace.referral.rewards.subtitle": "已使用 {{applied}} / {{total}} 个奖励。", - "workspace.referral.rewards.empty": "暂无邀请奖励。", - "workspace.referral.table.reward": "奖励", - "workspace.referral.table.referral": "描述", - "workspace.referral.table.date": "日期", - "workspace.referral.reward.description.inviter": "已邀请 {{email}}", - "workspace.referral.reward.description.invitee": "由 {{email}} 邀请", - "workspace.referral.reward.action.subscribeUnlock": "订阅以解锁", - "workspace.referral.reward.action.view": "查看奖励", - "workspace.referral.reward.action.applied": "奖励已使用", - "workspace.referral.reward.source.pendingInviter": "等待对方订阅", - "workspace.referral.reward.source.pendingInvitee": "订阅即可解锁奖励", - "workspace.referral.reward.source.available": "奖励可使用", - "workspace.referral.reward.source.applied": "奖励已使用", - "workspace.referral.reward.status.applied": "奖励已使用", - "workspace.referral.reward.status.pendingInviter": "订阅以解锁", - "workspace.referral.reward.status.pendingInvitee": "订阅以解锁", - "workspace.referral.apply.noGo": "订阅以解锁", - "workspace.referral.apply.preview": "查看奖励", - "workspace.referral.apply.action": "使用", - "workspace.referral.apply.confirmTitle": "使用奖励", - "workspace.referral.apply.confirmBody": "使用 {{amount}} 抵扣当前工作区的用量。", - "workspace.referral.apply.confirmAction": "使用", - - "download.title": "OpenCode | 下载", - "download.meta.description": "下载适用于 macOS, Windows, 和 Linux 的 OpenCode", - "download.hero.title": "下载 OpenCode", - "download.hero.subtitle": "适用于 macOS, Windows, 和 Linux 的 Beta 版", - "download.hero.button": "下载 {{os}} 版", - "download.section.terminal": "OpenCode 终端", - "download.section.desktop": "OpenCode 桌面版 (Beta)", - "download.section.extensions": "OpenCode 扩展", - "download.section.integrations": "OpenCode 集成", - "download.action.download": "下载", - "download.action.install": "安装", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "不一定,但可能需要。如果您想将 OpenCode 连接到付费提供商,您需要 AI 订阅,尽管您可以配合", - "download.faq.a3.localLink": "本地模型", - "download.faq.a3.afterLocal.beforeZen": "免费使用。虽然我们鼓励用户使用", - "download.faq.a3.afterZen": ",但 OpenCode 支持所有主流提供商,如 OpenAI, Anthropic, xAI 等。", - - "download.faq.a5.p1": "OpenCode 是 100% 免费使用的。", - "download.faq.a5.p2.beforeZen": - "任何额外费用都来自您对模型提供商的订阅。虽然 OpenCode 支持任何模型提供商,但我们建议使用", - "download.faq.a5.p2.afterZen": "。", - - "download.faq.a6.p1": "只有当您在 OpenCode 中创建分享链接时,您的数据和信息才会被存储。", - "download.faq.a6.p2.beforeShare": "了解更多关于", - "download.faq.a6.shareLink": "分享页面", - - "enterprise.title": "OpenCode | 面向组织的 OpenCode 企业版解决方案", - "enterprise.meta.description": "联系 OpenCode 获取企业版解决方案", - "enterprise.hero.title": "您的代码属于您", - "enterprise.hero.body1": - "OpenCode 在您的组织内部安全运行,不存储任何数据或上下文,也没有许可限制或所有权主张。您可以先与团队开始试用,然后通过集成 SSO 和内部 AI 网关将其部署到整个组织。", - "enterprise.hero.body2": "告诉我们如何为您提供帮助。", - "enterprise.form.name.label": "全名", - "enterprise.form.name.placeholder": "Jeff Bezos", - "enterprise.form.role.label": "角色", - "enterprise.form.role.placeholder": "执行主席", - "enterprise.form.company.label": "公司", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "公司邮箱", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "电话号码", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "您想解决什么问题?", - "enterprise.form.message.placeholder": "我们需要帮助...", - "enterprise.form.send": "发送", - "enterprise.form.sending": "正在发送...", - "enterprise.form.success": "消息已发送,我们会尽快与您联系。", - "enterprise.form.success.submitted": "表单提交成功。", - "enterprise.form.error.allFieldsRequired": "所有字段均为必填项。", - "enterprise.form.error.invalidEmailFormat": "邮箱格式无效。", - "enterprise.form.error.internalServer": "内部服务器错误。", - "enterprise.faq.title": "常见问题", - "enterprise.faq.q1": "什么是 OpenCode 企业版?", - "enterprise.faq.a1": - "OpenCode 企业版专为那些希望确保代码和数据永远不离开其基础设施的组织而设计。它通过使用集中式配置,与您的 SSO 和内部 AI 网关集成来实现这一点。", - "enterprise.faq.q2": "如何开始使用 OpenCode 企业版?", - "enterprise.faq.a2": - "只需从您的团队内部试用开始即可。OpenCode 默认不存储您的代码或上下文数据,使得入门非常容易。然后联系我们讨论定价和实施选项。", - "enterprise.faq.q3": "企业版定价如何运作?", - "enterprise.faq.a3": - "我们提供按席位计费的企业定价。如果您拥有自己的 LLM 网关,我们不收取 token 使用费。如需了解更多详情,请联系我们获取基于您组织需求的定制报价。", - "enterprise.faq.q4": "OpenCode 企业版安全吗?", - "enterprise.faq.a4": - "是的。OpenCode 不存储您的代码或上下文数据。所有处理均在本地进行,或通过直接 API 调用您的 AI 提供商。通过集中配置和 SSO 集成,您的数据始终保留在您组织的基础设施内。", - - "brand.title": "OpenCode | 品牌", - "brand.meta.description": "OpenCode 品牌指南", - "brand.heading": "品牌指南", - "brand.subtitle": "帮助您使用 OpenCode 品牌的资源和资产。", - "brand.downloadAll": "下载所有资产", - - "changelog.title": "OpenCode | 更新日志", - "changelog.meta.description": "OpenCode 发布说明和更新日志", - "changelog.hero.title": "更新日志", - "changelog.hero.subtitle": "OpenCode 的新更新和改进", - "changelog.empty": "未找到更新日志条目。", - "changelog.viewJson": "查看 JSON", - - "bench.list.title": "基准测试", - "bench.list.heading": "基准测试", - "bench.list.table.agent": "代理", - "bench.list.table.model": "模型", - "bench.list.table.score": "分数", - "bench.submission.error.allFieldsRequired": "所有字段均为必填项。", - - "bench.detail.title": "基准测试 - {{task}}", - "bench.detail.notFound": "未找到任务", - "bench.detail.na": "N/A", - "bench.detail.labels.agent": "代理", - "bench.detail.labels.model": "模型", - "bench.detail.labels.task": "任务", - "bench.detail.labels.repo": "仓库", - "bench.detail.labels.from": "来源", - "bench.detail.labels.to": "目标", - "bench.detail.labels.prompt": "提示词", - "bench.detail.labels.commit": "Commit", - "bench.detail.labels.averageDuration": "平均耗时", - "bench.detail.labels.averageScore": "平均分数", - "bench.detail.labels.averageCost": "平均成本", - "bench.detail.labels.summary": "摘要", - "bench.detail.labels.runs": "运行次数", - "bench.detail.labels.score": "分数", - "bench.detail.labels.base": "基础", - "bench.detail.labels.penalty": "惩罚", - "bench.detail.labels.weight": "权重", - "bench.detail.table.run": "运行", - "bench.detail.table.score": "分数 (基础 - 惩罚)", - "bench.detail.table.cost": "成本", - "bench.detail.table.duration": "耗时", - "bench.detail.run.title": "运行 {{n}}", - "bench.detail.rawJson": "原始 JSON", -} satisfies Dict diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts deleted file mode 100644 index eaa5763d46..0000000000 --- a/packages/console/app/src/i18n/zht.ts +++ /dev/null @@ -1,800 +0,0 @@ -import type { Dict } from "./en" -import { dict as en } from "./en" - -export const dict = { - ...en, - "nav.github": "GitHub", - "nav.docs": "文件", - "nav.changelog": "更新日誌", - "nav.discord": "Discord", - "nav.x": "X", - "nav.enterprise": "企業", - "nav.zen": "Zen", - "nav.login": "登入", - "nav.free": "下載", - "nav.home": "首頁", - "nav.openMenu": "開啟選單", - "nav.getStartedFree": "免費開始使用", - "nav.logoAlt": "OpenCode", - - "nav.context.copyLogo": "複製標誌(SVG)", - "nav.context.copyWordmark": "複製字標(SVG)", - "nav.context.brandAssets": "品牌資產", - - "footer.github": "GitHub", - "footer.docs": "文件", - "footer.changelog": "更新日誌", - "footer.feishu": "飞书", - "footer.discord": "Discord", - "footer.x": "X", - - "legal.brand": "品牌", - "legal.privacy": "隱私", - "legal.terms": "條款", - - "email.title": "第一時間獲取我們發布新產品的消息", - "email.subtitle": "加入候補名單,搶先體驗。", - "email.placeholder": "電子郵件地址", - "email.subscribe": "訂閱", - "email.success": "就差一步,請查收你的信箱並確認電子郵件地址", - - "notFound.title": "找不到頁面 | OpenCode", - "notFound.heading": "404 - 找不到頁面", - "notFound.home": "首頁", - "notFound.docs": "文件", - "notFound.github": "GitHub", - "notFound.discord": "Discord", - "notFound.logoLightAlt": "opencode 淺色標誌", - "notFound.logoDarkAlt": "opencode 深色標誌", - - "user.logout": "登出", - - "auth.callback.error.codeMissing": "找不到授權碼。", - - "workspace.select": "選取工作區", - "workspace.createNew": "+ 建立新工作區", - "workspace.modal.title": "建立新工作區", - "workspace.modal.placeholder": "輸入工作區名稱", - - "common.cancel": "取消", - "common.creating": "正在建立...", - "common.create": "建立", - - "common.videoUnsupported": "你的瀏覽器不支援 video 標籤。", - "common.figure": "圖 {{n}}.", - "common.faq": "常見問題", - "common.learnMore": "了解更多", - - "error.invalidPlan": "無效的方案", - "error.workspaceRequired": "需要工作區 ID", - "error.alreadySubscribed": "此工作區已有訂閱", - "error.limitRequired": "需要設定限額。", - "error.monthlyLimitInvalid": "請設定有效的每月限額。", - "error.workspaceNameRequired": "需要工作區名稱。", - "error.nameTooLong": "名稱長度不能超過 255 個字元。", - "error.emailRequired": "需要電子郵件", - "error.roleRequired": "需要角色", - "error.idRequired": "需要 ID", - "error.nameRequired": "需要名稱", - "error.providerRequired": "需要供應商", - "error.apiKeyRequired": "需要 API 金鑰", - "error.modelRequired": "需要模型", - "error.reloadAmountMin": "儲值金額必須至少為 ${{amount}}", - "error.reloadTriggerMin": "餘額觸發門檻必須至少為 ${{amount}}", - - "app.meta.description": "OpenCode - 開源編碼代理。", - - "home.title": "OpenCode | 開源 AI 編碼代理", - - "temp.title": "OpenCode | 專為終端打造的 AI 編碼代理", - "temp.hero.title": "專為終端打造的 AI 編碼代理", - "temp.zen": "OpenCode Zen", - "temp.getStarted": "開始使用", - "temp.feature.native.title": "原生 TUI", - "temp.feature.native.body": "響應式、原生、可自訂主題的終端介面", - "temp.feature.zen.beforeLink": "", - "temp.feature.zen.link": "精選模型列表", - "temp.feature.zen.afterLink": "由 OpenCode 提供", - "temp.feature.models.beforeLink": "透過", - "temp.feature.models.afterLink": "支援 75+ 家 LLM 供應商,包括本地模型", - "temp.screenshot.caption": "使用 tokyonight 主題的 OpenCode TUI", - "temp.screenshot.alt": "使用 tokyonight 主題的 OpenCode TUI", - "temp.logoLightAlt": "opencode 淺色標誌", - "temp.logoDarkAlt": "opencode 深色標誌", - - "home.banner.badge": "新", - "home.banner.text": "桌面應用已推出 Beta", - "home.banner.platforms": "支援 macOS、Windows 與 Linux", - "home.banner.downloadNow": "立即下載", - "home.banner.downloadBetaNow": "立即下載桌面 Beta 版", - - "home.hero.title": "開源 AI 編碼代理", - "home.hero.subtitle.a": "內建免費模型,或連接任意供應商的任意模型,", - "home.hero.subtitle.b": "包括 Claude、GPT、Gemini 等。", - - "home.install.ariaLabel": "安裝選項", - - "home.what.title": "什麼是 OpenCode?", - "home.what.body": "OpenCode 是一個開源代理,幫助你在終端、IDE 或桌面端編寫程式碼。", - "home.what.lsp.title": "支援 LSP", - "home.what.lsp.body": "為 LLM 自動載入合適的 LSP", - "home.what.multiSession.title": "多工作階段", - "home.what.multiSession.body": "在同一專案中平行啟動多個代理", - "home.what.shareLinks.title": "分享連結", - "home.what.shareLinks.body": "將任意階段的連結分享給他人供參考或除錯", - "home.what.copilot.title": "GitHub Copilot", - "home.what.copilot.body": "使用 GitHub 登入以使用你的 Copilot 帳號", - "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", - "home.what.chatgptPlus.body": "使用 OpenAI 登入以使用你的 ChatGPT Plus 或 Pro 帳號", - "home.what.anyModel.title": "任意模型", - "home.what.anyModel.body": "透過 Models.dev 連接 75+ 家 LLM 供應商,包括本地模型", - "home.what.anyEditor.title": "任意編輯器", - "home.what.anyEditor.body": "可作為終端介面、桌面應用程式與 IDE 擴充功能使用", - "home.what.readDocs": "閱讀文件", - - "home.growth.title": "開源 AI 編碼代理", - "home.growth.body": - "擁有超過 {{stars}} 個 GitHub Star、{{contributors}} 位貢獻者以及超過 {{commits}} 次提交,OpenCode 每月被超過 {{monthlyUsers}} 名開發者使用並信賴。", - "home.growth.githubStars": "GitHub Star", - "home.growth.contributors": "貢獻者", - "home.growth.monthlyDevs": "每月活躍開發者", - - "home.privacy.title": "隱私優先", - "home.privacy.body": "OpenCode 不儲存你的程式碼或上下文資料,因此可以在注重隱私的環境中運作。", - "home.privacy.learnMore": "了解更多關於", - "home.privacy.link": "隱私", - - "home.faq.q1": "什麼是 OpenCode?", - "home.faq.a1": - "OpenCode 是一個開源代理,幫助你使用任意 AI 模型編寫並執行程式碼。它提供終端介面、桌面應用程式或 IDE 擴充功能。", - "home.faq.q2": "如何使用 OpenCode?", - "home.faq.a2.before": "最簡單的方式是先閱讀", - "home.faq.a2.link": "入門介紹", - "home.faq.q3": "使用 OpenCode 需要額外的 AI 訂閱嗎?", - "home.faq.a3.p1": "不一定。OpenCode 自帶一組免費模型,無需建立帳號即可使用。", - "home.faq.a3.p2.beforeZen": "此外,你可以透過建立", - "home.faq.a3.p2.afterZen": "帳號使用常見的編碼模型。", - "home.faq.a3.p3": "我們鼓勵使用 Zen,但 OpenCode 也支援 OpenAI、Anthropic、xAI 等主流供應商。", - "home.faq.a3.p4.beforeLocal": "你還可以連接你的", - "home.faq.a3.p4.localLink": "本地模型", - "home.faq.q4": "可以使用我現有的 AI 訂閱嗎?", - "home.faq.a4.p1": - "可以。OpenCode 支援主流供應商的訂閱方案,包括 Claude Pro/Max、ChatGPT Plus/Pro 與 GitHub Copilot。", - "home.faq.q5": "OpenCode 只能在終端中使用嗎?", - "home.faq.a5.beforeDesktop": "不再是了!OpenCode 現在也提供", - "home.faq.a5.desktop": "桌面端", - "home.faq.a5.and": "與", - "home.faq.a5.web": "網頁端", - "home.faq.q6": "OpenCode 價格如何?", - "home.faq.a6": "OpenCode 100% 免費使用。它也自帶一組免費模型。如果你連接其他供應商,可能會產生額外費用。", - "home.faq.q7": "資料與隱私怎麼辦?", - "home.faq.a7.p1": "僅當你使用我們的免費模型或建立可分享連結時,才會儲存你的資料與資訊。", - "home.faq.a7.p2.beforeModels": "了解更多關於", - "home.faq.a7.p2.modelsLink": "我們的模型", - "home.faq.a7.p2.and": "與", - "home.faq.a7.p2.shareLink": "分享頁面", - "home.faq.q8": "OpenCode 是開源的嗎?", - "home.faq.a8.p1": "是的,OpenCode 完全開源。原始碼公開在", - "home.faq.a8.p2": "並採用", - "home.faq.a8.mitLicense": "MIT 授權條款", - "home.faq.a8.p3": ",意味著任何人都可以使用、修改或貢獻。社群中的任何人都可以提交 issue、pull requests 並擴充功能。", - - "home.zenCta.title": "存取可靠且最佳化的編碼代理模型", - "home.zenCta.body": - "Zen 提供一組精選的 AI 模型,這些模型是 OpenCode 為了編碼代理專門測試與評測過的。無需擔心不同供應商之間效能與品質參差不齊,使用經過驗證的模型即可。", - "home.zenCta.link": "了解 Zen", - - "zen.title": "OpenCode Zen | 專為編碼代理精選的可靠最佳化模型", - "zen.hero.title": "專為編碼代理提供的可靠最佳化模型", - "zen.hero.body": - "Zen 提供一組精選的 AI 模型,這些模型是 OpenCode 為了編碼代理專門測試與評測過的。無需擔心效能與品質參差不齊,使用經過驗證的模型即可。", - - "zen.faq.q1": "什麼是 OpenCode Zen?", - "zen.faq.a1": "Zen 是由 OpenCode 團隊打造、專為編碼代理測試與評測的 AI 模型精選集合。", - "zen.faq.q2": "是什麼讓 Zen 更準確?", - "zen.faq.a2": "Zen 只提供專為編碼代理測試與評測的模型。你不會用奶油刀切牛排,也別用糟糕的模型來寫程式。", - "zen.faq.q3": "Zen 更便宜嗎?", - "zen.faq.a3": - "Zen 不以營利為目的。Zen 會把模型供應商的成本原樣轉給你。Zen 的使用量越高,OpenCode 就越能談到更好的價格並把優惠讓利給你。", - "zen.faq.q4": "Zen 費用是多少?", - "zen.faq.a4.p1.beforePricing": "Zen", - "zen.faq.a4.p1.pricingLink": "按請求付費", - "zen.faq.a4.p1.afterPricing": "且零加價,因此你支付的就是模型供應商的原價。", - "zen.faq.a4.p2.beforeAccount": "總費用取決於使用量,你可以在", - "zen.faq.a4.p2.accountLink": "帳戶中設定每月支出上限", - "zen.faq.a4.p3": "為了覆蓋成本,OpenCode 只會收取很小的支付處理費:每次儲值 $20 會額外收取 $1.23。", - "zen.faq.q5": "資料與隱私如何?", - "zen.faq.a5.beforeExceptions": "所有 Zen 模型都託管在美國。供應商遵循零留存政策,不會將你的資料用於模型訓練,但有", - "zen.faq.a5.exceptionsLink": "以下例外", - "zen.faq.q6": "我可以設定支出上限嗎?", - "zen.faq.a6": "可以,你可以在帳戶中設定每月支出上限。", - "zen.faq.q7": "我可以取消嗎?", - "zen.faq.a7": "可以,你可以隨時停用計費並使用剩餘餘額。", - "zen.faq.q8": "我可以在其他編碼代理中使用 Zen 嗎?", - "zen.faq.a8": - "Zen 與 OpenCode 搭配得很好,但你也可以在任何代理中使用 Zen。請在你偏好的編碼代理中按照設定說明進行配置。", - - "zen.cta.start": "開始使用 Zen", - "zen.pricing.title": "儲值 $20 即用即付餘額", - "zen.pricing.fee": "(+$1.23 刷卡手續費)", - "zen.pricing.body": "可與任何代理一起使用。設定每月支出限額。隨時取消。", - "zen.problem.title": "Zen 正在解決什麼問題?", - "zen.problem.body": - "可用的模型有很多,但只有少數可以與編碼代理配合良好。大多數供應商以不同的方式配置它們,導致結果參差不齊。", - "zen.problem.subtitle": "我們正在為所有人解決此問題,而不僅僅是 OpenCode 使用者。", - "zen.problem.item1": "測試選定的模型並諮詢其團隊", - "zen.problem.item2": "與供應商合作以確保正確交付", - "zen.problem.item3": "對我們推薦的所有模型-供應商組合進行基準測試", - "zen.how.title": "Zen 如何運作", - "zen.how.body": "雖然我們建議你將 Zen 與 OpenCode 一起使用,但你可以將 Zen 與任何代理一起使用。", - "zen.how.step1.title": "註冊並儲值 $20 餘額", - "zen.how.step1.beforeLink": "遵循", - "zen.how.step1.link": "設定說明", - "zen.how.step2.title": "使用 Zen 並享有透明定價", - "zen.how.step2.link": "按請求付費", - "zen.how.step2.afterLink": "零加價", - "zen.how.step3.title": "自動儲值", - "zen.how.step3.body": "當你的餘額達到 $5 時,我們會自動儲值 $20", - "zen.privacy.title": "你的隱私對我們很重要", - "zen.privacy.beforeExceptions": "所有 Zen 模型均在美國託管。供應商遵循零留存政策,不會將你的資料用於模型訓練,並且有", - "zen.privacy.exceptionsLink": "以下例外情況", - - "go.title": "OpenCode Go | 低成本全民編碼模型", - "go.meta.description": - "Go 首月 $5,之後 $10/月,提供對 GLM-5.2、GLM-5.1、Kimi K2.7 Code、Kimi K2.6、MiMo-V2.5-Pro、MiMo-V2.5、Qwen3.7 Max、Qwen3.7 Plus、Qwen3.6 Plus、MiniMax M2.7、MiniMax M3、DeepSeek V4 Pro 和 DeepSeek V4 Flash 的 5 小時充裕請求額度。", - "go.hero.title": "低成本全民編碼模型", - "go.hero.body": - "Go 將代理編碼帶給全世界的程式設計師。提供寬裕的限額以及對最強大開源模型的穩定存取,讓你可以使用強大的代理進行構建,而無需擔心成本或可用性。", - - "go.cta.start": "訂閱 Go", - "go.cta.template": "{{text}} {{price}}", - "go.cta.text": "訂閱 Go", - "go.cta.price": "$10/月", - "go.cta.promo": "首月 $5", - "go.pricing.body": "可搭配任何代理使用。首月 $5,之後 $10/月。如有需要可儲值。隨時取消。", - "go.graph.free": "免費", - "go.graph.freePill": "Big Pickle 與免費模型", - "go.graph.go": "Go", - "go.graph.label": "每 5 小時請求數", - "go.graph.usageLimits": "使用限制", - "go.graph.tick": "{{n}}x", - "go.graph.aria": "每 5 小時請求數:{{free}} vs {{go}}", - - "go.testimonials.brand.zen": "Zen", - "go.testimonials.brand.go": "Go", - "go.testimonials.handle": "@OpenCode", - "go.testimonials.dax.name": "Dax Raad", - "go.testimonials.dax.title": "前 Terminal Products CEO", - "go.testimonials.dax.quoteAfter": "改變了我的生活,這絕對是不二之選。", - "go.testimonials.jay.name": "Jay V", - "go.testimonials.jay.title": "前 SEED、Melt、Pop、Dapt、Cadmus 與 ViewPoint 創辦人", - "go.testimonials.jay.quoteBefore": "我們團隊中 5 個人有 4 個人喜歡使用", - "go.testimonials.jay.quoteAfter": "。", - "go.testimonials.adam.name": "Adam Elmore", - "go.testimonials.adam.title": "前 AWS Hero", - "go.testimonials.adam.quoteBefore": "我強烈推薦", - "go.testimonials.adam.quoteAfter": "。認真說,真的很好用。", - "go.testimonials.david.name": "David Hill", - "go.testimonials.david.title": "前 Laravel 設計總監", - "go.testimonials.david.quoteBefore": "有了", - "go.testimonials.david.quoteAfter": ",我知道所有模型都經過測試並且完美適用於編碼代理。", - "go.testimonials.frank.name": "Frank Wang", - "go.testimonials.frank.title": "前 Nvidia 實習生(4 次)", - "go.testimonials.frank.quote": "我希望我還在 Nvidia。", - "go.problem.title": "Go 正在解決什麼問題?", - "go.problem.body": - "我們致力於將 OpenCode 體驗帶給盡可能多的人。OpenCode Go 是一款低成本訂閱服務:首月 $5,之後 $10/月。它提供充裕的額度,並讓您能可靠地使用最強大的開源模型。", - "go.problem.subtitle": " ", - "go.problem.item1": "低成本訂閱定價", - "go.problem.item2": "寬裕的限額與穩定存取", - "go.problem.item3": "專為盡可能多的程式設計師打造", - "go.problem.item4": - "包含 GLM-5.2、GLM-5.1、Kimi K2.7 Code、Kimi K2.6、MiMo-V2.5-Pro、MiMo-V2.5、Qwen3.7 Max、Qwen3.7 Plus、Qwen3.6 Plus、MiniMax M2.7、MiniMax M3、DeepSeek V4 Pro 與 DeepSeek V4 Flash", - "go.how.title": "Go 如何運作", - "go.how.body": "Go 起價為首月 $5,之後 $10/月。您可以將其與 OpenCode 或任何代理搭配使用。", - "go.how.step1.title": "建立帳號", - "go.how.step1.beforeLink": "遵循", - "go.how.step1.link": "設定說明", - "go.how.step2.title": "訂閱 Go", - "go.how.step2.link": "首月 $5", - "go.how.step2.afterLink": "之後 $10/月,額度充裕", - "go.how.step3.title": "開始編碼", - "go.how.step3.body": "穩定存取開源模型", - "go.privacy.title": "你的隱私對我們很重要", - "go.privacy.body": "該方案主要面向國際用戶設計,模型託管在美國、歐盟和新加坡,以確保全球穩定存取。", - "go.privacy.contactAfter": "如果你有任何問題。", - "go.privacy.beforeExceptions": "Go 模型託管在美國。供應商遵循零留存政策,不會將你的資料用於模型訓練,但有", - "go.privacy.exceptionsLink": "以下例外", - "go.faq.q1": "什麼是 OpenCode Go?", - "go.faq.a1": "Go 是一個低成本訂閱方案,讓你穩定存取強大的開源模型以進行代理編碼。", - "go.faq.q2": "Go 包含哪些模型?", - "go.faq.a2": "Go 包含下方列出的模型,提供充足的額度與穩定的存取。", - "go.faq.q3": "Go 與 Zen 一樣嗎?", - "go.faq.a3": - "不。Zen 是按量付費,而 Go 首月 $5,之後 $10/月,提供充裕的額度,並可可靠地存取 GLM-5.2、GLM-5.1、Kimi K2.7 Code、Kimi K2.6、MiMo-V2.5-Pro、MiMo-V2.5、Qwen3.7 Max、Qwen3.7 Plus、Qwen3.6 Plus、MiniMax M2.7、MiniMax M3、DeepSeek V4 Pro 和 DeepSeek V4 Flash 等開源模型。", - "go.faq.q4": "Go 費用是多少?", - "go.faq.a4.p1.beforePricing": "Go 費用為", - "go.faq.a4.p1.pricingLink": "首月 $5", - "go.faq.a4.p1.afterPricing": "之後 $10/月,額度充裕。", - "go.faq.a4.p2.beforeAccount": "你可以在你的", - "go.faq.a4.p2.accountLink": "帳戶", - "go.faq.a4.p3": "中管理訂閱。隨時取消。", - "go.faq.q5": "資料與隱私怎麼辦?", - "go.faq.a5.body": - "該方案主要面向國際用戶設計,模型託管在美國、歐盟和新加坡,以確保全球穩定存取。我們的供應商遵循零留存政策,不會將你的資料用於模型訓練。", - "go.faq.a5.beforeExceptions": "Go 模型託管在美國。供應商遵循零留存政策,不會將你的資料用於模型訓練,但有", - "go.faq.a5.exceptionsLink": "以下例外", - "go.faq.q6": "我可以儲值額度嗎?", - "go.faq.a6": "如果你需要更多使用量,可以在帳戶中儲值額度。", - "go.faq.q7": "我可以取消嗎?", - "go.faq.a7": "可以,你可以隨時取消。", - "go.faq.q8": "我可以在其他編碼代理中使用 Go 嗎?", - "go.faq.a8": "可以,你可以將 Go 與任何代理一起使用。請在你偏好的編碼代理中按照設定說明進行配置。", - - "go.faq.q9": "免費模型與 Go 有什麼區別?", - "go.faq.a9": - "免費模型包括 Big Pickle 以及當時可用的促銷模型,配額為 200 次請求/天。Go 包括 GLM-5.2、GLM-5.1、Kimi K2.7 Code、Kimi K2.6、MiMo-V2.5-Pro、MiMo-V2.5、Qwen3.7 Max、Qwen3.7 Plus、Qwen3.6 Plus、MiniMax M2.7、MiniMax M3、DeepSeek V4 Pro 與 DeepSeek V4 Flash,並在滾動視窗(5 小時、每週和每月)內執行更高的請求配額,大約相當於每 5 小時 $12、每週 $30 和每月 $60(實際請求數因模型和使用情況而異)。", - - "zen.api.error.rateLimitExceeded": "超出頻率限制。請稍後再試。", - "zen.api.error.modelNotSupported": "不支援模型 {{model}}", - "zen.api.error.modelFormatNotSupported": "模型 {{model}} 不支援格式 {{format}}", - "zen.api.error.noProviderAvailable": "無可用的供應商", - "zen.api.error.providerNotSupported": "不支援供應商 {{provider}}", - "zen.api.error.missingApiKey": "缺少 API 金鑰。", - "zen.api.error.invalidApiKey": "無效的 API 金鑰。", - "zen.api.error.subscriptionQuotaExceeded": "超出訂閱配額。請在 {{retryIn}} 後重試。", - "zen.api.error.goSubscriptionRollingLimitExceeded": - "已達 5 小時使用上限,將在 {{retryIn}} 後重置。若要立即繼續使用此模型,請從可用餘額啟用使用量:{{consoleGoUrl}}", - "zen.api.error.goSubscriptionWeeklyLimitExceeded": - "已達每週使用上限,將在 {{retryIn}} 後重置。若要立即繼續使用此模型,請從可用餘額啟用使用量:{{consoleGoUrl}}", - "zen.api.error.goSubscriptionMonthlyLimitExceeded": - "已達每月使用上限,將在 {{retryIn}} 後重置。若要立即繼續使用此模型,請從可用餘額啟用使用量:{{consoleGoUrl}}", - "zen.api.error.noPaymentMethod": "無付款方式。請在此處新增付款方式:{{billingUrl}}", - "zen.api.error.insufficientBalance": "餘額不足。請在此處管理你的帳務:{{billingUrl}}", - "zen.api.error.workspaceMonthlyLimitReached": - "你的工作區已達到每月支出限額 ${{amount}}。請在此處管理你的限額:{{billingUrl}}", - "zen.api.error.userMonthlyLimitReached": "你已達到每月支出限額 ${{amount}}。請在此處管理你的限額:{{membersUrl}}", - "zen.api.error.modelDisabled": "模型已停用", - "zen.api.error.regionNotAllowed": "此模型部署於中國。如果你想使用此模型,請在設定中啟用它:{{consoleGoUrl}}", - "zen.api.error.trialEnded": "{{model}} 的限免活动已結束。您可以訂閱 OpenCode Go 繼續使用該模型 - {{link}}", - - "black.meta.title": "OpenCode Black | 存取全球最佳編碼模型", - "black.meta.description": "透過 OpenCode Black 訂閱方案存取 Claude、GPT、Gemini 等模型。", - "black.hero.title": "存取全球最佳編碼模型", - "black.hero.subtitle": "包括 Claude、GPT、Gemini 等", - "black.title": "OpenCode Black | 定價", - "black.paused": "Black 訂閱暫時暫停註冊。", - "black.plan.icon20": "Black 20 方案", - "black.plan.icon100": "Black 100 方案", - "black.plan.icon200": "Black 200 方案", - "black.plan.multiplier100": "比 Black 20 多 5 倍使用量", - "black.plan.multiplier200": "比 Black 20 多 20 倍使用量", - "black.price.perMonth": "每月", - "black.price.perPersonBilledMonthly": "每人每月計費", - "black.terms.1": "你的訂閱不會立即開始", - "black.terms.2": "你將被加入候補名單並在不久後啟用", - "black.terms.3": "你的卡片僅在訂閱啟用時才會扣款", - "black.terms.4": "適用使用限制,高度自動化的使用可能會更快達到限制", - "black.terms.5": "訂閱僅限個人使用,團隊請聯繫企業版", - "black.terms.6": "未來可能會調整限制或終止方案", - "black.terms.7": "隨時取消你的訂閱", - "black.action.continue": "繼續", - "black.finePrint.beforeTerms": "顯示價格未包含適用稅項", - "black.finePrint.terms": "服務條款", - "black.workspace.title": "OpenCode Black | 選擇工作區", - "black.workspace.selectPlan": "為此方案選擇一個工作區", - "black.workspace.name": "工作區 {{n}}", - "black.subscribe.title": "訂閱 OpenCode Black", - "black.subscribe.paymentMethod": "付款方式", - "black.subscribe.loadingPaymentForm": "正在載入付款表單...", - "black.subscribe.selectWorkspaceToContinue": "選擇一個工作區以繼續", - "black.subscribe.failurePrefix": "噢不!", - "black.subscribe.error.generic": "發生錯誤", - "black.subscribe.error.invalidPlan": "無效的方案", - "black.subscribe.error.workspaceRequired": "需要工作區 ID", - "black.subscribe.error.alreadySubscribed": "此工作區已有訂閱", - "black.subscribe.processing": "處理中...", - "black.subscribe.submit": "訂閱 ${{plan}}", - "black.subscribe.form.chargeNotice": "你僅在訂閱啟用時才會被扣款", - "black.subscribe.success.title": "你已在 OpenCode Black 候補名單上", - "black.subscribe.success.subscriptionPlan": "訂閱方案", - "black.subscribe.success.planName": "OpenCode Black {{plan}}", - "black.subscribe.success.amount": "金額", - "black.subscribe.success.amountValue": "${{plan}} 每月", - "black.subscribe.success.paymentMethod": "付款方式", - "black.subscribe.success.dateJoined": "加入日期", - "black.subscribe.success.chargeNotice": "你的卡片將在訂閱啟用時扣款", - - "workspace.nav.zen": "Zen", - "workspace.nav.go": "Go", - "workspace.nav.usage": "使用量", - "workspace.nav.apiKeys": "API 金鑰", - "workspace.nav.members": "成員", - "workspace.nav.billing": "帳務", - "workspace.nav.settings": "設定", - - "workspace.home.banner.beforeLink": "編碼代理的可靠最佳化模型。", - "workspace.lite.banner.beforeLink": "低成本編碼模型,人人可用。", - "workspace.home.billing.loading": "載入中...", - "workspace.home.billing.enable": "啟用帳務", - "workspace.home.billing.currentBalance": "目前餘額", - - "workspace.newUser.feature.tested.title": "經過測試與驗證的模型", - "workspace.newUser.feature.tested.body": "我們專門針對編碼代理對模型進行了基準測試和測試,以確保最佳效能。", - "workspace.newUser.feature.quality.title": "最高品質", - "workspace.newUser.feature.quality.body": "存取配置為最佳效能的模型 - 無需降級或路由到更便宜的供應商。", - "workspace.newUser.feature.lockin.title": "無綁定", - "workspace.newUser.feature.lockin.body": - "將 Zen 與任何編碼代理結合使用,並在需要時隨時使用 OpenCode 連接其他供應商。", - "workspace.newUser.copyApiKey": "複製 API 金鑰", - "workspace.newUser.copyKey": "複製金鑰", - "workspace.newUser.copied": "已複製!", - "workspace.newUser.step.enableBilling": "啟用帳務", - "workspace.newUser.step.login.before": "執行", - "workspace.newUser.step.login.after": "並選擇 OpenCode", - "workspace.newUser.step.pasteKey": "貼上你的 API 金鑰", - "workspace.newUser.step.models.before": "啟動 OpenCode 並執行", - "workspace.newUser.step.models.after": "以選擇模型", - - "workspace.models.title": "模型", - "workspace.models.subtitle.beforeLink": "管理工作區成員可以存取哪些模型。", - "workspace.models.table.model": "模型", - "workspace.models.table.enabled": "啟用", - - "workspace.providers.title": "自帶金鑰", - "workspace.providers.subtitle": "設定你自己的 AI 供應商 API 金鑰。", - "workspace.providers.placeholder": "輸入 {{provider}} API 金鑰({{prefix}}...)", - "workspace.providers.configure": "設定", - "workspace.providers.edit": "編輯", - "workspace.providers.delete": "刪除", - "workspace.providers.saving": "儲存中...", - "workspace.providers.save": "儲存", - "workspace.providers.table.provider": "供應商", - "workspace.providers.table.apiKey": "API 金鑰", - - "workspace.usage.title": "使用紀錄", - "workspace.usage.subtitle": "最近的 API 使用情況與成本。", - "workspace.usage.empty": "進行第一次 API 呼叫即可開始。", - "workspace.usage.table.date": "日期", - "workspace.usage.table.model": "模型", - "workspace.usage.table.input": "輸入", - "workspace.usage.table.output": "輸出", - "workspace.usage.table.cost": "成本", - "workspace.usage.table.session": "會話", - "workspace.usage.breakdown.input": "輸入", - "workspace.usage.breakdown.cacheRead": "快取讀取", - "workspace.usage.breakdown.cacheWrite": "快取寫入", - "workspace.usage.breakdown.output": "輸出", - "workspace.usage.breakdown.reasoning": "推理", - "workspace.usage.subscription": "Black (${{amount}})", - "workspace.usage.lite": "Go (${{amount}})", - "workspace.usage.byok": "BYOK (${{amount}})", - - "workspace.cost.title": "成本", - "workspace.cost.subtitle": "按模型細分的使用成本。", - "workspace.cost.allModels": "所有模型", - "workspace.cost.allKeys": "所有金鑰", - "workspace.cost.deletedSuffix": "(已刪除)", - "workspace.cost.empty": "所選期間沒有可用的使用資料。", - "workspace.cost.subscriptionShort": "訂", - - "workspace.keys.title": "API 金鑰", - "workspace.keys.subtitle": "管理你的 API 金鑰以存取 OpenCode 服務。", - "workspace.keys.create": "建立 API 金鑰", - "workspace.keys.placeholder": "輸入金鑰名稱", - "workspace.keys.empty": "建立 OpenCode 閘道器 API 金鑰", - "workspace.keys.table.name": "名稱", - "workspace.keys.table.key": "金鑰", - "workspace.keys.table.createdBy": "建立者", - "workspace.keys.table.lastUsed": "最後使用", - "workspace.keys.copyApiKey": "複製 API 金鑰", - "workspace.keys.delete": "刪除", - - "workspace.members.title": "成員", - "workspace.members.subtitle": "管理工作區成員及其權限。", - "workspace.members.invite": "邀請成員", - "workspace.members.inviting": "邀請中...", - "workspace.members.beta.beforeLink": "Beta 測試期間,工作區對團隊免費。", - "workspace.members.form.invitee": "受邀者", - "workspace.members.form.emailPlaceholder": "輸入電子郵件", - "workspace.members.form.role": "角色", - "workspace.members.form.monthlyLimit": "每月支出限額", - "workspace.members.noLimit": "無限制", - "workspace.members.noLimitLowercase": "無限制", - "workspace.members.invited": "已邀請", - "workspace.members.edit": "編輯", - "workspace.members.delete": "刪除", - "workspace.members.saving": "儲存中...", - "workspace.members.save": "儲存", - "workspace.members.table.email": "電子郵件", - "workspace.members.table.role": "角色", - "workspace.members.table.monthLimit": "月限額", - "workspace.members.role.admin": "管理員", - "workspace.members.role.adminDescription": "可以管理模型、成員和帳務", - "workspace.members.role.member": "成員", - "workspace.members.role.memberDescription": "只能為自己生成 API 金鑰", - - "workspace.settings.title": "設定", - "workspace.settings.subtitle": "更新你的工作區名稱與偏好設定。", - "workspace.settings.workspaceName": "工作區名稱", - "workspace.settings.defaultName": "預設", - "workspace.settings.updating": "更新中...", - "workspace.settings.save": "儲存", - "workspace.settings.edit": "編輯", - - "workspace.billing.title": "帳務", - "workspace.billing.subtitle.beforeLink": "管理付款方式。", - "workspace.billing.contactUs": "聯絡我們", - "workspace.billing.subtitle.afterLink": "如果你有任何問題。", - "workspace.billing.currentBalance": "目前餘額", - "workspace.billing.add": "儲值 $", - "workspace.billing.enterAmount": "輸入金額", - "workspace.billing.loading": "載入中...", - "workspace.billing.addAction": "儲值", - "workspace.billing.addBalance": "儲值餘額", - "workspace.billing.alipay": "支付寶", - "workspace.billing.wechat": "微信支付", - "workspace.billing.linkedToStripe": "已連結 Stripe", - "workspace.billing.manage": "管理", - "workspace.billing.enable": "啟用帳務", - - "workspace.monthlyLimit.title": "每月限額", - "workspace.monthlyLimit.subtitle": "為你的帳戶設定每月使用限額。", - "workspace.monthlyLimit.placeholder": "50", - "workspace.monthlyLimit.setting": "設定中...", - "workspace.monthlyLimit.set": "設定", - "workspace.monthlyLimit.edit": "編輯限額", - "workspace.monthlyLimit.noLimit": "未設定使用限額。", - "workspace.monthlyLimit.currentUsage.beforeMonth": "目前", - "workspace.monthlyLimit.currentUsage.beforeAmount": "的使用量為 $", - - "workspace.redeem.title": "兌換優惠券", - "workspace.redeem.subtitle": "兌換優惠碼以領取儲值額度或權益。", - "workspace.redeem.placeholder": "輸入優惠碼", - "workspace.redeem.redeem": "兌換", - "workspace.redeem.redeeming": "兌換中...", - "workspace.redeem.success": "優惠券兌換成功。", - - "workspace.reload.title": "自動儲值", - "workspace.reload.disabled.before": "自動儲值已", - "workspace.reload.disabled.state": "停用", - "workspace.reload.disabled.after": "啟用後會在餘額偏低時自動儲值。", - "workspace.reload.enabled.before": "自動儲值已", - "workspace.reload.enabled.state": "啟用", - "workspace.reload.enabled.middle": "我們將自動儲值", - "workspace.reload.processingFee": "手續費", - "workspace.reload.enabled.after": "當餘額達到", - "workspace.reload.edit": "編輯", - "workspace.reload.enable": "啟用", - "workspace.reload.enableAutoReload": "啟用自動儲值", - "workspace.reload.reloadAmount": "儲值 $", - "workspace.reload.whenBalanceReaches": "當餘額達到 $", - "workspace.reload.saving": "儲存中...", - "workspace.reload.save": "儲存", - "workspace.reload.failedAt": "儲值失敗於", - "workspace.reload.reason": "原因:", - "workspace.reload.updatePaymentMethod": "請更新你的付款方式並重試。", - "workspace.reload.retrying": "重試中...", - "workspace.reload.retry": "重試", - "workspace.reload.error.paymentFailed": "付款失敗。", - - "workspace.payments.title": "付款紀錄", - "workspace.payments.subtitle": "最近的付款交易。", - "workspace.payments.table.date": "日期", - "workspace.payments.table.paymentId": "付款 ID", - "workspace.payments.table.amount": "金額", - "workspace.payments.table.receipt": "收據", - "workspace.payments.type.credit": "信用額度", - "workspace.payments.type.subscription": "訂閱", - "workspace.payments.view": "檢視", - - "workspace.black.loading": "載入中...", - "workspace.black.time.day": "天", - "workspace.black.time.days": "天", - "workspace.black.time.hour": "小時", - "workspace.black.time.hours": "小時", - "workspace.black.time.minute": "分鐘", - "workspace.black.time.minutes": "分鐘", - "workspace.black.time.fewSeconds": "幾秒鐘", - "workspace.black.subscription.title": "訂閱", - "workspace.black.subscription.message": "你已訂閱 OpenCode Black,費用為每月 ${{plan}}。", - "workspace.black.subscription.manage": "管理訂閱", - "workspace.black.subscription.rollingUsage": "5 小時使用量", - "workspace.black.subscription.weeklyUsage": "每週使用量", - "workspace.black.subscription.resetsIn": "重置於", - "workspace.black.subscription.useBalance": "達到使用限額後使用你的可用餘額", - "workspace.black.waitlist.title": "候補名單", - "workspace.black.waitlist.joined": "你已加入每月 ${{plan}} 的 OpenCode Black 方案候補名單。", - "workspace.black.waitlist.ready": "我們已準備好將你加入每月 ${{plan}} 的 OpenCode Black 方案。", - "workspace.black.waitlist.leave": "離開候補名單", - "workspace.black.waitlist.leaving": "離開中...", - "workspace.black.waitlist.left": "已離開", - "workspace.black.waitlist.enroll": "加入", - "workspace.black.waitlist.enrolling": "加入中...", - "workspace.black.waitlist.enrolled": "已加入", - "workspace.black.waitlist.enrollNote": "當你點選「加入」後,你的訂閱將立即開始,並且將從你的卡片中扣款。", - - "workspace.lite.loading": "載入中...", - "workspace.lite.time.day": "天", - "workspace.lite.time.days": "天", - "workspace.lite.time.hour": "小時", - "workspace.lite.time.hours": "小時", - "workspace.lite.time.minute": "分鐘", - "workspace.lite.time.minutes": "分鐘", - "workspace.lite.time.fewSeconds": "幾秒", - "workspace.lite.subscription.message": "您已訂閱 OpenCode Go。", - "workspace.lite.subscription.manage": "管理訂閱", - "workspace.lite.subscription.rollingUsage": "滾動使用量", - "workspace.lite.subscription.weeklyUsage": "每週使用量", - "workspace.lite.subscription.monthlyUsage": "每月使用量", - "workspace.lite.subscription.resetsIn": "重置時間:", - "workspace.lite.subscription.useBalance": "達到使用限制後使用您的可用餘額", - "workspace.lite.subscription.selectProvider": - "在您的 opencode 設定中選擇「OpenCode Go」作為提供商,即可使用 Go 模型。", - "workspace.lite.providers.title": "提供商", - "workspace.lite.providers.description": "控制用於路由的提供商。", - "workspace.lite.providers.useChina": "啟用部署在中國的模型", - "workspace.lite.black.message": "您目前已訂閱 OpenCode Black 或在候補名單中。若要切換至 Go,請先取消訂閱。", - "workspace.lite.other.message": "此工作區中的另一位成員已訂閱 OpenCode Go。每個工作區只能有一位成員訂閱。", - "workspace.lite.promo.description": - "OpenCode Go 起價為 {{price}},之後 $10/月,並提供對熱門開放編碼模型的可靠存取,同時享有充裕的使用額度。", - "workspace.lite.promo.price": "首月 $5", - "workspace.lite.promo.modelsTitle": "包含模型", - "workspace.lite.promo.footer": - "該計畫主要面向國際用戶設計,模型部署在美國、歐盟和新加坡,以確保全球範圍內的穩定存取體驗。定價和使用額度可能會根據早期用戶的使用情況和回饋持續調整與優化。", - "workspace.lite.promo.subscribe": "訂閱 Go", - "workspace.lite.promo.subscribing": "重新導向中...", - "workspace.lite.promo.otherMethods": "其他付款方式", - "workspace.lite.promo.selectMethod": "選擇付款方式", - - "workspace.referral.copyLink": "複製連結", - "workspace.referral.copied": "已複製", - "workspace.referral.overview.title": "邀請朋友", - "workspace.referral.overview.subtitle": "朋友訂閱後,您可獲得 $5,對方也可獲得 $5。", - "workspace.referral.instructions.share": "分享您的推薦連結。", - "workspace.referral.instructions.subscribe": "朋友加入並訂閱 Go。", - "workspace.referral.instructions.claim": "你們都將獲得 $5 使用額度,可用於您的 Go 使用限額。", - "workspace.referral.rewards.title": "邀請獎勵", - "workspace.referral.rewards.description": "將可用的邀請點數套用至您的 Go 使用量。", - "workspace.referral.rewards.subtitle": "已使用 {{applied}} / {{total}} 個獎勵。", - "workspace.referral.rewards.empty": "暫無邀請獎勵。", - "workspace.referral.table.reward": "獎勵", - "workspace.referral.table.referral": "描述", - "workspace.referral.table.date": "日期", - "workspace.referral.reward.description.inviter": "已邀請 {{email}}", - "workspace.referral.reward.description.invitee": "由 {{email}} 邀請", - "workspace.referral.reward.action.subscribeUnlock": "訂閱以解鎖", - "workspace.referral.reward.action.view": "查看獎勵", - "workspace.referral.reward.action.applied": "獎勵已使用", - "workspace.referral.reward.source.pendingInviter": "等待對方訂閱", - "workspace.referral.reward.source.pendingInvitee": "訂閱即可解鎖獎勵", - "workspace.referral.reward.source.available": "獎勵可使用", - "workspace.referral.reward.source.applied": "獎勵已使用", - "workspace.referral.reward.status.applied": "獎勵已使用", - "workspace.referral.reward.status.pendingInviter": "訂閱以解鎖", - "workspace.referral.reward.status.pendingInvitee": "訂閱以解鎖", - "workspace.referral.apply.noGo": "訂閱以解鎖", - "workspace.referral.apply.preview": "查看獎勵", - "workspace.referral.apply.action": "使用", - "workspace.referral.apply.confirmTitle": "使用獎勵", - "workspace.referral.apply.confirmBody": "使用 {{amount}} 抵扣目前工作區的用量。", - "workspace.referral.apply.confirmAction": "使用", - - "download.title": "OpenCode | 下載", - "download.meta.description": "下載適用於 macOS、Windows 與 Linux 的 OpenCode", - "download.hero.title": "下載 OpenCode", - "download.hero.subtitle": "適用於 macOS、Windows 與 Linux 的 Beta 版現已提供", - "download.hero.button": "下載 {{os}} 版", - "download.section.terminal": "OpenCode 終端", - "download.section.desktop": "OpenCode 桌面版(Beta)", - "download.section.extensions": "OpenCode 擴充功能", - "download.section.integrations": "OpenCode 整合", - "download.action.download": "下載", - "download.action.install": "安裝", - - "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", - "download.platform.macosIntel": "macOS (Intel)", - "download.platform.windowsX64": "Windows (x64)", - "download.platform.linuxDeb": "Linux (.deb)", - "download.platform.linuxRpm": "Linux (.rpm)", - - "download.faq.a3.beforeLocal": - "不一定,但很可能需要。如果你想將 OpenCode 連接到付費供應商,你需要 AI 訂閱,不過你也可以使用", - "download.faq.a3.localLink": "本地模型", - "download.faq.a3.afterLocal.beforeZen": "免費。我們也推薦使用", - "download.faq.a3.afterZen": ",但 OpenCode 同樣支援 OpenAI、Anthropic、xAI 等所有主流供應商。", - - "download.faq.a5.p1": "OpenCode 100% 免費使用。", - "download.faq.a5.p2.beforeZen": "額外費用來自你對模型供應商的訂閱。雖然 OpenCode 支援任何模型供應商,但我們建議使用", - "download.faq.a5.p2.afterZen": "。", - - "download.faq.a6.p1": "你的資料與資訊只會在你於 OpenCode 中建立可分享連結時被儲存。", - "download.faq.a6.p2.beforeShare": "了解更多關於", - "download.faq.a6.shareLink": "分享頁面", - - "enterprise.title": "OpenCode | 面向組織的企業解決方案", - "enterprise.meta.description": "聯絡 OpenCode 取得企業解決方案", - "enterprise.hero.title": "你的程式碼屬於你", - "enterprise.hero.body1": - "OpenCode 在你的組織內部安全運作,不會儲存任何資料或上下文,也沒有授權限制或所有權主張。你可以先與團隊進行試用,然後透過與你的 SSO 與內部 AI 閘道器整合,將其部署到整個組織。", - "enterprise.hero.body2": "告訴我們能如何幫助你。", - "enterprise.form.name.label": "全名", - "enterprise.form.name.placeholder": "傑夫·貝佐斯", - "enterprise.form.role.label": "職稱", - "enterprise.form.role.placeholder": "執行董事長", - "enterprise.form.company.label": "公司", - "enterprise.form.company.placeholder": "Acme Inc", - "enterprise.form.email.label": "公司 Email", - "enterprise.form.email.placeholder": "jeff@amazon.com", - "enterprise.form.phone.label": "電話號碼", - "enterprise.form.phone.placeholder": "+1 234 567 8900", - "enterprise.form.message.label": "你想解決什麼問題?", - "enterprise.form.message.placeholder": "我們需要幫助來...", - "enterprise.form.send": "傳送", - "enterprise.form.sending": "傳送中...", - "enterprise.form.success": "訊息已傳送,我們會盡快與你聯絡。", - "enterprise.form.success.submitted": "表單已成功送出。", - "enterprise.form.error.allFieldsRequired": "所有欄位均為必填。", - "enterprise.form.error.invalidEmailFormat": "無效的電子郵件格式。", - "enterprise.form.error.internalServer": "內部伺服器錯誤。", - "enterprise.faq.title": "常見問題", - "enterprise.faq.q1": "什麼是 OpenCode Enterprise?", - "enterprise.faq.a1": - "OpenCode Enterprise 適用於希望確保程式碼與資料絕不離開自己基礎設施的組織。透過中央化設定,它可與你的 SSO 與內部 AI 閘道器整合,以達成此目標。", - "enterprise.faq.q2": "如何開始使用 OpenCode Enterprise?", - "enterprise.faq.a2": - "只要先以團隊的內部試用開始。OpenCode 預設不會儲存你的程式碼或上下文資料,所以上手非常容易。之後聯絡我們,討論定價與完整實作方案。", - "enterprise.faq.q3": "企業定價是如何進行的?", - "enterprise.faq.a3": - "我們提供按席位的企業定價。如果你有自己的 LLM 閘道器,我們不會對使用的 token 另外收費。更多詳情,請聯絡我們以獲得依據組織需求的客製報價。", - "enterprise.faq.q4": "我的資料在 OpenCode Enterprise 中是安全的嗎?", - "enterprise.faq.a4": - "是的。OpenCode 不會儲存你的程式碼或上下文資料。所有處理都會在本地或透過直接呼叫你的 AI 供應商 API 完成。透過中央化設定與 SSO 整合,你的資料會安全保留在組織的基礎設施內部。", - - "brand.title": "OpenCode | 品牌", - "brand.meta.description": "OpenCode 品牌指南", - "brand.heading": "品牌指南", - "brand.subtitle": "協助你使用 OpenCode 品牌的資源與素材。", - "brand.downloadAll": "下載所有素材", - - "changelog.title": "OpenCode | 更新日誌", - "changelog.meta.description": "OpenCode 發布說明與更新日誌", - "changelog.hero.title": "更新日誌", - "changelog.hero.subtitle": "OpenCode 的新更新與改善", - "changelog.empty": "找不到更新日誌項目。", - "changelog.viewJson": "檢視 JSON", - - "bench.list.title": "評測", - "bench.list.heading": "評測", - "bench.list.table.agent": "代理", - "bench.list.table.model": "模型", - "bench.list.table.score": "分數", - "bench.submission.error.allFieldsRequired": "所有欄位均為必填。", - - "bench.detail.title": "評測 - {{task}}", - "bench.detail.notFound": "找不到任務", - "bench.detail.na": "N/A", - "bench.detail.labels.agent": "代理", - "bench.detail.labels.model": "模型", - "bench.detail.labels.task": "任務", - "bench.detail.labels.repo": "儲存庫", - "bench.detail.labels.from": "起點", - "bench.detail.labels.to": "終點", - "bench.detail.labels.prompt": "提示詞", - "bench.detail.labels.commit": "提交", - "bench.detail.labels.averageDuration": "平均耗時", - "bench.detail.labels.averageScore": "平均分數", - "bench.detail.labels.averageCost": "平均成本", - "bench.detail.labels.summary": "摘要", - "bench.detail.labels.runs": "執行次數", - "bench.detail.labels.score": "分數", - "bench.detail.labels.base": "基準", - "bench.detail.labels.penalty": "扣分", - "bench.detail.labels.weight": "權重", - "bench.detail.table.run": "執行", - "bench.detail.table.score": "分數(基準 - 扣分)", - "bench.detail.table.cost": "成本", - "bench.detail.table.duration": "耗時", - "bench.detail.run.title": "執行 {{n}}", - "bench.detail.rawJson": "原始 JSON", -} satisfies Dict diff --git a/packages/console/app/src/lib/language.ts b/packages/console/app/src/lib/language.ts index a196f663db..d2a2f89319 100644 --- a/packages/console/app/src/lib/language.ts +++ b/packages/console/app/src/lib/language.ts @@ -1,23 +1,4 @@ -export const LOCALES = [ - "en", - "zh", - "zht", - "ko", - "de", - "es", - "fr", - "it", - "da", - "ja", - "pl", - "ru", - "uk", - "ar", - "no", - "br", - "th", - "tr", -] as const +export const LOCALES = ["en", "es"] as const export type Locale = (typeof LOCALES)[number] @@ -31,107 +12,25 @@ function fix(pathname: string) { const LABEL = { en: "English", - zh: "简体中文", - zht: "繁體中文", - ko: "한국어", - de: "Deutsch", es: "Español", - fr: "Français", - it: "Italiano", - da: "Dansk", - ja: "日本語", - pl: "Polski", - ru: "Русский", - uk: "Українська", - ar: "العربية", - no: "Norsk", - br: "Português (Brasil)", - th: "ไทย", - tr: "Türkçe", } satisfies Record const TAG = { en: "en", - zh: "zh-Hans", - zht: "zh-Hant", - ko: "ko", - de: "de", es: "es", - fr: "fr", - it: "it", - da: "da", - ja: "ja", - pl: "pl", - ru: "ru", - uk: "uk", - ar: "ar", - no: "no", - br: "pt-BR", - th: "th", - tr: "tr", } satisfies Record const DOCS = { en: "root", - zh: "zh-cn", - zht: "zh-tw", - ko: "ko", - de: "de", es: "es", - fr: "fr", - it: "it", - da: "da", - ja: "ja", - pl: "pl", - ru: "ru", - uk: "uk", - ar: "ar", - no: "nb", - br: "pt-br", - th: "th", - tr: "tr", } satisfies Record -const DOCS_SEGMENT = new Set([ - "ar", - "bs", - "da", - "de", - "es", - "fr", - "it", - "ja", - "ko", - "nb", - "pl", - "pt-br", - "ru", - "th", - "tr", - "uk", - "zh-cn", - "zh-tw", -]) +const DOCS_SEGMENT = new Set(["es"]) const DOCS_LOCALE = { - ar: "ar", - da: "da", - de: "de", en: "en", es: "es", - fr: "fr", - it: "it", - ja: "ja", - ko: "ko", - nb: "no", - "pt-br": "br", root: "en", - ru: "ru", - th: "th", - tr: "tr", - uk: "uk", - "zh-cn": "zh", - "zh-tw": "zht", } as const satisfies Record function suffix(pathname: string) { @@ -222,8 +121,7 @@ export function tag(locale: Locale) { return TAG[locale] } -export function dir(locale: Locale) { - if (locale === "ar") return "rtl" +export function dir(_locale: Locale): "ltr" | "rtl" { return "ltr" } @@ -231,26 +129,7 @@ function match(input: string): Locale | null { const value = input.trim().toLowerCase() if (!value) return null - if (value.startsWith("zh")) { - if (value.includes("hant") || value.includes("-tw") || value.includes("-hk") || value.includes("-mo")) return "zht" - return "zh" - } - - if (value.startsWith("ko")) return "ko" - if (value.startsWith("de")) return "de" if (value.startsWith("es")) return "es" - if (value.startsWith("fr")) return "fr" - if (value.startsWith("it")) return "it" - if (value.startsWith("da")) return "da" - if (value.startsWith("ja")) return "ja" - if (value.startsWith("pl")) return "pl" - if (value.startsWith("ru")) return "ru" - if (value.startsWith("uk")) return "uk" - if (value.startsWith("ar")) return "ar" - if (value.startsWith("tr")) return "tr" - if (value.startsWith("th")) return "th" - if (value.startsWith("pt")) return "br" - if (value.startsWith("no") || value.startsWith("nb") || value.startsWith("nn")) return "no" if (value.startsWith("en")) return "en" return null } diff --git a/packages/desktop/src/renderer/i18n/ar.ts b/packages/desktop/src/renderer/i18n/ar.ts deleted file mode 100644 index fdbf0a8047..0000000000 --- a/packages/desktop/src/renderer/i18n/ar.ts +++ /dev/null @@ -1,26 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "التحقق من وجود تحديثات...", - "desktop.menu.installCli": "تثبيت CLI...", - "desktop.menu.reloadWebview": "إعادة تحميل Webview", - "desktop.menu.restart": "إعادة تشغيل", - - "desktop.dialog.chooseFolder": "اختر مجلدًا", - "desktop.dialog.chooseFile": "اختر ملفًا", - "desktop.dialog.saveFile": "حفظ ملف", - - "desktop.updater.checkFailed.title": "فشل التحقق من التحديثات", - "desktop.updater.checkFailed.message": "فشل التحقق من وجود تحديثات", - "desktop.updater.none.title": "لا توجد تحديثات متاحة", - "desktop.updater.none.message": "أنت تستخدم بالفعل أحدث إصدار من OpenCode", - "desktop.updater.downloadFailed.title": "فشل التحديث", - "desktop.updater.downloadFailed.message": "فشل تنزيل التحديث", - "desktop.updater.downloaded.title": "تم تنزيل التحديث", - "desktop.updater.downloaded.prompt": "تم تنزيل إصدار {{version}} من OpenCode، هل ترغب في تثبيته وإعادة تشغيله؟", - "desktop.updater.installFailed.title": "فشل التحديث", - "desktop.updater.installFailed.message": "فشل تثبيت التحديث", - - "desktop.cli.installed.title": "تم تثبيت CLI", - "desktop.cli.installed.message": "تم تثبيت CLI في {{path}}\n\nأعد تشغيل الطرفية لاستخدام الأمر 'opencode'.", - "desktop.cli.failed.title": "فشل التثبيت", - "desktop.cli.failed.message": "فشل تثبيت CLI: {{error}}", -} diff --git a/packages/desktop/src/renderer/i18n/br.ts b/packages/desktop/src/renderer/i18n/br.ts deleted file mode 100644 index 75fe2dc32b..0000000000 --- a/packages/desktop/src/renderer/i18n/br.ts +++ /dev/null @@ -1,27 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "Verificar atualizações...", - "desktop.menu.installCli": "Instalar CLI...", - "desktop.menu.reloadWebview": "Recarregar Webview", - "desktop.menu.restart": "Reiniciar", - - "desktop.dialog.chooseFolder": "Escolher uma pasta", - "desktop.dialog.chooseFile": "Escolher um arquivo", - "desktop.dialog.saveFile": "Salvar arquivo", - - "desktop.updater.checkFailed.title": "Falha ao verificar atualizações", - "desktop.updater.checkFailed.message": "Falha ao verificar atualizações", - "desktop.updater.none.title": "Nenhuma atualização disponível", - "desktop.updater.none.message": "Você já está usando a versão mais recente do OpenCode", - "desktop.updater.downloadFailed.title": "Falha na atualização", - "desktop.updater.downloadFailed.message": "Falha ao baixar a atualização", - "desktop.updater.downloaded.title": "Atualização baixada", - "desktop.updater.downloaded.prompt": - "A versão {{version}} do OpenCode foi baixada. Você gostaria de instalá-la e reiniciar?", - "desktop.updater.installFailed.title": "Falha na atualização", - "desktop.updater.installFailed.message": "Falha ao instalar a atualização", - - "desktop.cli.installed.title": "CLI instalada", - "desktop.cli.installed.message": "CLI instalada em {{path}}\n\nReinicie seu terminal para usar o comando 'opencode'.", - "desktop.cli.failed.title": "Falha na instalação", - "desktop.cli.failed.message": "Falha ao instalar a CLI: {{error}}", -} diff --git a/packages/desktop/src/renderer/i18n/bs.ts b/packages/desktop/src/renderer/i18n/bs.ts deleted file mode 100644 index 58c266f530..0000000000 --- a/packages/desktop/src/renderer/i18n/bs.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "Provjeri ažuriranja...", - "desktop.menu.installCli": "Instaliraj CLI...", - "desktop.menu.reloadWebview": "Ponovo učitavanje webview-a", - "desktop.menu.restart": "Restartuj", - - "desktop.dialog.chooseFolder": "Odaberi folder", - "desktop.dialog.chooseFile": "Odaberi datoteku", - "desktop.dialog.saveFile": "Sačuvaj datoteku", - - "desktop.updater.checkFailed.title": "Provjera ažuriranja nije uspjela", - "desktop.updater.checkFailed.message": "Nije moguće provjeriti ažuriranja", - "desktop.updater.none.title": "Nema dostupnog ažuriranja", - "desktop.updater.none.message": "Već koristiš najnoviju verziju OpenCode-a", - "desktop.updater.downloadFailed.title": "Ažuriranje nije uspjelo", - "desktop.updater.downloadFailed.message": "Neuspjelo preuzimanje ažuriranja", - "desktop.updater.downloaded.title": "Ažuriranje preuzeto", - "desktop.updater.downloaded.prompt": - "Verzija {{version}} OpenCode-a je preuzeta. Želiš li da je instaliraš i ponovo pokreneš aplikaciju?", - "desktop.updater.installFailed.title": "Ažuriranje nije uspjelo", - "desktop.updater.installFailed.message": "Neuspjela instalacija ažuriranja", - - "desktop.cli.installed.title": "CLI instaliran", - "desktop.cli.installed.message": - "CLI je instaliran u {{path}}\n\nRestartuj terminal da bi koristio komandu 'opencode'.", - "desktop.cli.failed.title": "Instalacija nije uspjela", - "desktop.cli.failed.message": "Neuspjela instalacija CLI-a: {{error}}", -} diff --git a/packages/desktop/src/renderer/i18n/da.ts b/packages/desktop/src/renderer/i18n/da.ts deleted file mode 100644 index 2109495f76..0000000000 --- a/packages/desktop/src/renderer/i18n/da.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "Tjek for opdateringer...", - "desktop.menu.installCli": "Installer CLI...", - "desktop.menu.reloadWebview": "Genindlæs Webview", - "desktop.menu.restart": "Genstart", - - "desktop.dialog.chooseFolder": "Vælg en mappe", - "desktop.dialog.chooseFile": "Vælg en fil", - "desktop.dialog.saveFile": "Gem fil", - - "desktop.updater.checkFailed.title": "Opdateringstjek mislykkedes", - "desktop.updater.checkFailed.message": "Kunne ikke tjekke for opdateringer", - "desktop.updater.none.title": "Ingen opdatering tilgængelig", - "desktop.updater.none.message": "Du bruger allerede den nyeste version af OpenCode", - "desktop.updater.downloadFailed.title": "Opdatering mislykkedes", - "desktop.updater.downloadFailed.message": "Kunne ikke downloade opdateringen", - "desktop.updater.downloaded.title": "Opdatering downloadet", - "desktop.updater.downloaded.prompt": - "Version {{version}} af OpenCode er blevet downloadet. Vil du installere den og genstarte?", - "desktop.updater.installFailed.title": "Opdatering mislykkedes", - "desktop.updater.installFailed.message": "Kunne ikke installere opdateringen", - - "desktop.cli.installed.title": "CLI installeret", - "desktop.cli.installed.message": - "CLI installeret i {{path}}\n\nGenstart din terminal for at bruge 'opencode'-kommandoen.", - "desktop.cli.failed.title": "Installation mislykkedes", - "desktop.cli.failed.message": "Kunne ikke installere CLI: {{error}}", -} diff --git a/packages/desktop/src/renderer/i18n/de.ts b/packages/desktop/src/renderer/i18n/de.ts deleted file mode 100644 index 38ad8096e3..0000000000 --- a/packages/desktop/src/renderer/i18n/de.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "Nach Updates suchen...", - "desktop.menu.installCli": "CLI installieren...", - "desktop.menu.reloadWebview": "Webview neu laden", - "desktop.menu.restart": "Neustart", - - "desktop.dialog.chooseFolder": "Ordner auswählen", - "desktop.dialog.chooseFile": "Datei auswählen", - "desktop.dialog.saveFile": "Datei speichern", - - "desktop.updater.checkFailed.title": "Updateprüfung fehlgeschlagen", - "desktop.updater.checkFailed.message": "Updates konnten nicht geprüft werden", - "desktop.updater.none.title": "Kein Update verfügbar", - "desktop.updater.none.message": "Sie verwenden bereits die neueste Version von OpenCode", - "desktop.updater.downloadFailed.title": "Update fehlgeschlagen", - "desktop.updater.downloadFailed.message": "Update konnte nicht heruntergeladen werden", - "desktop.updater.downloaded.title": "Update heruntergeladen", - "desktop.updater.downloaded.prompt": - "Version {{version}} von OpenCode wurde heruntergeladen. Möchten Sie sie installieren und neu starten?", - "desktop.updater.installFailed.title": "Update fehlgeschlagen", - "desktop.updater.installFailed.message": "Update konnte nicht installiert werden", - - "desktop.cli.installed.title": "CLI installiert", - "desktop.cli.installed.message": - "CLI wurde in {{path}} installiert\n\nStarten Sie Ihr Terminal neu, um den Befehl 'opencode' zu verwenden.", - "desktop.cli.failed.title": "Installation fehlgeschlagen", - "desktop.cli.failed.message": "CLI konnte nicht installiert werden: {{error}}", -} diff --git a/packages/desktop/src/renderer/i18n/fr.ts b/packages/desktop/src/renderer/i18n/fr.ts deleted file mode 100644 index 4f0bb2b16c..0000000000 --- a/packages/desktop/src/renderer/i18n/fr.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "Vérifier les mises à jour...", - "desktop.menu.installCli": "Installer la CLI...", - "desktop.menu.reloadWebview": "Recharger la Webview", - "desktop.menu.restart": "Redémarrer", - - "desktop.dialog.chooseFolder": "Choisir un dossier", - "desktop.dialog.chooseFile": "Choisir un fichier", - "desktop.dialog.saveFile": "Enregistrer le fichier", - - "desktop.updater.checkFailed.title": "Échec de la vérification des mises à jour", - "desktop.updater.checkFailed.message": "Impossible de vérifier les mises à jour", - "desktop.updater.none.title": "Aucune mise à jour disponible", - "desktop.updater.none.message": "Vous utilisez déjà la dernière version d'OpenCode", - "desktop.updater.downloadFailed.title": "Échec de la mise à jour", - "desktop.updater.downloadFailed.message": "Impossible de télécharger la mise à jour", - "desktop.updater.downloaded.title": "Mise à jour téléchargée", - "desktop.updater.downloaded.prompt": - "La version {{version}} d'OpenCode a été téléchargée. Voulez-vous l'installer et redémarrer ?", - "desktop.updater.installFailed.title": "Échec de la mise à jour", - "desktop.updater.installFailed.message": "Impossible d'installer la mise à jour", - - "desktop.cli.installed.title": "CLI installée", - "desktop.cli.installed.message": - "CLI installée dans {{path}}\n\nRedémarrez votre terminal pour utiliser la commande 'opencode'.", - "desktop.cli.failed.title": "Échec de l'installation", - "desktop.cli.failed.message": "Impossible d'installer la CLI : {{error}}", -} diff --git a/packages/desktop/src/renderer/i18n/index.ts b/packages/desktop/src/renderer/i18n/index.ts index a88fed7080..2b1b05a3f9 100644 --- a/packages/desktop/src/renderer/i18n/index.ts +++ b/packages/desktop/src/renderer/i18n/index.ts @@ -1,78 +1,17 @@ import * as i18n from "@solid-primitives/i18n" import { dict as desktopEn } from "./en" -import { dict as desktopZh } from "./zh" -import { dict as desktopZht } from "./zht" -import { dict as desktopKo } from "./ko" -import { dict as desktopDe } from "./de" import { dict as desktopEs } from "./es" -import { dict as desktopFr } from "./fr" -import { dict as desktopDa } from "./da" -import { dict as desktopJa } from "./ja" -import { dict as desktopPl } from "./pl" -import { dict as desktopRu } from "./ru" -import { dict as desktopUk } from "./uk" -import { dict as desktopAr } from "./ar" -import { dict as desktopNo } from "./no" -import { dict as desktopBr } from "./br" -import { dict as desktopBs } from "./bs" import { dict as appEn } from "../../../../app/src/i18n/en" -import { dict as appZh } from "../../../../app/src/i18n/zh" -import { dict as appZht } from "../../../../app/src/i18n/zht" -import { dict as appKo } from "../../../../app/src/i18n/ko" -import { dict as appDe } from "../../../../app/src/i18n/de" import { dict as appEs } from "../../../../app/src/i18n/es" -import { dict as appFr } from "../../../../app/src/i18n/fr" -import { dict as appDa } from "../../../../app/src/i18n/da" -import { dict as appJa } from "../../../../app/src/i18n/ja" -import { dict as appPl } from "../../../../app/src/i18n/pl" -import { dict as appRu } from "../../../../app/src/i18n/ru" -import { dict as appUk } from "../../../../app/src/i18n/uk" -import { dict as appAr } from "../../../../app/src/i18n/ar" -import { dict as appNo } from "../../../../app/src/i18n/no" -import { dict as appBr } from "../../../../app/src/i18n/br" -import { dict as appBs } from "../../../../app/src/i18n/bs" - -export type Locale = - | "en" - | "zh" - | "zht" - | "ko" - | "de" - | "es" - | "fr" - | "da" - | "ja" - | "pl" - | "ru" - | "uk" - | "ar" - | "no" - | "br" - | "bs" + +export type Locale = "en" | "es" type RawDictionary = typeof appEn & typeof desktopEn type Dictionary = i18n.Flatten -const LOCALES: readonly Locale[] = [ - "en", - "zh", - "zht", - "ko", - "de", - "es", - "fr", - "da", - "ja", - "pl", - "ru", - "uk", - "bs", - "ar", - "no", - "br", -] +const LOCALES: readonly Locale[] = ["en", "es"] function detectLocale(): Locale { if (typeof navigator !== "object") return "en" @@ -81,28 +20,7 @@ function detectLocale(): Locale { for (const language of languages) { if (!language) continue if (language.toLowerCase().startsWith("en")) return "en" - if (language.toLowerCase().startsWith("zh")) { - if (language.toLowerCase().includes("hant")) return "zht" - return "zh" - } - if (language.toLowerCase().startsWith("ko")) return "ko" - if (language.toLowerCase().startsWith("de")) return "de" if (language.toLowerCase().startsWith("es")) return "es" - if (language.toLowerCase().startsWith("fr")) return "fr" - if (language.toLowerCase().startsWith("da")) return "da" - if (language.toLowerCase().startsWith("ja")) return "ja" - if (language.toLowerCase().startsWith("pl")) return "pl" - if (language.toLowerCase().startsWith("ru")) return "ru" - if (language.toLowerCase().startsWith("uk")) return "uk" - if (language.toLowerCase().startsWith("ar")) return "ar" - if ( - language.toLowerCase().startsWith("no") || - language.toLowerCase().startsWith("nb") || - language.toLowerCase().startsWith("nn") - ) - return "no" - if (language.toLowerCase().startsWith("pt")) return "br" - if (language.toLowerCase().startsWith("bs")) return "bs" } return "en" @@ -144,21 +62,7 @@ const base = i18n.flatten({ ...appEn, ...desktopEn }) function build(locale: Locale): Dictionary { if (locale === "en") return base - if (locale === "zh") return { ...base, ...i18n.flatten(appZh), ...i18n.flatten(desktopZh) } - if (locale === "zht") return { ...base, ...i18n.flatten(appZht), ...i18n.flatten(desktopZht) } - if (locale === "de") return { ...base, ...i18n.flatten(appDe), ...i18n.flatten(desktopDe) } - if (locale === "es") return { ...base, ...i18n.flatten(appEs), ...i18n.flatten(desktopEs) } - if (locale === "fr") return { ...base, ...i18n.flatten(appFr), ...i18n.flatten(desktopFr) } - if (locale === "da") return { ...base, ...i18n.flatten(appDa), ...i18n.flatten(desktopDa) } - if (locale === "ja") return { ...base, ...i18n.flatten(appJa), ...i18n.flatten(desktopJa) } - if (locale === "pl") return { ...base, ...i18n.flatten(appPl), ...i18n.flatten(desktopPl) } - if (locale === "ru") return { ...base, ...i18n.flatten(appRu), ...i18n.flatten(desktopRu) } - if (locale === "uk") return { ...base, ...i18n.flatten(appUk), ...i18n.flatten(desktopUk) } - if (locale === "ar") return { ...base, ...i18n.flatten(appAr), ...i18n.flatten(desktopAr) } - if (locale === "no") return { ...base, ...i18n.flatten(appNo), ...i18n.flatten(desktopNo) } - if (locale === "br") return { ...base, ...i18n.flatten(appBr), ...i18n.flatten(desktopBr) } - if (locale === "bs") return { ...base, ...i18n.flatten(appBs), ...i18n.flatten(desktopBs) } - return { ...base, ...i18n.flatten(appKo), ...i18n.flatten(desktopKo) } + return { ...base, ...i18n.flatten(appEs), ...i18n.flatten(desktopEs) } } const state = { diff --git a/packages/desktop/src/renderer/i18n/ja.ts b/packages/desktop/src/renderer/i18n/ja.ts deleted file mode 100644 index fc485c6f40..0000000000 --- a/packages/desktop/src/renderer/i18n/ja.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "アップデートを確認...", - "desktop.menu.installCli": "CLI をインストール...", - "desktop.menu.reloadWebview": "Webview を再読み込み", - "desktop.menu.restart": "再起動", - - "desktop.dialog.chooseFolder": "フォルダーを選択", - "desktop.dialog.chooseFile": "ファイルを選択", - "desktop.dialog.saveFile": "ファイルを保存", - - "desktop.updater.checkFailed.title": "アップデートの確認に失敗しました", - "desktop.updater.checkFailed.message": "アップデートを確認できませんでした", - "desktop.updater.none.title": "利用可能なアップデートはありません", - "desktop.updater.none.message": "すでに最新バージョンの OpenCode を使用しています", - "desktop.updater.downloadFailed.title": "アップデートに失敗しました", - "desktop.updater.downloadFailed.message": "アップデートをダウンロードできませんでした", - "desktop.updater.downloaded.title": "アップデートをダウンロードしました", - "desktop.updater.downloaded.prompt": - "OpenCode のバージョン {{version}} がダウンロードされました。インストールして再起動しますか?", - "desktop.updater.installFailed.title": "アップデートに失敗しました", - "desktop.updater.installFailed.message": "アップデートをインストールできませんでした", - - "desktop.cli.installed.title": "CLI をインストールしました", - "desktop.cli.installed.message": - "CLI を {{path}} にインストールしました\n\nターミナルを再起動して 'opencode' コマンドを使用してください。", - "desktop.cli.failed.title": "インストールに失敗しました", - "desktop.cli.failed.message": "CLI のインストールに失敗しました: {{error}}", -} diff --git a/packages/desktop/src/renderer/i18n/ko.ts b/packages/desktop/src/renderer/i18n/ko.ts deleted file mode 100644 index be27cec86a..0000000000 --- a/packages/desktop/src/renderer/i18n/ko.ts +++ /dev/null @@ -1,27 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "업데이트 확인...", - "desktop.menu.installCli": "CLI 설치...", - "desktop.menu.reloadWebview": "Webview 새로고침", - "desktop.menu.restart": "다시 시작", - - "desktop.dialog.chooseFolder": "폴더 선택", - "desktop.dialog.chooseFile": "파일 선택", - "desktop.dialog.saveFile": "파일 저장", - - "desktop.updater.checkFailed.title": "업데이트 확인 실패", - "desktop.updater.checkFailed.message": "업데이트를 확인하지 못했습니다", - "desktop.updater.none.title": "사용 가능한 업데이트 없음", - "desktop.updater.none.message": "이미 최신 버전의 OpenCode를 사용하고 있습니다", - "desktop.updater.downloadFailed.title": "업데이트 실패", - "desktop.updater.downloadFailed.message": "업데이트를 다운로드하지 못했습니다", - "desktop.updater.downloaded.title": "업데이트 다운로드 완료", - "desktop.updater.downloaded.prompt": "OpenCode {{version}} 버전을 다운로드했습니다. 설치하고 다시 실행할까요?", - "desktop.updater.installFailed.title": "업데이트 실패", - "desktop.updater.installFailed.message": "업데이트를 설치하지 못했습니다", - - "desktop.cli.installed.title": "CLI 설치됨", - "desktop.cli.installed.message": - "CLI가 {{path}}에 설치되었습니다\n\n터미널을 다시 시작하여 'opencode' 명령을 사용하세요.", - "desktop.cli.failed.title": "설치 실패", - "desktop.cli.failed.message": "CLI 설치 실패: {{error}}", -} diff --git a/packages/desktop/src/renderer/i18n/no.ts b/packages/desktop/src/renderer/i18n/no.ts deleted file mode 100644 index e39bd7f3b4..0000000000 --- a/packages/desktop/src/renderer/i18n/no.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "Se etter oppdateringer...", - "desktop.menu.installCli": "Installer CLI...", - "desktop.menu.reloadWebview": "Last inn Webview på nytt", - "desktop.menu.restart": "Start på nytt", - - "desktop.dialog.chooseFolder": "Velg en mappe", - "desktop.dialog.chooseFile": "Velg en fil", - "desktop.dialog.saveFile": "Lagre fil", - - "desktop.updater.checkFailed.title": "Oppdateringssjekk mislyktes", - "desktop.updater.checkFailed.message": "Kunne ikke se etter oppdateringer", - "desktop.updater.none.title": "Ingen oppdatering tilgjengelig", - "desktop.updater.none.message": "Du bruker allerede den nyeste versjonen av OpenCode", - "desktop.updater.downloadFailed.title": "Oppdatering mislyktes", - "desktop.updater.downloadFailed.message": "Kunne ikke laste ned oppdateringen", - "desktop.updater.downloaded.title": "Oppdatering lastet ned", - "desktop.updater.downloaded.prompt": - "Versjon {{version}} av OpenCode er lastet ned. Vil du installere den og starte på nytt?", - "desktop.updater.installFailed.title": "Oppdatering mislyktes", - "desktop.updater.installFailed.message": "Kunne ikke installere oppdateringen", - - "desktop.cli.installed.title": "CLI installert", - "desktop.cli.installed.message": - "CLI installert til {{path}}\n\nStart terminalen på nytt for å bruke 'opencode'-kommandoen.", - "desktop.cli.failed.title": "Installasjon mislyktes", - "desktop.cli.failed.message": "Kunne ikke installere CLI: {{error}}", -} diff --git a/packages/desktop/src/renderer/i18n/pl.ts b/packages/desktop/src/renderer/i18n/pl.ts deleted file mode 100644 index d3ad7ce64f..0000000000 --- a/packages/desktop/src/renderer/i18n/pl.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "Sprawdź aktualizacje...", - "desktop.menu.installCli": "Zainstaluj CLI...", - "desktop.menu.reloadWebview": "Przeładuj Webview", - "desktop.menu.restart": "Restartuj", - - "desktop.dialog.chooseFolder": "Wybierz folder", - "desktop.dialog.chooseFile": "Wybierz plik", - "desktop.dialog.saveFile": "Zapisz plik", - - "desktop.updater.checkFailed.title": "Nie udało się sprawdzić aktualizacji", - "desktop.updater.checkFailed.message": "Nie udało się sprawdzić aktualizacji", - "desktop.updater.none.title": "Brak dostępnych aktualizacji", - "desktop.updater.none.message": "Korzystasz już z najnowszej wersji OpenCode", - "desktop.updater.downloadFailed.title": "Aktualizacja nie powiodła się", - "desktop.updater.downloadFailed.message": "Nie udało się pobrać aktualizacji", - "desktop.updater.downloaded.title": "Aktualizacja pobrana", - "desktop.updater.downloaded.prompt": - "Pobrano wersję {{version}} OpenCode. Czy chcesz ją zainstalować i uruchomić ponownie?", - "desktop.updater.installFailed.title": "Aktualizacja nie powiodła się", - "desktop.updater.installFailed.message": "Nie udało się zainstalować aktualizacji", - - "desktop.cli.installed.title": "CLI zainstalowane", - "desktop.cli.installed.message": - "CLI zainstalowane w {{path}}\n\nUruchom ponownie terminal, aby użyć polecenia 'opencode'.", - "desktop.cli.failed.title": "Instalacja nie powiodła się", - "desktop.cli.failed.message": "Nie udało się zainstalować CLI: {{error}}", -} diff --git a/packages/desktop/src/renderer/i18n/ru.ts b/packages/desktop/src/renderer/i18n/ru.ts deleted file mode 100644 index 8e09cc45b4..0000000000 --- a/packages/desktop/src/renderer/i18n/ru.ts +++ /dev/null @@ -1,27 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "Проверить обновления...", - "desktop.menu.installCli": "Установить CLI...", - "desktop.menu.reloadWebview": "Перезагрузить Webview", - "desktop.menu.restart": "Перезапустить", - - "desktop.dialog.chooseFolder": "Выберите папку", - "desktop.dialog.chooseFile": "Выберите файл", - "desktop.dialog.saveFile": "Сохранить файл", - - "desktop.updater.checkFailed.title": "Не удалось проверить обновления", - "desktop.updater.checkFailed.message": "Не удалось проверить обновления", - "desktop.updater.none.title": "Обновлений нет", - "desktop.updater.none.message": "Вы уже используете последнюю версию OpenCode", - "desktop.updater.downloadFailed.title": "Обновление не удалось", - "desktop.updater.downloadFailed.message": "Не удалось скачать обновление", - "desktop.updater.downloaded.title": "Обновление загружено", - "desktop.updater.downloaded.prompt": "Версия OpenCode {{version}} загружена. Хотите установить и перезапустить?", - "desktop.updater.installFailed.title": "Обновление не удалось", - "desktop.updater.installFailed.message": "Не удалось установить обновление", - - "desktop.cli.installed.title": "CLI установлен", - "desktop.cli.installed.message": - "CLI установлен в {{path}}\n\nПерезапустите терминал, чтобы использовать команду 'opencode'.", - "desktop.cli.failed.title": "Ошибка установки", - "desktop.cli.failed.message": "Не удалось установить CLI: {{error}}", -} diff --git a/packages/desktop/src/renderer/i18n/uk.ts b/packages/desktop/src/renderer/i18n/uk.ts deleted file mode 100644 index f9a6212b22..0000000000 --- a/packages/desktop/src/renderer/i18n/uk.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "Перевірити оновлення...", - "desktop.menu.installCli": "Встановити CLI...", - "desktop.menu.reloadWebview": "Перезавантажити Webview", - "desktop.menu.restart": "Перезапустити", - - "desktop.dialog.chooseFolder": "Виберіть теку", - "desktop.dialog.chooseFile": "Виберіть файл", - "desktop.dialog.saveFile": "Зберегти файл", - - "desktop.updater.checkFailed.title": "Не вдалося перевірити оновлення", - "desktop.updater.checkFailed.message": "Не вдалося перевірити наявність оновлень", - "desktop.updater.none.title": "Немає доступних оновлень", - "desktop.updater.none.message": "Ви вже використовуєте найновішу версію OpenCode", - "desktop.updater.downloadFailed.title": "Помилка оновлення", - "desktop.updater.downloadFailed.message": "Не вдалося завантажити оновлення", - "desktop.updater.downloaded.title": "Оновлення завантажено", - "desktop.updater.downloaded.prompt": - "Версію {{version}} OpenCode завантажено. Бажаєте встановити її та перезапустити?", - "desktop.updater.installFailed.title": "Помилка оновлення", - "desktop.updater.installFailed.message": "Не вдалося встановити оновлення", - - "desktop.cli.installed.title": "CLI встановлено", - "desktop.cli.installed.message": - "CLI встановлено до {{path}}\n\nПерезапустіть термінал, щоб використовувати команду 'opencode'.", - "desktop.cli.failed.title": "Не вдалося встановити", - "desktop.cli.failed.message": "Не вдалося встановити CLI: {{error}}", -} diff --git a/packages/desktop/src/renderer/i18n/zh.ts b/packages/desktop/src/renderer/i18n/zh.ts deleted file mode 100644 index aeb3a54e03..0000000000 --- a/packages/desktop/src/renderer/i18n/zh.ts +++ /dev/null @@ -1,26 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "检查更新...", - "desktop.menu.installCli": "安装 CLI...", - "desktop.menu.reloadWebview": "重新加载 Webview", - "desktop.menu.restart": "重启", - - "desktop.dialog.chooseFolder": "选择文件夹", - "desktop.dialog.chooseFile": "选择文件", - "desktop.dialog.saveFile": "保存文件", - - "desktop.updater.checkFailed.title": "检查更新失败", - "desktop.updater.checkFailed.message": "无法检查更新", - "desktop.updater.none.title": "没有可用更新", - "desktop.updater.none.message": "你已经在使用最新版本的 OpenCode", - "desktop.updater.downloadFailed.title": "更新失败", - "desktop.updater.downloadFailed.message": "无法下载更新", - "desktop.updater.downloaded.title": "更新已下载", - "desktop.updater.downloaded.prompt": "已下载 OpenCode {{version}} 版本,是否安装并重启?", - "desktop.updater.installFailed.title": "更新失败", - "desktop.updater.installFailed.message": "无法安装更新", - - "desktop.cli.installed.title": "CLI 已安装", - "desktop.cli.installed.message": "CLI 已安装到 {{path}}\n\n重启终端以使用 'opencode' 命令。", - "desktop.cli.failed.title": "安装失败", - "desktop.cli.failed.message": "无法安装 CLI: {{error}}", -} diff --git a/packages/desktop/src/renderer/i18n/zht.ts b/packages/desktop/src/renderer/i18n/zht.ts deleted file mode 100644 index 7fd677aca4..0000000000 --- a/packages/desktop/src/renderer/i18n/zht.ts +++ /dev/null @@ -1,26 +0,0 @@ -export const dict = { - "desktop.menu.checkForUpdates": "檢查更新...", - "desktop.menu.installCli": "安裝 CLI...", - "desktop.menu.reloadWebview": "重新載入 Webview", - "desktop.menu.restart": "重新啟動", - - "desktop.dialog.chooseFolder": "選擇資料夾", - "desktop.dialog.chooseFile": "選擇檔案", - "desktop.dialog.saveFile": "儲存檔案", - - "desktop.updater.checkFailed.title": "檢查更新失敗", - "desktop.updater.checkFailed.message": "無法檢查更新", - "desktop.updater.none.title": "沒有可用更新", - "desktop.updater.none.message": "你已在使用最新版的 OpenCode", - "desktop.updater.downloadFailed.title": "更新失敗", - "desktop.updater.downloadFailed.message": "無法下載更新", - "desktop.updater.downloaded.title": "更新已下載", - "desktop.updater.downloaded.prompt": "已下載 OpenCode {{version}} 版本,是否安裝並重新啟動?", - "desktop.updater.installFailed.title": "更新失敗", - "desktop.updater.installFailed.message": "無法安裝更新", - - "desktop.cli.installed.title": "CLI 已安裝", - "desktop.cli.installed.message": "CLI 已安裝到 {{path}}\n\n重新啟動終端機以使用 'opencode' 命令。", - "desktop.cli.failed.title": "安裝失敗", - "desktop.cli.failed.message": "無法安裝 CLI: {{error}}", -} diff --git a/packages/enterprise/src/app.tsx b/packages/enterprise/src/app.tsx index b73888ec5d..8fbdc62cf9 100644 --- a/packages/enterprise/src/app.tsx +++ b/packages/enterprise/src/app.tsx @@ -6,7 +6,7 @@ import { MarkedProvider } from "@opencode-ai/ui/context/marked" import { DialogProvider } from "@opencode-ai/ui/context/dialog" import { I18nProvider, type UiI18nParams } from "@opencode-ai/ui/context" import { dict as uiEn } from "@opencode-ai/ui/i18n/en" -import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" +import { dict as uiEs } from "@opencode-ai/ui/i18n/es" import { createEffect, createMemo, Suspense, type ParentProps } from "solid-js" import { getRequestEvent } from "solid-js/web" import "./app.css" @@ -26,7 +26,7 @@ function detectLocaleFromHeader(header: string | null | undefined) { for (const item of header.split(",")) { const value = item.trim().split(";")[0]?.toLowerCase() if (!value) continue - if (value.startsWith("zh")) return "zh" as const + if (value.startsWith("es")) return "es" as const if (value.startsWith("en")) return "en" as const } } @@ -39,7 +39,7 @@ function detectLocale() { if (typeof document === "object") { const value = document.documentElement.lang?.toLowerCase() ?? "" - if (value.startsWith("zh")) return "zh" as const + if (value.startsWith("es")) return "es" as const if (value.startsWith("en")) return "en" as const } @@ -47,7 +47,7 @@ function detectLocale() { const languages = navigator.languages?.length ? navigator.languages : [navigator.language] for (const language of languages) { if (!language) continue - if (language.toLowerCase().startsWith("zh")) return "zh" as const + if (language.toLowerCase().startsWith("es")) return "es" as const } } @@ -56,9 +56,9 @@ function detectLocale() { function UiI18nBridge(props: ParentProps) { const locale = createMemo(() => detectLocale()) - const zh = uiZh as Partial> + const es = uiEs as Partial> const t = (key: keyof typeof uiEn, params?: UiI18nParams) => { - const value = locale() === "zh" ? (zh[key] ?? uiEn[key]) : uiEn[key] + const value = locale() === "es" ? (es[key] ?? uiEn[key]) : uiEn[key] const text = value ?? String(key) return resolveTemplate(text, params) } diff --git a/packages/stats/app/src/i18n.ts b/packages/stats/app/src/i18n.ts index abb9ef49e3..b0b123cecc 100644 --- a/packages/stats/app/src/i18n.ts +++ b/packages/stats/app/src/i18n.ts @@ -1,21 +1,5 @@ import { type Locale } from "./lib/language" -import { dict as ar } from "./i18n/ar" -import { dict as br } from "./i18n/br" -import { dict as da } from "./i18n/da" -import { dict as de } from "./i18n/de" import { dict as es } from "./i18n/es" -import { dict as fr } from "./i18n/fr" -import { dict as it } from "./i18n/it" -import { dict as ja } from "./i18n/ja" -import { dict as ko } from "./i18n/ko" -import { dict as no } from "./i18n/no" -import { dict as pl } from "./i18n/pl" -import { dict as ru } from "./i18n/ru" -import { dict as th } from "./i18n/th" -import { dict as tr } from "./i18n/tr" -import { dict as uk } from "./i18n/uk" -import { dict as zh } from "./i18n/zh" -import { dict as zht } from "./i18n/zht" const en = { "app.title": "AI Model Usage Rankings | OpenCode Data", @@ -256,24 +240,8 @@ export type Key = keyof typeof en export type Dict = Record const dictionaries = { - ar, - br, - da, - de, en, es, - fr, - it, - ja, - ko, - no, - pl, - ru, - th, - tr, - uk, - zh, - zht, } satisfies Record export function dict(locale: Locale) { diff --git a/packages/stats/app/src/i18n/ar.ts b/packages/stats/app/src/i18n/ar.ts deleted file mode 100644 index b46bf14243..0000000000 --- a/packages/stats/app/src/i18n/ar.ts +++ /dev/null @@ -1,234 +0,0 @@ -export const dict = { - "app.title": "ترتيب استخدام نماذج الذكاء الاصطناعي | OpenCode Data", - "app.description": - "استكشف استخدام OpenCode Go عبر نماذج الذكاء الاصطناعي، بما في ذلك حجم الرموز، والترتيب، وحصة السوق، وتسعير الرموز، وتكلفة الجلسة، ونسبة التخزين المؤقت، والتوزيع الجغرافي.", - "app.unfurlAlt": "شعار OpenCode Data على خلفية داكنة مزخرفة", - "nav.dataHome": "صفحة البيانات الرئيسية", - "nav.topModels": "أهم النماذج", - "nav.leaderboard": "لوحة الترتيب", - "nav.uniqueUsers": "المستخدمون الفريدون", - "nav.sessionCost": "تكلفة الجلسة", - "nav.tokenCost": "تكلفة الرموز", - "nav.cacheRatio": "نسبة التخزين المؤقت", - "nav.marketShare": "حصة السوق", - "nav.geoBreakdown": "التوزيع الجغرافي", - "nav.overview": "نظرة عامة", - "nav.usage": "الاستخدام", - "nav.users": "المستخدمون", - "nav.efficiency": "الكفاءة", - "nav.peers": "النماذج المشابهة", - "nav.models": "النماذج", - "header.brandLabel": "صفحة البيانات الرئيسية", - "header.sectionNavLabel": "أقسام البيانات", - "header.githubAria": "ضع نجمة لـ OpenCode على GitHub", - "header.github": "GitHub", - "header.tryOpenCode": "جرّب OpenCode", - "header.openNav": "فتح التنقل", - "header.closeNav": "إغلاق التنقل", - "theme.groupLabel": "السمة", - "theme.dark": "داكن", - "theme.light": "فاتح", - "theme.system": "النظام", - "footer.modelData": "بيانات النموذج", - "footer.legal": "قانوني", - "footer.connect": "تواصل", - "footer.newsletter": "النشرة الإخبارية", - "footer.newsletterBody": "كن أول من يعرف بالإصدارات الجديدة.", - "footer.language": "اللغة", - "footer.subscribe": "اشترك", - "footer.terms": "شروط الخدمة", - "footer.privacy": "سياسة الخصوصية", - "footer.contact": "اتصل بنا", - "footer.community": "المجتمع", - "footer.youtube": "YouTube", - "footer.homeAria": "صفحة OpenCode الرئيسية", - "footer.status": "كل الأنظمة تعمل", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "اعرف المزيد", - "modal.closeNewsletter": "إغلاق التسجيل في النشرة الإخبارية", - "modal.title": "نشرة OpenCode الإخبارية", - "modal.body": "كن أول من يعرف\nبالإصدارات الجديدة.", - "modal.email": "عنوان البريد الإلكتروني", - "modal.subscribe": "اشترك", - "modal.subscribing": "جاري الاشتراك...", - "modal.success": "تم اشتراكك.", - "modal.error": "فشل الاشتراك", - "product.allUsers": "كل المستخدمين", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "يوم واحد", - "range.1W": "أسبوع واحد", - "range.2W": "أسبوعان", - "range.1M": "شهر واحد", - "range.2M": "شهران", - "chart.daily": "يومي", - "chart.input": "الإدخال", - "chart.output": "الإخراج", - "chart.cached": "مخزّن مؤقتًا", - "chart.uncached": "غير مخزّن مؤقتًا", - "chart.ratio": "النسبة", - "chart.model": "النموذج", - "chart.cacheRatio": "نسبة التخزين المؤقت", - "chart.costSession": "التكلفة/الجلسة", - "chart.tokensSession": "الرموز/الجلسة", - "chart.costPerSession": "التكلفة / الجلسة", - "chart.tokensPerSession": "الرموز / الجلسة", - "chart.live": "مباشر", - "chart.percent": "نسبة مئوية", - "chart.leaderboardAria": "لوحة ترتيب رموز النموذج", - "chart.scrollableLeaderboardAria": "لوحة ترتيب رموز النموذج قابلة للتمرير", - "chart.byAuthor": "بواسطة {{author}}", - "home.updated": "تم التحديث", - "home.noRows": "لا توجد صفوف بعد", - "home.justNow": "الآن للتو", - "home.heroCopy": "تعرّف على النماذج التي تحقق استخدامًا فعليًا أكبر، وكيف يتغير المزيج، وما يعنيه ذلك للتكلفة.", - "home.loadingTitle": "تحميل البيانات", - "home.loadingDescription": "قراءة تجميعات النماذج.", - "home.usageTitle": "الاستخدام", - "home.topModelsDescription": "استخدام النماذج عبر OpenCode Go.", - "home.noUsageTitle": "لا توجد بيانات استخدام", - "home.noUsageDescription": "لم تطابق أي صفوف نماذج هذا المنتج وهذا النطاق.", - "home.noLeaderboardTitle": "لا توجد بيانات ترتيب", - "home.noLeaderboardDescription": "لم تطابق أي صفوف نماذج هذا المنتج وهذا النطاق.", - "home.productFilter": "عامل تصفية المنتج", - "home.dateRange": "نطاق التاريخ", - "home.stackedUsageChart": "مخطط استخدام مكدس لأهم النماذج", - "home.total": "الإجمالي", - "home.modelUsers": "مستخدمو النموذج", - "home.new": "جديد", - "home.uniqueUsersTitle": "المستخدمون الفريدون", - "home.uniqueUsersDescription": "المستخدمون اليوميون الفريدون لـ OpenCode Go حسب النموذج.", - "home.noUserDataTitle": "لا توجد بيانات مستخدمين", - "home.noUserDataDescription": "لم تطابق أي صفوف نماذج تحتوي على مستخدمين هذه النافذة.", - "home.uniqueUsersChart": "مخطط مكدس للمستخدمين الفريدين حسب النموذج", - "home.marketShareTitle": "حصة السوق", - "home.marketShareDescription": "قارن حصة الرموز حسب مؤلف النموذج.", - "home.noMarketTitle": "لا توجد بيانات سوق", - "home.noMarketDescription": "لم تطابق أي صفوف نماذج هذا النطاق.", - "home.marketChart": "حصة السوق حسب مؤلف النموذج", - "home.noData": "لا توجد بيانات", - "home.geoTitle": "التوزيع الجغرافي", - "home.geoDescription": "الرموز المستخدمة حسب البلد.", - "home.noGeoTitle": "لا توجد بيانات جغرافية", - "home.noGeoDescription": "لم تطابق أي صفوف جغرافية هذا النطاق.", - "home.worldMap": "خريطة عالمية لاستخدام الرموز حسب البلد", - "home.geoMapTitle": "خريطة التوزيع الجغرافي", - "home.unknown": "غير معروف", - "home.tokenCostTitle": "تكلفة الرموز", - "home.tokenCostDescription": "السعر لكل مليون رمز.", - "home.noTokenCostTitle": "لا توجد بيانات تكلفة الرموز", - "home.noTokenCostDescription": "لم تطابق أي صفوف نماذج ذات تكلفة هذا المنتج.", - "home.cacheRatioTitle": "نسبة التخزين المؤقت", - "home.cacheRatioDescription": "حصة رموز الإدخال التي قُدمت من التخزين المؤقت.", - "home.noCacheTitle": "لا توجد بيانات نسبة التخزين المؤقت", - "home.noCacheDescription": "لم تطابق أي صفوف نماذج ذات رموز إدخال هذا المنتج.", - "home.sessionCostTitle": "تكلفة الجلسة", - "home.sessionCostDescription": "متوسط التكلفة لكل جلسة.", - "home.noSessionCostTitle": "لا توجد بيانات تكلفة الجلسة", - "home.noSessionCostDescription": "لم تطابق أي صفوف نماذج ذات جلسات هذا المنتج.", - "home.costSession": "التكلفة/الجلسة", - "lab.title": "استخدام وترتيب نماذج {{lab}} للذكاء الاصطناعي | OpenCode Data", - "lab.description": - "قارن نماذج {{lab}} المستخدمة في OpenCode Go، بما في ذلك استخدام الرموز، وترتيب النماذج، ونوافذ السياق، وتواريخ الإصدار، والتكاليف، والبيانات الخاصة بكل نموذج.", - "lab.loadingTitle": "مختبر النماذج", - "lab.loadingDescription": "قراءة توفر النماذج واستخدام OpenCode الأخير.", - "lab.notFound": "لم تطابق أي نماذج هذا المختبر.", - "lab.heroPrefix": "استكشف {{count}} من نماذج {{lab}} المستخدمة في OpenCode", - "lab.heroIncluding": "بما في ذلك {{models}}", - "lab.heroSuffix": "قارن الاستخدام الأخير للرموز، ونوافذ السياق، وتواريخ الإصدار، والبيانات الخاصة بكل نموذج.", - "lab.tokensProcessed": "الرموز المعالجة", - "lab.pending": "قيد الانتظار", - "lab.usageAfterActivity": "يظهر الاستخدام بعد وصول نشاط النموذج", - "lab.latestRelease": "آخر إصدار {{date}}", - "lab.shareOfUsage": "{{share}} من استخدام OpenCode الأخير", - "lab.usageTitle": "استخدام رموز {{lab}}", - "lab.usageDescription": "حجم رموز OpenCode اليومي خلال الشهرين الماضيين.", - "lab.noUsageTitle": "لا يوجد استخدام بعد", - "lab.noUsageDescription": "سيظهر الاستخدام الأخير للرموز هنا عندما يصبح لهذا المختبر نشاط.", - "lab.dailyTokenChart": "مخطط استخدام رموز {{lab}} اليومي", - "lab.dailyTokens": "الرموز اليومية", - "lab.tokens": "رموز", - "lab.modelsTitle": "نماذج {{lab}}", - "lab.modelsDescription": "تفاصيل الكتالوج مع الاستخدام الأخير.", - "lab.recentUsageAndLimits": "الاستخدام والحدود الأخيرة.", - "lab.usage": "الاستخدام", - "lab.share": "الحصة", - "model.title": "استخدام {{model}} وتكلفته وترتيبه | OpenCode Data", - "model.description": - "اعرض بيانات استخدام {{model}} في OpenCode Go، بما في ذلك حجم الرموز، والترتيب الأسبوعي، ومزيج الرموز، والتكاليف، ونسبة التخزين المؤقت، والجلسات، والتوزيع الجغرافي، والنماذج المشابهة.", - "model.loadingTitle": "بيانات النموذج", - "model.loadingDescription": "قراءة تجميعات النماذج.", - "model.loadingProfile": "قراءة ملف النموذج.", - "model.noDataTitle": "لا توجد بيانات نموذج", - "model.noDataDescription": "جرّب فتح نموذج من لوحة الترتيب.", - "model.noMatched": "لم تطابق أي حقائق نموذج أو صفوف استخدام {{id}}.", - "model.fallback": "نموذج", - "model.catalogFallback": - "حقائق النموذج من فهرس النماذج المشترك. يظهر استخدام OpenCode Go عندما يصبح لهذا النموذج نشاط.", - "model.unranked": "غير مصنف ضمن استخدام OpenCode Go للأسبوع الماضي", - "model.ranked": "مصنف رقم {{rank}} ضمن استخدام OpenCode Go للأسبوع الماضي", - "model.observedVolume": "مع {{share}} من حجم 2M المرصود.", - "model.weights": "أوزان النموذج: {{label}}", - "model.rank": "ترتيب 7 أيام", - "model.profile": "ملف النموذج", - "model.listed": "مدرج", - "model.noCurrentUsage": "لا يوجد استخدام لـ OpenCode Go في نافذة البيانات الحالية.", - "model.facts": "حقائق النموذج", - "model.context": "السياق", - "model.output": "الإخراج", - "model.knowledge": "المعرفة", - "model.release": "الإصدار", - "model.inputs": "المدخلات", - "model.overviewDescription": "رموز OpenCode Go الأخيرة، والمستخدمون الفريدون، وموقع السوق.", - "model.noSummaryTitle": "لا يوجد ملخص استخدام", - "model.noSummaryDescription": "لا يحتوي هذا النموذج على صفوف استخدام OpenCode Go بعد.", - "model.tokens": "الرموز", - "model.uniqueUsers": "المستخدمون الفريدون", - "model.lastTwoMonths": "آخر شهرين", - "model.sessions": "الجلسات", - "model.completedSessions": "الجلسات المكتملة", - "model.tokenShare": "حصة الرموز", - "model.totalModels": "{{count}} نموذجًا", - "model.momentum": "الزخم", - "model.vsPreviousWindow": "مقارنة بالنافذة السابقة", - "model.usageDescription": "حجم رموز OpenCode Go اليومي خلال نافذة الشهرين الأخيرة.", - "model.noUsageTitle": "لا يوجد استخدام", - "model.noUsageDescription": "لم يصل أي استخدام في النافذة الحالية.", - "model.dailyTokenChart": "مخطط استخدام الرموز اليومي", - "model.usersDescription": "المستخدمون اليوميون الفريدون لـ OpenCode Go خلال نافذة الشهرين الأخيرة.", - "model.noUsersTitle": "لا توجد بيانات مستخدمين", - "model.noUsersDescription": "لم تصل أي صفوف تحتوي على مستخدمين في النافذة الحالية.", - "model.dailyUserChart": "مخطط المستخدمين الفريدين اليومي", - "model.efficiencyDescription": "التكلفة، وسلوك التخزين المؤقت، ومتوسط شكل جلسة OpenCode Go.", - "model.noEfficiencyTitle": "لا توجد بيانات كفاءة", - "model.noEfficiencyDescription": "تظهر بيانات الكفاءة بعد وصول الاستخدام.", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "التكلفة", - "model.totalSpend": "إجمالي الإنفاق", - "model.costPerMillion": "التكلفة / 1M", - "model.inputOutput": "الإدخال / الإخراج", - "model.observedTokens": "كل الرموز المرصودة", - "model.costSession": "التكلفة / الجلسة", - "model.average": "المتوسط", - "model.tokensSession": "الرموز / الجلسة", - "model.cacheRatio": "نسبة التخزين المؤقت", - "model.inputTokens": "رموز الإدخال", - "model.geoDescription": "رموز نموذج OpenCode Go المستخدمة حسب البلد.", - "model.noGeoTitle": "لا توجد بيانات جغرافية", - "model.noGeoDescription": "لم تطابق أي صفوف جغرافية في OpenCode Go هذا النموذج.", - "model.worldMap": "خريطة عالمية لاستخدام رموز النموذج حسب البلد", - "model.peersDescription": "نماذج قريبة حسب حجم رموز OpenCode Go الأخير.", - "model.noPeersTitle": "لا توجد نماذج مشابهة", - "model.noPeersDescription": "تظهر ترتيبات النماذج المشابهة بعد وصول الاستخدام.", - "model.noUsageLastWeek": "لا يوجد استخدام الأسبوع الماضي", - "model.newThisWeek": "جديد هذا الأسبوع", - "model.sameAsPreviousWeek": "دون تغيير عن الأسبوع السابق", - "model.vsPreviousWeek": "{{change}} مقارنة بالأسبوع السابق", - "model.pdf": "PDF", - "format.users": "مستخدمون", - "format.tokens": "رموز", -} as const diff --git a/packages/stats/app/src/i18n/br.ts b/packages/stats/app/src/i18n/br.ts deleted file mode 100644 index 24941355c5..0000000000 --- a/packages/stats/app/src/i18n/br.ts +++ /dev/null @@ -1,236 +0,0 @@ -export const dict = { - "app.title": "Ranking de uso de modelos de IA | OpenCode Data", - "app.description": - "Explore o uso do OpenCode Go em modelos de IA, incluindo volume de tokens, rankings, participação de mercado, preço por token, custo por sessão, taxa de cache e distribuição geográfica.", - "app.unfurlAlt": "Logotipo do OpenCode Data sobre um fundo escuro padronizado", - "nav.dataHome": "Início dos dados", - "nav.topModels": "Principais modelos", - "nav.leaderboard": "Classificação", - "nav.uniqueUsers": "Usuários únicos", - "nav.sessionCost": "Custo da sessão", - "nav.tokenCost": "Custo de tokens", - "nav.cacheRatio": "Taxa de cache", - "nav.marketShare": "Participação de mercado", - "nav.geoBreakdown": "Distribuição geográfica", - "nav.overview": "Visão geral", - "nav.usage": "Uso", - "nav.users": "Usuários", - "nav.efficiency": "Eficiência", - "nav.peers": "Pares", - "nav.models": "Modelos", - "header.brandLabel": "Início dos dados", - "header.sectionNavLabel": "Seções de dados", - "header.githubAria": "Dar estrela ao OpenCode no GitHub", - "header.github": "GitHub", - "header.tryOpenCode": "Experimente o OpenCode", - "header.openNav": "Abrir navegação", - "header.closeNav": "Fechar navegação", - "theme.groupLabel": "Tema", - "theme.dark": "Escuro", - "theme.light": "Claro", - "theme.system": "Sistema", - "footer.modelData": "Dados do modelo", - "footer.legal": "Legal", - "footer.connect": "Conectar", - "footer.newsletter": "Newsletter", - "footer.newsletterBody": "Seja a primeira pessoa a saber sobre novos lançamentos.", - "footer.language": "Idioma", - "footer.subscribe": "Inscrever-se", - "footer.terms": "Termos de serviço", - "footer.privacy": "Política de privacidade", - "footer.contact": "Fale conosco", - "footer.community": "Comunidade", - "footer.youtube": "YouTube", - "footer.homeAria": "Início do OpenCode", - "footer.status": "Todos os sistemas operacionais", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "SAIBA MAIS", - "modal.closeNewsletter": "Fechar inscrição na newsletter", - "modal.title": "Newsletter do OpenCode", - "modal.body": "Seja a primeira pessoa a saber\nsobre novos lançamentos.", - "modal.email": "Endereço de email", - "modal.subscribe": "Inscrever-se", - "modal.subscribing": "Inscrevendo...", - "modal.success": "Inscrição realizada.", - "modal.error": "Falha ao inscrever", - "product.allUsers": "Todos os usuários", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1 dia", - "range.1W": "1 semana", - "range.2W": "2 semanas", - "range.1M": "1 mês", - "range.2M": "2 meses", - "chart.daily": "Diário", - "chart.input": "Entrada", - "chart.output": "Saída", - "chart.cached": "Em cache", - "chart.uncached": "Sem cache", - "chart.ratio": "Taxa", - "chart.model": "Modelo", - "chart.cacheRatio": "Taxa de cache", - "chart.costSession": "Custo/sessão", - "chart.tokensSession": "Tokens/sessão", - "chart.costPerSession": "CUSTO / SESSÃO", - "chart.tokensPerSession": "TOKENS / SESSÃO", - "chart.live": "Ao vivo", - "chart.percent": "por cento", - "chart.leaderboardAria": "Classificação de tokens do modelo", - "chart.scrollableLeaderboardAria": "Classificação rolável de tokens do modelo", - "chart.byAuthor": "por {{author}}", - "home.updated": "Atualizado", - "home.noRows": "Ainda não há linhas", - "home.justNow": "agora mesmo", - "home.heroCopy": - "Veja quais modelos estão vencendo em uso real, como a combinação está mudando e o que isso significa para o custo.", - "home.loadingTitle": "Carregando dados", - "home.loadingDescription": "Lendo agregados de modelos.", - "home.usageTitle": "Uso", - "home.topModelsDescription": "Uso de modelos no OpenCode Go.", - "home.noUsageTitle": "Sem dados de uso", - "home.noUsageDescription": "Nenhuma linha de modelo correspondeu a este produto e intervalo.", - "home.noLeaderboardTitle": "Sem dados de classificação", - "home.noLeaderboardDescription": "Nenhuma linha de modelo correspondeu a este produto e intervalo.", - "home.productFilter": "Filtro de produto", - "home.dateRange": "Intervalo de datas", - "home.stackedUsageChart": "Gráfico empilhado de uso dos principais modelos", - "home.total": "total", - "home.modelUsers": "usuários do modelo", - "home.new": "Novo", - "home.uniqueUsersTitle": "Usuários únicos", - "home.uniqueUsersDescription": "Usuários únicos diários do OpenCode Go por modelo.", - "home.noUserDataTitle": "Sem dados de usuários", - "home.noUserDataDescription": "Nenhuma linha de modelo com usuários correspondeu a esta janela.", - "home.uniqueUsersChart": "Gráfico empilhado de usuários únicos por modelo", - "home.marketShareTitle": "Participação de mercado", - "home.marketShareDescription": "Compare a participação de tokens por autor do modelo.", - "home.noMarketTitle": "Sem dados de mercado", - "home.noMarketDescription": "Nenhuma linha de modelo correspondeu a este intervalo.", - "home.marketChart": "Participação de mercado por autor do modelo", - "home.noData": "Sem dados", - "home.geoTitle": "Distribuição geográfica", - "home.geoDescription": "Tokens usados por país.", - "home.noGeoTitle": "Sem dados geográficos", - "home.noGeoDescription": "Nenhuma linha geográfica correspondeu a este intervalo.", - "home.worldMap": "Mapa-múndi do uso de tokens por país", - "home.geoMapTitle": "Mapa da distribuição geográfica", - "home.unknown": "Desconhecido", - "home.tokenCostTitle": "Custo de tokens", - "home.tokenCostDescription": "Preço por 1 milhão de tokens.", - "home.noTokenCostTitle": "Sem dados de custo de tokens", - "home.noTokenCostDescription": "Nenhuma linha de modelo com custo correspondeu a este produto.", - "home.cacheRatioTitle": "Taxa de cache", - "home.cacheRatioDescription": "Parcela dos tokens de entrada atendida pelo cache.", - "home.noCacheTitle": "Sem dados de taxa de cache", - "home.noCacheDescription": "Nenhuma linha de modelo com tokens de entrada correspondeu a este produto.", - "home.sessionCostTitle": "Custo da sessão", - "home.sessionCostDescription": "Custo médio por sessão.", - "home.noSessionCostTitle": "Sem dados de custo da sessão", - "home.noSessionCostDescription": "Nenhuma linha de modelo com sessões correspondeu a este produto.", - "home.costSession": "Custo/sessão", - "lab.title": "Uso e ranking de modelos de IA da {{lab}} | OpenCode Data", - "lab.description": - "Compare modelos da {{lab}} usados no OpenCode Go, incluindo uso de tokens, ranking de modelos, janelas de contexto, datas de lançamento, custos e dados específicos de cada modelo.", - "lab.loadingTitle": "Laboratório de modelos", - "lab.loadingDescription": "Lendo disponibilidade de modelos e uso recente do OpenCode.", - "lab.notFound": "Nenhum modelo correspondeu a este laboratório.", - "lab.heroPrefix": "Explore {{count}} modelos da {{lab}} usados no OpenCode", - "lab.heroIncluding": "incluindo {{models}}", - "lab.heroSuffix": - "Compare uso recente de tokens, janelas de contexto, datas de lançamento e dados específicos de cada modelo.", - "lab.tokensProcessed": "Tokens processados", - "lab.pending": "Pendente", - "lab.usageAfterActivity": "O uso aparece depois que a atividade do modelo chega", - "lab.latestRelease": "Último lançamento em {{date}}", - "lab.shareOfUsage": "{{share}} do uso recente do OpenCode", - "lab.usageTitle": "Uso de tokens da {{lab}}", - "lab.usageDescription": "Volume diário de tokens do OpenCode nos últimos dois meses.", - "lab.noUsageTitle": "Ainda sem uso", - "lab.noUsageDescription": "O uso recente de tokens aparece aqui quando este laboratório tiver atividade.", - "lab.dailyTokenChart": "Gráfico diário de uso de tokens da {{lab}}", - "lab.dailyTokens": "Tokens diários", - "lab.tokens": "tokens", - "lab.modelsTitle": "Modelos da {{lab}}", - "lab.modelsDescription": "Detalhes do catálogo mais uso recente.", - "lab.recentUsageAndLimits": "Uso recente e limites.", - "lab.usage": "Uso", - "lab.share": "Participação", - "model.title": "Uso, custo e posição de {{model}} | OpenCode Data", - "model.description": - "Veja dados de uso de {{model}} no OpenCode Go, incluindo volume de tokens, ranking semanal, combinação de tokens, custos, taxa de cache, sessões, distribuição geográfica e modelos pares.", - "model.loadingTitle": "Dados do modelo", - "model.loadingDescription": "Lendo agregados de modelos.", - "model.loadingProfile": "Lendo o perfil do modelo.", - "model.noDataTitle": "Sem dados do modelo", - "model.noDataDescription": "Tente abrir um modelo pela classificação.", - "model.noMatched": "Nenhum fato do modelo ou linha de uso correspondeu a {{id}}.", - "model.fallback": "Modelo", - "model.catalogFallback": - "Fatos do modelo do índice compartilhado de modelos. O uso no OpenCode Go aparece quando este modelo tiver atividade.", - "model.unranked": "Sem classificação no uso do OpenCode Go da última semana", - "model.ranked": "Classificado em #{{rank}} no uso do OpenCode Go da última semana", - "model.observedVolume": "com {{share}} do volume observado de 2M.", - "model.weights": "Pesos do modelo: {{label}}", - "model.rank": "Ranking 7D", - "model.profile": "Perfil do modelo", - "model.listed": "Listado", - "model.noCurrentUsage": "Sem uso do OpenCode Go na janela de dados atual.", - "model.facts": "Fatos do modelo", - "model.context": "Contexto", - "model.output": "Saída", - "model.knowledge": "Conhecimento", - "model.release": "Lançamento", - "model.inputs": "Entradas", - "model.overviewDescription": "Tokens recentes do OpenCode Go, usuários únicos e posição de mercado.", - "model.noSummaryTitle": "Sem resumo de uso", - "model.noSummaryDescription": "Este modelo ainda não tem linhas de uso do OpenCode Go.", - "model.tokens": "Tokens", - "model.uniqueUsers": "Usuários únicos", - "model.lastTwoMonths": "últimos dois meses", - "model.sessions": "Sessões", - "model.completedSessions": "sessões concluídas", - "model.tokenShare": "Participação de tokens", - "model.totalModels": "{{count}} modelos", - "model.momentum": "Momento", - "model.vsPreviousWindow": "vs janela anterior", - "model.usageDescription": "Volume diário de tokens do OpenCode Go na janela recente de dois meses.", - "model.noUsageTitle": "Sem uso", - "model.noUsageDescription": "Nenhum uso chegou na janela atual.", - "model.dailyTokenChart": "Gráfico diário de uso de tokens", - "model.usersDescription": "Usuários únicos diários do OpenCode Go na janela recente de dois meses.", - "model.noUsersTitle": "Sem dados de usuários", - "model.noUsersDescription": "Nenhuma linha com usuários chegou na janela atual.", - "model.dailyUserChart": "Gráfico diário de usuários únicos", - "model.efficiencyDescription": "Custo, comportamento de cache e formato médio da sessão do OpenCode Go.", - "model.noEfficiencyTitle": "Sem dados de eficiência", - "model.noEfficiencyDescription": "Os dados de eficiência aparecem depois que o uso chega.", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "Custo", - "model.totalSpend": "gasto total", - "model.costPerMillion": "Custo / 1M", - "model.inputOutput": "entrada / saída", - "model.observedTokens": "todos os tokens observados", - "model.costSession": "Custo / sessão", - "model.average": "média", - "model.tokensSession": "Tokens / sessão", - "model.cacheRatio": "Taxa de cache", - "model.inputTokens": "tokens de entrada", - "model.geoDescription": "Tokens do modelo OpenCode Go usados por país.", - "model.noGeoTitle": "Sem dados geográficos", - "model.noGeoDescription": "Nenhuma linha geográfica do OpenCode Go correspondeu a este modelo.", - "model.worldMap": "Mapa-múndi do uso de tokens do modelo por país", - "model.peersDescription": "Modelos próximos por volume recente de tokens do OpenCode Go.", - "model.noPeersTitle": "Sem pares", - "model.noPeersDescription": "Os rankings de pares aparecem depois que o uso chega.", - "model.noUsageLastWeek": "Sem uso na semana passada", - "model.newThisWeek": "Novo esta semana", - "model.sameAsPreviousWeek": "Igual à semana anterior", - "model.vsPreviousWeek": "{{change}} vs semana anterior", - "model.pdf": "PDF", - "format.users": "usuários", - "format.tokens": "tokens", -} as const diff --git a/packages/stats/app/src/i18n/da.ts b/packages/stats/app/src/i18n/da.ts deleted file mode 100644 index 35b4ad9972..0000000000 --- a/packages/stats/app/src/i18n/da.ts +++ /dev/null @@ -1,235 +0,0 @@ -export const dict = { - "app.title": "Ranglister for brug af AI-modeller | OpenCode Data", - "app.description": - "Udforsk brugen af OpenCode Go på tværs af AI-modeller, inklusive tokenvolumen, ranglister, markedsandel, tokenpriser, sessionsomkostning, cacheandel og geografiske opdelinger.", - "app.unfurlAlt": "OpenCode Data-ordmærke på en mørk mønstret baggrund", - "nav.dataHome": "Dataforside", - "nav.topModels": "Topmodeller", - "nav.leaderboard": "Rangliste", - "nav.uniqueUsers": "Unikke brugere", - "nav.sessionCost": "Sessionsomkostning", - "nav.tokenCost": "Tokenomkostning", - "nav.cacheRatio": "Cacheandel", - "nav.marketShare": "Markedsandel", - "nav.geoBreakdown": "Geografisk opdeling", - "nav.overview": "Overblik", - "nav.usage": "Brug", - "nav.users": "Brugere", - "nav.efficiency": "Effektivitet", - "nav.peers": "Lignende modeller", - "nav.models": "Modeller", - "header.brandLabel": "Dataforside", - "header.sectionNavLabel": "Datasektioner", - "header.githubAria": "Giv OpenCode en stjerne på GitHub", - "header.github": "GitHub", - "header.tryOpenCode": "Prøv OpenCode", - "header.openNav": "Åbn navigation", - "header.closeNav": "Luk navigation", - "theme.groupLabel": "Tema", - "theme.dark": "Mørkt", - "theme.light": "Lyst", - "theme.system": "System", - "footer.modelData": "Modeldata", - "footer.legal": "Juridisk", - "footer.connect": "Kontakt", - "footer.newsletter": "Nyhedsbrev", - "footer.newsletterBody": "Vær den første til at høre om nye udgivelser.", - "footer.language": "Sprog", - "footer.subscribe": "Tilmeld", - "footer.terms": "Servicevilkår", - "footer.privacy": "Privatlivspolitik", - "footer.contact": "Kontakt os", - "footer.community": "Fællesskab", - "footer.youtube": "YouTube", - "footer.homeAria": "OpenCode-forside", - "footer.status": "Alle systemer er i drift", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "LÆR MERE", - "modal.closeNewsletter": "Luk tilmelding til nyhedsbrev", - "modal.title": "OpenCode-nyhedsbrev", - "modal.body": "Vær den første til at høre\nom nye udgivelser.", - "modal.email": "E-mailadresse", - "modal.subscribe": "Tilmeld", - "modal.subscribing": "Tilmelder...", - "modal.success": "Du er tilmeldt.", - "modal.error": "Tilmelding mislykkedes", - "product.allUsers": "Alle brugere", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1 dag", - "range.1W": "1 uge", - "range.2W": "2 uger", - "range.1M": "1 måned", - "range.2M": "2 måneder", - "chart.daily": "Dagligt", - "chart.input": "Input", - "chart.output": "Output", - "chart.cached": "Cachelagret", - "chart.uncached": "Ikke cachelagret", - "chart.ratio": "Forhold", - "chart.model": "Model", - "chart.cacheRatio": "Cacheandel", - "chart.costSession": "Omkostning/session", - "chart.tokensSession": "Tokens/session", - "chart.costPerSession": "OMKOSTNING / SESSION", - "chart.tokensPerSession": "TOKENS / SESSION", - "chart.live": "Live", - "chart.percent": "procent", - "chart.leaderboardAria": "Rangliste over modeltokens", - "chart.scrollableLeaderboardAria": "Rulbar rangliste over modeltokens", - "chart.byAuthor": "af {{author}}", - "home.updated": "Opdateret", - "home.noRows": "Ingen rækker endnu", - "home.justNow": "lige nu", - "home.heroCopy": - "Se hvilke modeller der vinder reel brug, hvordan mixet skifter, og hvad det betyder for omkostningerne.", - "home.loadingTitle": "Indlæser data", - "home.loadingDescription": "Læser modelaggregater.", - "home.usageTitle": "Brug", - "home.topModelsDescription": "Brug af modeller på tværs af OpenCode Go.", - "home.noUsageTitle": "Ingen brugsdata", - "home.noUsageDescription": "Ingen modelrækker matchede dette produkt og interval.", - "home.noLeaderboardTitle": "Ingen ranglistedata", - "home.noLeaderboardDescription": "Ingen modelrækker matchede dette produkt og interval.", - "home.productFilter": "Produktfilter", - "home.dateRange": "Datointerval", - "home.stackedUsageChart": "Stablet brugsdiagram for topmodeller", - "home.total": "i alt", - "home.modelUsers": "modelbrugere", - "home.new": "Ny", - "home.uniqueUsersTitle": "Unikke brugere", - "home.uniqueUsersDescription": "Daglige unikke OpenCode Go-brugere efter model.", - "home.noUserDataTitle": "Ingen brugerdata", - "home.noUserDataDescription": "Ingen modelrækker med brugere matchede dette vindue.", - "home.uniqueUsersChart": "Stablet diagram over unikke brugere efter model", - "home.marketShareTitle": "Markedsandel", - "home.marketShareDescription": "Sammenlign tokenandel efter modelforfatter.", - "home.noMarketTitle": "Ingen markedsdata", - "home.noMarketDescription": "Ingen modelrækker matchede dette interval.", - "home.marketChart": "Markedsandel efter modelforfatter", - "home.noData": "Ingen data", - "home.geoTitle": "Geografisk opdeling", - "home.geoDescription": "Tokens brugt efter land.", - "home.noGeoTitle": "Ingen geodata", - "home.noGeoDescription": "Ingen georækker matchede dette interval.", - "home.worldMap": "Verdenskort over tokenbrug efter land", - "home.geoMapTitle": "Kort over geografisk opdeling", - "home.unknown": "Ukendt", - "home.tokenCostTitle": "Tokenomkostning", - "home.tokenCostDescription": "Pris pr. 1 mio. tokens.", - "home.noTokenCostTitle": "Ingen tokenomkostningsdata", - "home.noTokenCostDescription": "Ingen modelrækker med omkostninger matchede dette produkt.", - "home.cacheRatioTitle": "Cacheandel", - "home.cacheRatioDescription": "Andel af inputtokens leveret fra cache.", - "home.noCacheTitle": "Ingen cacheandelsdata", - "home.noCacheDescription": "Ingen modelrækker med inputtokens matchede dette produkt.", - "home.sessionCostTitle": "Sessionsomkostning", - "home.sessionCostDescription": "Gennemsnitlig omkostning pr. session.", - "home.noSessionCostTitle": "Ingen sessionsomkostningsdata", - "home.noSessionCostDescription": "Ingen modelrækker med sessioner matchede dette produkt.", - "home.costSession": "Omkostning/session", - "lab.title": "{{lab}} AI-modelbrug og ranglister | OpenCode Data", - "lab.description": - "Sammenlign {{lab}}-modeller brugt i OpenCode Go, inklusive tokenbrug, modelranglister, kontekstvinduer, udgivelsesdatoer, omkostninger og modelspecifikke data.", - "lab.loadingTitle": "Modellab", - "lab.loadingDescription": "Læser modeltilgængelighed og seneste OpenCode-brug.", - "lab.notFound": "Ingen modeller matchede dette lab.", - "lab.heroPrefix": "Udforsk {{count}} {{lab}}-modeller brugt i OpenCode", - "lab.heroIncluding": "inklusive {{models}}", - "lab.heroSuffix": "Sammenlign seneste tokenbrug, kontekstvinduer, udgivelsesdatoer og modelspecifikke data.", - "lab.tokensProcessed": "Behandlede tokens", - "lab.pending": "Afventer", - "lab.usageAfterActivity": "Brug vises, når modelaktivitet lander", - "lab.latestRelease": "Seneste udgivelse {{date}}", - "lab.shareOfUsage": "{{share}} af den seneste OpenCode-brug", - "lab.usageTitle": "{{lab}}-tokenbrug", - "lab.usageDescription": "Daglig OpenCode-tokenvolumen over de sidste to måneder.", - "lab.noUsageTitle": "Ingen brug endnu", - "lab.noUsageDescription": "Seneste tokenbrug vises her, når dette lab har aktivitet.", - "lab.dailyTokenChart": "Dagligt diagram over {{lab}}-tokenbrug", - "lab.dailyTokens": "Daglige tokens", - "lab.tokens": "tokens", - "lab.modelsTitle": "{{lab}}-modeller", - "lab.modelsDescription": "Katalogdetaljer plus seneste brug.", - "lab.recentUsageAndLimits": "Seneste brug og grænser.", - "lab.usage": "Brug", - "lab.share": "Andel", - "model.title": "{{model}} brug, omkostning og rang | OpenCode Data", - "model.description": - "Se OpenCode Go-brugsdata for {{model}}, inklusive tokenvolumen, ugentlig rang, tokenmix, omkostninger, cacheandel, sessioner, geografiske opdelinger og lignende modeller.", - "model.loadingTitle": "Modeldata", - "model.loadingDescription": "Læser modelaggregater.", - "model.loadingProfile": "Læser modelprofilen.", - "model.noDataTitle": "Ingen modeldata", - "model.noDataDescription": "Prøv at åbne en model fra ranglisten.", - "model.noMatched": "Ingen modelfakta eller brugsrækker matchede {{id}}.", - "model.fallback": "Model", - "model.catalogFallback": - "Modelfakta fra det fælles modelindeks. OpenCode Go-brug vises, når denne model har aktivitet.", - "model.unranked": "Ikke rangeret i sidste uges OpenCode Go-brug", - "model.ranked": "Rangeret #{{rank}} i sidste uges OpenCode Go-brug", - "model.observedVolume": "med {{share}} af observeret 2M-volumen.", - "model.weights": "Modelvægte: {{label}}", - "model.rank": "7D-rang", - "model.profile": "Modelprofil", - "model.listed": "Opført", - "model.noCurrentUsage": "Ingen OpenCode Go-brug i det aktuelle datavindue.", - "model.facts": "Modelfakta", - "model.context": "Kontekst", - "model.output": "Output", - "model.knowledge": "Viden", - "model.release": "Udgivelse", - "model.inputs": "Input", - "model.overviewDescription": "Seneste OpenCode Go-tokens, unikke brugere og markedsposition.", - "model.noSummaryTitle": "Ingen brugsoversigt", - "model.noSummaryDescription": "Denne model har endnu ingen OpenCode Go-brugsrækker.", - "model.tokens": "Tokens", - "model.uniqueUsers": "Unikke brugere", - "model.lastTwoMonths": "sidste to måneder", - "model.sessions": "Sessioner", - "model.completedSessions": "fuldførte sessioner", - "model.tokenShare": "Tokenandel", - "model.totalModels": "{{count}} modeller", - "model.momentum": "Momentum", - "model.vsPreviousWindow": "vs forrige vindue", - "model.usageDescription": "Daglig OpenCode Go-tokenvolumen i det seneste tomånedersvindue.", - "model.noUsageTitle": "Ingen brug", - "model.noUsageDescription": "Ingen brug landede i det aktuelle vindue.", - "model.dailyTokenChart": "Dagligt diagram over tokenbrug", - "model.usersDescription": "Daglige unikke OpenCode Go-brugere i det seneste tomånedersvindue.", - "model.noUsersTitle": "Ingen brugerdata", - "model.noUsersDescription": "Ingen rækker med brugere landede i det aktuelle vindue.", - "model.dailyUserChart": "Dagligt diagram over unikke brugere", - "model.efficiencyDescription": "Omkostning, cacheadfærd og gennemsnitlig OpenCode Go-sessionsform.", - "model.noEfficiencyTitle": "Ingen effektivitetsdata", - "model.noEfficiencyDescription": "Effektivitetsdata vises, når brug lander.", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "Omkostning", - "model.totalSpend": "samlet forbrug", - "model.costPerMillion": "Omkostning / 1 mio.", - "model.inputOutput": "input / output", - "model.observedTokens": "alle observerede tokens", - "model.costSession": "Omkostning / session", - "model.average": "gennemsnit", - "model.tokensSession": "Tokens / session", - "model.cacheRatio": "Cacheandel", - "model.inputTokens": "inputtokens", - "model.geoDescription": "OpenCode Go-modeltokens brugt efter land.", - "model.noGeoTitle": "Ingen geodata", - "model.noGeoDescription": "Ingen OpenCode Go-georækker matchede denne model.", - "model.worldMap": "Verdenskort over modeltokenbrug efter land", - "model.peersDescription": "Nærliggende modeller efter seneste OpenCode Go-tokenvolumen.", - "model.noPeersTitle": "Ingen lignende modeller", - "model.noPeersDescription": "Ranglister over lignende modeller vises, når brug lander.", - "model.noUsageLastWeek": "Ingen brug sidste uge", - "model.newThisWeek": "Ny denne uge", - "model.sameAsPreviousWeek": "Samme som forrige uge", - "model.vsPreviousWeek": "{{change}} vs forrige uge", - "model.pdf": "PDF", - "format.users": "brugere", - "format.tokens": "tokens", -} as const diff --git a/packages/stats/app/src/i18n/de.ts b/packages/stats/app/src/i18n/de.ts deleted file mode 100644 index 092d85c8c9..0000000000 --- a/packages/stats/app/src/i18n/de.ts +++ /dev/null @@ -1,236 +0,0 @@ -export const dict = { - "app.title": "KI-Modellnutzungs-Rankings | OpenCode Data", - "app.description": - "Erkunde die OpenCode Go-Nutzung über KI-Modelle hinweg, einschließlich Tokenvolumen, Rankings, Marktanteil, Tokenpreisen, Sitzungskosten, Cache-Anteil und geografischen Aufschlüsselungen.", - "app.unfurlAlt": "OpenCode Data-Wortmarke auf dunklem gemustertem Hintergrund", - "nav.dataHome": "Daten-Startseite", - "nav.topModels": "Top-Modelle", - "nav.leaderboard": "Bestenliste", - "nav.uniqueUsers": "Eindeutige Nutzer", - "nav.sessionCost": "Sitzungskosten", - "nav.tokenCost": "Tokenkosten", - "nav.cacheRatio": "Cache-Anteil", - "nav.marketShare": "Marktanteil", - "nav.geoBreakdown": "Geografische Aufschlüsselung", - "nav.overview": "Übersicht", - "nav.usage": "Nutzung", - "nav.users": "Nutzer", - "nav.efficiency": "Effizienz", - "nav.peers": "Vergleichsmodelle", - "nav.models": "Modelle", - "header.brandLabel": "Daten-Startseite", - "header.sectionNavLabel": "Datenbereiche", - "header.githubAria": "OpenCode auf GitHub mit Stern markieren", - "header.github": "GitHub", - "header.tryOpenCode": "OpenCode ausprobieren", - "header.openNav": "Navigation öffnen", - "header.closeNav": "Navigation schließen", - "theme.groupLabel": "Design", - "theme.dark": "Dunkel", - "theme.light": "Hell", - "theme.system": "System", - "footer.modelData": "Modelldaten", - "footer.legal": "Rechtliches", - "footer.connect": "Kontakt", - "footer.newsletter": "Newsletter", - "footer.newsletterBody": "Erfahre als Erstes von neuen Veröffentlichungen.", - "footer.language": "Sprache", - "footer.subscribe": "Abonnieren", - "footer.terms": "Nutzungsbedingungen", - "footer.privacy": "Datenschutzerklärung", - "footer.contact": "Kontakt aufnehmen", - "footer.community": "Community", - "footer.youtube": "YouTube", - "footer.homeAria": "OpenCode-Startseite", - "footer.status": "Alle Systeme betriebsbereit", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "MEHR ERFAHREN", - "modal.closeNewsletter": "Newsletter-Anmeldung schließen", - "modal.title": "OpenCode-Newsletter", - "modal.body": "Erfahre als Erstes\nvon neuen Veröffentlichungen.", - "modal.email": "E-Mail-Adresse", - "modal.subscribe": "Abonnieren", - "modal.subscribing": "Wird abonniert...", - "modal.success": "Du hast dich angemeldet.", - "modal.error": "Anmeldung fehlgeschlagen", - "product.allUsers": "Alle Nutzer", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1 Tag", - "range.1W": "1 Woche", - "range.2W": "2 Wochen", - "range.1M": "1 Monat", - "range.2M": "2 Monate", - "chart.daily": "Täglich", - "chart.input": "Eingabe", - "chart.output": "Ausgabe", - "chart.cached": "Gecacht", - "chart.uncached": "Nicht gecacht", - "chart.ratio": "Verhältnis", - "chart.model": "Modell", - "chart.cacheRatio": "Cache-Anteil", - "chart.costSession": "Kosten/Sitzung", - "chart.tokensSession": "Tokens/Sitzung", - "chart.costPerSession": "KOSTEN / SITZUNG", - "chart.tokensPerSession": "TOKENS / SITZUNG", - "chart.live": "Live", - "chart.percent": "Prozent", - "chart.leaderboardAria": "Modell-Token-Bestenliste", - "chart.scrollableLeaderboardAria": "Scrollbare Modell-Token-Bestenliste", - "chart.byAuthor": "von {{author}}", - "home.updated": "Aktualisiert", - "home.noRows": "Noch keine Zeilen", - "home.justNow": "gerade eben", - "home.heroCopy": - "Sieh, welche Modelle echte Nutzung gewinnen, wie sich der Mix verschiebt und was das für die Kosten bedeutet.", - "home.loadingTitle": "Daten werden geladen", - "home.loadingDescription": "Modellaggregate werden gelesen.", - "home.usageTitle": "Nutzung", - "home.topModelsDescription": "Nutzung von Modellen in OpenCode Go.", - "home.noUsageTitle": "Keine Nutzungsdaten", - "home.noUsageDescription": "Keine Modellzeilen passten zu diesem Produkt und Zeitraum.", - "home.noLeaderboardTitle": "Keine Bestenlistendaten", - "home.noLeaderboardDescription": "Keine Modellzeilen passten zu diesem Produkt und Zeitraum.", - "home.productFilter": "Produktfilter", - "home.dateRange": "Datumsbereich", - "home.stackedUsageChart": "Gestapeltes Nutzungsdiagramm der Top-Modelle", - "home.total": "gesamt", - "home.modelUsers": "Modellnutzer", - "home.new": "Neu", - "home.uniqueUsersTitle": "Eindeutige Nutzer", - "home.uniqueUsersDescription": "Täglich eindeutige OpenCode Go-Nutzer nach Modell.", - "home.noUserDataTitle": "Keine Nutzerdaten", - "home.noUserDataDescription": "Keine Modellzeilen mit Nutzern passten zu diesem Zeitraum.", - "home.uniqueUsersChart": "Gestapeltes Diagramm eindeutiger Nutzer nach Modell", - "home.marketShareTitle": "Marktanteil", - "home.marketShareDescription": "Vergleiche den Tokenanteil nach Modellautor.", - "home.noMarketTitle": "Keine Marktdaten", - "home.noMarketDescription": "Keine Modellzeilen passten zu diesem Zeitraum.", - "home.marketChart": "Marktanteil nach Modellautor", - "home.noData": "Keine Daten", - "home.geoTitle": "Geografische Aufschlüsselung", - "home.geoDescription": "Nach Land verwendete Tokens.", - "home.noGeoTitle": "Keine Geodaten", - "home.noGeoDescription": "Keine Geozeilen passten zu diesem Zeitraum.", - "home.worldMap": "Weltkarte der Tokennutzung nach Land", - "home.geoMapTitle": "Karte der geografischen Aufschlüsselung", - "home.unknown": "Unbekannt", - "home.tokenCostTitle": "Tokenkosten", - "home.tokenCostDescription": "Preis pro 1 Mio. Tokens.", - "home.noTokenCostTitle": "Keine Tokenkostendaten", - "home.noTokenCostDescription": "Keine Modellzeilen mit Kostendaten passten zu diesem Produkt.", - "home.cacheRatioTitle": "Cache-Anteil", - "home.cacheRatioDescription": "Anteil der Eingabetokens, die aus dem Cache bedient wurden.", - "home.noCacheTitle": "Keine Cache-Anteilsdaten", - "home.noCacheDescription": "Keine Modellzeilen mit Eingabetokens passten zu diesem Produkt.", - "home.sessionCostTitle": "Sitzungskosten", - "home.sessionCostDescription": "Durchschnittliche Kosten pro Sitzung.", - "home.noSessionCostTitle": "Keine Sitzungskostendaten", - "home.noSessionCostDescription": "Keine Modellzeilen mit Sitzungen passten zu diesem Produkt.", - "home.costSession": "Kosten/Sitzung", - "lab.title": "{{lab}} KI-Modellnutzung und Rankings | OpenCode Data", - "lab.description": - "Vergleiche {{lab}}-Modelle, die in OpenCode Go verwendet werden, einschließlich Tokennutzung, Modellrankings, Kontextfenstern, Veröffentlichungsdaten, Kosten und modellspezifischen Daten.", - "lab.loadingTitle": "Modelllabor", - "lab.loadingDescription": "Modellverfügbarkeit und aktuelle OpenCode-Nutzung werden gelesen.", - "lab.notFound": "Keine Modelle passten zu diesem Lab.", - "lab.heroPrefix": "Erkunde {{count}} {{lab}}-Modelle, die in OpenCode verwendet werden", - "lab.heroIncluding": "einschließlich {{models}}", - "lab.heroSuffix": - "Vergleiche aktuelle Tokennutzung, Kontextfenster, Veröffentlichungsdaten und modellspezifische Daten.", - "lab.tokensProcessed": "Verarbeitete Tokens", - "lab.pending": "Ausstehend", - "lab.usageAfterActivity": "Nutzung erscheint, sobald Modellaktivität vorliegt", - "lab.latestRelease": "Neueste Veröffentlichung {{date}}", - "lab.shareOfUsage": "{{share}} der aktuellen OpenCode-Nutzung", - "lab.usageTitle": "{{lab}}-Tokennutzung", - "lab.usageDescription": "Tägliches OpenCode-Tokenvolumen der letzten zwei Monate.", - "lab.noUsageTitle": "Noch keine Nutzung", - "lab.noUsageDescription": "Aktuelle Tokennutzung erscheint hier, sobald dieses Lab Aktivität hat.", - "lab.dailyTokenChart": "Diagramm der täglichen {{lab}}-Tokennutzung", - "lab.dailyTokens": "Tägliche Tokens", - "lab.tokens": "Tokens", - "lab.modelsTitle": "{{lab}}-Modelle", - "lab.modelsDescription": "Katalogdetails plus aktuelle Nutzung.", - "lab.recentUsageAndLimits": "Aktuelle Nutzung und Limits.", - "lab.usage": "Nutzung", - "lab.share": "Anteil", - "model.title": "{{model}} Nutzung, Kosten und Rang | OpenCode Data", - "model.description": - "Sieh dir OpenCode Go-Nutzungsdaten für {{model}} an, einschließlich Tokenvolumen, Wochenrang, Tokenmix, Kosten, Cache-Anteil, Sitzungen, geografischer Aufschlüsselung und Vergleichsmodellen.", - "model.loadingTitle": "Modelldaten", - "model.loadingDescription": "Modellaggregate werden gelesen.", - "model.loadingProfile": "Modellprofil wird gelesen.", - "model.noDataTitle": "Keine Modelldaten", - "model.noDataDescription": "Öffne ein Modell aus der Bestenliste.", - "model.noMatched": "Keine Modellfakten oder Nutzungszeilen passten zu {{id}}.", - "model.fallback": "Modell", - "model.catalogFallback": - "Modellfakten aus dem gemeinsamen Modellindex. OpenCode Go-Nutzung erscheint, sobald dieses Modell Aktivität hat.", - "model.unranked": "In der OpenCode Go-Nutzung der letzten Woche nicht platziert", - "model.ranked": "Rang #{{rank}} in der OpenCode Go-Nutzung der letzten Woche", - "model.observedVolume": "mit {{share}} des beobachteten 2M-Volumens.", - "model.weights": "Modellgewichte: {{label}}", - "model.rank": "7T-Rang", - "model.profile": "Modellprofil", - "model.listed": "Gelistet", - "model.noCurrentUsage": "Keine OpenCode Go-Nutzung im aktuellen Datenfenster.", - "model.facts": "Modellfakten", - "model.context": "Kontext", - "model.output": "Ausgabe", - "model.knowledge": "Wissensstand", - "model.release": "Veröffentlichung", - "model.inputs": "Eingaben", - "model.overviewDescription": "Aktuelle OpenCode Go-Tokens, eindeutige Nutzer und Marktposition.", - "model.noSummaryTitle": "Keine Nutzungsübersicht", - "model.noSummaryDescription": "Dieses Modell hat noch keine OpenCode Go-Nutzungszeilen.", - "model.tokens": "Tokens", - "model.uniqueUsers": "Eindeutige Nutzer", - "model.lastTwoMonths": "letzte zwei Monate", - "model.sessions": "Sitzungen", - "model.completedSessions": "abgeschlossene Sitzungen", - "model.tokenShare": "Tokenanteil", - "model.totalModels": "{{count}} Modelle", - "model.momentum": "Momentum", - "model.vsPreviousWindow": "ggü. vorherigem Fenster", - "model.usageDescription": "Tägliches OpenCode Go-Tokenvolumen im aktuellen Zwei-Monats-Fenster.", - "model.noUsageTitle": "Keine Nutzung", - "model.noUsageDescription": "Im aktuellen Fenster ist keine Nutzung eingegangen.", - "model.dailyTokenChart": "Diagramm der täglichen Tokennutzung", - "model.usersDescription": "Täglich eindeutige OpenCode Go-Nutzer im aktuellen Zwei-Monats-Fenster.", - "model.noUsersTitle": "Keine Nutzerdaten", - "model.noUsersDescription": "Im aktuellen Fenster sind keine Zeilen mit Nutzern eingegangen.", - "model.dailyUserChart": "Diagramm der täglich eindeutigen Nutzer", - "model.efficiencyDescription": "Kosten, Cache-Verhalten und durchschnittliche OpenCode Go-Sitzungsform.", - "model.noEfficiencyTitle": "Keine Effizienzdaten", - "model.noEfficiencyDescription": "Effizienzdaten erscheinen, nachdem Nutzung eingegangen ist.", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "Kosten", - "model.totalSpend": "Gesamtausgaben", - "model.costPerMillion": "Kosten / 1 Mio.", - "model.inputOutput": "Eingabe / Ausgabe", - "model.observedTokens": "alle beobachteten Tokens", - "model.costSession": "Kosten / Sitzung", - "model.average": "Durchschnitt", - "model.tokensSession": "Tokens / Sitzung", - "model.cacheRatio": "Cache-Anteil", - "model.inputTokens": "Eingabetokens", - "model.geoDescription": "OpenCode Go-Modelltokens nach Land.", - "model.noGeoTitle": "Keine Geodaten", - "model.noGeoDescription": "Keine OpenCode Go-Geozeilen passten zu diesem Modell.", - "model.worldMap": "Weltkarte der Modelltokennutzung nach Land", - "model.peersDescription": "Nahe Modelle nach aktuellem OpenCode Go-Tokenvolumen.", - "model.noPeersTitle": "Keine Vergleichsmodelle", - "model.noPeersDescription": "Vergleichsrankings erscheinen, nachdem Nutzung eingegangen ist.", - "model.noUsageLastWeek": "Keine Nutzung letzte Woche", - "model.newThisWeek": "Neu diese Woche", - "model.sameAsPreviousWeek": "Unverändert zur vorherigen Woche", - "model.vsPreviousWeek": "{{change}} ggü. vorheriger Woche", - "model.pdf": "PDF", - "format.users": "Nutzer", - "format.tokens": "Tokens", -} as const diff --git a/packages/stats/app/src/i18n/fr.ts b/packages/stats/app/src/i18n/fr.ts deleted file mode 100644 index fc0c103495..0000000000 --- a/packages/stats/app/src/i18n/fr.ts +++ /dev/null @@ -1,237 +0,0 @@ -export const dict = { - "app.title": "Classements d'utilisation des modèles d'IA | OpenCode Data", - "app.description": - "Explorez l'utilisation d'OpenCode Go par modèle d'IA, avec le volume de tokens, les classements, la part de marché, le prix des tokens, le coût par session, le taux de cache et les répartitions géographiques.", - "app.unfurlAlt": "Logo textuel OpenCode Data sur un fond sombre à motif", - "nav.dataHome": "Accueil des données", - "nav.topModels": "Meilleurs modèles", - "nav.leaderboard": "Classement", - "nav.uniqueUsers": "Utilisateurs uniques", - "nav.sessionCost": "Coût par session", - "nav.tokenCost": "Coût des tokens", - "nav.cacheRatio": "Taux de cache", - "nav.marketShare": "Part de marché", - "nav.geoBreakdown": "Répartition géographique", - "nav.overview": "Aperçu", - "nav.usage": "Utilisation", - "nav.users": "Utilisateurs", - "nav.efficiency": "Efficacité", - "nav.peers": "Modèles proches", - "nav.models": "Modèles", - "header.brandLabel": "Accueil des données", - "header.sectionNavLabel": "Sections de données", - "header.githubAria": "Ajouter une étoile à OpenCode sur GitHub", - "header.github": "GitHub", - "header.tryOpenCode": "Essayer OpenCode", - "header.openNav": "Ouvrir la navigation", - "header.closeNav": "Fermer la navigation", - "theme.groupLabel": "Thème", - "theme.dark": "Sombre", - "theme.light": "Clair", - "theme.system": "Système", - "footer.modelData": "Données des modèles", - "footer.legal": "Mentions légales", - "footer.connect": "Contact", - "footer.newsletter": "Newsletter", - "footer.newsletterBody": "Soyez informé en premier des nouvelles versions.", - "footer.language": "Langue", - "footer.subscribe": "S'abonner", - "footer.terms": "Conditions d'utilisation", - "footer.privacy": "Politique de confidentialité", - "footer.contact": "Nous contacter", - "footer.community": "Communauté", - "footer.youtube": "YouTube", - "footer.homeAria": "Accueil OpenCode", - "footer.status": "Tous les systèmes sont opérationnels", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "EN SAVOIR PLUS", - "modal.closeNewsletter": "Fermer l'inscription à la newsletter", - "modal.title": "Newsletter OpenCode", - "modal.body": "Soyez informé en premier\ndes nouvelles versions.", - "modal.email": "Adresse e-mail", - "modal.subscribe": "S'abonner", - "modal.subscribing": "Inscription...", - "modal.success": "Vous êtes inscrit.", - "modal.error": "Échec de l'inscription", - "product.allUsers": "Tous les utilisateurs", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1 jour", - "range.1W": "1 semaine", - "range.2W": "2 semaines", - "range.1M": "1 mois", - "range.2M": "2 mois", - "chart.daily": "Quotidien", - "chart.input": "Entrée", - "chart.output": "Sortie", - "chart.cached": "Mis en cache", - "chart.uncached": "Non mis en cache", - "chart.ratio": "Ratio", - "chart.model": "Modèle", - "chart.cacheRatio": "Taux de cache", - "chart.costSession": "Coût/session", - "chart.tokensSession": "Tokens/session", - "chart.costPerSession": "COÛT / SESSION", - "chart.tokensPerSession": "TOKENS / SESSION", - "chart.live": "En direct", - "chart.percent": "pourcentage", - "chart.leaderboardAria": "Classement des tokens par modèle", - "chart.scrollableLeaderboardAria": "Classement déroulant des tokens par modèle", - "chart.byAuthor": "par {{author}}", - "home.updated": "Mis à jour", - "home.noRows": "Aucune ligne pour l'instant", - "home.justNow": "à l'instant", - "home.heroCopy": - "Voyez quels modèles gagnent en usage réel, comment la répartition évolue et ce que cela signifie pour les coûts.", - "home.loadingTitle": "Chargement des données", - "home.loadingDescription": "Lecture des agrégats de modèles.", - "home.usageTitle": "Utilisation", - "home.topModelsDescription": "Utilisation des modèles dans OpenCode Go.", - "home.noUsageTitle": "Aucune donnée d'utilisation", - "home.noUsageDescription": "Aucune ligne de modèle ne correspondait à ce produit et à cette période.", - "home.noLeaderboardTitle": "Aucune donnée de classement", - "home.noLeaderboardDescription": "Aucune ligne de modèle ne correspondait à ce produit et à cette période.", - "home.productFilter": "Filtre produit", - "home.dateRange": "Période", - "home.stackedUsageChart": "Graphique empilé d'utilisation des meilleurs modèles", - "home.total": "total", - "home.modelUsers": "utilisateurs du modèle", - "home.new": "Nouveau", - "home.uniqueUsersTitle": "Utilisateurs uniques", - "home.uniqueUsersDescription": "Utilisateurs uniques quotidiens d'OpenCode Go par modèle.", - "home.noUserDataTitle": "Aucune donnée utilisateur", - "home.noUserDataDescription": "Aucune ligne de modèle avec utilisateurs ne correspondait à cette fenêtre.", - "home.uniqueUsersChart": "Graphique empilé des utilisateurs uniques par modèle", - "home.marketShareTitle": "Part de marché", - "home.marketShareDescription": "Comparez la part de tokens par auteur de modèle.", - "home.noMarketTitle": "Aucune donnée de marché", - "home.noMarketDescription": "Aucune ligne de modèle ne correspondait à cette période.", - "home.marketChart": "Part de marché par auteur de modèle", - "home.noData": "Aucune donnée", - "home.geoTitle": "Répartition géographique", - "home.geoDescription": "Tokens utilisés par pays.", - "home.noGeoTitle": "Aucune donnée géographique", - "home.noGeoDescription": "Aucune ligne géographique ne correspondait à cette période.", - "home.worldMap": "Carte mondiale de l'utilisation des tokens par pays", - "home.geoMapTitle": "Carte de répartition géographique", - "home.unknown": "Inconnu", - "home.tokenCostTitle": "Coût des tokens", - "home.tokenCostDescription": "Prix par million de tokens.", - "home.noTokenCostTitle": "Aucune donnée de coût des tokens", - "home.noTokenCostDescription": "Aucune ligne de modèle avec coût ne correspondait à ce produit.", - "home.cacheRatioTitle": "Taux de cache", - "home.cacheRatioDescription": "Part des tokens d'entrée servis depuis le cache.", - "home.noCacheTitle": "Aucune donnée de taux de cache", - "home.noCacheDescription": "Aucune ligne de modèle avec tokens d'entrée ne correspondait à ce produit.", - "home.sessionCostTitle": "Coût par session", - "home.sessionCostDescription": "Coût moyen par session.", - "home.noSessionCostTitle": "Aucune donnée de coût par session", - "home.noSessionCostDescription": "Aucune ligne de modèle avec sessions ne correspondait à ce produit.", - "home.costSession": "Coût/session", - "lab.title": "Utilisation et classements des modèles d'IA {{lab}} | OpenCode Data", - "lab.description": - "Comparez les modèles {{lab}} utilisés dans OpenCode Go, avec l'utilisation des tokens, les classements de modèles, les fenêtres de contexte, les dates de sortie, les coûts et les données propres aux modèles.", - "lab.loadingTitle": "Laboratoire de modèles", - "lab.loadingDescription": "Lecture de la disponibilité des modèles et de l'utilisation récente d'OpenCode.", - "lab.notFound": "Aucun modèle ne correspondait à ce laboratoire.", - "lab.heroPrefix": "Explorez {{count}} modèles {{lab}} utilisés dans OpenCode", - "lab.heroIncluding": "dont {{models}}", - "lab.heroSuffix": - "Comparez l'utilisation récente des tokens, les fenêtres de contexte, les dates de sortie et les données propres aux modèles.", - "lab.tokensProcessed": "Tokens traités", - "lab.pending": "En attente", - "lab.usageAfterActivity": "L'utilisation apparaît après l'arrivée de l'activité du modèle", - "lab.latestRelease": "Dernière sortie {{date}}", - "lab.shareOfUsage": "{{share}} de l'utilisation récente d'OpenCode", - "lab.usageTitle": "Utilisation des tokens {{lab}}", - "lab.usageDescription": "Volume quotidien de tokens OpenCode sur les deux derniers mois.", - "lab.noUsageTitle": "Aucune utilisation pour l'instant", - "lab.noUsageDescription": - "L'utilisation récente des tokens apparaîtra ici dès que ce laboratoire aura de l'activité.", - "lab.dailyTokenChart": "Graphique quotidien d'utilisation des tokens {{lab}}", - "lab.dailyTokens": "Tokens quotidiens", - "lab.tokens": "tokens", - "lab.modelsTitle": "Modèles {{lab}}", - "lab.modelsDescription": "Détails du catalogue plus utilisation récente.", - "lab.recentUsageAndLimits": "Utilisation récente et limites.", - "lab.usage": "Utilisation", - "lab.share": "Part", - "model.title": "Utilisation, coût et rang de {{model}} | OpenCode Data", - "model.description": - "Consultez les données d'utilisation OpenCode Go de {{model}}, avec le volume de tokens, le rang hebdomadaire, la répartition des tokens, les coûts, le taux de cache, les sessions, les répartitions géographiques et les modèles proches.", - "model.loadingTitle": "Données du modèle", - "model.loadingDescription": "Lecture des agrégats du modèle.", - "model.loadingProfile": "Lecture du profil du modèle.", - "model.noDataTitle": "Aucune donnée de modèle", - "model.noDataDescription": "Essayez d'ouvrir un modèle depuis le classement.", - "model.noMatched": "Aucun fait de modèle ni aucune ligne d'utilisation ne correspondait à {{id}}.", - "model.fallback": "Modèle", - "model.catalogFallback": - "Faits du modèle issus de l'index partagé des modèles. L'utilisation OpenCode Go apparaîtra dès que ce modèle aura de l'activité.", - "model.unranked": "Non classé dans l'utilisation OpenCode Go de la semaine dernière", - "model.ranked": "Classé #{{rank}} dans l'utilisation OpenCode Go de la semaine dernière", - "model.observedVolume": "avec {{share}} du volume 2M observé.", - "model.weights": "Poids du modèle : {{label}}", - "model.rank": "Rang 7 j", - "model.profile": "Profil du modèle", - "model.listed": "Répertorié", - "model.noCurrentUsage": "Aucune utilisation OpenCode Go dans la fenêtre de données actuelle.", - "model.facts": "Faits du modèle", - "model.context": "Contexte", - "model.output": "Sortie", - "model.knowledge": "Connaissances", - "model.release": "Sortie", - "model.inputs": "Entrées", - "model.overviewDescription": "Tokens OpenCode Go récents, utilisateurs uniques et position sur le marché.", - "model.noSummaryTitle": "Aucun résumé d'utilisation", - "model.noSummaryDescription": "Ce modèle n'a pas encore de lignes d'utilisation OpenCode Go.", - "model.tokens": "Tokens", - "model.uniqueUsers": "Utilisateurs uniques", - "model.lastTwoMonths": "deux derniers mois", - "model.sessions": "Sessions", - "model.completedSessions": "sessions terminées", - "model.tokenShare": "Part de tokens", - "model.totalModels": "{{count}} modèles", - "model.momentum": "Dynamique", - "model.vsPreviousWindow": "vs fenêtre précédente", - "model.usageDescription": "Volume quotidien de tokens OpenCode Go sur la fenêtre récente de deux mois.", - "model.noUsageTitle": "Aucune utilisation", - "model.noUsageDescription": "Aucune utilisation n'est arrivée dans la fenêtre actuelle.", - "model.dailyTokenChart": "Graphique quotidien d'utilisation des tokens", - "model.usersDescription": "Utilisateurs uniques quotidiens d'OpenCode Go sur la fenêtre récente de deux mois.", - "model.noUsersTitle": "Aucune donnée utilisateur", - "model.noUsersDescription": "Aucune ligne avec utilisateurs n'est arrivée dans la fenêtre actuelle.", - "model.dailyUserChart": "Graphique quotidien des utilisateurs uniques", - "model.efficiencyDescription": "Coût, comportement du cache et forme moyenne des sessions OpenCode Go.", - "model.noEfficiencyTitle": "Aucune donnée d'efficacité", - "model.noEfficiencyDescription": "Les données d'efficacité apparaissent après l'arrivée de l'utilisation.", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "Coût", - "model.totalSpend": "dépense totale", - "model.costPerMillion": "Coût / 1 M", - "model.inputOutput": "entrée / sortie", - "model.observedTokens": "tous les tokens observés", - "model.costSession": "Coût / session", - "model.average": "moyenne", - "model.tokensSession": "Tokens / session", - "model.cacheRatio": "Taux de cache", - "model.inputTokens": "tokens d'entrée", - "model.geoDescription": "Tokens du modèle OpenCode Go utilisés par pays.", - "model.noGeoTitle": "Aucune donnée géographique", - "model.noGeoDescription": "Aucune ligne géographique OpenCode Go ne correspondait à ce modèle.", - "model.worldMap": "Carte mondiale de l'utilisation des tokens du modèle par pays", - "model.peersDescription": "Modèles proches par volume récent de tokens OpenCode Go.", - "model.noPeersTitle": "Aucun modèle proche", - "model.noPeersDescription": "Les classements de modèles proches apparaissent après l'arrivée de l'utilisation.", - "model.noUsageLastWeek": "Aucune utilisation la semaine dernière", - "model.newThisWeek": "Nouveau cette semaine", - "model.sameAsPreviousWeek": "Identique à la semaine précédente", - "model.vsPreviousWeek": "{{change}} vs semaine précédente", - "model.pdf": "PDF", - "format.users": "utilisateurs", - "format.tokens": "tokens", -} as const diff --git a/packages/stats/app/src/i18n/it.ts b/packages/stats/app/src/i18n/it.ts deleted file mode 100644 index 83c39f17bb..0000000000 --- a/packages/stats/app/src/i18n/it.ts +++ /dev/null @@ -1,236 +0,0 @@ -export const dict = { - "app.title": "Classifiche di utilizzo dei modelli IA | OpenCode Data", - "app.description": - "Esplora l'utilizzo di OpenCode Go nei modelli IA, inclusi volume di token, classifiche, quota di mercato, prezzi dei token, costo per sessione, rapporto cache e ripartizioni geografiche.", - "app.unfurlAlt": "Logotipo OpenCode Data su uno sfondo scuro con motivo", - "nav.dataHome": "Home dati", - "nav.topModels": "Modelli principali", - "nav.leaderboard": "Classifica", - "nav.uniqueUsers": "Utenti unici", - "nav.sessionCost": "Costo sessione", - "nav.tokenCost": "Costo token", - "nav.cacheRatio": "Rapporto cache", - "nav.marketShare": "Quota di mercato", - "nav.geoBreakdown": "Ripartizione geografica", - "nav.overview": "Panoramica", - "nav.usage": "Utilizzo", - "nav.users": "Utenti", - "nav.efficiency": "Efficienza", - "nav.peers": "Modelli simili", - "nav.models": "Modelli", - "header.brandLabel": "Home dati", - "header.sectionNavLabel": "Sezioni dati", - "header.githubAria": "Aggiungi una stella a OpenCode su GitHub", - "header.github": "GitHub", - "header.tryOpenCode": "Prova OpenCode", - "header.openNav": "Apri navigazione", - "header.closeNav": "Chiudi navigazione", - "theme.groupLabel": "Tema", - "theme.dark": "Scuro", - "theme.light": "Chiaro", - "theme.system": "Sistema", - "footer.modelData": "Dati modello", - "footer.legal": "Note legali", - "footer.connect": "Contatti", - "footer.newsletter": "Newsletter", - "footer.newsletterBody": "Scopri per primo le nuove versioni.", - "footer.language": "Lingua", - "footer.subscribe": "Iscriviti", - "footer.terms": "Termini di servizio", - "footer.privacy": "Informativa sulla privacy", - "footer.contact": "Contattaci", - "footer.community": "Community", - "footer.youtube": "YouTube", - "footer.homeAria": "Home OpenCode", - "footer.status": "Tutti i sistemi sono operativi", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "SCOPRI DI PIÙ", - "modal.closeNewsletter": "Chiudi iscrizione alla newsletter", - "modal.title": "Newsletter OpenCode", - "modal.body": "Scopri per primo\nle nuove versioni.", - "modal.email": "Indirizzo email", - "modal.subscribe": "Iscriviti", - "modal.subscribing": "Iscrizione in corso...", - "modal.success": "Iscrizione completata.", - "modal.error": "Iscrizione non riuscita", - "product.allUsers": "Tutti gli utenti", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1 giorno", - "range.1W": "1 settimana", - "range.2W": "2 settimane", - "range.1M": "1 mese", - "range.2M": "2 mesi", - "chart.daily": "Giornaliero", - "chart.input": "Input", - "chart.output": "Output", - "chart.cached": "In cache", - "chart.uncached": "Non in cache", - "chart.ratio": "Rapporto", - "chart.model": "Modello", - "chart.cacheRatio": "Rapporto cache", - "chart.costSession": "Costo/sessione", - "chart.tokensSession": "Token/sessione", - "chart.costPerSession": "COSTO / SESSIONE", - "chart.tokensPerSession": "TOKEN / SESSIONE", - "chart.live": "Live", - "chart.percent": "percentuale", - "chart.leaderboardAria": "Classifica token dei modelli", - "chart.scrollableLeaderboardAria": "Classifica token dei modelli scorrevole", - "chart.byAuthor": "di {{author}}", - "home.updated": "Aggiornato", - "home.noRows": "Ancora nessuna riga", - "home.justNow": "proprio ora", - "home.heroCopy": - "Scopri quali modelli stanno vincendo nell'uso reale, come cambia il mix e cosa significa per i costi.", - "home.loadingTitle": "Caricamento dati", - "home.loadingDescription": "Lettura degli aggregati dei modelli.", - "home.usageTitle": "Utilizzo", - "home.topModelsDescription": "Utilizzo dei modelli in OpenCode Go.", - "home.noUsageTitle": "Nessun dato di utilizzo", - "home.noUsageDescription": "Nessuna riga modello corrispondeva a questo prodotto e intervallo.", - "home.noLeaderboardTitle": "Nessun dato di classifica", - "home.noLeaderboardDescription": "Nessuna riga modello corrispondeva a questo prodotto e intervallo.", - "home.productFilter": "Filtro prodotto", - "home.dateRange": "Intervallo date", - "home.stackedUsageChart": "Grafico di utilizzo impilato dei modelli principali", - "home.total": "totale", - "home.modelUsers": "utenti del modello", - "home.new": "Nuovo", - "home.uniqueUsersTitle": "Utenti unici", - "home.uniqueUsersDescription": "Utenti unici giornalieri di OpenCode Go per modello.", - "home.noUserDataTitle": "Nessun dato utente", - "home.noUserDataDescription": "Nessuna riga modello con utenti corrispondeva a questa finestra.", - "home.uniqueUsersChart": "Grafico impilato degli utenti unici per modello", - "home.marketShareTitle": "Quota di mercato", - "home.marketShareDescription": "Confronta la quota di token per autore del modello.", - "home.noMarketTitle": "Nessun dato di mercato", - "home.noMarketDescription": "Nessuna riga modello corrispondeva a questo intervallo.", - "home.marketChart": "Quota di mercato per autore del modello", - "home.noData": "Nessun dato", - "home.geoTitle": "Ripartizione geografica", - "home.geoDescription": "Token usati per paese.", - "home.noGeoTitle": "Nessun dato geografico", - "home.noGeoDescription": "Nessuna riga geografica corrispondeva a questo intervallo.", - "home.worldMap": "Mappa mondiale dell'utilizzo dei token per paese", - "home.geoMapTitle": "Mappa della ripartizione geografica", - "home.unknown": "Sconosciuto", - "home.tokenCostTitle": "Costo token", - "home.tokenCostDescription": "Prezzo per 1 M di token.", - "home.noTokenCostTitle": "Nessun dato sul costo dei token", - "home.noTokenCostDescription": "Nessuna riga modello con costi corrispondeva a questo prodotto.", - "home.cacheRatioTitle": "Rapporto cache", - "home.cacheRatioDescription": "Quota di token di input serviti dalla cache.", - "home.noCacheTitle": "Nessun dato sul rapporto cache", - "home.noCacheDescription": "Nessuna riga modello con token di input corrispondeva a questo prodotto.", - "home.sessionCostTitle": "Costo sessione", - "home.sessionCostDescription": "Costo medio per sessione.", - "home.noSessionCostTitle": "Nessun dato sul costo sessione", - "home.noSessionCostDescription": "Nessuna riga modello con sessioni corrispondeva a questo prodotto.", - "home.costSession": "Costo/sessione", - "lab.title": "Utilizzo e classifiche dei modelli IA {{lab}} | OpenCode Data", - "lab.description": - "Confronta i modelli {{lab}} usati in OpenCode Go, inclusi utilizzo dei token, classifiche dei modelli, finestre di contesto, date di rilascio, costi e dati specifici del modello.", - "lab.loadingTitle": "Laboratorio modelli", - "lab.loadingDescription": "Lettura della disponibilità dei modelli e dell'utilizzo recente di OpenCode.", - "lab.notFound": "Nessun modello corrispondeva a questo laboratorio.", - "lab.heroPrefix": "Esplora {{count}} modelli {{lab}} usati in OpenCode", - "lab.heroIncluding": "inclusi {{models}}", - "lab.heroSuffix": - "Confronta l'utilizzo recente dei token, le finestre di contesto, le date di rilascio e i dati specifici del modello.", - "lab.tokensProcessed": "Token elaborati", - "lab.pending": "In sospeso", - "lab.usageAfterActivity": "L'utilizzo appare dopo l'arrivo dell'attività del modello", - "lab.latestRelease": "Ultima versione {{date}}", - "lab.shareOfUsage": "{{share}} dell'utilizzo recente di OpenCode", - "lab.usageTitle": "Utilizzo token {{lab}}", - "lab.usageDescription": "Volume giornaliero di token OpenCode negli ultimi due mesi.", - "lab.noUsageTitle": "Ancora nessun utilizzo", - "lab.noUsageDescription": "L'utilizzo recente dei token apparirà qui quando questo laboratorio avrà attività.", - "lab.dailyTokenChart": "Grafico giornaliero dell'utilizzo token {{lab}}", - "lab.dailyTokens": "Token giornalieri", - "lab.tokens": "token", - "lab.modelsTitle": "Modelli {{lab}}", - "lab.modelsDescription": "Dettagli del catalogo più utilizzo recente.", - "lab.recentUsageAndLimits": "Utilizzo recente e limiti.", - "lab.usage": "Utilizzo", - "lab.share": "Quota", - "model.title": "Utilizzo, costo e posizione di {{model}} | OpenCode Data", - "model.description": - "Visualizza i dati di utilizzo di {{model}} in OpenCode Go, inclusi volume di token, rango settimanale, mix di token, costi, rapporto cache, sessioni, ripartizioni geografiche e modelli simili.", - "model.loadingTitle": "Dati modello", - "model.loadingDescription": "Lettura degli aggregati del modello.", - "model.loadingProfile": "Lettura del profilo del modello.", - "model.noDataTitle": "Nessun dato modello", - "model.noDataDescription": "Prova ad aprire un modello dalla classifica.", - "model.noMatched": "Nessun fatto modello o riga di utilizzo corrispondeva a {{id}}.", - "model.fallback": "Modello", - "model.catalogFallback": - "Fatti del modello dall'indice condiviso dei modelli. L'utilizzo di OpenCode Go appare quando questo modello ha attività.", - "model.unranked": "Non classificato nell'utilizzo OpenCode Go della scorsa settimana", - "model.ranked": "Posizione #{{rank}} nell'utilizzo OpenCode Go della scorsa settimana", - "model.observedVolume": "con {{share}} del volume 2M osservato.", - "model.weights": "Pesi del modello: {{label}}", - "model.rank": "Posizione 7G", - "model.profile": "Profilo modello", - "model.listed": "Elencato", - "model.noCurrentUsage": "Nessun utilizzo di OpenCode Go nella finestra dati attuale.", - "model.facts": "Fatti del modello", - "model.context": "Contesto", - "model.output": "Output", - "model.knowledge": "Conoscenza", - "model.release": "Versione", - "model.inputs": "Input", - "model.overviewDescription": "Token recenti di OpenCode Go, utenti unici e posizione di mercato.", - "model.noSummaryTitle": "Nessun riepilogo di utilizzo", - "model.noSummaryDescription": "Questo modello non ha ancora righe di utilizzo di OpenCode Go.", - "model.tokens": "Token", - "model.uniqueUsers": "Utenti unici", - "model.lastTwoMonths": "ultimi due mesi", - "model.sessions": "Sessioni", - "model.completedSessions": "sessioni completate", - "model.tokenShare": "Quota token", - "model.totalModels": "{{count}} modelli", - "model.momentum": "Slancio", - "model.vsPreviousWindow": "vs finestra precedente", - "model.usageDescription": "Volume giornaliero di token OpenCode Go nella recente finestra di due mesi.", - "model.noUsageTitle": "Nessun utilizzo", - "model.noUsageDescription": "Nessun utilizzo è arrivato nella finestra attuale.", - "model.dailyTokenChart": "Grafico giornaliero di utilizzo dei token", - "model.usersDescription": "Utenti unici giornalieri di OpenCode Go nella recente finestra di due mesi.", - "model.noUsersTitle": "Nessun dato utente", - "model.noUsersDescription": "Nessuna riga con utenti è arrivata nella finestra attuale.", - "model.dailyUserChart": "Grafico giornaliero degli utenti unici", - "model.efficiencyDescription": "Costi, comportamento della cache e forma media della sessione OpenCode Go.", - "model.noEfficiencyTitle": "Nessun dato di efficienza", - "model.noEfficiencyDescription": "I dati di efficienza appaiono dopo l'arrivo dell'utilizzo.", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "Costo", - "model.totalSpend": "spesa totale", - "model.costPerMillion": "Costo / 1 M", - "model.inputOutput": "input / output", - "model.observedTokens": "tutti i token osservati", - "model.costSession": "Costo / sessione", - "model.average": "media", - "model.tokensSession": "Token / sessione", - "model.cacheRatio": "Rapporto cache", - "model.inputTokens": "token di input", - "model.geoDescription": "Token del modello OpenCode Go usati per paese.", - "model.noGeoTitle": "Nessun dato geografico", - "model.noGeoDescription": "Nessuna riga geografica OpenCode Go corrispondeva a questo modello.", - "model.worldMap": "Mappa mondiale dell'utilizzo dei token del modello per paese", - "model.peersDescription": "Modelli vicini per volume recente di token OpenCode Go.", - "model.noPeersTitle": "Nessun modello simile", - "model.noPeersDescription": "Le classifiche dei modelli simili appaiono dopo l'arrivo dell'utilizzo.", - "model.noUsageLastWeek": "Nessun utilizzo la scorsa settimana", - "model.newThisWeek": "Nuovo questa settimana", - "model.sameAsPreviousWeek": "Uguale alla settimana precedente", - "model.vsPreviousWeek": "{{change}} vs settimana precedente", - "model.pdf": "PDF", - "format.users": "utenti", - "format.tokens": "token", -} as const diff --git a/packages/stats/app/src/i18n/ja.ts b/packages/stats/app/src/i18n/ja.ts deleted file mode 100644 index ddd577cfc3..0000000000 --- a/packages/stats/app/src/i18n/ja.ts +++ /dev/null @@ -1,237 +0,0 @@ -import type { Key } from "../i18n" - -export const dict = { - "app.title": "AIモデル使用ランキング | OpenCodeデータ", - "app.description": - "OpenCode GoでのAIモデル利用状況を、トークン量、ランキング、マーケットシェア、トークン価格、セッションコスト、キャッシュ比率、地域別内訳まで確認できます。", - "app.unfurlAlt": "暗いパターン背景上のOpenCode Dataワードマーク", - "nav.dataHome": "データホーム", - "nav.topModels": "上位モデル", - "nav.leaderboard": "ランキング", - "nav.uniqueUsers": "ユニークユーザー", - "nav.sessionCost": "セッションコスト", - "nav.tokenCost": "トークンコスト", - "nav.cacheRatio": "キャッシュ比率", - "nav.marketShare": "マーケットシェア", - "nav.geoBreakdown": "地域別内訳", - "nav.overview": "概要", - "nav.usage": "使用量", - "nav.users": "ユーザー", - "nav.efficiency": "効率", - "nav.peers": "類似モデル", - "nav.models": "モデル", - "header.brandLabel": "データホーム", - "header.sectionNavLabel": "データセクション", - "header.githubAria": "GitHubでOpenCodeにスターを付ける", - "header.github": "GitHub", - "header.tryOpenCode": "OpenCodeを試す", - "header.openNav": "ナビゲーションを開く", - "header.closeNav": "ナビゲーションを閉じる", - "theme.groupLabel": "テーマ", - "theme.dark": "ダーク", - "theme.light": "ライト", - "theme.system": "システム", - "footer.modelData": "モデルデータ", - "footer.legal": "法務", - "footer.connect": "つながる", - "footer.newsletter": "ニュースレター", - "footer.newsletterBody": "新しいリリース情報をいち早く受け取れます。", - "footer.language": "言語", - "footer.subscribe": "登録", - "footer.terms": "利用規約", - "footer.privacy": "プライバシーポリシー", - "footer.contact": "お問い合わせ", - "footer.community": "コミュニティ", - "footer.youtube": "YouTube", - "footer.homeAria": "OpenCodeホーム", - "footer.status": "すべてのシステムは正常稼働中", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "詳しく見る", - "modal.closeNewsletter": "ニュースレター登録を閉じる", - "modal.title": "OpenCodeニュースレター", - "modal.body": "新しいリリース情報を\nいち早く受け取れます。", - "modal.email": "メールアドレス", - "modal.subscribe": "登録", - "modal.subscribing": "登録中...", - "modal.success": "登録しました。", - "modal.error": "登録に失敗しました", - "product.allUsers": "すべてのユーザー", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1日", - "range.1W": "1週間", - "range.2W": "2週間", - "range.1M": "1か月", - "range.2M": "2か月", - "chart.daily": "日次", - "chart.input": "入力", - "chart.output": "出力", - "chart.cached": "キャッシュ済み", - "chart.uncached": "未キャッシュ", - "chart.ratio": "比率", - "chart.model": "モデル", - "chart.cacheRatio": "キャッシュ比率", - "chart.costSession": "コスト/セッション", - "chart.tokensSession": "トークン/セッション", - "chart.costPerSession": "コスト / セッション", - "chart.tokensPerSession": "トークン / セッション", - "chart.live": "ライブ", - "chart.percent": "パーセント", - "chart.leaderboardAria": "モデルのトークンランキング", - "chart.scrollableLeaderboardAria": "スクロール可能なモデルのトークンランキング", - "chart.byAuthor": "提供元: {{author}}", - "home.updated": "更新済み", - "home.noRows": "まだ行がありません", - "home.justNow": "たった今", - "home.heroCopy": - "実際の利用でどのモデルが伸びているか、利用構成がどう変化しているか、それがコストに何を意味するかを確認できます。", - "home.loadingTitle": "データを読み込み中", - "home.loadingDescription": "モデル集計を読み込んでいます。", - "home.usageTitle": "使用量", - "home.topModelsDescription": "OpenCode Goにおけるモデルの使用状況。", - "home.noUsageTitle": "使用データがありません", - "home.noUsageDescription": "このプロダクトと期間に一致するモデル行はありません。", - "home.noLeaderboardTitle": "ランキングデータがありません", - "home.noLeaderboardDescription": "このプロダクトと期間に一致するモデル行はありません。", - "home.productFilter": "プロダクトフィルター", - "home.dateRange": "日付範囲", - "home.stackedUsageChart": "上位モデル使用量の積み上げグラフ", - "home.total": "合計", - "home.modelUsers": "モデルユーザー", - "home.new": "新規", - "home.uniqueUsersTitle": "ユニークユーザー", - "home.uniqueUsersDescription": "モデル別のOpenCode Go日次ユニークユーザー。", - "home.noUserDataTitle": "ユーザーデータがありません", - "home.noUserDataDescription": "この期間に一致するユーザー付きモデル行はありません。", - "home.uniqueUsersChart": "モデル別ユニークユーザーの積み上げグラフ", - "home.marketShareTitle": "マーケットシェア", - "home.marketShareDescription": "モデル作者別にトークンシェアを比較します。", - "home.noMarketTitle": "マーケットデータがありません", - "home.noMarketDescription": "この期間に一致するモデル行はありません。", - "home.marketChart": "モデル作者別マーケットシェア", - "home.noData": "データなし", - "home.geoTitle": "地域別内訳", - "home.geoDescription": "国別のトークン使用量。", - "home.noGeoTitle": "地域データがありません", - "home.noGeoDescription": "この期間に一致する地域行はありません。", - "home.worldMap": "国別トークン使用量の世界地図", - "home.geoMapTitle": "地域別内訳マップ", - "home.unknown": "不明", - "home.tokenCostTitle": "トークンコスト", - "home.tokenCostDescription": "100万トークンあたりの価格。", - "home.noTokenCostTitle": "トークンコストデータがありません", - "home.noTokenCostDescription": "このプロダクトに一致するコスト付きモデル行はありません。", - "home.cacheRatioTitle": "キャッシュ比率", - "home.cacheRatioDescription": "キャッシュから提供された入力トークンの割合。", - "home.noCacheTitle": "キャッシュ比率データがありません", - "home.noCacheDescription": "このプロダクトに一致する入力トークン付きモデル行はありません。", - "home.sessionCostTitle": "セッションコスト", - "home.sessionCostDescription": "セッションあたりの平均コスト。", - "home.noSessionCostTitle": "セッションコストデータがありません", - "home.noSessionCostDescription": "このプロダクトに一致するセッション付きモデル行はありません。", - "home.costSession": "コスト/セッション", - "lab.title": "{{lab}} AIモデル使用量とランキング | OpenCodeデータ", - "lab.description": - "OpenCode Goで使用されている{{lab}}モデルを、トークン使用量、モデルランキング、コンテキストウィンドウ、リリース日、コスト、モデル別データで比較できます。", - "lab.loadingTitle": "モデルラボ", - "lab.loadingDescription": "モデルの利用可否と最近のOpenCode使用状況を読み込んでいます。", - "lab.notFound": "このラボに一致するモデルはありません。", - "lab.heroPrefix": "OpenCodeで使用されている{{count}}件の{{lab}}モデルを確認", - "lab.heroIncluding": "{{models}}など", - "lab.heroSuffix": "最近のトークン使用量、コンテキストウィンドウ、リリース日、モデル別データを比較できます。", - "lab.tokensProcessed": "処理済みトークン", - "lab.pending": "保留中", - "lab.usageAfterActivity": "モデルのアクティビティが届くと使用量が表示されます", - "lab.latestRelease": "最新リリース {{date}}", - "lab.shareOfUsage": "最近のOpenCode使用量の{{share}}", - "lab.usageTitle": "{{lab}}のトークン使用量", - "lab.usageDescription": "過去2か月の日次OpenCodeトークン量。", - "lab.noUsageTitle": "まだ使用量がありません", - "lab.noUsageDescription": "このラボにアクティビティが発生すると、最近のトークン使用量がここに表示されます。", - "lab.dailyTokenChart": "{{lab}}の日次トークン使用量グラフ", - "lab.dailyTokens": "日次トークン", - "lab.tokens": "トークン", - "lab.modelsTitle": "{{lab}}モデル", - "lab.modelsDescription": "カタログ詳細と最近の使用量。", - "lab.recentUsageAndLimits": "最近の使用量と制限。", - "lab.usage": "使用量", - "lab.share": "シェア", - "model.title": "{{model}}の使用量、コスト、ランク | OpenCodeデータ", - "model.description": - "{{model}}のOpenCode Go使用データを、トークン量、週間ランク、トークン構成、コスト、キャッシュ比率、セッション、地域別内訳、類似モデルまで確認できます。", - "model.loadingTitle": "モデルデータ", - "model.loadingDescription": "モデル集計を読み込んでいます。", - "model.loadingProfile": "モデルプロフィールを読み込んでいます。", - "model.noDataTitle": "モデルデータがありません", - "model.noDataDescription": "ランキングからモデルを開いてみてください。", - "model.noMatched": "{{id}}に一致するモデル情報または使用行はありません。", - "model.fallback": "モデル", - "model.catalogFallback": - "共有モデルインデックスのモデル情報です。このモデルにアクティビティが発生するとOpenCode Go使用量が表示されます。", - "model.unranked": "先週のOpenCode Go使用量では未ランク", - "model.ranked": "先週のOpenCode Go使用量で#{{rank}}位", - "model.observedVolume": "観測された2M量の{{share}}。", - "model.weights": "モデル重み: {{label}}", - "model.rank": "7日ランク", - "model.profile": "モデルプロフィール", - "model.listed": "掲載日", - "model.noCurrentUsage": "現在のデータ期間にはOpenCode Go使用量がありません。", - "model.facts": "モデル情報", - "model.context": "コンテキスト", - "model.output": "出力", - "model.knowledge": "知識", - "model.release": "リリース", - "model.inputs": "入力", - "model.overviewDescription": "最近のOpenCode Goトークン、ユニークユーザー、市場での位置。", - "model.noSummaryTitle": "使用概要がありません", - "model.noSummaryDescription": "このモデルにはまだOpenCode Goの使用行がありません。", - "model.tokens": "トークン", - "model.uniqueUsers": "ユニークユーザー", - "model.lastTwoMonths": "過去2か月", - "model.sessions": "セッション", - "model.completedSessions": "完了セッション", - "model.tokenShare": "トークンシェア", - "model.totalModels": "{{count}}件のモデル", - "model.momentum": "勢い", - "model.vsPreviousWindow": "前の期間比", - "model.usageDescription": "直近2か月の期間におけるOpenCode Goの日次トークン量。", - "model.noUsageTitle": "使用量がありません", - "model.noUsageDescription": "現在の期間には使用量がありません。", - "model.dailyTokenChart": "日次トークン使用量グラフ", - "model.usersDescription": "直近2か月の期間におけるOpenCode Goの日次ユニークユーザー。", - "model.noUsersTitle": "ユーザーデータがありません", - "model.noUsersDescription": "現在の期間にはユーザー付き行がありません。", - "model.dailyUserChart": "日次ユニークユーザーグラフ", - "model.efficiencyDescription": "コスト、キャッシュ動作、平均的なOpenCode Goセッションの形。", - "model.noEfficiencyTitle": "効率データがありません", - "model.noEfficiencyDescription": "使用量が届くと効率データが表示されます。", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "コスト", - "model.totalSpend": "総支出", - "model.costPerMillion": "100万あたりのコスト", - "model.inputOutput": "入力 / 出力", - "model.observedTokens": "観測された全トークン", - "model.costSession": "コスト / セッション", - "model.average": "平均", - "model.tokensSession": "トークン / セッション", - "model.cacheRatio": "キャッシュ比率", - "model.inputTokens": "入力トークン", - "model.geoDescription": "国別のOpenCode Goモデルのトークン使用量。", - "model.noGeoTitle": "地域データがありません", - "model.noGeoDescription": "このモデルに一致するOpenCode Go地域行はありません。", - "model.worldMap": "国別モデル別トークン使用量の世界地図", - "model.peersDescription": "最近のOpenCode Goトークン量が近いモデル。", - "model.noPeersTitle": "類似モデルがありません", - "model.noPeersDescription": "使用量が届くと類似モデルのランキングが表示されます。", - "model.noUsageLastWeek": "先週の使用量なし", - "model.newThisWeek": "今週新規", - "model.sameAsPreviousWeek": "前週と同じ", - "model.vsPreviousWeek": "前週比 {{change}}", - "model.pdf": "PDF", - "format.users": "ユーザー", - "format.tokens": "トークン", -} satisfies Record diff --git a/packages/stats/app/src/i18n/ko.ts b/packages/stats/app/src/i18n/ko.ts deleted file mode 100644 index 8a5d93dca0..0000000000 --- a/packages/stats/app/src/i18n/ko.ts +++ /dev/null @@ -1,237 +0,0 @@ -import type { Key } from "../i18n" - -export const dict = { - "app.title": "AI 모델 사용 순위 | OpenCode 데이터", - "app.description": - "OpenCode Go에서 AI 모델이 어떻게 사용되는지 토큰 볼륨, 순위, 시장 점유율, 토큰 가격, 세션 비용, 캐시 비율, 지역별 분포까지 살펴보세요.", - "app.unfurlAlt": "어두운 패턴 배경 위의 OpenCode Data 워드마크", - "nav.dataHome": "데이터 홈", - "nav.topModels": "상위 모델", - "nav.leaderboard": "리더보드", - "nav.uniqueUsers": "순 사용자", - "nav.sessionCost": "세션 비용", - "nav.tokenCost": "토큰 비용", - "nav.cacheRatio": "캐시 비율", - "nav.marketShare": "시장 점유율", - "nav.geoBreakdown": "지역별 분포", - "nav.overview": "개요", - "nav.usage": "사용량", - "nav.users": "사용자", - "nav.efficiency": "효율", - "nav.peers": "비슷한 모델", - "nav.models": "모델", - "header.brandLabel": "데이터 홈", - "header.sectionNavLabel": "데이터 섹션", - "header.githubAria": "GitHub에서 OpenCode에 스타 주기", - "header.github": "GitHub", - "header.tryOpenCode": "OpenCode 사용해 보기", - "header.openNav": "내비게이션 열기", - "header.closeNav": "내비게이션 닫기", - "theme.groupLabel": "테마", - "theme.dark": "다크", - "theme.light": "라이트", - "theme.system": "시스템", - "footer.modelData": "모델 데이터", - "footer.legal": "법률", - "footer.connect": "연결", - "footer.newsletter": "뉴스레터", - "footer.newsletterBody": "새 릴리스를 가장 먼저 받아보세요.", - "footer.language": "언어", - "footer.subscribe": "구독", - "footer.terms": "서비스 약관", - "footer.privacy": "개인정보처리방침", - "footer.contact": "문의하기", - "footer.community": "커뮤니티", - "footer.youtube": "YouTube", - "footer.homeAria": "OpenCode 홈", - "footer.status": "모든 시스템 정상 운영 중", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "더 알아보기", - "modal.closeNewsletter": "뉴스레터 가입 닫기", - "modal.title": "OpenCode 뉴스레터", - "modal.body": "새 릴리스를\n가장 먼저 받아보세요.", - "modal.email": "이메일 주소", - "modal.subscribe": "구독", - "modal.subscribing": "구독 중...", - "modal.success": "구독되었습니다.", - "modal.error": "구독에 실패했습니다", - "product.allUsers": "모든 사용자", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1일", - "range.1W": "1주", - "range.2W": "2주", - "range.1M": "1개월", - "range.2M": "2개월", - "chart.daily": "일간", - "chart.input": "입력", - "chart.output": "출력", - "chart.cached": "캐시됨", - "chart.uncached": "캐시 안 됨", - "chart.ratio": "비율", - "chart.model": "모델", - "chart.cacheRatio": "캐시 비율", - "chart.costSession": "비용/세션", - "chart.tokensSession": "토큰/세션", - "chart.costPerSession": "비용 / 세션", - "chart.tokensPerSession": "토큰 / 세션", - "chart.live": "실시간", - "chart.percent": "퍼센트", - "chart.leaderboardAria": "모델 토큰 리더보드", - "chart.scrollableLeaderboardAria": "스크롤 가능한 모델 토큰 리더보드", - "chart.byAuthor": "{{author}} 제공", - "home.updated": "업데이트됨", - "home.noRows": "아직 행이 없습니다", - "home.justNow": "방금 전", - "home.heroCopy": - "실제 사용량에서 어떤 모델이 앞서고 있는지, 사용 구성이 어떻게 바뀌는지, 그것이 비용에 어떤 의미인지 확인하세요.", - "home.loadingTitle": "데이터 로딩 중", - "home.loadingDescription": "모델 집계를 읽는 중입니다.", - "home.usageTitle": "사용량", - "home.topModelsDescription": "OpenCode Go 전반의 모델 사용량입니다.", - "home.noUsageTitle": "사용 데이터 없음", - "home.noUsageDescription": "이 제품과 범위에 맞는 모델 행이 없습니다.", - "home.noLeaderboardTitle": "리더보드 데이터 없음", - "home.noLeaderboardDescription": "이 제품과 범위에 맞는 모델 행이 없습니다.", - "home.productFilter": "제품 필터", - "home.dateRange": "날짜 범위", - "home.stackedUsageChart": "상위 모델 사용량 누적 차트", - "home.total": "합계", - "home.modelUsers": "모델 사용자", - "home.new": "신규", - "home.uniqueUsersTitle": "순 사용자", - "home.uniqueUsersDescription": "모델별 일간 OpenCode Go 순 사용자입니다.", - "home.noUserDataTitle": "사용자 데이터 없음", - "home.noUserDataDescription": "이 기간에 맞는 사용자 포함 모델 행이 없습니다.", - "home.uniqueUsersChart": "모델별 순 사용자 누적 차트", - "home.marketShareTitle": "시장 점유율", - "home.marketShareDescription": "모델 작성자별 토큰 점유율을 비교합니다.", - "home.noMarketTitle": "시장 데이터 없음", - "home.noMarketDescription": "이 범위에 맞는 모델 행이 없습니다.", - "home.marketChart": "모델 작성자별 시장 점유율", - "home.noData": "데이터 없음", - "home.geoTitle": "지역별 분포", - "home.geoDescription": "국가별 사용 토큰입니다.", - "home.noGeoTitle": "지역 데이터 없음", - "home.noGeoDescription": "이 범위에 맞는 지역 행이 없습니다.", - "home.worldMap": "국가별 토큰 사용량 세계 지도", - "home.geoMapTitle": "지역별 분포 지도", - "home.unknown": "알 수 없음", - "home.tokenCostTitle": "토큰 비용", - "home.tokenCostDescription": "100만 토큰당 가격입니다.", - "home.noTokenCostTitle": "토큰 비용 데이터 없음", - "home.noTokenCostDescription": "이 제품에 맞는 비용 포함 모델 행이 없습니다.", - "home.cacheRatioTitle": "캐시 비율", - "home.cacheRatioDescription": "캐시에서 제공된 입력 토큰의 비율입니다.", - "home.noCacheTitle": "캐시 비율 데이터 없음", - "home.noCacheDescription": "이 제품에 맞는 입력 토큰 포함 모델 행이 없습니다.", - "home.sessionCostTitle": "세션 비용", - "home.sessionCostDescription": "세션당 평균 비용입니다.", - "home.noSessionCostTitle": "세션 비용 데이터 없음", - "home.noSessionCostDescription": "이 제품에 맞는 세션 포함 모델 행이 없습니다.", - "home.costSession": "비용/세션", - "lab.title": "{{lab}} AI 모델 사용량 및 순위 | OpenCode 데이터", - "lab.description": - "OpenCode Go에서 사용되는 {{lab}} 모델을 토큰 사용량, 모델 순위, 컨텍스트 창, 출시일, 비용, 모델별 데이터까지 비교하세요.", - "lab.loadingTitle": "모델 랩", - "lab.loadingDescription": "모델 가용성과 최근 OpenCode 사용량을 읽는 중입니다.", - "lab.notFound": "이 랩과 일치하는 모델이 없습니다.", - "lab.heroPrefix": "OpenCode에서 사용된 {{count}}개의 {{lab}} 모델 살펴보기", - "lab.heroIncluding": "{{models}} 포함", - "lab.heroSuffix": "최근 토큰 사용량, 컨텍스트 창, 출시일, 모델별 데이터를 비교하세요.", - "lab.tokensProcessed": "처리된 토큰", - "lab.pending": "대기 중", - "lab.usageAfterActivity": "모델 활동이 들어오면 사용량이 표시됩니다", - "lab.latestRelease": "최신 출시 {{date}}", - "lab.shareOfUsage": "최근 OpenCode 사용량의 {{share}}", - "lab.usageTitle": "{{lab}} 토큰 사용량", - "lab.usageDescription": "지난 두 달 동안의 일간 OpenCode 토큰 볼륨입니다.", - "lab.noUsageTitle": "아직 사용량 없음", - "lab.noUsageDescription": "이 랩에 활동이 생기면 최근 토큰 사용량이 여기에 표시됩니다.", - "lab.dailyTokenChart": "{{lab}} 일간 토큰 사용량 차트", - "lab.dailyTokens": "일간 토큰", - "lab.tokens": "토큰", - "lab.modelsTitle": "{{lab}} 모델", - "lab.modelsDescription": "카탈로그 세부 정보와 최근 사용량입니다.", - "lab.recentUsageAndLimits": "최근 사용량과 한도입니다.", - "lab.usage": "사용량", - "lab.share": "점유율", - "model.title": "{{model}} 사용량, 비용 및 순위 | OpenCode 데이터", - "model.description": - "{{model}}의 OpenCode Go 사용 데이터를 토큰 볼륨, 주간 순위, 토큰 구성, 비용, 캐시 비율, 세션, 지역별 분포, 비슷한 모델까지 확인하세요.", - "model.loadingTitle": "모델 데이터", - "model.loadingDescription": "모델 집계를 읽는 중입니다.", - "model.loadingProfile": "모델 프로필을 읽는 중입니다.", - "model.noDataTitle": "모델 데이터 없음", - "model.noDataDescription": "리더보드에서 모델을 열어보세요.", - "model.noMatched": "{{id}}와 일치하는 모델 정보나 사용 행이 없습니다.", - "model.fallback": "모델", - "model.catalogFallback": - "공유 모델 인덱스의 모델 정보입니다. 이 모델에 활동이 생기면 OpenCode Go 사용량이 표시됩니다.", - "model.unranked": "지난주 OpenCode Go 사용량에서 순위 없음", - "model.ranked": "지난주 OpenCode Go 사용량에서 #{{rank}}위", - "model.observedVolume": "관측된 2M 볼륨의 {{share}}.", - "model.weights": "모델 가중치: {{label}}", - "model.rank": "7일 순위", - "model.profile": "모델 프로필", - "model.listed": "등록됨", - "model.noCurrentUsage": "현재 데이터 기간에는 OpenCode Go 사용량이 없습니다.", - "model.facts": "모델 정보", - "model.context": "컨텍스트", - "model.output": "출력", - "model.knowledge": "지식", - "model.release": "출시", - "model.inputs": "입력", - "model.overviewDescription": "최근 OpenCode Go 토큰, 순 사용자, 시장 위치입니다.", - "model.noSummaryTitle": "사용 요약 없음", - "model.noSummaryDescription": "이 모델에는 아직 OpenCode Go 사용 행이 없습니다.", - "model.tokens": "토큰", - "model.uniqueUsers": "순 사용자", - "model.lastTwoMonths": "지난 두 달", - "model.sessions": "세션", - "model.completedSessions": "완료된 세션", - "model.tokenShare": "토큰 점유율", - "model.totalModels": "{{count}}개 모델", - "model.momentum": "모멘텀", - "model.vsPreviousWindow": "이전 기간 대비", - "model.usageDescription": "최근 두 달 기간의 일간 OpenCode Go 토큰 볼륨입니다.", - "model.noUsageTitle": "사용량 없음", - "model.noUsageDescription": "현재 기간에는 사용량이 없습니다.", - "model.dailyTokenChart": "일간 토큰 사용량 차트", - "model.usersDescription": "최근 두 달 기간의 일간 OpenCode Go 순 사용자입니다.", - "model.noUsersTitle": "사용자 데이터 없음", - "model.noUsersDescription": "현재 기간에는 사용자 포함 행이 없습니다.", - "model.dailyUserChart": "일간 순 사용자 차트", - "model.efficiencyDescription": "비용, 캐시 동작, 평균 OpenCode Go 세션 형태입니다.", - "model.noEfficiencyTitle": "효율 데이터 없음", - "model.noEfficiencyDescription": "사용량이 들어오면 효율 데이터가 표시됩니다.", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "비용", - "model.totalSpend": "총 지출", - "model.costPerMillion": "100만당 비용", - "model.inputOutput": "입력 / 출력", - "model.observedTokens": "관측된 전체 토큰", - "model.costSession": "비용 / 세션", - "model.average": "평균", - "model.tokensSession": "토큰 / 세션", - "model.cacheRatio": "캐시 비율", - "model.inputTokens": "입력 토큰", - "model.geoDescription": "국가별 OpenCode Go 모델 토큰 사용량입니다.", - "model.noGeoTitle": "지역 데이터 없음", - "model.noGeoDescription": "이 모델과 일치하는 OpenCode Go 지역 행이 없습니다.", - "model.worldMap": "국가별 모델 토큰 사용량 세계 지도", - "model.peersDescription": "최근 OpenCode Go 토큰 볼륨이 가까운 모델입니다.", - "model.noPeersTitle": "비슷한 모델 없음", - "model.noPeersDescription": "사용량이 들어오면 비슷한 모델 순위가 표시됩니다.", - "model.noUsageLastWeek": "지난주 사용량 없음", - "model.newThisWeek": "이번 주 신규", - "model.sameAsPreviousWeek": "지난주와 동일", - "model.vsPreviousWeek": "지난주 대비 {{change}}", - "model.pdf": "PDF", - "format.users": "사용자", - "format.tokens": "토큰", -} satisfies Record diff --git a/packages/stats/app/src/i18n/no.ts b/packages/stats/app/src/i18n/no.ts deleted file mode 100644 index 2c6d957810..0000000000 --- a/packages/stats/app/src/i18n/no.ts +++ /dev/null @@ -1,235 +0,0 @@ -export const dict = { - "app.title": "Rangeringer for bruk av AI-modeller | OpenCode Data", - "app.description": - "Utforsk bruk av OpenCode Go på tvers av AI-modeller, inkludert tokenvolum, rangeringer, markedsandel, tokenpriser, øktkostnad, cacheandel og geografiske fordelinger.", - "app.unfurlAlt": "OpenCode Data-ordmerke på en mørk mønstret bakgrunn", - "nav.dataHome": "Dataforside", - "nav.topModels": "Toppmodeller", - "nav.leaderboard": "Rangering", - "nav.uniqueUsers": "Unike brukere", - "nav.sessionCost": "Øktkostnad", - "nav.tokenCost": "Tokenkostnad", - "nav.cacheRatio": "Cacheandel", - "nav.marketShare": "Markedsandel", - "nav.geoBreakdown": "Geografisk fordeling", - "nav.overview": "Oversikt", - "nav.usage": "Bruk", - "nav.users": "Brukere", - "nav.efficiency": "Effektivitet", - "nav.peers": "Lignende modeller", - "nav.models": "Modeller", - "header.brandLabel": "Dataforside", - "header.sectionNavLabel": "Dataseksjoner", - "header.githubAria": "Gi OpenCode en stjerne på GitHub", - "header.github": "GitHub", - "header.tryOpenCode": "Prøv OpenCode", - "header.openNav": "Åpne navigasjon", - "header.closeNav": "Lukk navigasjon", - "theme.groupLabel": "Tema", - "theme.dark": "Mørkt", - "theme.light": "Lyst", - "theme.system": "System", - "footer.modelData": "Modelldata", - "footer.legal": "Juridisk", - "footer.connect": "Kontakt", - "footer.newsletter": "Nyhetsbrev", - "footer.newsletterBody": "Vær først ute med å høre om nye utgivelser.", - "footer.language": "Språk", - "footer.subscribe": "Abonner", - "footer.terms": "Tjenestevilkår", - "footer.privacy": "Personvernerklæring", - "footer.contact": "Kontakt oss", - "footer.community": "Fellesskap", - "footer.youtube": "YouTube", - "footer.homeAria": "OpenCode-forside", - "footer.status": "Alle systemer er operative", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "LES MER", - "modal.closeNewsletter": "Lukk påmelding til nyhetsbrev", - "modal.title": "OpenCode-nyhetsbrev", - "modal.body": "Vær først ute med å høre\nom nye utgivelser.", - "modal.email": "E-postadresse", - "modal.subscribe": "Abonner", - "modal.subscribing": "Abonnerer...", - "modal.success": "Du er abonnert.", - "modal.error": "Kunne ikke abonnere", - "product.allUsers": "Alle brukere", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1 dag", - "range.1W": "1 uke", - "range.2W": "2 uker", - "range.1M": "1 måned", - "range.2M": "2 måneder", - "chart.daily": "Daglig", - "chart.input": "Inndata", - "chart.output": "Utdata", - "chart.cached": "Bufret", - "chart.uncached": "Ikke bufret", - "chart.ratio": "Forhold", - "chart.model": "Modell", - "chart.cacheRatio": "Cacheandel", - "chart.costSession": "Kostnad/økt", - "chart.tokensSession": "Tokens/økt", - "chart.costPerSession": "KOSTNAD / ØKT", - "chart.tokensPerSession": "TOKENS / ØKT", - "chart.live": "Direkte", - "chart.percent": "prosent", - "chart.leaderboardAria": "Rangering av modelltokens", - "chart.scrollableLeaderboardAria": "Rullbar rangering av modelltokens", - "chart.byAuthor": "av {{author}}", - "home.updated": "Oppdatert", - "home.noRows": "Ingen rader ennå", - "home.justNow": "akkurat nå", - "home.heroCopy": - "Se hvilke modeller som vinner reell bruk, hvordan miksen endrer seg, og hva det betyr for kostnadene.", - "home.loadingTitle": "Laster data", - "home.loadingDescription": "Leser modellaggregater.", - "home.usageTitle": "Bruk", - "home.topModelsDescription": "Bruk av modeller på tvers av OpenCode Go.", - "home.noUsageTitle": "Ingen bruksdata", - "home.noUsageDescription": "Ingen modellrader matchet dette produktet og intervallet.", - "home.noLeaderboardTitle": "Ingen rangeringsdata", - "home.noLeaderboardDescription": "Ingen modellrader matchet dette produktet og intervallet.", - "home.productFilter": "Produktfilter", - "home.dateRange": "Datoområde", - "home.stackedUsageChart": "Stablet bruksdiagram for toppmodeller", - "home.total": "totalt", - "home.modelUsers": "modellbrukere", - "home.new": "Ny", - "home.uniqueUsersTitle": "Unike brukere", - "home.uniqueUsersDescription": "Daglige unike OpenCode Go-brukere etter modell.", - "home.noUserDataTitle": "Ingen brukerdata", - "home.noUserDataDescription": "Ingen modellrader med brukere matchet dette vinduet.", - "home.uniqueUsersChart": "Stablet diagram over unike brukere etter modell", - "home.marketShareTitle": "Markedsandel", - "home.marketShareDescription": "Sammenlign tokenandel etter modellforfatter.", - "home.noMarketTitle": "Ingen markedsdata", - "home.noMarketDescription": "Ingen modellrader matchet dette intervallet.", - "home.marketChart": "Markedsandel etter modellforfatter", - "home.noData": "Ingen data", - "home.geoTitle": "Geografisk fordeling", - "home.geoDescription": "Tokens brukt etter land.", - "home.noGeoTitle": "Ingen geodata", - "home.noGeoDescription": "Ingen georader matchet dette intervallet.", - "home.worldMap": "Verdenskart over tokenbruk etter land", - "home.geoMapTitle": "Kart over geografisk fordeling", - "home.unknown": "Ukjent", - "home.tokenCostTitle": "Tokenkostnad", - "home.tokenCostDescription": "Pris per 1 mill. tokens.", - "home.noTokenCostTitle": "Ingen tokenkostnadsdata", - "home.noTokenCostDescription": "Ingen modellrader med kostnader matchet dette produktet.", - "home.cacheRatioTitle": "Cacheandel", - "home.cacheRatioDescription": "Andel inndata-tokens levert fra cache.", - "home.noCacheTitle": "Ingen cacheandelsdata", - "home.noCacheDescription": "Ingen modellrader med inndata-tokens matchet dette produktet.", - "home.sessionCostTitle": "Øktkostnad", - "home.sessionCostDescription": "Gjennomsnittlig kostnad per økt.", - "home.noSessionCostTitle": "Ingen øktkostnadsdata", - "home.noSessionCostDescription": "Ingen modellrader med økter matchet dette produktet.", - "home.costSession": "Kostnad/økt", - "lab.title": "{{lab}} AI-modellbruk og rangeringer | OpenCode Data", - "lab.description": - "Sammenlign {{lab}}-modeller brukt i OpenCode Go, inkludert tokenbruk, modellrangeringer, kontekstvinduer, utgivelsesdatoer, kostnader og modellspesifikke data.", - "lab.loadingTitle": "Modellab", - "lab.loadingDescription": "Leser modelltilgjengelighet og nylig OpenCode-bruk.", - "lab.notFound": "Ingen modeller matchet dette laben.", - "lab.heroPrefix": "Utforsk {{count}} {{lab}}-modeller brukt i OpenCode", - "lab.heroIncluding": "inkludert {{models}}", - "lab.heroSuffix": "Sammenlign nylig tokenbruk, kontekstvinduer, utgivelsesdatoer og modellspesifikke data.", - "lab.tokensProcessed": "Behandlede tokens", - "lab.pending": "Venter", - "lab.usageAfterActivity": "Bruk vises etter at modellaktivitet lander", - "lab.latestRelease": "Siste utgivelse {{date}}", - "lab.shareOfUsage": "{{share}} av nylig OpenCode-bruk", - "lab.usageTitle": "{{lab}} tokenbruk", - "lab.usageDescription": "Daglig OpenCode-tokenvolum over de siste to månedene.", - "lab.noUsageTitle": "Ingen bruk ennå", - "lab.noUsageDescription": "Nylig tokenbruk vises her når denne laben har aktivitet.", - "lab.dailyTokenChart": "Daglig diagram over {{lab}} tokenbruk", - "lab.dailyTokens": "Daglige tokens", - "lab.tokens": "tokens", - "lab.modelsTitle": "{{lab}}-modeller", - "lab.modelsDescription": "Katalogdetaljer pluss nylig bruk.", - "lab.recentUsageAndLimits": "Nylig bruk og grenser.", - "lab.usage": "Bruk", - "lab.share": "Andel", - "model.title": "{{model}} bruk, kostnad og rangering | OpenCode Data", - "model.description": - "Se OpenCode Go-bruksdata for {{model}}, inkludert tokenvolum, ukentlig rangering, tokenmiks, kostnader, cacheandel, økter, geografiske fordelinger og lignende modeller.", - "model.loadingTitle": "Modelldata", - "model.loadingDescription": "Leser modellaggregater.", - "model.loadingProfile": "Leser modellprofilen.", - "model.noDataTitle": "Ingen modelldata", - "model.noDataDescription": "Prøv å åpne en modell fra rangeringen.", - "model.noMatched": "Ingen modellfakta eller bruksrader matchet {{id}}.", - "model.fallback": "Modell", - "model.catalogFallback": - "Modellfakta fra den delte modellindeksen. OpenCode Go-bruk vises når denne modellen har aktivitet.", - "model.unranked": "Ikke rangert i forrige ukes OpenCode Go-bruk", - "model.ranked": "Rangert #{{rank}} i forrige ukes OpenCode Go-bruk", - "model.observedVolume": "med {{share}} av observert 2M-volum.", - "model.weights": "Modellvekter: {{label}}", - "model.rank": "7D-rangering", - "model.profile": "Modellprofil", - "model.listed": "Oppført", - "model.noCurrentUsage": "Ingen OpenCode Go-bruk i gjeldende datavindu.", - "model.facts": "Modellfakta", - "model.context": "Kontekst", - "model.output": "Utdata", - "model.knowledge": "Kunnskap", - "model.release": "Utgivelse", - "model.inputs": "Inndata", - "model.overviewDescription": "Nylige OpenCode Go-tokens, unike brukere og markedsposisjon.", - "model.noSummaryTitle": "Ingen bruksoversikt", - "model.noSummaryDescription": "Denne modellen har ingen OpenCode Go-bruksrader ennå.", - "model.tokens": "Tokens", - "model.uniqueUsers": "Unike brukere", - "model.lastTwoMonths": "siste to måneder", - "model.sessions": "Økter", - "model.completedSessions": "fullførte økter", - "model.tokenShare": "Tokenandel", - "model.totalModels": "{{count}} modeller", - "model.momentum": "Momentum", - "model.vsPreviousWindow": "mot forrige vindu", - "model.usageDescription": "Daglig OpenCode Go-tokenvolum i det nylige tomånedersvinduet.", - "model.noUsageTitle": "Ingen bruk", - "model.noUsageDescription": "Ingen bruk landet i gjeldende vindu.", - "model.dailyTokenChart": "Daglig diagram over tokenbruk", - "model.usersDescription": "Daglige unike OpenCode Go-brukere i det nylige tomånedersvinduet.", - "model.noUsersTitle": "Ingen brukerdata", - "model.noUsersDescription": "Ingen rader med brukere landet i gjeldende vindu.", - "model.dailyUserChart": "Daglig diagram over unike brukere", - "model.efficiencyDescription": "Kostnad, cacheatferd og gjennomsnittlig OpenCode Go-øktform.", - "model.noEfficiencyTitle": "Ingen effektivitetsdata", - "model.noEfficiencyDescription": "Effektivitetsdata vises etter at bruk lander.", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "Kostnad", - "model.totalSpend": "totalt forbruk", - "model.costPerMillion": "Kostnad / 1 mill.", - "model.inputOutput": "inndata / utdata", - "model.observedTokens": "alle observerte tokens", - "model.costSession": "Kostnad / økt", - "model.average": "gjennomsnitt", - "model.tokensSession": "Tokens / økt", - "model.cacheRatio": "Cacheandel", - "model.inputTokens": "inndata-tokens", - "model.geoDescription": "OpenCode Go-modelltokens brukt etter land.", - "model.noGeoTitle": "Ingen geodata", - "model.noGeoDescription": "Ingen OpenCode Go-georader matchet denne modellen.", - "model.worldMap": "Verdenskart over modelltokenbruk etter land", - "model.peersDescription": "Nærliggende modeller etter nylig OpenCode Go-tokenvolum.", - "model.noPeersTitle": "Ingen lignende modeller", - "model.noPeersDescription": "Rangeringer for lignende modeller vises etter at bruk lander.", - "model.noUsageLastWeek": "Ingen bruk forrige uke", - "model.newThisWeek": "Ny denne uken", - "model.sameAsPreviousWeek": "Samme som forrige uke", - "model.vsPreviousWeek": "{{change}} mot forrige uke", - "model.pdf": "PDF", - "format.users": "brukere", - "format.tokens": "tokens", -} as const diff --git a/packages/stats/app/src/i18n/pl.ts b/packages/stats/app/src/i18n/pl.ts deleted file mode 100644 index d61f40cda3..0000000000 --- a/packages/stats/app/src/i18n/pl.ts +++ /dev/null @@ -1,234 +0,0 @@ -export const dict = { - "app.title": "Rankingi użycia modeli AI | OpenCode Data", - "app.description": - "Przeglądaj użycie OpenCode Go w modelach AI, w tym wolumen tokenów, rankingi, udział w rynku, ceny tokenów, koszt sesji, współczynnik cache i podziały geograficzne.", - "app.unfurlAlt": "Znak słowny OpenCode Data na ciemnym wzorzystym tle", - "nav.dataHome": "Strona danych", - "nav.topModels": "Najlepsze modele", - "nav.leaderboard": "Ranking", - "nav.uniqueUsers": "Unikalni użytkownicy", - "nav.sessionCost": "Koszt sesji", - "nav.tokenCost": "Koszt tokenów", - "nav.cacheRatio": "Współczynnik cache", - "nav.marketShare": "Udział w rynku", - "nav.geoBreakdown": "Podział geograficzny", - "nav.overview": "Przegląd", - "nav.usage": "Użycie", - "nav.users": "Użytkownicy", - "nav.efficiency": "Wydajność", - "nav.peers": "Podobne modele", - "nav.models": "Modele", - "header.brandLabel": "Strona danych", - "header.sectionNavLabel": "Sekcje danych", - "header.githubAria": "Dodaj gwiazdkę OpenCode na GitHub", - "header.github": "GitHub", - "header.tryOpenCode": "Wypróbuj OpenCode", - "header.openNav": "Otwórz nawigację", - "header.closeNav": "Zamknij nawigację", - "theme.groupLabel": "Motyw", - "theme.dark": "Ciemny", - "theme.light": "Jasny", - "theme.system": "Systemowy", - "footer.modelData": "Dane modeli", - "footer.legal": "Informacje prawne", - "footer.connect": "Kontakt", - "footer.newsletter": "Newsletter", - "footer.newsletterBody": "Dowiedz się jako pierwszy o nowych wydaniach.", - "footer.language": "Język", - "footer.subscribe": "Subskrybuj", - "footer.terms": "Warunki korzystania", - "footer.privacy": "Polityka prywatności", - "footer.contact": "Skontaktuj się z nami", - "footer.community": "Społeczność", - "footer.youtube": "YouTube", - "footer.homeAria": "Strona główna OpenCode", - "footer.status": "Wszystkie systemy działają", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "DOWIEDZ SIĘ WIĘCEJ", - "modal.closeNewsletter": "Zamknij zapis do newslettera", - "modal.title": "Newsletter OpenCode", - "modal.body": "Dowiedz się jako pierwszy\no nowych wydaniach.", - "modal.email": "Adres e-mail", - "modal.subscribe": "Subskrybuj", - "modal.subscribing": "Subskrybowanie...", - "modal.success": "Subskrypcja aktywna.", - "modal.error": "Nie udało się subskrybować", - "product.allUsers": "Wszyscy użytkownicy", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1 dzień", - "range.1W": "1 tydzień", - "range.2W": "2 tygodnie", - "range.1M": "1 miesiąc", - "range.2M": "2 miesiące", - "chart.daily": "Dziennie", - "chart.input": "Wejście", - "chart.output": "Wyjście", - "chart.cached": "Z cache", - "chart.uncached": "Bez cache", - "chart.ratio": "Współczynnik", - "chart.model": "Model", - "chart.cacheRatio": "Współczynnik cache", - "chart.costSession": "Koszt/sesja", - "chart.tokensSession": "Tokeny/sesja", - "chart.costPerSession": "KOSZT / SESJA", - "chart.tokensPerSession": "TOKENY / SESJA", - "chart.live": "Na żywo", - "chart.percent": "procent", - "chart.leaderboardAria": "Ranking tokenów modeli", - "chart.scrollableLeaderboardAria": "Przewijany ranking tokenów modeli", - "chart.byAuthor": "autor: {{author}}", - "home.updated": "Zaktualizowano", - "home.noRows": "Nie ma jeszcze wierszy", - "home.justNow": "przed chwilą", - "home.heroCopy": "Zobacz, które modele wygrywają w realnym użyciu, jak zmienia się miks i co to oznacza dla kosztów.", - "home.loadingTitle": "Ładowanie danych", - "home.loadingDescription": "Odczytywanie agregatów modeli.", - "home.usageTitle": "Użycie", - "home.topModelsDescription": "Użycie modeli w OpenCode Go.", - "home.noUsageTitle": "Brak danych użycia", - "home.noUsageDescription": "Żadne wiersze modeli nie pasowały do tego produktu i zakresu.", - "home.noLeaderboardTitle": "Brak danych rankingu", - "home.noLeaderboardDescription": "Żadne wiersze modeli nie pasowały do tego produktu i zakresu.", - "home.productFilter": "Filtr produktu", - "home.dateRange": "Zakres dat", - "home.stackedUsageChart": "Skumulowany wykres użycia najlepszych modeli", - "home.total": "razem", - "home.modelUsers": "użytkownicy modelu", - "home.new": "Nowy", - "home.uniqueUsersTitle": "Unikalni użytkownicy", - "home.uniqueUsersDescription": "Dzienni unikalni użytkownicy OpenCode Go według modelu.", - "home.noUserDataTitle": "Brak danych użytkowników", - "home.noUserDataDescription": "Żadne wiersze modeli z użytkownikami nie pasowały do tego okna.", - "home.uniqueUsersChart": "Skumulowany wykres unikalnych użytkowników według modelu", - "home.marketShareTitle": "Udział w rynku", - "home.marketShareDescription": "Porównaj udział tokenów według autora modelu.", - "home.noMarketTitle": "Brak danych rynkowych", - "home.noMarketDescription": "Żadne wiersze modeli nie pasowały do tego zakresu.", - "home.marketChart": "Udział w rynku według autora modelu", - "home.noData": "Brak danych", - "home.geoTitle": "Podział geograficzny", - "home.geoDescription": "Tokeny użyte według kraju.", - "home.noGeoTitle": "Brak danych geograficznych", - "home.noGeoDescription": "Żadne wiersze geograficzne nie pasowały do tego zakresu.", - "home.worldMap": "Mapa świata użycia tokenów według kraju", - "home.geoMapTitle": "Mapa podziału geograficznego", - "home.unknown": "Nieznane", - "home.tokenCostTitle": "Koszt tokenów", - "home.tokenCostDescription": "Cena za 1 mln tokenów.", - "home.noTokenCostTitle": "Brak danych kosztu tokenów", - "home.noTokenCostDescription": "Żadne wiersze modeli z kosztami nie pasowały do tego produktu.", - "home.cacheRatioTitle": "Współczynnik cache", - "home.cacheRatioDescription": "Udział tokenów wejściowych obsłużonych z cache.", - "home.noCacheTitle": "Brak danych współczynnika cache", - "home.noCacheDescription": "Żadne wiersze modeli z tokenami wejściowymi nie pasowały do tego produktu.", - "home.sessionCostTitle": "Koszt sesji", - "home.sessionCostDescription": "Średni koszt na sesję.", - "home.noSessionCostTitle": "Brak danych kosztu sesji", - "home.noSessionCostDescription": "Żadne wiersze modeli z sesjami nie pasowały do tego produktu.", - "home.costSession": "Koszt/sesja", - "lab.title": "Użycie i rankingi modeli AI {{lab}} | OpenCode Data", - "lab.description": - "Porównaj modele {{lab}} używane w OpenCode Go, w tym użycie tokenów, rankingi modeli, okna kontekstu, daty wydań, koszty i dane specyficzne dla modeli.", - "lab.loadingTitle": "Laboratorium modeli", - "lab.loadingDescription": "Odczytywanie dostępności modeli i ostatniego użycia OpenCode.", - "lab.notFound": "Żadne modele nie pasowały do tego laboratorium.", - "lab.heroPrefix": "Przeglądaj {{count}} modeli {{lab}} używanych w OpenCode", - "lab.heroIncluding": "w tym {{models}}", - "lab.heroSuffix": "Porównaj ostatnie użycie tokenów, okna kontekstu, daty wydań i dane specyficzne dla modeli.", - "lab.tokensProcessed": "Przetworzone tokeny", - "lab.pending": "Oczekujące", - "lab.usageAfterActivity": "Użycie pojawi się po nadejściu aktywności modelu", - "lab.latestRelease": "Najnowsze wydanie {{date}}", - "lab.shareOfUsage": "{{share}} ostatniego użycia OpenCode", - "lab.usageTitle": "Użycie tokenów {{lab}}", - "lab.usageDescription": "Dzienny wolumen tokenów OpenCode z ostatnich dwóch miesięcy.", - "lab.noUsageTitle": "Jeszcze brak użycia", - "lab.noUsageDescription": "Ostatnie użycie tokenów pojawi się tutaj, gdy to laboratorium będzie mieć aktywność.", - "lab.dailyTokenChart": "Dzienny wykres użycia tokenów {{lab}}", - "lab.dailyTokens": "Dzienne tokeny", - "lab.tokens": "tokeny", - "lab.modelsTitle": "Modele {{lab}}", - "lab.modelsDescription": "Szczegóły katalogu plus ostatnie użycie.", - "lab.recentUsageAndLimits": "Ostatnie użycie i limity.", - "lab.usage": "Użycie", - "lab.share": "Udział", - "model.title": "Użycie, koszt i pozycja {{model}} | OpenCode Data", - "model.description": - "Zobacz dane użycia {{model}} w OpenCode Go, w tym wolumen tokenów, tygodniową pozycję, miks tokenów, koszty, współczynnik cache, sesje, podziały geograficzne i podobne modele.", - "model.loadingTitle": "Dane modelu", - "model.loadingDescription": "Odczytywanie agregatów modelu.", - "model.loadingProfile": "Odczytywanie profilu modelu.", - "model.noDataTitle": "Brak danych modelu", - "model.noDataDescription": "Spróbuj otworzyć model z rankingu.", - "model.noMatched": "Żadne fakty modelu ani wiersze użycia nie pasowały do {{id}}.", - "model.fallback": "Model", - "model.catalogFallback": - "Fakty modelu ze wspólnego indeksu modeli. Użycie OpenCode Go pojawi się, gdy ten model będzie mieć aktywność.", - "model.unranked": "Bez pozycji w użyciu OpenCode Go z zeszłego tygodnia", - "model.ranked": "Pozycja #{{rank}} w użyciu OpenCode Go z zeszłego tygodnia", - "model.observedVolume": "z {{share}} obserwowanego wolumenu 2M.", - "model.weights": "Wagi modelu: {{label}}", - "model.rank": "Pozycja 7D", - "model.profile": "Profil modelu", - "model.listed": "W katalogu", - "model.noCurrentUsage": "Brak użycia OpenCode Go w bieżącym oknie danych.", - "model.facts": "Fakty modelu", - "model.context": "Kontekst", - "model.output": "Wyjście", - "model.knowledge": "Wiedza", - "model.release": "Wydanie", - "model.inputs": "Wejścia", - "model.overviewDescription": "Ostatnie tokeny OpenCode Go, unikalni użytkownicy i pozycja rynkowa.", - "model.noSummaryTitle": "Brak podsumowania użycia", - "model.noSummaryDescription": "Ten model nie ma jeszcze wierszy użycia OpenCode Go.", - "model.tokens": "Tokeny", - "model.uniqueUsers": "Unikalni użytkownicy", - "model.lastTwoMonths": "ostatnie dwa miesiące", - "model.sessions": "Sesje", - "model.completedSessions": "zakończone sesje", - "model.tokenShare": "Udział tokenów", - "model.totalModels": "{{count}} modeli", - "model.momentum": "Momentum", - "model.vsPreviousWindow": "vs poprzednie okno", - "model.usageDescription": "Dzienny wolumen tokenów OpenCode Go w ostatnim dwumiesięcznym oknie.", - "model.noUsageTitle": "Brak użycia", - "model.noUsageDescription": "W bieżącym oknie nie pojawiło się użycie.", - "model.dailyTokenChart": "Dzienny wykres użycia tokenów", - "model.usersDescription": "Dzienni unikalni użytkownicy OpenCode Go w ostatnim dwumiesięcznym oknie.", - "model.noUsersTitle": "Brak danych użytkowników", - "model.noUsersDescription": "W bieżącym oknie nie pojawiły się wiersze z użytkownikami.", - "model.dailyUserChart": "Dzienny wykres unikalnych użytkowników", - "model.efficiencyDescription": "Koszt, zachowanie cache i średni kształt sesji OpenCode Go.", - "model.noEfficiencyTitle": "Brak danych wydajności", - "model.noEfficiencyDescription": "Dane wydajności pojawią się po nadejściu użycia.", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "Koszt", - "model.totalSpend": "łączne wydatki", - "model.costPerMillion": "Koszt / 1 mln", - "model.inputOutput": "wejście / wyjście", - "model.observedTokens": "wszystkie obserwowane tokeny", - "model.costSession": "Koszt / sesja", - "model.average": "średnio", - "model.tokensSession": "Tokeny / sesja", - "model.cacheRatio": "Współczynnik cache", - "model.inputTokens": "tokeny wejściowe", - "model.geoDescription": "Tokeny modelu OpenCode Go użyte według kraju.", - "model.noGeoTitle": "Brak danych geograficznych", - "model.noGeoDescription": "Żadne wiersze geograficzne OpenCode Go nie pasowały do tego modelu.", - "model.worldMap": "Mapa świata użycia tokenów modelu według kraju", - "model.peersDescription": "Pobliskie modele według ostatniego wolumenu tokenów OpenCode Go.", - "model.noPeersTitle": "Brak podobnych modeli", - "model.noPeersDescription": "Rankingi podobnych modeli pojawią się po nadejściu użycia.", - "model.noUsageLastWeek": "Brak użycia w zeszłym tygodniu", - "model.newThisWeek": "Nowy w tym tygodniu", - "model.sameAsPreviousWeek": "Tak samo jak w poprzednim tygodniu", - "model.vsPreviousWeek": "{{change}} vs poprzedni tydzień", - "model.pdf": "PDF", - "format.users": "użytkownicy", - "format.tokens": "tokeny", -} as const diff --git a/packages/stats/app/src/i18n/ru.ts b/packages/stats/app/src/i18n/ru.ts deleted file mode 100644 index d0bfeacc84..0000000000 --- a/packages/stats/app/src/i18n/ru.ts +++ /dev/null @@ -1,236 +0,0 @@ -export const dict = { - "app.title": "Рейтинги использования ИИ-моделей | OpenCode Data", - "app.description": - "Изучайте использование OpenCode Go по ИИ-моделям: объем токенов, рейтинги, долю рынка, цены токенов, стоимость сеанса, долю кэша и географические разрезы.", - "app.unfurlAlt": "Словесный знак OpenCode Data на темном узорном фоне", - "nav.dataHome": "Главная данных", - "nav.topModels": "Лучшие модели", - "nav.leaderboard": "Рейтинг", - "nav.uniqueUsers": "Уникальные пользователи", - "nav.sessionCost": "Стоимость сеанса", - "nav.tokenCost": "Стоимость токенов", - "nav.cacheRatio": "Доля кэша", - "nav.marketShare": "Доля рынка", - "nav.geoBreakdown": "Географический разрез", - "nav.overview": "Обзор", - "nav.usage": "Использование", - "nav.users": "Пользователи", - "nav.efficiency": "Эффективность", - "nav.peers": "Похожие модели", - "nav.models": "Модели", - "header.brandLabel": "Главная данных", - "header.sectionNavLabel": "Разделы данных", - "header.githubAria": "Поставить звезду OpenCode на GitHub", - "header.github": "GitHub", - "header.tryOpenCode": "Попробовать OpenCode", - "header.openNav": "Открыть навигацию", - "header.closeNav": "Закрыть навигацию", - "theme.groupLabel": "Тема", - "theme.dark": "Темная", - "theme.light": "Светлая", - "theme.system": "Системная", - "footer.modelData": "Данные моделей", - "footer.legal": "Правовая информация", - "footer.connect": "Связаться", - "footer.newsletter": "Рассылка", - "footer.newsletterBody": "Узнавайте о новых релизах первыми.", - "footer.language": "Язык", - "footer.subscribe": "Подписаться", - "footer.terms": "Условия обслуживания", - "footer.privacy": "Политика конфиденциальности", - "footer.contact": "Свяжитесь с нами", - "footer.community": "Сообщество", - "footer.youtube": "YouTube", - "footer.homeAria": "Главная OpenCode", - "footer.status": "Все системы работают", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "УЗНАТЬ БОЛЬШЕ", - "modal.closeNewsletter": "Закрыть форму подписки", - "modal.title": "Рассылка OpenCode", - "modal.body": "Узнавайте первыми\nо новых релизах.", - "modal.email": "Адрес электронной почты", - "modal.subscribe": "Подписаться", - "modal.subscribing": "Оформляем подписку...", - "modal.success": "Вы подписаны.", - "modal.error": "Не удалось подписаться", - "product.allUsers": "Все пользователи", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1 день", - "range.1W": "1 неделя", - "range.2W": "2 недели", - "range.1M": "1 месяц", - "range.2M": "2 месяца", - "chart.daily": "Ежедневно", - "chart.input": "Ввод", - "chart.output": "Вывод", - "chart.cached": "Из кэша", - "chart.uncached": "Без кэша", - "chart.ratio": "Соотношение", - "chart.model": "Модель", - "chart.cacheRatio": "Доля кэша", - "chart.costSession": "Стоимость/сеанс", - "chart.tokensSession": "Токены/сеанс", - "chart.costPerSession": "СТОИМОСТЬ / СЕАНС", - "chart.tokensPerSession": "ТОКЕНЫ / СЕАНС", - "chart.live": "В реальном времени", - "chart.percent": "процент", - "chart.leaderboardAria": "Рейтинг моделей по токенам", - "chart.scrollableLeaderboardAria": "Прокручиваемый рейтинг моделей по токенам", - "chart.byAuthor": "автор: {{author}}", - "home.updated": "Обновлено", - "home.noRows": "Строк пока нет", - "home.justNow": "только что", - "home.heroCopy": - "Посмотрите, какие модели выигрывают в реальном использовании, как меняется состав и что это значит для стоимости.", - "home.loadingTitle": "Загрузка данных", - "home.loadingDescription": "Читаем агрегаты моделей.", - "home.usageTitle": "Использование", - "home.topModelsDescription": "Использование моделей в OpenCode Go.", - "home.noUsageTitle": "Нет данных использования", - "home.noUsageDescription": "Нет строк моделей для этого продукта и диапазона.", - "home.noLeaderboardTitle": "Нет данных рейтинга", - "home.noLeaderboardDescription": "Нет строк моделей для этого продукта и диапазона.", - "home.productFilter": "Фильтр продукта", - "home.dateRange": "Диапазон дат", - "home.stackedUsageChart": "Составной график использования лучших моделей", - "home.total": "всего", - "home.modelUsers": "пользователи модели", - "home.new": "Новая", - "home.uniqueUsersTitle": "Уникальные пользователи", - "home.uniqueUsersDescription": "Ежедневные уникальные пользователи OpenCode Go по моделям.", - "home.noUserDataTitle": "Нет данных пользователей", - "home.noUserDataDescription": "Нет строк моделей с пользователями для этого окна.", - "home.uniqueUsersChart": "Составной график уникальных пользователей по моделям", - "home.marketShareTitle": "Доля рынка", - "home.marketShareDescription": "Сравните долю токенов по автору модели.", - "home.noMarketTitle": "Нет рыночных данных", - "home.noMarketDescription": "Нет строк моделей для этого диапазона.", - "home.marketChart": "Доля рынка по автору модели", - "home.noData": "Нет данных", - "home.geoTitle": "Географический разрез", - "home.geoDescription": "Токены, использованные по странам.", - "home.noGeoTitle": "Нет геоданных", - "home.noGeoDescription": "Нет географических строк для этого диапазона.", - "home.worldMap": "Карта мира использования токенов по странам", - "home.geoMapTitle": "Карта географического разреза", - "home.unknown": "Неизвестно", - "home.tokenCostTitle": "Стоимость токенов", - "home.tokenCostDescription": "Цена за 1 млн токенов.", - "home.noTokenCostTitle": "Нет данных стоимости токенов", - "home.noTokenCostDescription": "Нет строк моделей со стоимостью для этого продукта.", - "home.cacheRatioTitle": "Доля кэша", - "home.cacheRatioDescription": "Доля входных токенов, обслуженных из кэша.", - "home.noCacheTitle": "Нет данных доли кэша", - "home.noCacheDescription": "Нет строк моделей с входными токенами для этого продукта.", - "home.sessionCostTitle": "Стоимость сеанса", - "home.sessionCostDescription": "Средняя стоимость за сеанс.", - "home.noSessionCostTitle": "Нет данных стоимости сеанса", - "home.noSessionCostDescription": "Нет строк моделей с сеансами для этого продукта.", - "home.costSession": "Стоимость/сеанс", - "lab.title": "Использование и рейтинги ИИ-моделей {{lab}} | OpenCode Data", - "lab.description": - "Сравните модели {{lab}}, используемые в OpenCode Go: использование токенов, рейтинги моделей, контекстные окна, даты релизов, стоимость и данные конкретных моделей.", - "lab.loadingTitle": "Лаборатория моделей", - "lab.loadingDescription": "Читаем доступность моделей и недавнее использование OpenCode.", - "lab.notFound": "Нет моделей, соответствующих этой лаборатории.", - "lab.heroPrefix": "Изучайте {{count}} моделей {{lab}}, используемых в OpenCode", - "lab.heroIncluding": "включая {{models}}", - "lab.heroSuffix": - "Сравните недавнее использование токенов, контекстные окна, даты релизов и данные конкретных моделей.", - "lab.tokensProcessed": "Обработанные токены", - "lab.pending": "Ожидает", - "lab.usageAfterActivity": "Использование появится после активности модели", - "lab.latestRelease": "Последний релиз {{date}}", - "lab.shareOfUsage": "{{share}} недавнего использования OpenCode", - "lab.usageTitle": "Использование токенов {{lab}}", - "lab.usageDescription": "Ежедневный объем токенов OpenCode за последние два месяца.", - "lab.noUsageTitle": "Использования пока нет", - "lab.noUsageDescription": "Недавнее использование токенов появится здесь, когда у этой лаборатории будет активность.", - "lab.dailyTokenChart": "Ежедневный график использования токенов {{lab}}", - "lab.dailyTokens": "Ежедневные токены", - "lab.tokens": "токены", - "lab.modelsTitle": "Модели {{lab}}", - "lab.modelsDescription": "Детали каталога и недавнее использование.", - "lab.recentUsageAndLimits": "Недавнее использование и лимиты.", - "lab.usage": "Использование", - "lab.share": "Доля", - "model.title": "Использование, стоимость и ранг {{model}} | OpenCode Data", - "model.description": - "Посмотрите данные использования {{model}} в OpenCode Go: объем токенов, недельный ранг, состав токенов, стоимость, долю кэша, сеансы, географические разрезы и похожие модели.", - "model.loadingTitle": "Данные модели", - "model.loadingDescription": "Читаем агрегаты модели.", - "model.loadingProfile": "Читаем профиль модели.", - "model.noDataTitle": "Нет данных модели", - "model.noDataDescription": "Попробуйте открыть модель из рейтинга.", - "model.noMatched": "Нет фактов модели или строк использования для {{id}}.", - "model.fallback": "Модель", - "model.catalogFallback": - "Факты модели из общего индекса моделей. Использование OpenCode Go появится, когда у этой модели будет активность.", - "model.unranked": "Нет рейтинга по использованию OpenCode Go за прошлую неделю", - "model.ranked": "Ранг #{{rank}} по использованию OpenCode Go за прошлую неделю", - "model.observedVolume": "с {{share}} наблюдаемого объема 2M.", - "model.weights": "Веса модели: {{label}}", - "model.rank": "Ранг за 7 дн.", - "model.profile": "Профиль модели", - "model.listed": "В каталоге", - "model.noCurrentUsage": "Нет использования OpenCode Go в текущем окне данных.", - "model.facts": "Факты модели", - "model.context": "Контекст", - "model.output": "Вывод", - "model.knowledge": "Знания", - "model.release": "Релиз", - "model.inputs": "Входы", - "model.overviewDescription": "Недавние токены OpenCode Go, уникальные пользователи и рыночная позиция.", - "model.noSummaryTitle": "Нет сводки использования", - "model.noSummaryDescription": "У этой модели пока нет строк использования OpenCode Go.", - "model.tokens": "Токены", - "model.uniqueUsers": "Уникальные пользователи", - "model.lastTwoMonths": "последние два месяца", - "model.sessions": "Сеансы", - "model.completedSessions": "завершенные сеансы", - "model.tokenShare": "Доля токенов", - "model.totalModels": "{{count}} моделей", - "model.momentum": "Динамика", - "model.vsPreviousWindow": "к предыдущему окну", - "model.usageDescription": "Ежедневный объем токенов OpenCode Go за недавнее двухмесячное окно.", - "model.noUsageTitle": "Нет использования", - "model.noUsageDescription": "В текущем окне использование не появилось.", - "model.dailyTokenChart": "Ежедневный график использования токенов", - "model.usersDescription": "Ежедневные уникальные пользователи OpenCode Go за недавнее двухмесячное окно.", - "model.noUsersTitle": "Нет данных пользователей", - "model.noUsersDescription": "В текущем окне нет строк с пользователями.", - "model.dailyUserChart": "Ежедневный график уникальных пользователей", - "model.efficiencyDescription": "Стоимость, поведение кэша и средняя форма сеанса OpenCode Go.", - "model.noEfficiencyTitle": "Нет данных эффективности", - "model.noEfficiencyDescription": "Данные эффективности появятся после использования.", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "Стоимость", - "model.totalSpend": "общие расходы", - "model.costPerMillion": "Стоимость / 1 млн", - "model.inputOutput": "ввод / вывод", - "model.observedTokens": "все наблюдаемые токены", - "model.costSession": "Стоимость / сеанс", - "model.average": "в среднем", - "model.tokensSession": "Токены / сеанс", - "model.cacheRatio": "Доля кэша", - "model.inputTokens": "входные токены", - "model.geoDescription": "Токены модели OpenCode Go, использованные по странам.", - "model.noGeoTitle": "Нет геоданных", - "model.noGeoDescription": "Нет географических строк OpenCode Go для этой модели.", - "model.worldMap": "Карта мира использования токенов модели по странам", - "model.peersDescription": "Близкие модели по недавнему объему токенов OpenCode Go.", - "model.noPeersTitle": "Нет похожих моделей", - "model.noPeersDescription": "Рейтинги похожих моделей появятся после использования.", - "model.noUsageLastWeek": "Нет использования на прошлой неделе", - "model.newThisWeek": "Новая на этой неделе", - "model.sameAsPreviousWeek": "Без изменений к предыдущей неделе", - "model.vsPreviousWeek": "{{change}} к предыдущей неделе", - "model.pdf": "PDF", - "format.users": "пользователи", - "format.tokens": "токены", -} as const diff --git a/packages/stats/app/src/i18n/th.ts b/packages/stats/app/src/i18n/th.ts deleted file mode 100644 index 59733d5c6c..0000000000 --- a/packages/stats/app/src/i18n/th.ts +++ /dev/null @@ -1,236 +0,0 @@ -import type { Key } from "../i18n" - -export const dict = { - "app.title": "อันดับการใช้งานโมเดล AI | ข้อมูล OpenCode", - "app.description": - "สำรวจการใช้งาน OpenCode Go ในโมเดล AI ต่างๆ รวมถึงปริมาณ token อันดับ ส่วนแบ่งตลาด ราคา token ต้นทุนต่อเซสชัน อัตราแคช และข้อมูลแยกตามภูมิศาสตร์", - "app.unfurlAlt": "เวิร์ดมาร์ก OpenCode Data บนพื้นหลังลวดลายสีเข้ม", - "nav.dataHome": "หน้าหลักข้อมูล", - "nav.topModels": "โมเดลยอดนิยม", - "nav.leaderboard": "ลีดเดอร์บอร์ด", - "nav.uniqueUsers": "ผู้ใช้ไม่ซ้ำ", - "nav.sessionCost": "ต้นทุนเซสชัน", - "nav.tokenCost": "ต้นทุน Token", - "nav.cacheRatio": "อัตราแคช", - "nav.marketShare": "ส่วนแบ่งตลาด", - "nav.geoBreakdown": "แยกตามภูมิศาสตร์", - "nav.overview": "ภาพรวม", - "nav.usage": "การใช้งาน", - "nav.users": "ผู้ใช้", - "nav.efficiency": "ประสิทธิภาพ", - "nav.peers": "โมเดลใกล้เคียง", - "nav.models": "โมเดล", - "header.brandLabel": "หน้าหลักข้อมูล", - "header.sectionNavLabel": "ส่วนข้อมูล", - "header.githubAria": "กดดาว OpenCode บน GitHub", - "header.github": "GitHub", - "header.tryOpenCode": "ลองใช้ OpenCode", - "header.openNav": "เปิดการนำทาง", - "header.closeNav": "ปิดการนำทาง", - "theme.groupLabel": "ธีม", - "theme.dark": "มืด", - "theme.light": "สว่าง", - "theme.system": "ระบบ", - "footer.modelData": "ข้อมูลโมเดล", - "footer.legal": "กฎหมาย", - "footer.connect": "ติดต่อ", - "footer.newsletter": "จดหมายข่าว", - "footer.newsletterBody": "รับข่าวการปล่อยเวอร์ชันใหม่ก่อนใคร", - "footer.language": "ภาษา", - "footer.subscribe": "สมัครรับข่าวสาร", - "footer.terms": "ข้อกำหนดการให้บริการ", - "footer.privacy": "นโยบายความเป็นส่วนตัว", - "footer.contact": "ติดต่อเรา", - "footer.community": "ชุมชน", - "footer.youtube": "YouTube", - "footer.homeAria": "หน้าหลัก OpenCode", - "footer.status": "ทุกระบบทำงานปกติ", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "ดูเพิ่มเติม", - "modal.closeNewsletter": "ปิดการสมัครจดหมายข่าว", - "modal.title": "จดหมายข่าว OpenCode", - "modal.body": "รับข่าวการปล่อยเวอร์ชันใหม่\nก่อนใคร", - "modal.email": "ที่อยู่อีเมล", - "modal.subscribe": "สมัครรับข่าวสาร", - "modal.subscribing": "กำลังสมัคร...", - "modal.success": "สมัครเรียบร้อยแล้ว", - "modal.error": "สมัครไม่สำเร็จ", - "product.allUsers": "ผู้ใช้ทั้งหมด", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1 วัน", - "range.1W": "1 สัปดาห์", - "range.2W": "2 สัปดาห์", - "range.1M": "1 เดือน", - "range.2M": "2 เดือน", - "chart.daily": "รายวัน", - "chart.input": "อินพุต", - "chart.output": "เอาต์พุต", - "chart.cached": "แคชแล้ว", - "chart.uncached": "ไม่แคช", - "chart.ratio": "อัตราส่วน", - "chart.model": "โมเดล", - "chart.cacheRatio": "อัตราแคช", - "chart.costSession": "ต้นทุน/เซสชัน", - "chart.tokensSession": "Token/เซสชัน", - "chart.costPerSession": "ต้นทุน / เซสชัน", - "chart.tokensPerSession": "Token / เซสชัน", - "chart.live": "สด", - "chart.percent": "เปอร์เซ็นต์", - "chart.leaderboardAria": "ลีดเดอร์บอร์ด token ของโมเดล", - "chart.scrollableLeaderboardAria": "ลีดเดอร์บอร์ด token ของโมเดลแบบเลื่อนได้", - "chart.byAuthor": "โดย {{author}}", - "home.updated": "อัปเดตแล้ว", - "home.noRows": "ยังไม่มีแถวข้อมูล", - "home.justNow": "เมื่อสักครู่", - "home.heroCopy": "ดูว่าโมเดลใดชนะในการใช้งานจริง ส่วนผสมการใช้งานเปลี่ยนไปอย่างไร และสิ่งนั้นหมายถึงต้นทุนอย่างไร", - "home.loadingTitle": "กำลังโหลดข้อมูล", - "home.loadingDescription": "กำลังอ่านข้อมูลสรุปของโมเดล", - "home.usageTitle": "การใช้งาน", - "home.topModelsDescription": "การใช้งานโมเดลบน OpenCode Go", - "home.noUsageTitle": "ไม่มีข้อมูลการใช้งาน", - "home.noUsageDescription": "ไม่มีแถวโมเดลที่ตรงกับผลิตภัณฑ์และช่วงเวลานี้", - "home.noLeaderboardTitle": "ไม่มีข้อมูลลีดเดอร์บอร์ด", - "home.noLeaderboardDescription": "ไม่มีแถวโมเดลที่ตรงกับผลิตภัณฑ์และช่วงเวลานี้", - "home.productFilter": "ตัวกรองผลิตภัณฑ์", - "home.dateRange": "ช่วงวันที่", - "home.stackedUsageChart": "กราฟซ้อนการใช้งานของโมเดลยอดนิยม", - "home.total": "รวม", - "home.modelUsers": "ผู้ใช้โมเดล", - "home.new": "ใหม่", - "home.uniqueUsersTitle": "ผู้ใช้ไม่ซ้ำ", - "home.uniqueUsersDescription": "ผู้ใช้ OpenCode Go ไม่ซ้ำรายวัน แยกตามโมเดล", - "home.noUserDataTitle": "ไม่มีข้อมูลผู้ใช้", - "home.noUserDataDescription": "ไม่มีแถวโมเดลที่มีข้อมูลผู้ใช้ตรงกับช่วงเวลานี้", - "home.uniqueUsersChart": "กราฟซ้อนผู้ใช้ไม่ซ้ำแยกตามโมเดล", - "home.marketShareTitle": "ส่วนแบ่งตลาด", - "home.marketShareDescription": "เปรียบเทียบส่วนแบ่ง token ตามผู้สร้างโมเดล", - "home.noMarketTitle": "ไม่มีข้อมูลตลาด", - "home.noMarketDescription": "ไม่มีแถวโมเดลที่ตรงกับช่วงเวลานี้", - "home.marketChart": "ส่วนแบ่งตลาดตามผู้สร้างโมเดล", - "home.noData": "ไม่มีข้อมูล", - "home.geoTitle": "แยกตามภูมิศาสตร์", - "home.geoDescription": "token ที่ใช้แยกตามประเทศ", - "home.noGeoTitle": "ไม่มีข้อมูลภูมิศาสตร์", - "home.noGeoDescription": "ไม่มีแถวภูมิศาสตร์ที่ตรงกับช่วงเวลานี้", - "home.worldMap": "แผนที่โลกของการใช้ token แยกตามประเทศ", - "home.geoMapTitle": "แผนที่แยกตามภูมิศาสตร์", - "home.unknown": "ไม่ทราบ", - "home.tokenCostTitle": "ต้นทุน Token", - "home.tokenCostDescription": "ราคาต่อ 1 ล้าน token", - "home.noTokenCostTitle": "ไม่มีข้อมูลต้นทุน token", - "home.noTokenCostDescription": "ไม่มีแถวโมเดลที่มีข้อมูลต้นทุนตรงกับผลิตภัณฑ์นี้", - "home.cacheRatioTitle": "อัตราแคช", - "home.cacheRatioDescription": "สัดส่วน input token ที่ให้บริการจากแคช", - "home.noCacheTitle": "ไม่มีข้อมูลอัตราแคช", - "home.noCacheDescription": "ไม่มีแถวโมเดลที่มี input token ตรงกับผลิตภัณฑ์นี้", - "home.sessionCostTitle": "ต้นทุนเซสชัน", - "home.sessionCostDescription": "ต้นทุนเฉลี่ยต่อเซสชัน", - "home.noSessionCostTitle": "ไม่มีข้อมูลต้นทุนเซสชัน", - "home.noSessionCostDescription": "ไม่มีแถวโมเดลที่มีข้อมูลเซสชันตรงกับผลิตภัณฑ์นี้", - "home.costSession": "ต้นทุน/เซสชัน", - "lab.title": "การใช้งานและอันดับโมเดล AI ของ {{lab}} | ข้อมูล OpenCode", - "lab.description": - "เปรียบเทียบโมเดล {{lab}} ที่ใช้ใน OpenCode Go รวมถึงการใช้ token อันดับโมเดล หน้าต่างบริบท วันที่ปล่อย ต้นทุน และข้อมูลเฉพาะโมเดล", - "lab.loadingTitle": "แล็บโมเดล", - "lab.loadingDescription": "กำลังอ่านความพร้อมของโมเดลและการใช้งาน OpenCode ล่าสุด", - "lab.notFound": "ไม่มีโมเดลที่ตรงกับแล็บนี้", - "lab.heroPrefix": "สำรวจโมเดล {{lab}} จำนวน {{count}} รายการที่ใช้ใน OpenCode", - "lab.heroIncluding": "รวมถึง {{models}}", - "lab.heroSuffix": "เปรียบเทียบการใช้ token ล่าสุด หน้าต่างบริบท วันที่ปล่อย และข้อมูลเฉพาะโมเดล", - "lab.tokensProcessed": "Token ที่ประมวลผลแล้ว", - "lab.pending": "รอดำเนินการ", - "lab.usageAfterActivity": "การใช้งานจะแสดงหลังจากมีกิจกรรมของโมเดลเข้ามา", - "lab.latestRelease": "รุ่นล่าสุด {{date}}", - "lab.shareOfUsage": "{{share}} ของการใช้งาน OpenCode ล่าสุด", - "lab.usageTitle": "การใช้ token ของ {{lab}}", - "lab.usageDescription": "ปริมาณ token รายวันของ OpenCode ในช่วงสองเดือนล่าสุด", - "lab.noUsageTitle": "ยังไม่มีการใช้งาน", - "lab.noUsageDescription": "การใช้ token ล่าสุดจะแสดงที่นี่เมื่อแล็บนี้มีกิจกรรม", - "lab.dailyTokenChart": "กราฟการใช้ token รายวันของ {{lab}}", - "lab.dailyTokens": "token รายวัน", - "lab.tokens": "token", - "lab.modelsTitle": "โมเดล {{lab}}", - "lab.modelsDescription": "รายละเอียดแค็ตตาล็อกและการใช้งานล่าสุด", - "lab.recentUsageAndLimits": "การใช้งานและขีดจำกัดล่าสุด", - "lab.usage": "การใช้งาน", - "lab.share": "ส่วนแบ่ง", - "model.title": "การใช้งาน ต้นทุน และอันดับของ {{model}} | ข้อมูล OpenCode", - "model.description": - "ดูข้อมูลการใช้งาน OpenCode Go ของ {{model}} รวมถึงปริมาณ token อันดับรายสัปดาห์ ส่วนผสม token ต้นทุน อัตราแคช เซสชัน ข้อมูลแยกตามภูมิศาสตร์ และโมเดลใกล้เคียง", - "model.loadingTitle": "ข้อมูลโมเดล", - "model.loadingDescription": "กำลังอ่านข้อมูลสรุปของโมเดล", - "model.loadingProfile": "กำลังอ่านโปรไฟล์โมเดล", - "model.noDataTitle": "ไม่มีข้อมูลโมเดล", - "model.noDataDescription": "ลองเปิดโมเดลจากลีดเดอร์บอร์ด", - "model.noMatched": "ไม่มีข้อเท็จจริงของโมเดลหรือแถวการใช้งานที่ตรงกับ {{id}}", - "model.fallback": "โมเดล", - "model.catalogFallback": - "ข้อเท็จจริงของโมเดลจากดัชนีโมเดลที่ใช้ร่วมกัน การใช้งาน OpenCode Go จะแสดงเมื่อโมเดลนี้มีกิจกรรม", - "model.unranked": "ไม่มีอันดับในการใช้งาน OpenCode Go ของสัปดาห์ที่แล้ว", - "model.ranked": "อันดับ #{{rank}} ในการใช้งาน OpenCode Go ของสัปดาห์ที่แล้ว", - "model.observedVolume": "พร้อม {{share}} ของปริมาณ 2M ที่สังเกตได้", - "model.weights": "น้ำหนักโมเดล: {{label}}", - "model.rank": "อันดับ 7 วัน", - "model.profile": "โปรไฟล์โมเดล", - "model.listed": "อยู่ในรายการ", - "model.noCurrentUsage": "ไม่มีการใช้งาน OpenCode Go ในช่วงข้อมูลปัจจุบัน", - "model.facts": "ข้อเท็จจริงของโมเดล", - "model.context": "บริบท", - "model.output": "เอาต์พุต", - "model.knowledge": "ความรู้", - "model.release": "รุ่น", - "model.inputs": "อินพุต", - "model.overviewDescription": "token ล่าสุดของ OpenCode Go ผู้ใช้ไม่ซ้ำ และตำแหน่งในตลาด", - "model.noSummaryTitle": "ไม่มีสรุปการใช้งาน", - "model.noSummaryDescription": "โมเดลนี้ยังไม่มีแถวการใช้งาน OpenCode Go", - "model.tokens": "Token", - "model.uniqueUsers": "ผู้ใช้ไม่ซ้ำ", - "model.lastTwoMonths": "สองเดือนล่าสุด", - "model.sessions": "เซสชัน", - "model.completedSessions": "เซสชันที่เสร็จสิ้น", - "model.tokenShare": "ส่วนแบ่ง Token", - "model.totalModels": "{{count}} โมเดล", - "model.momentum": "โมเมนตัม", - "model.vsPreviousWindow": "เทียบกับช่วงก่อนหน้า", - "model.usageDescription": "ปริมาณ token รายวันของ OpenCode Go ในช่วงสองเดือนล่าสุด", - "model.noUsageTitle": "ไม่มีการใช้งาน", - "model.noUsageDescription": "ไม่มีการใช้งานในช่วงปัจจุบัน", - "model.dailyTokenChart": "กราฟการใช้ token รายวัน", - "model.usersDescription": "ผู้ใช้ OpenCode Go ไม่ซ้ำรายวันในช่วงสองเดือนล่าสุด", - "model.noUsersTitle": "ไม่มีข้อมูลผู้ใช้", - "model.noUsersDescription": "ไม่มีแถวที่มีข้อมูลผู้ใช้ในช่วงปัจจุบัน", - "model.dailyUserChart": "กราฟผู้ใช้ไม่ซ้ำรายวัน", - "model.efficiencyDescription": "ต้นทุน พฤติกรรมแคช และรูปแบบเซสชัน OpenCode Go โดยเฉลี่ย", - "model.noEfficiencyTitle": "ไม่มีข้อมูลประสิทธิภาพ", - "model.noEfficiencyDescription": "ข้อมูลประสิทธิภาพจะแสดงหลังจากมีการใช้งานเข้ามา", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "ต้นทุน", - "model.totalSpend": "ยอดใช้จ่ายรวม", - "model.costPerMillion": "ต้นทุน / 1 ล้าน", - "model.inputOutput": "อินพุต / เอาต์พุต", - "model.observedTokens": "token ทั้งหมดที่สังเกตได้", - "model.costSession": "ต้นทุน / เซสชัน", - "model.average": "เฉลี่ย", - "model.tokensSession": "Token / เซสชัน", - "model.cacheRatio": "อัตราแคช", - "model.inputTokens": "input token", - "model.geoDescription": "token ของโมเดล OpenCode Go ที่ใช้แยกตามประเทศ", - "model.noGeoTitle": "ไม่มีข้อมูลภูมิศาสตร์", - "model.noGeoDescription": "ไม่มีแถวภูมิศาสตร์ของ OpenCode Go ที่ตรงกับโมเดลนี้", - "model.worldMap": "แผนที่โลกของการใช้ token ของโมเดลแยกตามประเทศ", - "model.peersDescription": "โมเดลใกล้เคียงตามปริมาณ token ล่าสุดของ OpenCode Go", - "model.noPeersTitle": "ไม่มีโมเดลใกล้เคียง", - "model.noPeersDescription": "อันดับโมเดลใกล้เคียงจะแสดงหลังจากมีการใช้งานเข้ามา", - "model.noUsageLastWeek": "ไม่มีการใช้งานเมื่อสัปดาห์ที่แล้ว", - "model.newThisWeek": "ใหม่ในสัปดาห์นี้", - "model.sameAsPreviousWeek": "เท่าเดิมจากสัปดาห์ก่อน", - "model.vsPreviousWeek": "{{change}} เทียบกับสัปดาห์ก่อน", - "model.pdf": "PDF", - "format.users": "ผู้ใช้", - "format.tokens": "token", -} satisfies Record diff --git a/packages/stats/app/src/i18n/tr.ts b/packages/stats/app/src/i18n/tr.ts deleted file mode 100644 index a9961943ea..0000000000 --- a/packages/stats/app/src/i18n/tr.ts +++ /dev/null @@ -1,236 +0,0 @@ -export const dict = { - "app.title": "Yapay Zeka Model Kullanım Sıralamaları | OpenCode Data", - "app.description": - "OpenCode Go kullanımını yapay zeka modelleri genelinde keşfedin: token hacmi, sıralamalar, pazar payı, token fiyatlandırması, oturum maliyeti, önbellek oranı ve coğrafi dağılımlar.", - "app.unfurlAlt": "Koyu desenli arka plan üzerinde OpenCode Data logosu", - "nav.dataHome": "Veri Ana Sayfası", - "nav.topModels": "En İyi Modeller", - "nav.leaderboard": "Sıralama", - "nav.uniqueUsers": "Benzersiz Kullanıcılar", - "nav.sessionCost": "Oturum Maliyeti", - "nav.tokenCost": "Token Maliyeti", - "nav.cacheRatio": "Önbellek Oranı", - "nav.marketShare": "Pazar Payı", - "nav.geoBreakdown": "Coğrafi Dağılım", - "nav.overview": "Genel Bakış", - "nav.usage": "Kullanım", - "nav.users": "Kullanıcılar", - "nav.efficiency": "Verimlilik", - "nav.peers": "Benzerler", - "nav.models": "Modeller", - "header.brandLabel": "Veri ana sayfası", - "header.sectionNavLabel": "Veri bölümleri", - "header.githubAria": "GitHub'da OpenCode'a yıldız ver", - "header.github": "GitHub", - "header.tryOpenCode": "OpenCode'u dene", - "header.openNav": "Gezinmeyi aç", - "header.closeNav": "Gezinmeyi kapat", - "theme.groupLabel": "Tema", - "theme.dark": "Koyu", - "theme.light": "Açık", - "theme.system": "Sistem", - "footer.modelData": "Model Verileri", - "footer.legal": "Yasal", - "footer.connect": "Bağlan", - "footer.newsletter": "Bülten", - "footer.newsletterBody": "Yeni sürümlerden ilk haberdar olun.", - "footer.language": "Dil", - "footer.subscribe": "Abone ol", - "footer.terms": "Hizmet şartları", - "footer.privacy": "Gizlilik politikası", - "footer.contact": "Bize ulaşın", - "footer.community": "Topluluk", - "footer.youtube": "YouTube", - "footer.homeAria": "OpenCode ana sayfası", - "footer.status": "Tüm sistemler çalışıyor", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "DAHA FAZLA BİLGİ", - "modal.closeNewsletter": "Bülten kaydını kapat", - "modal.title": "OpenCode Bülteni", - "modal.body": "Yeni sürümlerden ilk\nhaberdar olun.", - "modal.email": "E-posta adresi", - "modal.subscribe": "Abone ol", - "modal.subscribing": "Abone olunuyor...", - "modal.success": "Abone oldunuz.", - "modal.error": "Abonelik başarısız oldu", - "product.allUsers": "Tüm Kullanıcılar", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1 Gün", - "range.1W": "1 Hafta", - "range.2W": "2 Hafta", - "range.1M": "1 Ay", - "range.2M": "2 Ay", - "chart.daily": "Günlük", - "chart.input": "Girdi", - "chart.output": "Çıktı", - "chart.cached": "Önbellekte", - "chart.uncached": "Önbelleksiz", - "chart.ratio": "Oran", - "chart.model": "Model", - "chart.cacheRatio": "Önbellek Oranı", - "chart.costSession": "Maliyet/Oturum", - "chart.tokensSession": "Token/Oturum", - "chart.costPerSession": "MALİYET / OTURUM", - "chart.tokensPerSession": "TOKEN / OTURUM", - "chart.live": "Canlı", - "chart.percent": "yüzde", - "chart.leaderboardAria": "Model token sıralaması", - "chart.scrollableLeaderboardAria": "Kaydırılabilir model token sıralaması", - "chart.byAuthor": "{{author}} tarafından", - "home.updated": "Güncellendi", - "home.noRows": "Henüz satır yok", - "home.justNow": "az önce", - "home.heroCopy": - "Gerçek kullanımda hangi modellerin öne geçtiğini, karışımın nasıl değiştiğini ve bunun maliyet için ne anlama geldiğini görün.", - "home.loadingTitle": "Veriler yükleniyor", - "home.loadingDescription": "Model toplamları okunuyor.", - "home.usageTitle": "Kullanım", - "home.topModelsDescription": "OpenCode Go genelinde model kullanımı.", - "home.noUsageTitle": "Kullanım verisi yok", - "home.noUsageDescription": "Bu ürün ve aralıkla eşleşen model satırı yok.", - "home.noLeaderboardTitle": "Sıralama verisi yok", - "home.noLeaderboardDescription": "Bu ürün ve aralıkla eşleşen model satırı yok.", - "home.productFilter": "Ürün filtresi", - "home.dateRange": "Tarih aralığı", - "home.stackedUsageChart": "En iyi model kullanımı yığılmış grafiği", - "home.total": "toplam", - "home.modelUsers": "model kullanıcıları", - "home.new": "Yeni", - "home.uniqueUsersTitle": "Benzersiz Kullanıcılar", - "home.uniqueUsersDescription": "Modele göre günlük benzersiz OpenCode Go kullanıcıları.", - "home.noUserDataTitle": "Kullanıcı verisi yok", - "home.noUserDataDescription": "Bu pencereyle eşleşen kullanıcı içeren model satırı yok.", - "home.uniqueUsersChart": "Modele göre yığılmış benzersiz kullanıcı grafiği", - "home.marketShareTitle": "Pazar Payı", - "home.marketShareDescription": "Model yazarına göre token payını karşılaştırın.", - "home.noMarketTitle": "Pazar verisi yok", - "home.noMarketDescription": "Bu aralıkla eşleşen model satırı yok.", - "home.marketChart": "Model yazarına göre pazar payı", - "home.noData": "Veri yok", - "home.geoTitle": "Coğrafi Dağılım", - "home.geoDescription": "Ülkeye göre kullanılan tokenlar.", - "home.noGeoTitle": "Coğrafi veri yok", - "home.noGeoDescription": "Bu aralıkla eşleşen coğrafi satır yok.", - "home.worldMap": "Ülkeye göre token kullanımının dünya haritası", - "home.geoMapTitle": "Coğrafi Dağılım haritası", - "home.unknown": "Bilinmiyor", - "home.tokenCostTitle": "Token Maliyeti", - "home.tokenCostDescription": "1 milyon token başına fiyat.", - "home.noTokenCostTitle": "Token maliyeti verisi yok", - "home.noTokenCostDescription": "Bu ürünle eşleşen maliyet içeren model satırı yok.", - "home.cacheRatioTitle": "Önbellek Oranı", - "home.cacheRatioDescription": "Önbellekten karşılanan giriş tokenlarının payı.", - "home.noCacheTitle": "Önbellek oranı verisi yok", - "home.noCacheDescription": "Bu ürünle eşleşen giriş tokenı içeren model satırı yok.", - "home.sessionCostTitle": "Oturum Maliyeti", - "home.sessionCostDescription": "Oturum başına ortalama maliyet.", - "home.noSessionCostTitle": "Oturum maliyeti verisi yok", - "home.noSessionCostDescription": "Bu ürünle eşleşen oturum içeren model satırı yok.", - "home.costSession": "Maliyet/Oturum", - "lab.title": "{{lab}} Yapay Zeka Model Kullanımı ve Sıralamaları | OpenCode Data", - "lab.description": - "OpenCode Go'da kullanılan {{lab}} modellerini karşılaştırın: token kullanımı, model sıralamaları, bağlam pencereleri, yayın tarihleri, maliyetler ve modele özel veriler.", - "lab.loadingTitle": "Model Laboratuvarı", - "lab.loadingDescription": "Model kullanılabilirliği ve son OpenCode kullanımı okunuyor.", - "lab.notFound": "Bu laboratuvarla eşleşen model yok.", - "lab.heroPrefix": "OpenCode'da kullanılan {{count}} {{lab}} modelini keşfedin", - "lab.heroIncluding": "{{models}} dahil", - "lab.heroSuffix": - "Son token kullanımını, bağlam pencerelerini, yayın tarihlerini ve modele özel verileri karşılaştırın.", - "lab.tokensProcessed": "İşlenen Tokenlar", - "lab.pending": "Beklemede", - "lab.usageAfterActivity": "Kullanım, model etkinliği ulaştıktan sonra görünür", - "lab.latestRelease": "Son yayın {{date}}", - "lab.shareOfUsage": "Son OpenCode kullanımının {{share}} kadarı", - "lab.usageTitle": "{{lab}} token kullanımı", - "lab.usageDescription": "Son iki ayda günlük OpenCode token hacmi.", - "lab.noUsageTitle": "Henüz kullanım yok", - "lab.noUsageDescription": "Bu laboratuvarda etkinlik olduğunda son token kullanımı burada görünür.", - "lab.dailyTokenChart": "{{lab}} günlük token kullanım grafiği", - "lab.dailyTokens": "Günlük tokenlar", - "lab.tokens": "token", - "lab.modelsTitle": "{{lab}} modelleri", - "lab.modelsDescription": "Katalog ayrıntıları ve son kullanım.", - "lab.recentUsageAndLimits": "Son kullanım ve sınırlar.", - "lab.usage": "Kullanım", - "lab.share": "Pay", - "model.title": "{{model}} Kullanımı, Maliyeti ve Sırası | OpenCode Data", - "model.description": - "{{model}} için OpenCode Go kullanım verilerini görüntüleyin: token hacmi, haftalık sıra, token karışımı, maliyetler, önbellek oranı, oturumlar, coğrafi dağılımlar ve benzer modeller.", - "model.loadingTitle": "Model Verileri", - "model.loadingDescription": "Model toplamları okunuyor.", - "model.loadingProfile": "Model profili okunuyor.", - "model.noDataTitle": "Model verisi yok", - "model.noDataDescription": "Sıralamadan bir model açmayı deneyin.", - "model.noMatched": "{{id}} ile eşleşen model bilgisi veya kullanım satırı yok.", - "model.fallback": "Model", - "model.catalogFallback": - "Paylaşılan model dizininden model bilgileri. Bu modelde etkinlik olduğunda OpenCode Go kullanımı görünür.", - "model.unranked": "Geçen haftaki OpenCode Go kullanımında sıralanmamış", - "model.ranked": "Geçen haftaki OpenCode Go kullanımında #{{rank}} sırada", - "model.observedVolume": "gözlemlenen 2M hacmin {{share}} payıyla.", - "model.weights": "Model ağırlıkları: {{label}}", - "model.rank": "7G Sıra", - "model.profile": "Model Profili", - "model.listed": "Listelendi", - "model.noCurrentUsage": "Geçerli veri penceresinde OpenCode Go kullanımı yok.", - "model.facts": "Model bilgileri", - "model.context": "Bağlam", - "model.output": "Çıktı", - "model.knowledge": "Bilgi", - "model.release": "Yayın", - "model.inputs": "Girdiler", - "model.overviewDescription": "Son OpenCode Go tokenları, benzersiz kullanıcılar ve pazar konumu.", - "model.noSummaryTitle": "Kullanım özeti yok", - "model.noSummaryDescription": "Bu modelde henüz OpenCode Go kullanım satırı yok.", - "model.tokens": "Tokenlar", - "model.uniqueUsers": "Benzersiz Kullanıcılar", - "model.lastTwoMonths": "son iki ay", - "model.sessions": "Oturumlar", - "model.completedSessions": "tamamlanan oturumlar", - "model.tokenShare": "Token Payı", - "model.totalModels": "{{count}} model", - "model.momentum": "İvme", - "model.vsPreviousWindow": "önceki pencereye göre", - "model.usageDescription": "Son iki aylık pencerede günlük OpenCode Go token hacmi.", - "model.noUsageTitle": "Kullanım yok", - "model.noUsageDescription": "Geçerli pencereye kullanım gelmedi.", - "model.dailyTokenChart": "Günlük token kullanım grafiği", - "model.usersDescription": "Son iki aylık pencerede günlük benzersiz OpenCode Go kullanıcıları.", - "model.noUsersTitle": "Kullanıcı verisi yok", - "model.noUsersDescription": "Geçerli pencereye kullanıcı içeren satır gelmedi.", - "model.dailyUserChart": "Günlük benzersiz kullanıcı grafiği", - "model.efficiencyDescription": "Maliyet, önbellek davranışı ve ortalama OpenCode Go oturum yapısı.", - "model.noEfficiencyTitle": "Verimlilik verisi yok", - "model.noEfficiencyDescription": "Verimlilik verileri kullanım geldikten sonra görünür.", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "Maliyet", - "model.totalSpend": "toplam harcama", - "model.costPerMillion": "Maliyet / 1M", - "model.inputOutput": "girdi / çıktı", - "model.observedTokens": "gözlemlenen tüm tokenlar", - "model.costSession": "Maliyet / Oturum", - "model.average": "ortalama", - "model.tokensSession": "Token / Oturum", - "model.cacheRatio": "Önbellek Oranı", - "model.inputTokens": "giriş tokenları", - "model.geoDescription": "Ülkeye göre kullanılan OpenCode Go model tokenları.", - "model.noGeoTitle": "Coğrafi veri yok", - "model.noGeoDescription": "Bu modelle eşleşen OpenCode Go coğrafi satırı yok.", - "model.worldMap": "Ülkeye göre model token kullanımının dünya haritası", - "model.peersDescription": "Son OpenCode Go token hacmine göre yakındaki modeller.", - "model.noPeersTitle": "Benzer yok", - "model.noPeersDescription": "Benzer model sıralamaları kullanım geldikten sonra görünür.", - "model.noUsageLastWeek": "Geçen hafta kullanım yok", - "model.newThisWeek": "Bu hafta yeni", - "model.sameAsPreviousWeek": "Önceki haftayla aynı", - "model.vsPreviousWeek": "önceki haftaya göre {{change}}", - "model.pdf": "PDF", - "format.users": "kullanıcı", - "format.tokens": "token", -} as const diff --git a/packages/stats/app/src/i18n/uk.ts b/packages/stats/app/src/i18n/uk.ts deleted file mode 100644 index 99d53acf92..0000000000 --- a/packages/stats/app/src/i18n/uk.ts +++ /dev/null @@ -1,236 +0,0 @@ -export const dict = { - "app.title": "Рейтинги використання моделей ШІ | OpenCode Data", - "app.description": - "Досліджуйте використання OpenCode Go серед моделей ШІ, зокрема обсяг токенів, рейтинги, частку ринку, ціни токенів, вартість сеансу, частку кешу та географічні розрізи.", - "app.unfurlAlt": "Словесний знак OpenCode Data на темному візерунковому тлі", - "nav.dataHome": "Головна даних", - "nav.topModels": "Найкращі моделі", - "nav.leaderboard": "Рейтинг", - "nav.uniqueUsers": "Унікальні користувачі", - "nav.sessionCost": "Вартість сеансу", - "nav.tokenCost": "Вартість токенів", - "nav.cacheRatio": "Частка кешу", - "nav.marketShare": "Частка ринку", - "nav.geoBreakdown": "Географічний розріз", - "nav.overview": "Огляд", - "nav.usage": "Використання", - "nav.users": "Користувачі", - "nav.efficiency": "Ефективність", - "nav.peers": "Схожі моделі", - "nav.models": "Моделі", - "header.brandLabel": "Головна даних", - "header.sectionNavLabel": "Розділи даних", - "header.githubAria": "Поставити зірку OpenCode на GitHub", - "header.github": "GitHub", - "header.tryOpenCode": "Спробувати OpenCode", - "header.openNav": "Відкрити навігацію", - "header.closeNav": "Закрити навігацію", - "theme.groupLabel": "Тема", - "theme.dark": "Темна", - "theme.light": "Світла", - "theme.system": "Системна", - "footer.modelData": "Дані моделей", - "footer.legal": "Правова інформація", - "footer.connect": "Зв'язок", - "footer.newsletter": "Розсилка", - "footer.newsletterBody": "Дізнавайтеся про нові релізи першими.", - "footer.language": "Мова", - "footer.subscribe": "Підписатися", - "footer.terms": "Умови обслуговування", - "footer.privacy": "Політика конфіденційності", - "footer.contact": "Зв'яжіться з нами", - "footer.community": "Спільнота", - "footer.youtube": "YouTube", - "footer.homeAria": "Головна OpenCode", - "footer.status": "Усі системи працюють", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "ДІЗНАТИСЯ БІЛЬШЕ", - "modal.closeNewsletter": "Закрити форму підписки", - "modal.title": "Розсилка OpenCode", - "modal.body": "Дізнавайтеся першими\nпро нові релізи.", - "modal.email": "Адреса електронної пошти", - "modal.subscribe": "Підписатися", - "modal.subscribing": "Оформлюємо підписку...", - "modal.success": "Ви підписалися.", - "modal.error": "Не вдалося підписатися", - "product.allUsers": "Усі користувачі", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1 день", - "range.1W": "1 тиждень", - "range.2W": "2 тижні", - "range.1M": "1 місяць", - "range.2M": "2 місяці", - "chart.daily": "Щоденно", - "chart.input": "Вхід", - "chart.output": "Вихід", - "chart.cached": "З кешу", - "chart.uncached": "Без кешу", - "chart.ratio": "Співвідношення", - "chart.model": "Модель", - "chart.cacheRatio": "Частка кешу", - "chart.costSession": "Вартість/сеанс", - "chart.tokensSession": "Токени/сеанс", - "chart.costPerSession": "ВАРТІСТЬ / СЕАНС", - "chart.tokensPerSession": "ТОКЕНИ / СЕАНС", - "chart.live": "Наживо", - "chart.percent": "відсоток", - "chart.leaderboardAria": "Рейтинг моделей за токенами", - "chart.scrollableLeaderboardAria": "Прокручуваний рейтинг моделей за токенами", - "chart.byAuthor": "автор: {{author}}", - "home.updated": "Оновлено", - "home.noRows": "Рядків поки немає", - "home.justNow": "щойно", - "home.heroCopy": - "Подивіться, які моделі перемагають у реальному використанні, як змінюється мікс і що це означає для вартості.", - "home.loadingTitle": "Завантаження даних", - "home.loadingDescription": "Читаємо агрегати моделей.", - "home.usageTitle": "Використання", - "home.topModelsDescription": "Використання моделей в OpenCode Go.", - "home.noUsageTitle": "Немає даних використання", - "home.noUsageDescription": "Жодні рядки моделей не відповідали цьому продукту й діапазону.", - "home.noLeaderboardTitle": "Немає даних рейтингу", - "home.noLeaderboardDescription": "Жодні рядки моделей не відповідали цьому продукту й діапазону.", - "home.productFilter": "Фільтр продукту", - "home.dateRange": "Діапазон дат", - "home.stackedUsageChart": "Складена діаграма використання найкращих моделей", - "home.total": "усього", - "home.modelUsers": "користувачі моделі", - "home.new": "Нова", - "home.uniqueUsersTitle": "Унікальні користувачі", - "home.uniqueUsersDescription": "Щоденні унікальні користувачі OpenCode Go за моделлю.", - "home.noUserDataTitle": "Немає даних користувачів", - "home.noUserDataDescription": "Жодні рядки моделей із користувачами не відповідали цьому вікну.", - "home.uniqueUsersChart": "Складена діаграма унікальних користувачів за моделлю", - "home.marketShareTitle": "Частка ринку", - "home.marketShareDescription": "Порівняйте частку токенів за автором моделі.", - "home.noMarketTitle": "Немає ринкових даних", - "home.noMarketDescription": "Жодні рядки моделей не відповідали цьому діапазону.", - "home.marketChart": "Частка ринку за автором моделі", - "home.noData": "Немає даних", - "home.geoTitle": "Географічний розріз", - "home.geoDescription": "Токени, використані за країнами.", - "home.noGeoTitle": "Немає геоданих", - "home.noGeoDescription": "Жодні географічні рядки не відповідали цьому діапазону.", - "home.worldMap": "Карта світу використання токенів за країнами", - "home.geoMapTitle": "Карта географічного розрізу", - "home.unknown": "Невідомо", - "home.tokenCostTitle": "Вартість токенів", - "home.tokenCostDescription": "Ціна за 1 млн токенів.", - "home.noTokenCostTitle": "Немає даних вартості токенів", - "home.noTokenCostDescription": "Жодні рядки моделей із вартістю не відповідали цьому продукту.", - "home.cacheRatioTitle": "Частка кешу", - "home.cacheRatioDescription": "Частка вхідних токенів, обслужених із кешу.", - "home.noCacheTitle": "Немає даних частки кешу", - "home.noCacheDescription": "Жодні рядки моделей із вхідними токенами не відповідали цьому продукту.", - "home.sessionCostTitle": "Вартість сеансу", - "home.sessionCostDescription": "Середня вартість за сеанс.", - "home.noSessionCostTitle": "Немає даних вартості сеансу", - "home.noSessionCostDescription": "Жодні рядки моделей із сеансами не відповідали цьому продукту.", - "home.costSession": "Вартість/сеанс", - "lab.title": "Використання та рейтинги моделей ШІ {{lab}} | OpenCode Data", - "lab.description": - "Порівняйте моделі {{lab}}, які використовуються в OpenCode Go, зокрема використання токенів, рейтинги моделей, контекстні вікна, дати релізів, вартість і дані конкретних моделей.", - "lab.loadingTitle": "Лабораторія моделей", - "lab.loadingDescription": "Читаємо доступність моделей і нещодавнє використання OpenCode.", - "lab.notFound": "Жодна модель не відповідала цій лабораторії.", - "lab.heroPrefix": "Досліджуйте {{count}} моделей {{lab}}, що використовуються в OpenCode", - "lab.heroIncluding": "зокрема {{models}}", - "lab.heroSuffix": - "Порівняйте нещодавнє використання токенів, контекстні вікна, дати релізів і дані конкретних моделей.", - "lab.tokensProcessed": "Оброблені токени", - "lab.pending": "Очікується", - "lab.usageAfterActivity": "Використання з'явиться після активності моделі", - "lab.latestRelease": "Останній реліз {{date}}", - "lab.shareOfUsage": "{{share}} нещодавнього використання OpenCode", - "lab.usageTitle": "Використання токенів {{lab}}", - "lab.usageDescription": "Щоденний обсяг токенів OpenCode за останні два місяці.", - "lab.noUsageTitle": "Використання поки немає", - "lab.noUsageDescription": "Нещодавнє використання токенів з'явиться тут, коли ця лабораторія матиме активність.", - "lab.dailyTokenChart": "Щоденна діаграма використання токенів {{lab}}", - "lab.dailyTokens": "Щоденні токени", - "lab.tokens": "токени", - "lab.modelsTitle": "Моделі {{lab}}", - "lab.modelsDescription": "Деталі каталогу плюс нещодавнє використання.", - "lab.recentUsageAndLimits": "Нещодавнє використання та ліміти.", - "lab.usage": "Використання", - "lab.share": "Частка", - "model.title": "Використання, вартість і ранг {{model}} | OpenCode Data", - "model.description": - "Перегляньте дані використання {{model}} в OpenCode Go, зокрема обсяг токенів, тижневий ранг, мікс токенів, вартість, частку кешу, сеанси, географічні розрізи та схожі моделі.", - "model.loadingTitle": "Дані моделі", - "model.loadingDescription": "Читаємо агрегати моделі.", - "model.loadingProfile": "Читаємо профіль моделі.", - "model.noDataTitle": "Немає даних моделі", - "model.noDataDescription": "Спробуйте відкрити модель із рейтингу.", - "model.noMatched": "Жодні факти моделі або рядки використання не відповідали {{id}}.", - "model.fallback": "Модель", - "model.catalogFallback": - "Факти моделі зі спільного індексу моделей. Використання OpenCode Go з'явиться, коли ця модель матиме активність.", - "model.unranked": "Без рейтингу у використанні OpenCode Go за минулий тиждень", - "model.ranked": "Ранг #{{rank}} у використанні OpenCode Go за минулий тиждень", - "model.observedVolume": "з {{share}} спостережуваного обсягу 2M.", - "model.weights": "Ваги моделі: {{label}}", - "model.rank": "Ранг за 7 дн.", - "model.profile": "Профіль моделі", - "model.listed": "У каталозі", - "model.noCurrentUsage": "Немає використання OpenCode Go в поточному вікні даних.", - "model.facts": "Факти моделі", - "model.context": "Контекст", - "model.output": "Вихід", - "model.knowledge": "Знання", - "model.release": "Реліз", - "model.inputs": "Входи", - "model.overviewDescription": "Нещодавні токени OpenCode Go, унікальні користувачі та ринкова позиція.", - "model.noSummaryTitle": "Немає підсумку використання", - "model.noSummaryDescription": "Ця модель ще не має рядків використання OpenCode Go.", - "model.tokens": "Токени", - "model.uniqueUsers": "Унікальні користувачі", - "model.lastTwoMonths": "останні два місяці", - "model.sessions": "Сеанси", - "model.completedSessions": "завершені сеанси", - "model.tokenShare": "Частка токенів", - "model.totalModels": "{{count}} моделей", - "model.momentum": "Динаміка", - "model.vsPreviousWindow": "до попереднього вікна", - "model.usageDescription": "Щоденний обсяг токенів OpenCode Go за нещодавнє двомісячне вікно.", - "model.noUsageTitle": "Немає використання", - "model.noUsageDescription": "У поточному вікні використання не з'явилося.", - "model.dailyTokenChart": "Щоденна діаграма використання токенів", - "model.usersDescription": "Щоденні унікальні користувачі OpenCode Go за нещодавнє двомісячне вікно.", - "model.noUsersTitle": "Немає даних користувачів", - "model.noUsersDescription": "У поточному вікні немає рядків із користувачами.", - "model.dailyUserChart": "Щоденна діаграма унікальних користувачів", - "model.efficiencyDescription": "Вартість, поведінка кешу та середня форма сеансу OpenCode Go.", - "model.noEfficiencyTitle": "Немає даних ефективності", - "model.noEfficiencyDescription": "Дані ефективності з'являться після використання.", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "Вартість", - "model.totalSpend": "загальні витрати", - "model.costPerMillion": "Вартість / 1 млн", - "model.inputOutput": "вхід / вихід", - "model.observedTokens": "усі спостережувані токени", - "model.costSession": "Вартість / сеанс", - "model.average": "у середньому", - "model.tokensSession": "Токени / сеанс", - "model.cacheRatio": "Частка кешу", - "model.inputTokens": "вхідні токени", - "model.geoDescription": "Токени моделі OpenCode Go, використані за країнами.", - "model.noGeoTitle": "Немає геоданих", - "model.noGeoDescription": "Жодні географічні рядки OpenCode Go не відповідали цій моделі.", - "model.worldMap": "Карта світу використання токенів моделі за країнами", - "model.peersDescription": "Близькі моделі за нещодавнім обсягом токенів OpenCode Go.", - "model.noPeersTitle": "Немає схожих моделей", - "model.noPeersDescription": "Рейтинги схожих моделей з'являться після використання.", - "model.noUsageLastWeek": "Немає використання минулого тижня", - "model.newThisWeek": "Нова цього тижня", - "model.sameAsPreviousWeek": "Без змін відносно попереднього тижня", - "model.vsPreviousWeek": "{{change}} до попереднього тижня", - "model.pdf": "PDF", - "format.users": "користувачі", - "format.tokens": "токени", -} as const diff --git a/packages/stats/app/src/i18n/zh.ts b/packages/stats/app/src/i18n/zh.ts deleted file mode 100644 index 7ff477c97f..0000000000 --- a/packages/stats/app/src/i18n/zh.ts +++ /dev/null @@ -1,235 +0,0 @@ -import type { Key } from "../i18n" - -export const dict = { - "app.title": "AI 模型使用排名 | OpenCode 数据", - "app.description": - "探索 OpenCode Go 在各 AI 模型上的使用情况,包括 token 用量、排名、市场份额、token 价格、会话成本、缓存比例和地理分布。", - "app.unfurlAlt": "深色纹理背景上的 OpenCode Data 字标", - "nav.dataHome": "数据首页", - "nav.topModels": "热门模型", - "nav.leaderboard": "排行榜", - "nav.uniqueUsers": "独立用户", - "nav.sessionCost": "会话成本", - "nav.tokenCost": "Token 成本", - "nav.cacheRatio": "缓存比例", - "nav.marketShare": "市场份额", - "nav.geoBreakdown": "地理分布", - "nav.overview": "概览", - "nav.usage": "用量", - "nav.users": "用户", - "nav.efficiency": "效率", - "nav.peers": "同类模型", - "nav.models": "模型", - "header.brandLabel": "数据首页", - "header.sectionNavLabel": "数据分区", - "header.githubAria": "在 GitHub 上为 OpenCode 加星", - "header.github": "GitHub", - "header.tryOpenCode": "试用 OpenCode", - "header.openNav": "打开导航", - "header.closeNav": "关闭导航", - "theme.groupLabel": "主题", - "theme.dark": "深色", - "theme.light": "浅色", - "theme.system": "跟随系统", - "footer.modelData": "模型数据", - "footer.legal": "法律", - "footer.connect": "联系", - "footer.newsletter": "新闻通讯", - "footer.newsletterBody": "第一时间了解新版本发布。", - "footer.language": "语言", - "footer.subscribe": "订阅", - "footer.terms": "服务条款", - "footer.privacy": "隐私政策", - "footer.contact": "联系我们", - "footer.community": "社区", - "footer.youtube": "YouTube", - "footer.homeAria": "OpenCode 首页", - "footer.status": "所有系统运行正常", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "了解更多", - "modal.closeNewsletter": "关闭新闻通讯注册", - "modal.title": "OpenCode 新闻通讯", - "modal.body": "第一时间了解\n新版本发布。", - "modal.email": "电子邮箱地址", - "modal.subscribe": "订阅", - "modal.subscribing": "正在订阅...", - "modal.success": "你已订阅。", - "modal.error": "订阅失败", - "product.allUsers": "所有用户", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1 天", - "range.1W": "1 周", - "range.2W": "2 周", - "range.1M": "1 个月", - "range.2M": "2 个月", - "chart.daily": "每日", - "chart.input": "输入", - "chart.output": "输出", - "chart.cached": "已缓存", - "chart.uncached": "未缓存", - "chart.ratio": "比例", - "chart.model": "模型", - "chart.cacheRatio": "缓存比例", - "chart.costSession": "成本/会话", - "chart.tokensSession": "Token/会话", - "chart.costPerSession": "成本 / 会话", - "chart.tokensPerSession": "Token / 会话", - "chart.live": "实时", - "chart.percent": "百分比", - "chart.leaderboardAria": "模型 token 排行榜", - "chart.scrollableLeaderboardAria": "可滚动的模型 token 排行榜", - "chart.byAuthor": "作者:{{author}}", - "home.updated": "已更新", - "home.noRows": "暂无数据行", - "home.justNow": "刚刚", - "home.heroCopy": "查看哪些模型正在赢得真实使用量、使用组合如何变化,以及这对成本意味着什么。", - "home.loadingTitle": "正在加载数据", - "home.loadingDescription": "正在读取模型汇总。", - "home.usageTitle": "用量", - "home.topModelsDescription": "OpenCode Go 中各模型的使用情况。", - "home.noUsageTitle": "无使用数据", - "home.noUsageDescription": "没有符合该产品和时间范围的模型行。", - "home.noLeaderboardTitle": "无排行榜数据", - "home.noLeaderboardDescription": "没有符合该产品和时间范围的模型行。", - "home.productFilter": "产品筛选", - "home.dateRange": "日期范围", - "home.stackedUsageChart": "热门模型用量堆叠图", - "home.total": "总计", - "home.modelUsers": "模型用户", - "home.new": "新", - "home.uniqueUsersTitle": "独立用户", - "home.uniqueUsersDescription": "按模型显示的每日 OpenCode Go 独立用户。", - "home.noUserDataTitle": "无用户数据", - "home.noUserDataDescription": "没有符合该窗口且包含用户的模型行。", - "home.uniqueUsersChart": "按模型显示的独立用户堆叠图", - "home.marketShareTitle": "市场份额", - "home.marketShareDescription": "按模型作者比较 token 份额。", - "home.noMarketTitle": "无市场数据", - "home.noMarketDescription": "没有符合该时间范围的模型行。", - "home.marketChart": "按模型作者显示的市场份额", - "home.noData": "无数据", - "home.geoTitle": "地理分布", - "home.geoDescription": "按国家/地区统计的 token 使用量。", - "home.noGeoTitle": "无地理数据", - "home.noGeoDescription": "没有符合该时间范围的地理行。", - "home.worldMap": "按国家/地区显示 token 使用量的世界地图", - "home.geoMapTitle": "地理分布地图", - "home.unknown": "未知", - "home.tokenCostTitle": "Token 成本", - "home.tokenCostDescription": "每 100 万 token 的价格。", - "home.noTokenCostTitle": "无 token 成本数据", - "home.noTokenCostDescription": "没有符合该产品且包含成本的模型行。", - "home.cacheRatioTitle": "缓存比例", - "home.cacheRatioDescription": "从缓存提供的输入 token 占比。", - "home.noCacheTitle": "无缓存比例数据", - "home.noCacheDescription": "没有符合该产品且包含输入 token 的模型行。", - "home.sessionCostTitle": "会话成本", - "home.sessionCostDescription": "每次会话的平均成本。", - "home.noSessionCostTitle": "无会话成本数据", - "home.noSessionCostDescription": "没有符合该产品且包含会话的模型行。", - "home.costSession": "成本/会话", - "lab.title": "{{lab}} AI 模型使用量与排名 | OpenCode 数据", - "lab.description": - "比较在 OpenCode Go 中使用的 {{lab}} 模型,包括 token 用量、模型排名、上下文窗口、发布日期、成本和模型专属数据。", - "lab.loadingTitle": "模型实验室", - "lab.loadingDescription": "正在读取模型可用性和近期 OpenCode 使用情况。", - "lab.notFound": "没有匹配此实验室的模型。", - "lab.heroPrefix": "探索 OpenCode 中使用的 {{count}} 个 {{lab}} 模型", - "lab.heroIncluding": "包括 {{models}}", - "lab.heroSuffix": "比较近期 token 用量、上下文窗口、发布日期和模型专属数据。", - "lab.tokensProcessed": "已处理 Token", - "lab.pending": "待定", - "lab.usageAfterActivity": "模型活动到达后会显示使用量", - "lab.latestRelease": "最新发布 {{date}}", - "lab.shareOfUsage": "占近期 OpenCode 使用量的 {{share}}", - "lab.usageTitle": "{{lab}} token 用量", - "lab.usageDescription": "过去两个月的每日 OpenCode token 用量。", - "lab.noUsageTitle": "暂无使用量", - "lab.noUsageDescription": "此实验室有活动后,近期 token 用量会显示在这里。", - "lab.dailyTokenChart": "{{lab}} 每日 token 用量图", - "lab.dailyTokens": "每日 token", - "lab.tokens": "token", - "lab.modelsTitle": "{{lab}} 模型", - "lab.modelsDescription": "目录详情与近期使用量。", - "lab.recentUsageAndLimits": "近期使用量和限制。", - "lab.usage": "用量", - "lab.share": "份额", - "model.title": "{{model}} 使用量、成本与排名 | OpenCode 数据", - "model.description": - "查看 {{model}} 的 OpenCode Go 使用数据,包括 token 用量、周排名、token 组合、成本、缓存比例、会话、地理分布和同类模型。", - "model.loadingTitle": "模型数据", - "model.loadingDescription": "正在读取模型汇总。", - "model.loadingProfile": "正在读取模型档案。", - "model.noDataTitle": "无模型数据", - "model.noDataDescription": "请尝试从排行榜打开一个模型。", - "model.noMatched": "没有匹配 {{id}} 的模型事实或使用行。", - "model.fallback": "模型", - "model.catalogFallback": "来自共享模型索引的模型事实。此模型产生活动后会显示 OpenCode Go 使用量。", - "model.unranked": "未进入上周 OpenCode Go 使用量排名", - "model.ranked": "在上周 OpenCode Go 使用量中排名 #{{rank}}", - "model.observedVolume": "占观测到的 2M 用量的 {{share}}。", - "model.weights": "模型权重:{{label}}", - "model.rank": "7 日排名", - "model.profile": "模型档案", - "model.listed": "已列出", - "model.noCurrentUsage": "当前数据窗口中没有 OpenCode Go 使用量。", - "model.facts": "模型事实", - "model.context": "上下文", - "model.output": "输出", - "model.knowledge": "知识", - "model.release": "发布", - "model.inputs": "输入", - "model.overviewDescription": "近期 OpenCode Go token、独立用户和市场位置。", - "model.noSummaryTitle": "无使用摘要", - "model.noSummaryDescription": "此模型尚无 OpenCode Go 使用行。", - "model.tokens": "Token", - "model.uniqueUsers": "独立用户", - "model.lastTwoMonths": "过去两个月", - "model.sessions": "会话", - "model.completedSessions": "已完成会话", - "model.tokenShare": "Token 份额", - "model.totalModels": "{{count}} 个模型", - "model.momentum": "趋势", - "model.vsPreviousWindow": "相较上一窗口", - "model.usageDescription": "近期两个月窗口内的每日 OpenCode Go token 用量。", - "model.noUsageTitle": "无使用量", - "model.noUsageDescription": "当前窗口中没有使用量。", - "model.dailyTokenChart": "每日 token 用量图", - "model.usersDescription": "近期两个月窗口内的每日 OpenCode Go 独立用户。", - "model.noUsersTitle": "无用户数据", - "model.noUsersDescription": "当前窗口中没有包含用户的行。", - "model.dailyUserChart": "每日独立用户图", - "model.efficiencyDescription": "成本、缓存行为和平均 OpenCode Go 会话形态。", - "model.noEfficiencyTitle": "无效率数据", - "model.noEfficiencyDescription": "使用量到达后会显示效率数据。", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "成本", - "model.totalSpend": "总支出", - "model.costPerMillion": "每 100 万成本", - "model.inputOutput": "输入 / 输出", - "model.observedTokens": "观测到的全部 token", - "model.costSession": "成本 / 会话", - "model.average": "平均", - "model.tokensSession": "Token / 会话", - "model.cacheRatio": "缓存比例", - "model.inputTokens": "输入 token", - "model.geoDescription": "按国家/地区统计的 OpenCode Go 模型 token 使用量。", - "model.noGeoTitle": "无地理数据", - "model.noGeoDescription": "没有符合此模型的 OpenCode Go 地理行。", - "model.worldMap": "按国家/地区显示模型 token 使用量的世界地图", - "model.peersDescription": "按近期 OpenCode Go token 用量排列的相近模型。", - "model.noPeersTitle": "无同类模型", - "model.noPeersDescription": "使用量到达后会显示同类模型排名。", - "model.noUsageLastWeek": "上周无使用量", - "model.newThisWeek": "本周新增", - "model.sameAsPreviousWeek": "与上周相同", - "model.vsPreviousWeek": "较上周 {{change}}", - "model.pdf": "PDF", - "format.users": "用户", - "format.tokens": "token", -} satisfies Record diff --git a/packages/stats/app/src/i18n/zht.ts b/packages/stats/app/src/i18n/zht.ts deleted file mode 100644 index dca9ade4db..0000000000 --- a/packages/stats/app/src/i18n/zht.ts +++ /dev/null @@ -1,235 +0,0 @@ -import type { Key } from "../i18n" - -export const dict = { - "app.title": "AI 模型使用排名 | OpenCode 數據", - "app.description": - "探索 OpenCode Go 在各 AI 模型上的使用情況,包括 token 用量、排名、市場佔有率、token 價格、工作階段成本、快取比例和地理分布。", - "app.unfurlAlt": "深色紋理背景上的 OpenCode Data 字標", - "nav.dataHome": "數據首頁", - "nav.topModels": "熱門模型", - "nav.leaderboard": "排行榜", - "nav.uniqueUsers": "不重複使用者", - "nav.sessionCost": "工作階段成本", - "nav.tokenCost": "Token 成本", - "nav.cacheRatio": "快取比例", - "nav.marketShare": "市場佔有率", - "nav.geoBreakdown": "地理分布", - "nav.overview": "總覽", - "nav.usage": "用量", - "nav.users": "使用者", - "nav.efficiency": "效率", - "nav.peers": "同類模型", - "nav.models": "模型", - "header.brandLabel": "數據首頁", - "header.sectionNavLabel": "數據分區", - "header.githubAria": "在 GitHub 上為 OpenCode 加星", - "header.github": "GitHub", - "header.tryOpenCode": "試用 OpenCode", - "header.openNav": "開啟導覽", - "header.closeNav": "關閉導覽", - "theme.groupLabel": "主題", - "theme.dark": "深色", - "theme.light": "淺色", - "theme.system": "跟隨系統", - "footer.modelData": "模型數據", - "footer.legal": "法律", - "footer.connect": "聯絡", - "footer.newsletter": "電子報", - "footer.newsletterBody": "第一時間了解新版本發布。", - "footer.language": "語言", - "footer.subscribe": "訂閱", - "footer.terms": "服務條款", - "footer.privacy": "隱私權政策", - "footer.contact": "聯絡我們", - "footer.community": "社群", - "footer.youtube": "YouTube", - "footer.homeAria": "OpenCode 首頁", - "footer.status": "所有系統運作正常", - "footer.copyright": "© 2026 Anomaly Innovations Inc.", - "bridge.learnMore": "了解更多", - "modal.closeNewsletter": "關閉電子報註冊", - "modal.title": "OpenCode 電子報", - "modal.body": "第一時間了解\n新版本發布。", - "modal.email": "電子郵件地址", - "modal.subscribe": "訂閱", - "modal.subscribing": "正在訂閱...", - "modal.success": "你已訂閱。", - "modal.error": "訂閱失敗", - "product.allUsers": "所有使用者", - "product.zen": "Zen", - "product.go": "Go", - "range.1D": "1 天", - "range.1W": "1 週", - "range.2W": "2 週", - "range.1M": "1 個月", - "range.2M": "2 個月", - "chart.daily": "每日", - "chart.input": "輸入", - "chart.output": "輸出", - "chart.cached": "已快取", - "chart.uncached": "未快取", - "chart.ratio": "比例", - "chart.model": "模型", - "chart.cacheRatio": "快取比例", - "chart.costSession": "成本/工作階段", - "chart.tokensSession": "Token/工作階段", - "chart.costPerSession": "成本 / 工作階段", - "chart.tokensPerSession": "Token / 工作階段", - "chart.live": "即時", - "chart.percent": "百分比", - "chart.leaderboardAria": "模型 token 排行榜", - "chart.scrollableLeaderboardAria": "可捲動的模型 token 排行榜", - "chart.byAuthor": "作者:{{author}}", - "home.updated": "已更新", - "home.noRows": "暫無資料列", - "home.justNow": "剛剛", - "home.heroCopy": "查看哪些模型正在贏得真實使用量、使用組合如何變化,以及這對成本意味著什麼。", - "home.loadingTitle": "正在載入數據", - "home.loadingDescription": "正在讀取模型彙總。", - "home.usageTitle": "用量", - "home.topModelsDescription": "OpenCode Go 中各模型的使用情況。", - "home.noUsageTitle": "無使用數據", - "home.noUsageDescription": "沒有符合該產品和時間範圍的模型列。", - "home.noLeaderboardTitle": "無排行榜數據", - "home.noLeaderboardDescription": "沒有符合該產品和時間範圍的模型列。", - "home.productFilter": "產品篩選", - "home.dateRange": "日期範圍", - "home.stackedUsageChart": "熱門模型用量堆疊圖", - "home.total": "總計", - "home.modelUsers": "模型使用者", - "home.new": "新", - "home.uniqueUsersTitle": "不重複使用者", - "home.uniqueUsersDescription": "按模型顯示的每日 OpenCode Go 不重複使用者。", - "home.noUserDataTitle": "無使用者數據", - "home.noUserDataDescription": "沒有符合該視窗且包含使用者的模型列。", - "home.uniqueUsersChart": "按模型顯示的不重複使用者堆疊圖", - "home.marketShareTitle": "市場佔有率", - "home.marketShareDescription": "按模型作者比較 token 佔有率。", - "home.noMarketTitle": "無市場數據", - "home.noMarketDescription": "沒有符合該時間範圍的模型列。", - "home.marketChart": "按模型作者顯示的市場佔有率", - "home.noData": "無數據", - "home.geoTitle": "地理分布", - "home.geoDescription": "按國家/地區統計的 token 使用量。", - "home.noGeoTitle": "無地理數據", - "home.noGeoDescription": "沒有符合該時間範圍的地理列。", - "home.worldMap": "按國家/地區顯示 token 使用量的世界地圖", - "home.geoMapTitle": "地理分布地圖", - "home.unknown": "未知", - "home.tokenCostTitle": "Token 成本", - "home.tokenCostDescription": "每 100 萬 token 的價格。", - "home.noTokenCostTitle": "無 token 成本數據", - "home.noTokenCostDescription": "沒有符合該產品且包含成本的模型列。", - "home.cacheRatioTitle": "快取比例", - "home.cacheRatioDescription": "由快取提供的輸入 token 佔比。", - "home.noCacheTitle": "無快取比例數據", - "home.noCacheDescription": "沒有符合該產品且包含輸入 token 的模型列。", - "home.sessionCostTitle": "工作階段成本", - "home.sessionCostDescription": "每個工作階段的平均成本。", - "home.noSessionCostTitle": "無工作階段成本數據", - "home.noSessionCostDescription": "沒有符合該產品且包含工作階段的模型列。", - "home.costSession": "成本/工作階段", - "lab.title": "{{lab}} AI 模型使用量與排名 | OpenCode 數據", - "lab.description": - "比較在 OpenCode Go 中使用的 {{lab}} 模型,包括 token 用量、模型排名、上下文視窗、發布日期、成本和模型專屬數據。", - "lab.loadingTitle": "模型實驗室", - "lab.loadingDescription": "正在讀取模型可用性和近期 OpenCode 使用情況。", - "lab.notFound": "沒有符合此實驗室的模型。", - "lab.heroPrefix": "探索 OpenCode 中使用的 {{count}} 個 {{lab}} 模型", - "lab.heroIncluding": "包括 {{models}}", - "lab.heroSuffix": "比較近期 token 用量、上下文視窗、發布日期和模型專屬數據。", - "lab.tokensProcessed": "已處理 Token", - "lab.pending": "待定", - "lab.usageAfterActivity": "模型活動到達後會顯示使用量", - "lab.latestRelease": "最新發布 {{date}}", - "lab.shareOfUsage": "佔近期 OpenCode 使用量的 {{share}}", - "lab.usageTitle": "{{lab}} token 用量", - "lab.usageDescription": "過去兩個月的每日 OpenCode token 用量。", - "lab.noUsageTitle": "暫無使用量", - "lab.noUsageDescription": "此實驗室有活動後,近期 token 用量會顯示在這裡。", - "lab.dailyTokenChart": "{{lab}} 每日 token 用量圖", - "lab.dailyTokens": "每日 token", - "lab.tokens": "token", - "lab.modelsTitle": "{{lab}} 模型", - "lab.modelsDescription": "目錄詳情與近期使用量。", - "lab.recentUsageAndLimits": "近期使用量和限制。", - "lab.usage": "用量", - "lab.share": "佔比", - "model.title": "{{model}} 使用量、成本與排名 | OpenCode 數據", - "model.description": - "查看 {{model}} 的 OpenCode Go 使用數據,包括 token 用量、週排名、token 組合、成本、快取比例、工作階段、地理分布和同類模型。", - "model.loadingTitle": "模型數據", - "model.loadingDescription": "正在讀取模型彙總。", - "model.loadingProfile": "正在讀取模型檔案。", - "model.noDataTitle": "無模型數據", - "model.noDataDescription": "請嘗試從排行榜開啟一個模型。", - "model.noMatched": "沒有符合 {{id}} 的模型事實或使用列。", - "model.fallback": "模型", - "model.catalogFallback": "來自共享模型索引的模型事實。此模型產生活動後會顯示 OpenCode Go 使用量。", - "model.unranked": "未進入上週 OpenCode Go 使用量排名", - "model.ranked": "在上週 OpenCode Go 使用量中排名 #{{rank}}", - "model.observedVolume": "佔觀測到的 2M 用量的 {{share}}。", - "model.weights": "模型權重:{{label}}", - "model.rank": "7 日排名", - "model.profile": "模型檔案", - "model.listed": "已列出", - "model.noCurrentUsage": "目前數據視窗中沒有 OpenCode Go 使用量。", - "model.facts": "模型事實", - "model.context": "上下文", - "model.output": "輸出", - "model.knowledge": "知識", - "model.release": "發布", - "model.inputs": "輸入", - "model.overviewDescription": "近期 OpenCode Go token、不重複使用者和市場位置。", - "model.noSummaryTitle": "無使用摘要", - "model.noSummaryDescription": "此模型尚無 OpenCode Go 使用列。", - "model.tokens": "Token", - "model.uniqueUsers": "不重複使用者", - "model.lastTwoMonths": "過去兩個月", - "model.sessions": "工作階段", - "model.completedSessions": "已完成工作階段", - "model.tokenShare": "Token 佔比", - "model.totalModels": "{{count}} 個模型", - "model.momentum": "趨勢", - "model.vsPreviousWindow": "相較上一視窗", - "model.usageDescription": "近期兩個月視窗內的每日 OpenCode Go token 用量。", - "model.noUsageTitle": "無使用量", - "model.noUsageDescription": "目前視窗中沒有使用量。", - "model.dailyTokenChart": "每日 token 用量圖", - "model.usersDescription": "近期兩個月視窗內的每日 OpenCode Go 不重複使用者。", - "model.noUsersTitle": "無使用者數據", - "model.noUsersDescription": "目前視窗中沒有包含使用者的列。", - "model.dailyUserChart": "每日不重複使用者圖", - "model.efficiencyDescription": "成本、快取行為和平均 OpenCode Go 工作階段形態。", - "model.noEfficiencyTitle": "無效率數據", - "model.noEfficiencyDescription": "使用量到達後會顯示效率數據。", - "model.totalSpendLabel": "Total spend", - "model.costInput": "Cost input", - "model.costOutput": "Cost output", - "model.averageCostSession": "Average cost / Session", - "model.averageTokensSession": "Average tokens / session", - "model.cost": "成本", - "model.totalSpend": "總支出", - "model.costPerMillion": "每 100 萬成本", - "model.inputOutput": "輸入 / 輸出", - "model.observedTokens": "觀測到的全部 token", - "model.costSession": "成本 / 工作階段", - "model.average": "平均", - "model.tokensSession": "Token / 工作階段", - "model.cacheRatio": "快取比例", - "model.inputTokens": "輸入 token", - "model.geoDescription": "按國家/地區統計的 OpenCode Go 模型 token 使用量。", - "model.noGeoTitle": "無地理數據", - "model.noGeoDescription": "沒有符合此模型的 OpenCode Go 地理列。", - "model.worldMap": "按國家/地區顯示模型 token 使用量的世界地圖", - "model.peersDescription": "按近期 OpenCode Go token 用量排列的相近模型。", - "model.noPeersTitle": "無同類模型", - "model.noPeersDescription": "使用量到達後會顯示同類模型排名。", - "model.noUsageLastWeek": "上週無使用量", - "model.newThisWeek": "本週新增", - "model.sameAsPreviousWeek": "與上週相同", - "model.vsPreviousWeek": "較上週 {{change}}", - "model.pdf": "PDF", - "format.users": "使用者", - "format.tokens": "token", -} satisfies Record diff --git a/packages/ui/src/i18n/ar.ts b/packages/ui/src/i18n/ar.ts deleted file mode 100644 index dd8cfed6f9..0000000000 --- a/packages/ui/src/i18n/ar.ts +++ /dev/null @@ -1,168 +0,0 @@ -export const dict = { - "ui.sessionReview.title": "تغييرات الجلسة", - "ui.sessionReview.title.lastTurn": "تغييرات آخر دور", - "ui.sessionReview.diffStyle.unified": "موحد", - "ui.sessionReview.diffStyle.split": "منقسم", - "ui.sessionReview.openFile": "فتح ملف", - "ui.sessionReview.selection.line": "سطر {{line}}", - "ui.sessionReview.selection.lines": "الأسطر {{start}}-{{end}}", - "ui.sessionReview.expandAll": "توسيع الكل", - "ui.sessionReview.collapseAll": "طي الكل", - "ui.sessionReview.change.added": "مضاف", - "ui.sessionReview.change.removed": "محذوف", - "ui.sessionReview.change.modified": "معدل", - "ui.sessionReview.image.loading": "جار التحميل...", - "ui.sessionReview.image.placeholder": "صورة", - "ui.sessionReview.largeDiff.title": "Diff كبير جدا لعرضه", - "ui.sessionReview.largeDiff.meta": "الحد: {{limit}} سطرًا متغيرًا. الحالي: {{current}} سطرًا متغيرًا.", - "ui.sessionReview.largeDiff.renderAnyway": "اعرض على أي حال", - "ui.fileMedia.kind.image": "صورة", - "ui.fileMedia.kind.audio": "صوت", - "ui.fileMedia.state.removed": "تمت إزالة {{kind}}", - "ui.fileMedia.state.loading": "جاري تحميل {{kind}}...", - "ui.fileMedia.state.error": "خطأ في تحميل {{kind}}", - "ui.fileMedia.state.unavailable": "{{kind}} غير متوفر", - "ui.fileMedia.binary.title": "ملف ثنائي", - "ui.fileMedia.binary.description.path": "{{path}} عبارة عن ملف ثنائي ولا يمكن عرضه.", - "ui.fileMedia.binary.description.default": "هذا ملف ثنائي ولا يمكن عرضه.", - - "ui.lineComment.label.prefix": "تعليق على ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "جارٍ التعليق على ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "أضف تعليقًا", - "ui.lineComment.submit": "تعليق", - - "ui.sessionTurn.steps.show": "إظهار الخطوات", - "ui.sessionTurn.steps.hide": "إخفاء الخطوات", - "ui.sessionTurn.summary.response": "استجابة", - "ui.sessionTurn.diff.showMore": "إظهار المزيد من التغييرات ({{count}})", - - "ui.sessionTurn.retry.retrying": "إعادة المحاولة", - "ui.sessionTurn.retry.inSeconds": "خلال {{seconds}} ثواني", - "ui.sessionTurn.retry.attempt": "المحاولة رقم {{attempt}}", - "ui.sessionTurn.retry.attemptLine": "{{line}} - المحاولة رقم {{attempt}}", - "ui.sessionTurn.retry.geminiHot": "gemini مزدحم حاليا", - "ui.sessionTurn.error.freeUsageExceeded": "تم تجاوز حد الاستخدام المجاني", - "ui.sessionTurn.error.addCredits": "إضافة رصيد", - - "dialog.usageExceeded.freeTier.title": "تم الوصول إلى الحد المجاني", - "dialog.usageExceeded.freeTier.description": - "اشترك في OpenCode Go للحصول على وصول موثوق إلى أفضل النماذج مفتوحة المصدر، ابتداءً من $5/شهر.", - "dialog.usageExceeded.freeTier.actionLabel": "اشترك", - "dialog.usageExceeded.accountRateLimit.title": "تم الوصول إلى حد Go", - "dialog.usageExceeded.accountRateLimit.description": - "تم الوصول إلى حد الاستخدام. لمتابعة استخدام هذا النموذج الآن، قم بتفعيل الاستخدام من رصيدك المتاح", - "dialog.usageExceeded.accountRateLimit.actionLabel": "فتح الإعدادات", - - "ui.sessionTurn.status.delegating": "تفويض العمل", - "ui.sessionTurn.status.planning": "تخطيط الخطوات التالية", - "ui.sessionTurn.status.gatheringContext": "استكشاف", - "ui.sessionTurn.status.gatheredContext": "تم الاستكشاف", - "ui.sessionTurn.status.searchingCodebase": "البحث في قاعدة التعليمات البرمجية", - "ui.sessionTurn.status.searchingWeb": "البحث في الويب", - "ui.sessionTurn.status.makingEdits": "إجراء تعديلات", - "ui.sessionTurn.status.runningCommands": "تشغيل الأوامر", - "ui.sessionTurn.status.thinking": "تفكير", - "ui.sessionTurn.status.thinkingWithTopic": "تفكير - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "جمع الأفكار", - "ui.sessionTurn.status.consideringNextSteps": "النظر في الخطوات التالية", - - "ui.messagePart.questions.dismissed": "تم رفض الأسئلة", - "ui.messagePart.compaction": "تم ضغط الجلسة", - "ui.messagePart.context.read.one": "{{count}} قراءة", - "ui.messagePart.context.read.other": "{{count}} قراءات", - "ui.messagePart.context.search.one": "{{count}} بحث", - "ui.messagePart.context.search.other": "{{count}} عمليات بحث", - "ui.messagePart.context.list.one": "{{count}} قائمة", - "ui.messagePart.context.list.other": "{{count}} قوائم", - "ui.messagePart.diagnostic.error": "خطأ", - "ui.messagePart.title.edit": "تحرير", - "ui.messagePart.title.write": "كتابة", - "ui.messagePart.option.typeOwnAnswer": "اكتب إجابتك الخاصة", - "ui.messagePart.review.title": "مراجعة إجاباتك", - - "ui.list.loading": "جارٍ التحميل", - "ui.list.empty": "لا توجد نتائج", - "ui.list.clearFilter": "مسح عامل التصفية", - "ui.list.emptyWithFilter.prefix": "لا توجد نتائج لـ", - "ui.list.emptyWithFilter.suffix": "", - - "ui.messageNav.newMessage": "رسالة جديدة", - - "ui.textField.copyToClipboard": "نسخ إلى الحافظة", - "ui.textField.copyLink": "نسخ الرابط", - "ui.textField.copied": "تم النسخ", - - "ui.imagePreview.alt": "معاينة الصورة", - "ui.scrollView.ariaLabel": "محتوى قابل للتمرير", - - "ui.tool.read": "قراءة", - "ui.tool.loaded": "تم التحميل", - "ui.tool.list": "قائمة", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "جلب الويب", - "ui.tool.websearch": "بحث الويب", - "ui.tool.shell": "Shell", - "ui.tool.patch": "تصحيح", - "ui.tool.todos": "المهام", - "ui.tool.todos.read": "قراءة المهام", - "ui.tool.questions": "أسئلة", - "ui.tool.agent": "وكيل {{type}}", - "ui.tool.agent.default": "وكيل", - - "ui.common.file.one": "ملف", - "ui.common.file.other": "ملفات", - "ui.common.question.one": "سؤال", - "ui.common.question.other": "أسئلة", - - "ui.common.add": "إضافة", - "ui.common.back": "رجوع", - "ui.common.cancel": "إلغاء", - "ui.common.confirm": "تأكيد", - "ui.common.dismiss": "رفض", - "ui.common.close": "إغلاق", - "ui.common.next": "التالي", - "ui.common.submit": "إرسال", - - "ui.permission.deny": "رفض", - "ui.permission.allowAlways": "السماح دائمًا", - "ui.permission.allowOnce": "السماح مرة واحدة", - - "ui.message.expand": "توسيع الرسالة", - "ui.message.collapse": "طي الرسالة", - "ui.message.copy": "نسخ", - "ui.message.copyMessage": "نسخ الرسالة", - "ui.message.forkMessage": "تشعب إلى جلسة جديدة", - "ui.message.revertMessage": "إعادة التعيين إلى هذه النقطة", - "ui.message.copyResponse": "نسخ الرد", - "ui.message.copied": "تم النسخ!", - "ui.message.interrupted": "تمت المقاطعة", - "ui.message.queued": "في الانتظار", - "ui.message.attachment.alt": "مرفق", - - "ui.patch.action.deleted": "محذوف", - "ui.patch.action.created": "تم الإنشاء", - "ui.patch.action.moved": "منقول", - "ui.patch.action.patched": "مصحح", - - "ui.question.subtitle.answered": "{{count}} أجيب", - "ui.question.answer.none": "(لا توجد إجابة)", - "ui.question.review.notAnswered": "(لم يتم الرد)", - "ui.question.multiHint": "حدد كل ما ينطبق", - "ui.question.singleHint": "حدد إجابة واحدة", - "ui.question.custom.placeholder": "اكتب إجابتك...", - - "ui.fileSearch.placeholder": "بحث", - "ui.fileSearch.previousMatch": "المطابقة السابقة", - "ui.fileSearch.nextMatch": "المطابقة التالية", - "ui.fileSearch.close": "إغلاق البحث", - "ui.tool.task": "مهمة", - "ui.tool.skill": "مهارة", - "ui.basicTool.called": "تم استدعاء `{{tool}}`", - "ui.toolErrorCard.failed": "فشل", - "ui.toolErrorCard.copyError": "نسخ الخطأ", - "ui.message.duration.seconds": "{{count}}ث", - "ui.message.duration.minutesSeconds": "{{minutes}}د {{seconds}}ث", -} diff --git a/packages/ui/src/i18n/br.ts b/packages/ui/src/i18n/br.ts deleted file mode 100644 index 4b2c418ca5..0000000000 --- a/packages/ui/src/i18n/br.ts +++ /dev/null @@ -1,168 +0,0 @@ -export const dict = { - "ui.sessionReview.title": "Alterações da sessão", - "ui.sessionReview.title.lastTurn": "Alterações do último turno", - "ui.sessionReview.diffStyle.unified": "Unificado", - "ui.sessionReview.diffStyle.split": "Dividido", - "ui.sessionReview.openFile": "Abrir arquivo", - "ui.sessionReview.selection.line": "linha {{line}}", - "ui.sessionReview.selection.lines": "linhas {{start}}-{{end}}", - "ui.sessionReview.expandAll": "Expandir tudo", - "ui.sessionReview.collapseAll": "Recolher tudo", - "ui.sessionReview.change.added": "Adicionado", - "ui.sessionReview.change.removed": "Removido", - "ui.sessionReview.change.modified": "Modificado", - "ui.sessionReview.image.loading": "Carregando...", - "ui.sessionReview.image.placeholder": "Imagem", - "ui.sessionReview.largeDiff.title": "Diff grande demais para renderizar", - "ui.sessionReview.largeDiff.meta": "Limite: {{limit}} linhas alteradas. Atual: {{current}} linhas alteradas.", - "ui.sessionReview.largeDiff.renderAnyway": "Renderizar mesmo assim", - "ui.fileMedia.kind.image": "imagem", - "ui.fileMedia.kind.audio": "áudio", - "ui.fileMedia.state.removed": "Removido: {{kind}}", - "ui.fileMedia.state.loading": "Carregando {{kind}}...", - "ui.fileMedia.state.error": "Erro ao carregar {{kind}}", - "ui.fileMedia.state.unavailable": "{{kind}} indisponível", - "ui.fileMedia.binary.title": "Arquivo binário", - "ui.fileMedia.binary.description.path": "Não é possível exibir {{path}} porque é um arquivo binário.", - "ui.fileMedia.binary.description.default": "Não é possível exibir o arquivo porque ele é binário.", - - "ui.lineComment.label.prefix": "Comentar em ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "Comentando em ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "Adicionar comentário", - "ui.lineComment.submit": "Comentar", - - "ui.sessionTurn.steps.show": "Mostrar passos", - "ui.sessionTurn.steps.hide": "Ocultar passos", - "ui.sessionTurn.summary.response": "Resposta", - "ui.sessionTurn.diff.showMore": "Mostrar mais alterações ({{count}})", - - "ui.sessionTurn.retry.retrying": "tentando novamente", - "ui.sessionTurn.retry.inSeconds": "em {{seconds}}s", - "ui.sessionTurn.retry.attempt": "tentativa #{{attempt}}", - "ui.sessionTurn.retry.attemptLine": "{{line}} - tentativa #{{attempt}}", - "ui.sessionTurn.retry.geminiHot": "gemini está muito sobrecarregado agora", - "ui.sessionTurn.error.freeUsageExceeded": "Limite de uso gratuito excedido", - "ui.sessionTurn.error.addCredits": "Adicionar créditos", - - "dialog.usageExceeded.freeTier.title": "Limite gratuito atingido", - "dialog.usageExceeded.freeTier.description": - "Assine o OpenCode Go para ter acesso confiável aos melhores modelos open-source, a partir de $5/mês.", - "dialog.usageExceeded.freeTier.actionLabel": "Assinar", - "dialog.usageExceeded.accountRateLimit.title": "Limite do Go atingido", - "dialog.usageExceeded.accountRateLimit.description": - "Limite de uso atingido. Para continuar usando este modelo agora, ative o uso a partir do seu saldo disponível", - "dialog.usageExceeded.accountRateLimit.actionLabel": "Abrir configurações", - - "ui.sessionTurn.status.delegating": "Delegando trabalho", - "ui.sessionTurn.status.planning": "Planejando próximos passos", - "ui.sessionTurn.status.gatheringContext": "Explorando", - "ui.sessionTurn.status.gatheredContext": "Explorado", - "ui.sessionTurn.status.searchingCodebase": "Pesquisando no código", - "ui.sessionTurn.status.searchingWeb": "Pesquisando na web", - "ui.sessionTurn.status.makingEdits": "Fazendo edições", - "ui.sessionTurn.status.runningCommands": "Executando comandos", - "ui.sessionTurn.status.thinking": "Pensando", - "ui.sessionTurn.status.thinkingWithTopic": "Pensando - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "Organizando pensamentos", - "ui.sessionTurn.status.consideringNextSteps": "Considerando próximos passos", - - "ui.messagePart.questions.dismissed": "Perguntas descartadas", - "ui.messagePart.compaction": "Sessão compactada", - "ui.messagePart.context.read.one": "{{count}} leitura", - "ui.messagePart.context.read.other": "{{count}} leituras", - "ui.messagePart.context.search.one": "{{count}} pesquisa", - "ui.messagePart.context.search.other": "{{count}} pesquisas", - "ui.messagePart.context.list.one": "{{count}} lista", - "ui.messagePart.context.list.other": "{{count}} listas", - "ui.messagePart.diagnostic.error": "Erro", - "ui.messagePart.title.edit": "Editar", - "ui.messagePart.title.write": "Escrever", - "ui.messagePart.option.typeOwnAnswer": "Digite sua própria resposta", - "ui.messagePart.review.title": "Revise suas respostas", - - "ui.list.loading": "Carregando", - "ui.list.empty": "Nenhum resultado", - "ui.list.clearFilter": "Limpar filtro", - "ui.list.emptyWithFilter.prefix": "Nenhum resultado para", - "ui.list.emptyWithFilter.suffix": "", - - "ui.messageNav.newMessage": "Nova mensagem", - - "ui.textField.copyToClipboard": "Copiar para área de transferência", - "ui.textField.copyLink": "Copiar link", - "ui.textField.copied": "Copiado", - - "ui.imagePreview.alt": "Visualização de imagem", - "ui.scrollView.ariaLabel": "conteúdo rolável", - - "ui.tool.read": "Ler", - "ui.tool.loaded": "Carregado", - "ui.tool.list": "Listar", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "Buscar Web", - "ui.tool.websearch": "Pesquisa na Web", - "ui.tool.shell": "Shell", - "ui.tool.patch": "Patch", - "ui.tool.todos": "Tarefas", - "ui.tool.todos.read": "Ler tarefas", - "ui.tool.questions": "Perguntas", - "ui.tool.agent": "Agente {{type}}", - "ui.tool.agent.default": "Agente", - - "ui.common.file.one": "arquivo", - "ui.common.file.other": "arquivos", - "ui.common.question.one": "pergunta", - "ui.common.question.other": "perguntas", - - "ui.common.add": "Adicionar", - "ui.common.back": "Voltar", - "ui.common.cancel": "Cancelar", - "ui.common.confirm": "Confirmar", - "ui.common.dismiss": "Descartar", - "ui.common.close": "Fechar", - "ui.common.next": "Próximo", - "ui.common.submit": "Enviar", - - "ui.permission.deny": "Negar", - "ui.permission.allowAlways": "Permitir sempre", - "ui.permission.allowOnce": "Permitir uma vez", - - "ui.message.expand": "Expandir mensagem", - "ui.message.collapse": "Recolher mensagem", - "ui.message.copy": "Copiar", - "ui.message.copyMessage": "Copiar mensagem", - "ui.message.forkMessage": "Bifurcar para nova sessão", - "ui.message.revertMessage": "Redefinir para este ponto", - "ui.message.copyResponse": "Copiar resposta", - "ui.message.copied": "Copiado!", - "ui.message.interrupted": "Interrompido", - "ui.message.queued": "Na fila", - "ui.message.attachment.alt": "anexo", - - "ui.patch.action.deleted": "Excluído", - "ui.patch.action.created": "Criado", - "ui.patch.action.moved": "Movido", - "ui.patch.action.patched": "Patch aplicado", - - "ui.question.subtitle.answered": "{{count}} respondidas", - "ui.question.answer.none": "(sem resposta)", - "ui.question.review.notAnswered": "(não respondida)", - "ui.question.multiHint": "Selecione todas que se aplicam", - "ui.question.singleHint": "Selecione uma resposta", - "ui.question.custom.placeholder": "Digite sua resposta...", - - "ui.fileSearch.placeholder": "Localizar", - "ui.fileSearch.previousMatch": "Ocorrência anterior", - "ui.fileSearch.nextMatch": "Próxima ocorrência", - "ui.fileSearch.close": "Fechar busca", - "ui.tool.task": "Tarefa", - "ui.tool.skill": "Habilidade", - "ui.basicTool.called": "Chamou `{{tool}}`", - "ui.toolErrorCard.failed": "Falhou", - "ui.toolErrorCard.copyError": "Copiar erro", - "ui.message.duration.seconds": "{{count}}s", - "ui.message.duration.minutesSeconds": "{{minutes}}m {{seconds}}s", -} diff --git a/packages/ui/src/i18n/bs.ts b/packages/ui/src/i18n/bs.ts deleted file mode 100644 index be041f1471..0000000000 --- a/packages/ui/src/i18n/bs.ts +++ /dev/null @@ -1,172 +0,0 @@ -import { dict as en } from "./en" - -type Keys = keyof typeof en - -export const dict = { - "ui.sessionReview.title": "Promjene sesije", - "ui.sessionReview.title.lastTurn": "Promjene u posljednjem potezu", - "ui.sessionReview.diffStyle.unified": "Ujedinjeno", - "ui.sessionReview.diffStyle.split": "Podijeljeno", - "ui.sessionReview.openFile": "Otvori fajl", - "ui.sessionReview.selection.line": "linija {{line}}", - "ui.sessionReview.selection.lines": "linije {{start}}-{{end}}", - "ui.sessionReview.expandAll": "Proširi sve", - "ui.sessionReview.collapseAll": "Sažmi sve", - "ui.sessionReview.change.added": "Dodano", - "ui.sessionReview.change.removed": "Uklonjeno", - "ui.sessionReview.change.modified": "Izmijenjeno", - "ui.sessionReview.image.loading": "Učitavanje...", - "ui.sessionReview.image.placeholder": "Slika", - "ui.sessionReview.largeDiff.title": "Diff je prevelik za prikaz", - "ui.sessionReview.largeDiff.meta": "Limit: {{limit}} izmijenjenih linija. Trenutno: {{current}} izmijenjenih linija.", - "ui.sessionReview.largeDiff.renderAnyway": "Prikaži svejedno", - "ui.fileMedia.kind.image": "slika", - "ui.fileMedia.kind.audio": "audio", - "ui.fileMedia.state.removed": "Uklonjeno: {{kind}}", - "ui.fileMedia.state.loading": "Učitavanje: {{kind}}...", - "ui.fileMedia.state.error": "Greška pri učitavanju: {{kind}}", - "ui.fileMedia.state.unavailable": "Nedostupno: {{kind}}", - "ui.fileMedia.binary.title": "Binarni fajl", - "ui.fileMedia.binary.description.path": "{{path}} se ne može prikazati jer je binarni fajl.", - "ui.fileMedia.binary.description.default": "Ovaj fajl se ne može prikazati jer je binarni.", - - "ui.lineComment.label.prefix": "Komentar na ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "Komentarišeš ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "Dodaj komentar", - "ui.lineComment.submit": "Komentariši", - - "ui.sessionTurn.steps.show": "Prikaži korake", - "ui.sessionTurn.steps.hide": "Sakrij korake", - "ui.sessionTurn.summary.response": "Odgovor", - "ui.sessionTurn.diff.showMore": "Prikaži još izmjena ({{count}})", - - "ui.sessionTurn.retry.retrying": "ponovni pokušaj", - "ui.sessionTurn.retry.inSeconds": "za {{seconds}}s", - "ui.sessionTurn.retry.attempt": "pokušaj #{{attempt}}", - "ui.sessionTurn.retry.attemptLine": "{{line}} - pokušaj #{{attempt}}", - "ui.sessionTurn.retry.geminiHot": "gemini je trenutno preopterećen", - "ui.sessionTurn.error.freeUsageExceeded": "Besplatna upotreba premašena", - "ui.sessionTurn.error.addCredits": "Dodaj kredite", - - "dialog.usageExceeded.freeTier.title": "Dostignut besplatan limit", - "dialog.usageExceeded.freeTier.description": - "Pretplatite se na OpenCode Go za pouzdan pristup najboljim open-source modelima, počevši od $5/mjesec.", - "dialog.usageExceeded.freeTier.actionLabel": "Pretplati se", - "dialog.usageExceeded.accountRateLimit.title": "Dostignut Go limit", - "dialog.usageExceeded.accountRateLimit.description": - "Dostignut je limit korištenja. Da nastavite koristiti ovaj model sada, omogućite korištenje iz vašeg dostupnog stanja", - "dialog.usageExceeded.accountRateLimit.actionLabel": "Otvori postavke", - - "ui.sessionTurn.status.delegating": "Delegiranje posla", - "ui.sessionTurn.status.planning": "Planiranje sljedećih koraka", - "ui.sessionTurn.status.gatheringContext": "Istraživanje", - "ui.sessionTurn.status.gatheredContext": "Istraženo", - "ui.sessionTurn.status.searchingCodebase": "Pretraživanje baze koda", - "ui.sessionTurn.status.searchingWeb": "Pretraživanje weba", - "ui.sessionTurn.status.makingEdits": "Pravljenje izmjena", - "ui.sessionTurn.status.runningCommands": "Pokretanje komandi", - "ui.sessionTurn.status.thinking": "Razmišljanje", - "ui.sessionTurn.status.thinkingWithTopic": "Razmišljanje - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "Sređivanje misli", - "ui.sessionTurn.status.consideringNextSteps": "Razmatranje sljedećih koraka", - - "ui.messagePart.questions.dismissed": "Pitanja odbačena", - "ui.messagePart.compaction": "Sesija sažeta", - "ui.messagePart.context.read.one": "{{count}} čitanje", - "ui.messagePart.context.read.other": "{{count}} čitanja", - "ui.messagePart.context.search.one": "{{count}} pretraga", - "ui.messagePart.context.search.other": "{{count}} pretrage", - "ui.messagePart.context.list.one": "{{count}} lista", - "ui.messagePart.context.list.other": "{{count}} liste", - "ui.messagePart.diagnostic.error": "Greška", - "ui.messagePart.title.edit": "Uredi", - "ui.messagePart.title.write": "Napiši", - "ui.messagePart.option.typeOwnAnswer": "Unesi svoj odgovor", - "ui.messagePart.review.title": "Pregledaj svoje odgovore", - - "ui.list.loading": "Učitavanje", - "ui.list.empty": "Nema rezultata", - "ui.list.clearFilter": "Očisti filter", - "ui.list.emptyWithFilter.prefix": "Nema rezultata za", - "ui.list.emptyWithFilter.suffix": "", - - "ui.messageNav.newMessage": "Nova poruka", - - "ui.textField.copyToClipboard": "Kopiraj u međuspremnik", - "ui.textField.copyLink": "Kopiraj link", - "ui.textField.copied": "Kopirano", - - "ui.imagePreview.alt": "Pregled slike", - "ui.scrollView.ariaLabel": "sadržaj za pomjeranje", - - "ui.tool.read": "Čitanje", - "ui.tool.loaded": "Učitano", - "ui.tool.list": "Listanje", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "Web preuzimanje", - "ui.tool.websearch": "Pretraga weba", - "ui.tool.shell": "Shell", - "ui.tool.patch": "Patch", - "ui.tool.todos": "Lista zadataka", - "ui.tool.todos.read": "Čitanje liste zadataka", - "ui.tool.questions": "Pitanja", - "ui.tool.agent": "{{type}} agent", - "ui.tool.agent.default": "agent", - - "ui.common.file.one": "datoteka", - "ui.common.file.other": "datoteke", - "ui.common.question.one": "pitanje", - "ui.common.question.other": "pitanja", - - "ui.common.add": "Dodaj", - "ui.common.back": "Nazad", - "ui.common.cancel": "Otkaži", - "ui.common.confirm": "Potvrdi", - "ui.common.dismiss": "Odbaci", - "ui.common.close": "Zatvori", - "ui.common.next": "Dalje", - "ui.common.submit": "Pošalji", - - "ui.permission.deny": "Zabrani", - "ui.permission.allowAlways": "Uvijek dozvoli", - "ui.permission.allowOnce": "Dozvoli jednom", - - "ui.message.expand": "Proširi poruku", - "ui.message.collapse": "Sažmi poruku", - "ui.message.copy": "Kopiraj", - "ui.message.copyMessage": "Kopiraj poruku", - "ui.message.forkMessage": "Forkaj u novu sesiju", - "ui.message.revertMessage": "Resetuj na ovu tačku", - "ui.message.copyResponse": "Kopiraj odgovor", - "ui.message.copied": "Kopirano!", - "ui.message.interrupted": "Prekinuto", - "ui.message.queued": "U redu", - "ui.message.attachment.alt": "prilog", - - "ui.patch.action.deleted": "Obrisano", - "ui.patch.action.created": "Kreirano", - "ui.patch.action.moved": "Premješteno", - "ui.patch.action.patched": "Primijenjeno", - - "ui.question.subtitle.answered": "{{count}} odgovoreno", - "ui.question.answer.none": "(nema odgovora)", - "ui.question.review.notAnswered": "(nije odgovoreno)", - "ui.question.multiHint": "Odaberi sve što važi", - "ui.question.singleHint": "Odaberi jedan odgovor", - "ui.question.custom.placeholder": "Unesi svoj odgovor...", - - "ui.fileSearch.placeholder": "Pronađi", - "ui.fileSearch.previousMatch": "Prethodno", - "ui.fileSearch.nextMatch": "Sljedeće", - "ui.fileSearch.close": "Zatvori pretragu", - "ui.tool.task": "Zadatak", - "ui.tool.skill": "Vještina", - "ui.basicTool.called": "Pozvan `{{tool}}`", - "ui.toolErrorCard.failed": "Neuspješno", - "ui.toolErrorCard.copyError": "Kopiraj grešku", - "ui.message.duration.seconds": "{{count}}s", - "ui.message.duration.minutesSeconds": "{{minutes}}m {{seconds}}s", -} satisfies Partial> diff --git a/packages/ui/src/i18n/da.ts b/packages/ui/src/i18n/da.ts deleted file mode 100644 index 91adc52e9d..0000000000 --- a/packages/ui/src/i18n/da.ts +++ /dev/null @@ -1,167 +0,0 @@ -export const dict = { - "ui.sessionReview.title": "Sessionsændringer", - "ui.sessionReview.title.lastTurn": "Ændringer fra sidste tur", - "ui.sessionReview.diffStyle.unified": "Samlet", - "ui.sessionReview.diffStyle.split": "Opdelt", - "ui.sessionReview.openFile": "Åbn fil", - "ui.sessionReview.selection.line": "linje {{line}}", - "ui.sessionReview.selection.lines": "linjer {{start}}-{{end}}", - "ui.sessionReview.expandAll": "Udvid alle", - "ui.sessionReview.collapseAll": "Skjul alle", - - "ui.sessionReview.change.added": "Tilføjet", - "ui.sessionReview.change.removed": "Fjernet", - "ui.sessionReview.change.modified": "Ændret", - "ui.sessionReview.image.loading": "Indlæser...", - "ui.sessionReview.image.placeholder": "Billede", - "ui.sessionReview.largeDiff.title": "Diff er for stor til at blive vist", - "ui.sessionReview.largeDiff.meta": "Grænse: {{limit}} ændrede linjer. Nuværende: {{current}} ændrede linjer.", - "ui.sessionReview.largeDiff.renderAnyway": "Vis alligevel", - "ui.fileMedia.kind.image": "billede", - "ui.fileMedia.kind.audio": "lyd", - "ui.fileMedia.state.removed": "Fjernet: {{kind}}", - "ui.fileMedia.state.loading": "Indlæser {{kind}}...", - "ui.fileMedia.state.error": "Fejl ved indlæsning: {{kind}}", - "ui.fileMedia.state.unavailable": "Utilgængelig: {{kind}}", - "ui.fileMedia.binary.title": "Binær fil", - "ui.fileMedia.binary.description.path": "{{path}} kan ikke vises, fordi det er en binær fil.", - "ui.fileMedia.binary.description.default": "Denne fil kan ikke vises, fordi det er en binær fil.", - "ui.lineComment.label.prefix": "Kommenter på ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "Kommenterer på ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "Tilføj kommentar", - "ui.lineComment.submit": "Kommenter", - "ui.sessionTurn.steps.show": "Vis trin", - "ui.sessionTurn.steps.hide": "Skjul trin", - "ui.sessionTurn.summary.response": "Svar", - "ui.sessionTurn.diff.showMore": "Vis flere ændringer ({{count}})", - - "ui.sessionTurn.retry.retrying": "prøver igen", - "ui.sessionTurn.retry.inSeconds": "om {{seconds}}s", - "ui.sessionTurn.retry.attempt": "forsøg #{{attempt}}", - "ui.sessionTurn.retry.attemptLine": "{{line}} - forsøg #{{attempt}}", - "ui.sessionTurn.retry.geminiHot": "gemini er meget overbelastet lige nu", - "ui.sessionTurn.error.freeUsageExceeded": "Gratis forbrug overskredet", - "ui.sessionTurn.error.addCredits": "Tilføj kreditter", - - "dialog.usageExceeded.freeTier.title": "Gratis grænse nået", - "dialog.usageExceeded.freeTier.description": - "Abonnér på OpenCode Go for pålidelig adgang til de bedste open source-modeller, fra $5/måned.", - "dialog.usageExceeded.freeTier.actionLabel": "Abonnér", - "dialog.usageExceeded.accountRateLimit.title": "Go-grænse nået", - "dialog.usageExceeded.accountRateLimit.description": - "Forbrugsgrænse nået. For at fortsætte med at bruge denne model nu, aktivér forbrug fra din tilgængelige saldo", - "dialog.usageExceeded.accountRateLimit.actionLabel": "Åbn indstillinger", - - "ui.sessionTurn.status.delegating": "Delegerer arbejde", - "ui.sessionTurn.status.planning": "Planlægger næste trin", - "ui.sessionTurn.status.gatheringContext": "Udforsker", - "ui.sessionTurn.status.gatheredContext": "Udforsket", - "ui.sessionTurn.status.searchingCodebase": "Søger i koden", - "ui.sessionTurn.status.searchingWeb": "Søger på nettet", - "ui.sessionTurn.status.makingEdits": "Laver ændringer", - "ui.sessionTurn.status.runningCommands": "Kører kommandoer", - "ui.sessionTurn.status.thinking": "Tænker", - "ui.sessionTurn.status.thinkingWithTopic": "Tænker - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "Samler tanker", - "ui.sessionTurn.status.consideringNextSteps": "Overvejer næste skridt", - - "ui.messagePart.questions.dismissed": "Spørgsmål afvist", - "ui.messagePart.compaction": "Session komprimeret", - "ui.messagePart.context.read.one": "{{count}} læsning", - "ui.messagePart.context.read.other": "{{count}} læsninger", - "ui.messagePart.context.search.one": "{{count}} søgning", - "ui.messagePart.context.search.other": "{{count}} søgninger", - "ui.messagePart.context.list.one": "{{count}} liste", - "ui.messagePart.context.list.other": "{{count}} lister", - "ui.messagePart.diagnostic.error": "Fejl", - "ui.messagePart.title.edit": "Rediger", - "ui.messagePart.title.write": "Skriv", - "ui.messagePart.option.typeOwnAnswer": "Skriv dit eget svar", - "ui.messagePart.review.title": "Gennemgå dine svar", - - "ui.list.loading": "Indlæser", - "ui.list.empty": "Ingen resultater", - "ui.list.clearFilter": "Ryd filter", - "ui.list.emptyWithFilter.prefix": "Ingen resultater for", - "ui.list.emptyWithFilter.suffix": "", - - "ui.messageNav.newMessage": "Ny besked", - - "ui.textField.copyToClipboard": "Kopier til udklipsholder", - "ui.textField.copyLink": "Kopier link", - "ui.textField.copied": "Kopieret", - - "ui.imagePreview.alt": "Billedforhåndsvisning", - "ui.scrollView.ariaLabel": "rulbart indhold", - - "ui.tool.read": "Læs", - "ui.tool.loaded": "Indlæst", - "ui.tool.list": "Liste", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "Webhentning", - "ui.tool.websearch": "Websøgning", - "ui.tool.shell": "Shell", - "ui.tool.patch": "Patch", - "ui.tool.todos": "Opgaver", - "ui.tool.todos.read": "Læs opgaver", - "ui.tool.questions": "Spørgsmål", - "ui.tool.agent": "{{type}} Agent", - "ui.tool.agent.default": "Agent", - - "ui.common.file.one": "fil", - "ui.common.file.other": "filer", - "ui.common.question.one": "spørgsmål", - "ui.common.question.other": "spørgsmål", - - "ui.common.add": "Tilføj", - "ui.common.back": "Tilbage", - "ui.common.cancel": "Annuller", - "ui.common.confirm": "Bekræft", - "ui.common.dismiss": "Afvis", - "ui.common.close": "Luk", - "ui.common.next": "Næste", - "ui.common.submit": "Indsend", - - "ui.permission.deny": "Afvis", - "ui.permission.allowAlways": "Tillad altid", - "ui.permission.allowOnce": "Tillad én gang", - - "ui.message.expand": "Udvid besked", - "ui.message.collapse": "Skjul besked", - "ui.message.copy": "Kopier", - "ui.message.copyMessage": "Kopier besked", - "ui.message.forkMessage": "Forgren til ny session", - "ui.message.revertMessage": "Nulstil til dette punkt", - "ui.message.copyResponse": "Kopier svar", - "ui.message.copied": "Kopieret!", - "ui.message.interrupted": "Afbrudt", - "ui.message.queued": "I kø", - "ui.message.attachment.alt": "vedhæftning", - - "ui.patch.action.deleted": "Slettet", - "ui.patch.action.created": "Oprettet", - "ui.patch.action.moved": "Flyttet", - "ui.patch.action.patched": "Patchet", - - "ui.question.subtitle.answered": "{{count}} besvaret", - "ui.question.answer.none": "(intet svar)", - "ui.question.review.notAnswered": "(ikke besvaret)", - "ui.question.multiHint": "Vælg alle der gælder", - "ui.question.singleHint": "Vælg ét svar", - "ui.question.custom.placeholder": "Skriv dit svar...", - - "ui.fileSearch.placeholder": "Find", - "ui.fileSearch.previousMatch": "Forrige match", - "ui.fileSearch.nextMatch": "Næste match", - "ui.fileSearch.close": "Luk søgning", - "ui.tool.task": "Opgave", - "ui.tool.skill": "Færdighed", - "ui.basicTool.called": "Kaldte `{{tool}}`", - "ui.toolErrorCard.failed": "Fejlede", - "ui.toolErrorCard.copyError": "Kopier fejl", - "ui.message.duration.seconds": "{{count}}s", - "ui.message.duration.minutesSeconds": "{{minutes}}m {{seconds}}s", -} diff --git a/packages/ui/src/i18n/de.ts b/packages/ui/src/i18n/de.ts deleted file mode 100644 index 7b36859bf6..0000000000 --- a/packages/ui/src/i18n/de.ts +++ /dev/null @@ -1,173 +0,0 @@ -import { dict as en } from "./en" - -type Keys = keyof typeof en - -export const dict = { - "ui.sessionReview.title": "Sitzungsänderungen", - "ui.sessionReview.title.lastTurn": "Änderungen der letzten Runde", - "ui.sessionReview.diffStyle.unified": "Vereinheitlicht", - "ui.sessionReview.diffStyle.split": "Geteilt", - "ui.sessionReview.openFile": "Datei öffnen", - "ui.sessionReview.selection.line": "Zeile {{line}}", - "ui.sessionReview.selection.lines": "Zeilen {{start}}-{{end}}", - "ui.sessionReview.expandAll": "Alle erweitern", - "ui.sessionReview.collapseAll": "Alle reduzieren", - - "ui.sessionReview.change.added": "Hinzugefügt", - "ui.sessionReview.change.removed": "Entfernt", - "ui.sessionReview.change.modified": "Geändert", - "ui.sessionReview.image.loading": "Wird geladen...", - "ui.sessionReview.image.placeholder": "Bild", - "ui.sessionReview.largeDiff.title": "Diff zu groß zum Rendern", - "ui.sessionReview.largeDiff.meta": "Limit: {{limit}} geänderte Zeilen. Aktuell: {{current}} geänderte Zeilen.", - "ui.sessionReview.largeDiff.renderAnyway": "Trotzdem rendern", - "ui.fileMedia.kind.image": "bild", - "ui.fileMedia.kind.audio": "audio", - "ui.fileMedia.state.removed": "{{kind}} entfernt", - "ui.fileMedia.state.loading": "{{kind}} wird geladen", - "ui.fileMedia.state.error": "Fehler bei {{kind}}", - "ui.fileMedia.state.unavailable": "{{kind}} nicht verfügbar", - "ui.fileMedia.binary.title": "Binärdatei", - "ui.fileMedia.binary.description.path": - "{{path}} kann nicht angezeigt werden, da es sich um eine Binärdatei handelt.", - "ui.fileMedia.binary.description.default": - "Diese Datei kann nicht angezeigt werden, da es sich um eine Binärdatei handelt.", - "ui.lineComment.label.prefix": "Kommentar zu ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "Kommentiere ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "Kommentar hinzufügen", - "ui.lineComment.submit": "Kommentieren", - "ui.sessionTurn.steps.show": "Schritte anzeigen", - "ui.sessionTurn.steps.hide": "Schritte ausblenden", - "ui.sessionTurn.summary.response": "Antwort", - "ui.sessionTurn.diff.showMore": "Weitere Änderungen anzeigen ({{count}})", - - "ui.sessionTurn.retry.retrying": "erneuter Versuch", - "ui.sessionTurn.retry.inSeconds": "in {{seconds}}s", - "ui.sessionTurn.retry.attempt": "Versuch #{{attempt}}", - "ui.sessionTurn.retry.attemptLine": "{{line}} - Versuch #{{attempt}}", - "ui.sessionTurn.retry.geminiHot": "gemini ist gerade sehr überlastet", - "ui.sessionTurn.error.freeUsageExceeded": "Kostenloses Nutzungslimit überschritten", - "ui.sessionTurn.error.addCredits": "Guthaben aufladen", - - "dialog.usageExceeded.freeTier.title": "Kostenloses Limit erreicht", - "dialog.usageExceeded.freeTier.description": - "Abonniere OpenCode Go für zuverlässigen Zugriff auf die besten Open-Source-Modelle, ab $5/Monat.", - "dialog.usageExceeded.freeTier.actionLabel": "Abonnieren", - "dialog.usageExceeded.accountRateLimit.title": "Go-Limit erreicht", - "dialog.usageExceeded.accountRateLimit.description": - "Nutzungslimit erreicht. Um dieses Modell jetzt weiter zu nutzen, aktiviere die Nutzung über dein verfügbares Guthaben", - "dialog.usageExceeded.accountRateLimit.actionLabel": "Einstellungen öffnen", - - "ui.sessionTurn.status.delegating": "Arbeit delegieren", - "ui.sessionTurn.status.planning": "Nächste Schritte planen", - "ui.sessionTurn.status.gatheringContext": "Erkunden", - "ui.sessionTurn.status.gatheredContext": "Erkundet", - "ui.sessionTurn.status.searchingCodebase": "Codebasis durchsuchen", - "ui.sessionTurn.status.searchingWeb": "Web durchsuchen", - "ui.sessionTurn.status.makingEdits": "Änderungen vornehmen", - "ui.sessionTurn.status.runningCommands": "Befehle ausführen", - "ui.sessionTurn.status.thinking": "Denken", - "ui.sessionTurn.status.thinkingWithTopic": "Denken - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "Gedanken sammeln", - "ui.sessionTurn.status.consideringNextSteps": "Nächste Schritte erwägen", - - "ui.messagePart.questions.dismissed": "Fragen verworfen", - "ui.messagePart.compaction": "Sitzung komprimiert", - "ui.messagePart.context.read.one": "{{count}} Lesevorgang", - "ui.messagePart.context.read.other": "{{count}} Lesevorgänge", - "ui.messagePart.context.search.one": "{{count}} Suche", - "ui.messagePart.context.search.other": "{{count}} Suchen", - "ui.messagePart.context.list.one": "{{count}} Liste", - "ui.messagePart.context.list.other": "{{count}} Listen", - "ui.messagePart.diagnostic.error": "Fehler", - "ui.messagePart.title.edit": "Bearbeiten", - "ui.messagePart.title.write": "Schreiben", - "ui.messagePart.option.typeOwnAnswer": "Eigene Antwort eingeben", - "ui.messagePart.review.title": "Antworten überprüfen", - - "ui.list.loading": "Laden", - "ui.list.empty": "Keine Ergebnisse", - "ui.list.clearFilter": "Filter löschen", - "ui.list.emptyWithFilter.prefix": "Keine Ergebnisse für", - "ui.list.emptyWithFilter.suffix": "", - - "ui.messageNav.newMessage": "Neue Nachricht", - - "ui.textField.copyToClipboard": "In die Zwischenablage kopieren", - "ui.textField.copyLink": "Link kopieren", - "ui.textField.copied": "Kopiert", - - "ui.imagePreview.alt": "Bildvorschau", - "ui.scrollView.ariaLabel": "scrollbarer Inhalt", - - "ui.tool.read": "Lesen", - "ui.tool.loaded": "Geladen", - "ui.tool.list": "Auflisten", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "Webabruf", - "ui.tool.websearch": "Websuche", - "ui.tool.shell": "Shell", - "ui.tool.patch": "Patch", - "ui.tool.todos": "Aufgaben", - "ui.tool.todos.read": "Aufgaben lesen", - "ui.tool.questions": "Fragen", - "ui.tool.agent": "{{type}} Agent", - "ui.tool.agent.default": "Agent", - - "ui.common.file.one": "Datei", - "ui.common.file.other": "Dateien", - "ui.common.question.one": "Frage", - "ui.common.question.other": "Fragen", - - "ui.common.add": "Hinzufügen", - "ui.common.back": "Zurück", - "ui.common.cancel": "Abbrechen", - "ui.common.confirm": "Bestätigen", - "ui.common.dismiss": "Verwerfen", - "ui.common.close": "Schließen", - "ui.common.next": "Weiter", - "ui.common.submit": "Absenden", - - "ui.permission.deny": "Verweigern", - "ui.permission.allowAlways": "Immer erlauben", - "ui.permission.allowOnce": "Einmal erlauben", - - "ui.message.expand": "Nachricht erweitern", - "ui.message.collapse": "Nachricht reduzieren", - "ui.message.copy": "Kopieren", - "ui.message.copyMessage": "Nachricht kopieren", - "ui.message.forkMessage": "In neue Sitzung abzweigen", - "ui.message.revertMessage": "Auf diesen Punkt zurücksetzen", - "ui.message.copyResponse": "Antwort kopieren", - "ui.message.copied": "Kopiert!", - "ui.message.interrupted": "Unterbrochen", - "ui.message.queued": "In Warteschlange", - "ui.message.attachment.alt": "Anhang", - - "ui.patch.action.deleted": "Gelöscht", - "ui.patch.action.created": "Erstellt", - "ui.patch.action.moved": "Verschoben", - "ui.patch.action.patched": "Gepatched", - - "ui.question.subtitle.answered": "{{count}} beantwortet", - "ui.question.answer.none": "(keine Antwort)", - "ui.question.review.notAnswered": "(nicht beantwortet)", - "ui.question.multiHint": "Alle zutreffenden auswählen", - "ui.question.singleHint": "Eine Antwort auswählen", - "ui.question.custom.placeholder": "Geben Sie Ihre Antwort ein...", - - "ui.fileSearch.placeholder": "Suchen", - "ui.fileSearch.previousMatch": "Vorheriges Ergebnis", - "ui.fileSearch.nextMatch": "Nächstes Ergebnis", - "ui.fileSearch.close": "Suche schließen", - "ui.tool.task": "Aufgabe", - "ui.tool.skill": "Fähigkeit", - "ui.basicTool.called": "`{{tool}}` aufgerufen", - "ui.toolErrorCard.failed": "Fehlgeschlagen", - "ui.toolErrorCard.copyError": "Fehler kopieren", - "ui.message.duration.seconds": "{{count}}s", - "ui.message.duration.minutesSeconds": "{{minutes}}m {{seconds}}s", -} satisfies Partial> diff --git a/packages/ui/src/i18n/fr.ts b/packages/ui/src/i18n/fr.ts deleted file mode 100644 index 3ae122d35e..0000000000 --- a/packages/ui/src/i18n/fr.ts +++ /dev/null @@ -1,168 +0,0 @@ -export const dict = { - "ui.sessionReview.title": "Modifications de la session", - "ui.sessionReview.title.lastTurn": "Modifications du dernier tour", - "ui.sessionReview.diffStyle.unified": "Unifié", - "ui.sessionReview.diffStyle.split": "Divisé", - "ui.sessionReview.openFile": "Ouvrir le fichier", - "ui.sessionReview.selection.line": "ligne {{line}}", - "ui.sessionReview.selection.lines": "lignes {{start}}-{{end}}", - "ui.sessionReview.expandAll": "Tout développer", - "ui.sessionReview.collapseAll": "Tout réduire", - "ui.sessionReview.change.added": "Ajouté", - "ui.sessionReview.change.removed": "Supprimé", - "ui.sessionReview.change.modified": "Modifié", - "ui.sessionReview.image.loading": "Chargement...", - "ui.sessionReview.image.placeholder": "Image", - "ui.sessionReview.largeDiff.title": "Diff trop volumineux pour être affiché", - "ui.sessionReview.largeDiff.meta": "Limite : {{limit}} lignes modifiées. Actuel : {{current}} lignes modifiées.", - "ui.sessionReview.largeDiff.renderAnyway": "Afficher quand même", - "ui.fileMedia.kind.image": "image", - "ui.fileMedia.kind.audio": "audio", - "ui.fileMedia.state.removed": "Fichier {{kind}} supprimé", - "ui.fileMedia.state.loading": "Chargement du fichier {{kind}}", - "ui.fileMedia.state.error": "Erreur avec le fichier {{kind}}", - "ui.fileMedia.state.unavailable": "Fichier {{kind}} indisponible", - "ui.fileMedia.binary.title": "Fichier binaire", - "ui.fileMedia.binary.description.path": "Impossible d'afficher {{path}} car il s'agit d'un fichier binaire.", - "ui.fileMedia.binary.description.default": "Impossible d'afficher ce fichier car il s'agit d'un fichier binaire.", - - "ui.lineComment.label.prefix": "Commenter sur ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "Commentaire sur ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "Ajouter un commentaire", - "ui.lineComment.submit": "Commenter", - - "ui.sessionTurn.steps.show": "Afficher les étapes", - "ui.sessionTurn.steps.hide": "Masquer les étapes", - "ui.sessionTurn.summary.response": "Réponse", - "ui.sessionTurn.diff.showMore": "Afficher plus de modifications ({{count}})", - - "ui.sessionTurn.retry.retrying": "nouvelle tentative", - "ui.sessionTurn.retry.inSeconds": "dans {{seconds}}s", - "ui.sessionTurn.retry.attempt": "tentative n°{{attempt}}", - "ui.sessionTurn.retry.attemptLine": "{{line}} - tentative n°{{attempt}}", - "ui.sessionTurn.retry.geminiHot": "gemini est en surchauffe", - "ui.sessionTurn.error.freeUsageExceeded": "Limite d'utilisation gratuite dépassée", - "ui.sessionTurn.error.addCredits": "Ajouter des crédits", - - "dialog.usageExceeded.freeTier.title": "Limite gratuite atteinte", - "dialog.usageExceeded.freeTier.description": - "Abonnez-vous à OpenCode Go pour un accès fiable aux meilleurs modèles open source, à partir de $5/mois.", - "dialog.usageExceeded.freeTier.actionLabel": "S'abonner", - "dialog.usageExceeded.accountRateLimit.title": "Limite Go atteinte", - "dialog.usageExceeded.accountRateLimit.description": - "Limite d'utilisation atteinte. Pour continuer à utiliser ce modèle maintenant, activez l'utilisation depuis votre solde disponible", - "dialog.usageExceeded.accountRateLimit.actionLabel": "Ouvrir les paramètres", - - "ui.sessionTurn.status.delegating": "Délégation du travail", - "ui.sessionTurn.status.planning": "Planification des prochaines étapes", - "ui.sessionTurn.status.gatheringContext": "Exploration", - "ui.sessionTurn.status.gatheredContext": "Exploré", - "ui.sessionTurn.status.searchingCodebase": "Recherche dans la base de code", - "ui.sessionTurn.status.searchingWeb": "Recherche sur le web", - "ui.sessionTurn.status.makingEdits": "Application des modifications", - "ui.sessionTurn.status.runningCommands": "Exécution des commandes", - "ui.sessionTurn.status.thinking": "Réflexion", - "ui.sessionTurn.status.thinkingWithTopic": "Réflexion - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "Rassemblement des idées", - "ui.sessionTurn.status.consideringNextSteps": "Examen des prochaines étapes", - - "ui.messagePart.questions.dismissed": "Questions ignorées", - "ui.messagePart.compaction": "Session compactée", - "ui.messagePart.context.read.one": "{{count}} lecture", - "ui.messagePart.context.read.other": "{{count}} lectures", - "ui.messagePart.context.search.one": "{{count}} recherche", - "ui.messagePart.context.search.other": "{{count}} recherches", - "ui.messagePart.context.list.one": "{{count}} liste", - "ui.messagePart.context.list.other": "{{count}} listes", - "ui.messagePart.diagnostic.error": "Erreur", - "ui.messagePart.title.edit": "Modifier", - "ui.messagePart.title.write": "Écrire", - "ui.messagePart.option.typeOwnAnswer": "Tapez votre propre réponse", - "ui.messagePart.review.title": "Passez en revue vos réponses", - - "ui.list.loading": "Chargement", - "ui.list.empty": "Aucun résultat", - "ui.list.clearFilter": "Effacer le filtre", - "ui.list.emptyWithFilter.prefix": "Aucun résultat pour", - "ui.list.emptyWithFilter.suffix": "", - - "ui.messageNav.newMessage": "Nouveau message", - - "ui.textField.copyToClipboard": "Copier dans le presse-papiers", - "ui.textField.copyLink": "Copier le lien", - "ui.textField.copied": "Copié", - - "ui.imagePreview.alt": "Aperçu de l'image", - "ui.scrollView.ariaLabel": "contenu défilable", - - "ui.tool.read": "Lire", - "ui.tool.loaded": "Chargé", - "ui.tool.list": "Lister", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "Webfetch", - "ui.tool.websearch": "Recherche Web", - "ui.tool.shell": "Shell", - "ui.tool.patch": "Patch", - "ui.tool.todos": "Tâches", - "ui.tool.todos.read": "Lire les tâches", - "ui.tool.questions": "Questions", - "ui.tool.agent": "Agent {{type}}", - "ui.tool.agent.default": "Agent", - - "ui.common.file.one": "fichier", - "ui.common.file.other": "fichiers", - "ui.common.question.one": "question", - "ui.common.question.other": "questions", - - "ui.common.add": "Ajouter", - "ui.common.back": "Retour", - "ui.common.cancel": "Annuler", - "ui.common.confirm": "Confirmer", - "ui.common.dismiss": "Ignorer", - "ui.common.close": "Fermer", - "ui.common.next": "Suivant", - "ui.common.submit": "Soumettre", - - "ui.permission.deny": "Refuser", - "ui.permission.allowAlways": "Toujours autoriser", - "ui.permission.allowOnce": "Autoriser une fois", - - "ui.message.expand": "Développer le message", - "ui.message.collapse": "Réduire le message", - "ui.message.copy": "Copier", - "ui.message.copyMessage": "Copier le message", - "ui.message.forkMessage": "Bifurquer vers une nouvelle session", - "ui.message.revertMessage": "Réinitialiser à ce point", - "ui.message.copyResponse": "Copier la réponse", - "ui.message.copied": "Copié !", - "ui.message.interrupted": "Interrompu", - "ui.message.queued": "En file", - "ui.message.attachment.alt": "pièce jointe", - - "ui.patch.action.deleted": "Supprimé", - "ui.patch.action.created": "Créé", - "ui.patch.action.moved": "Déplacé", - "ui.patch.action.patched": "Corrigé", - - "ui.question.subtitle.answered": "{{count}} répondu(s)", - "ui.question.answer.none": "(pas de réponse)", - "ui.question.review.notAnswered": "(non répondu)", - "ui.question.multiHint": "Sélectionnez tout ce qui s'applique", - "ui.question.singleHint": "Sélectionnez une réponse", - "ui.question.custom.placeholder": "Tapez votre réponse...", - - "ui.fileSearch.placeholder": "Rechercher", - "ui.fileSearch.previousMatch": "Précédent", - "ui.fileSearch.nextMatch": "Suivant", - "ui.fileSearch.close": "Fermer la recherche", - "ui.tool.task": "Tâche", - "ui.tool.skill": "Compétence", - "ui.basicTool.called": "Appelé `{{tool}}`", - "ui.toolErrorCard.failed": "Échoué", - "ui.toolErrorCard.copyError": "Copier l'erreur", - "ui.message.duration.seconds": "{{count}}s", - "ui.message.duration.minutesSeconds": "{{minutes}}m {{seconds}}s", -} diff --git a/packages/ui/src/i18n/ja.ts b/packages/ui/src/i18n/ja.ts deleted file mode 100644 index 1b50cb5ff1..0000000000 --- a/packages/ui/src/i18n/ja.ts +++ /dev/null @@ -1,167 +0,0 @@ -export const dict = { - "ui.sessionReview.title": "セッションの変更", - "ui.sessionReview.title.lastTurn": "前回ターンの変更", - "ui.sessionReview.diffStyle.unified": "Unified", - "ui.sessionReview.diffStyle.split": "Split", - "ui.sessionReview.openFile": "ファイルを開く", - "ui.sessionReview.selection.line": "{{line}} 行目", - "ui.sessionReview.selection.lines": "{{start}}-{{end}} 行目", - "ui.sessionReview.expandAll": "すべて展開", - "ui.sessionReview.collapseAll": "すべて折りたたむ", - - "ui.sessionReview.change.added": "追加", - "ui.sessionReview.change.removed": "削除", - "ui.sessionReview.change.modified": "変更", - "ui.sessionReview.image.loading": "読み込み中...", - "ui.sessionReview.image.placeholder": "画像", - "ui.sessionReview.largeDiff.title": "差分が大きすぎて表示できません", - "ui.sessionReview.largeDiff.meta": "上限: {{limit}} 変更行。現在: {{current}} 変更行。", - "ui.sessionReview.largeDiff.renderAnyway": "それでも表示する", - "ui.fileMedia.kind.image": "画像", - "ui.fileMedia.kind.audio": "音声", - "ui.fileMedia.state.removed": "{{kind}}は削除されました", - "ui.fileMedia.state.loading": "{{kind}}を読み込んでいます...", - "ui.fileMedia.state.error": "{{kind}}の読み込みに失敗しました", - "ui.fileMedia.state.unavailable": "{{kind}}は表示できません", - "ui.fileMedia.binary.title": "バイナリファイル", - "ui.fileMedia.binary.description.path": "{{path}} はバイナリファイルのため表示できません。", - "ui.fileMedia.binary.description.default": "このファイルはバイナリファイルのため表示できません。", - "ui.lineComment.label.prefix": "", - "ui.lineComment.label.suffix": "へのコメント", - "ui.lineComment.editorLabel.prefix": "", - "ui.lineComment.editorLabel.suffix": "へのコメントを作成中", - "ui.lineComment.placeholder": "コメントを追加", - "ui.lineComment.submit": "コメント", - "ui.sessionTurn.steps.show": "ステップを表示", - "ui.sessionTurn.steps.hide": "ステップを隠す", - "ui.sessionTurn.summary.response": "応答", - "ui.sessionTurn.diff.showMore": "さらに変更を表示 ({{count}})", - - "ui.sessionTurn.retry.retrying": "再試行中", - "ui.sessionTurn.retry.inSeconds": "{{seconds}}秒後", - "ui.sessionTurn.retry.attempt": "{{attempt}}回目", - "ui.sessionTurn.retry.attemptLine": "{{line}} - {{attempt}}回目", - "ui.sessionTurn.retry.geminiHot": "gemini が混雑しています", - "ui.sessionTurn.error.freeUsageExceeded": "無料使用制限に達しました", - "ui.sessionTurn.error.addCredits": "クレジットを追加", - - "dialog.usageExceeded.freeTier.title": "無料制限に達しました", - "dialog.usageExceeded.freeTier.description": - "OpenCode Go にサブスクライブして、最高のオープンソースモデルに安定してアクセスできます。月額 $5 から。", - "dialog.usageExceeded.freeTier.actionLabel": "サブスクライブ", - "dialog.usageExceeded.accountRateLimit.title": "Go の制限に達しました", - "dialog.usageExceeded.accountRateLimit.description": - "使用制限に達しました。今すぐこのモデルを使い続けるには、利用可能な残高からの使用を有効にしてください", - "dialog.usageExceeded.accountRateLimit.actionLabel": "設定を開く", - - "ui.sessionTurn.status.delegating": "作業を委任中", - "ui.sessionTurn.status.planning": "次のステップを計画中", - "ui.sessionTurn.status.gatheringContext": "探索中", - "ui.sessionTurn.status.gatheredContext": "探索済み", - "ui.sessionTurn.status.searchingCodebase": "コードベースを検索中", - "ui.sessionTurn.status.searchingWeb": "ウェブを検索中", - "ui.sessionTurn.status.makingEdits": "編集を実行中", - "ui.sessionTurn.status.runningCommands": "コマンドを実行中", - "ui.sessionTurn.status.thinking": "思考中", - "ui.sessionTurn.status.thinkingWithTopic": "思考中 - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "考えをまとめています", - "ui.sessionTurn.status.consideringNextSteps": "次のステップを検討中", - - "ui.messagePart.questions.dismissed": "質問をスキップしました", - "ui.messagePart.compaction": "セッションを圧縮しました", - "ui.messagePart.context.read.one": "{{count}} 件の読み取り", - "ui.messagePart.context.read.other": "{{count}} 件の読み取り", - "ui.messagePart.context.search.one": "{{count}} 件の検索", - "ui.messagePart.context.search.other": "{{count}} 件の検索", - "ui.messagePart.context.list.one": "{{count}} 件のリスト", - "ui.messagePart.context.list.other": "{{count}} 件のリスト", - "ui.messagePart.diagnostic.error": "エラー", - "ui.messagePart.title.edit": "編集", - "ui.messagePart.title.write": "作成", - "ui.messagePart.option.typeOwnAnswer": "自分の回答を入力", - "ui.messagePart.review.title": "回答を確認", - - "ui.list.loading": "読み込み中", - "ui.list.empty": "結果なし", - "ui.list.clearFilter": "フィルターをクリア", - "ui.list.emptyWithFilter.prefix": "次の検索結果はありません: ", - "ui.list.emptyWithFilter.suffix": "", - - "ui.messageNav.newMessage": "新しいメッセージ", - - "ui.textField.copyToClipboard": "クリップボードにコピー", - "ui.textField.copyLink": "リンクをコピー", - "ui.textField.copied": "コピーしました", - - "ui.imagePreview.alt": "画像プレビュー", - "ui.scrollView.ariaLabel": "スクロール可能なコンテンツ", - - "ui.tool.read": "読み込み", - "ui.tool.loaded": "読み込み済み", - "ui.tool.list": "リスト", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "Webfetch", - "ui.tool.websearch": "Web検索", - "ui.tool.shell": "Shell", - "ui.tool.patch": "Patch", - "ui.tool.todos": "Todo", - "ui.tool.todos.read": "Todo読み込み", - "ui.tool.questions": "質問", - "ui.tool.agent": "{{type}}エージェント", - "ui.tool.agent.default": "エージェント", - - "ui.common.file.one": "ファイル", - "ui.common.file.other": "ファイル", - "ui.common.question.one": "質問", - "ui.common.question.other": "質問", - - "ui.common.add": "追加", - "ui.common.back": "戻る", - "ui.common.cancel": "キャンセル", - "ui.common.confirm": "確認", - "ui.common.dismiss": "閉じる", - "ui.common.close": "閉じる", - "ui.common.next": "次へ", - "ui.common.submit": "送信", - - "ui.permission.deny": "拒否", - "ui.permission.allowAlways": "常に許可", - "ui.permission.allowOnce": "今回のみ許可", - - "ui.message.expand": "メッセージを展開", - "ui.message.collapse": "メッセージを折りたたむ", - "ui.message.copy": "コピー", - "ui.message.copyMessage": "メッセージをコピー", - "ui.message.forkMessage": "新しいセッションにフォーク", - "ui.message.revertMessage": "この時点までリセット", - "ui.message.copyResponse": "応答をコピー", - "ui.message.copied": "コピーしました!", - "ui.message.interrupted": "中断", - "ui.message.queued": "待機中", - "ui.message.attachment.alt": "添付ファイル", - - "ui.patch.action.deleted": "削除済み", - "ui.patch.action.created": "作成済み", - "ui.patch.action.moved": "移動済み", - "ui.patch.action.patched": "パッチ適用済み", - - "ui.question.subtitle.answered": "{{count}}件回答済み", - "ui.question.answer.none": "(回答なし)", - "ui.question.review.notAnswered": "(未回答)", - "ui.question.multiHint": "該当するものをすべて選択", - "ui.question.singleHint": "1 つ選択", - "ui.question.custom.placeholder": "回答を入力...", - - "ui.fileSearch.placeholder": "検索", - "ui.fileSearch.previousMatch": "前の一致", - "ui.fileSearch.nextMatch": "次の一致", - "ui.fileSearch.close": "検索を閉じる", - "ui.tool.task": "タスク", - "ui.tool.skill": "スキル", - "ui.basicTool.called": "`{{tool}}` を呼び出しました", - "ui.toolErrorCard.failed": "失敗", - "ui.toolErrorCard.copyError": "エラーをコピー", - "ui.message.duration.seconds": "{{count}}秒", - "ui.message.duration.minutesSeconds": "{{minutes}}分 {{seconds}}秒", -} diff --git a/packages/ui/src/i18n/ko.ts b/packages/ui/src/i18n/ko.ts deleted file mode 100644 index d6c480364d..0000000000 --- a/packages/ui/src/i18n/ko.ts +++ /dev/null @@ -1,168 +0,0 @@ -export const dict = { - "ui.sessionReview.title": "세션 변경 사항", - "ui.sessionReview.title.lastTurn": "마지막 턴 변경 사항", - "ui.sessionReview.diffStyle.unified": "통합 보기", - "ui.sessionReview.diffStyle.split": "분할 보기", - "ui.sessionReview.openFile": "파일 열기", - "ui.sessionReview.selection.line": "{{line}}번 줄", - "ui.sessionReview.selection.lines": "{{start}}-{{end}}번 줄", - "ui.sessionReview.expandAll": "모두 펼치기", - "ui.sessionReview.collapseAll": "모두 접기", - "ui.sessionReview.change.added": "추가됨", - "ui.sessionReview.change.removed": "삭제됨", - "ui.sessionReview.change.modified": "수정됨", - "ui.sessionReview.image.loading": "로딩 중...", - "ui.sessionReview.image.placeholder": "이미지", - "ui.sessionReview.largeDiff.title": "차이가 너무 커서 렌더링할 수 없습니다", - "ui.sessionReview.largeDiff.meta": "제한: {{limit}} 변경 줄. 현재: {{current}} 변경 줄.", - "ui.sessionReview.largeDiff.renderAnyway": "그래도 렌더링", - "ui.fileMedia.kind.image": "이미지", - "ui.fileMedia.kind.audio": "오디오", - "ui.fileMedia.state.removed": "{{kind}} 제거됨", - "ui.fileMedia.state.loading": "{{kind}} 로드 중...", - "ui.fileMedia.state.error": "{{kind}} 로드 오류", - "ui.fileMedia.state.unavailable": "{{kind}} 사용 불가", - "ui.fileMedia.binary.title": "바이너리 파일", - "ui.fileMedia.binary.description.path": "{{path}}은(는) 바이너리 파일이므로 표시할 수 없습니다.", - "ui.fileMedia.binary.description.default": "바이너리 파일이므로 표시할 수 없습니다.", - - "ui.lineComment.label.prefix": "", - "ui.lineComment.label.suffix": "에 댓글 달기", - "ui.lineComment.editorLabel.prefix": "", - "ui.lineComment.editorLabel.suffix": "에 댓글 작성 중", - "ui.lineComment.placeholder": "댓글 추가", - "ui.lineComment.submit": "댓글", - - "ui.sessionTurn.steps.show": "단계 표시", - "ui.sessionTurn.steps.hide": "단계 숨기기", - "ui.sessionTurn.summary.response": "응답", - "ui.sessionTurn.diff.showMore": "변경 사항 더 보기 ({{count}})", - - "ui.sessionTurn.retry.retrying": "재시도 중", - "ui.sessionTurn.retry.inSeconds": "{{seconds}}초 후", - "ui.sessionTurn.retry.attempt": "{{attempt}}번째", - "ui.sessionTurn.retry.attemptLine": "{{line}} - {{attempt}}번째", - "ui.sessionTurn.retry.geminiHot": "gemini가 현재 과부하 상태입니다", - "ui.sessionTurn.error.freeUsageExceeded": "무료 사용량 초과", - "ui.sessionTurn.error.addCredits": "크레딧 추가", - - "dialog.usageExceeded.freeTier.title": "무료 한도에 도달했습니다", - "dialog.usageExceeded.freeTier.description": - "OpenCode Go를 구독하여 최고의 오픈 소스 모델에 안정적으로 액세스하세요. 월 $5부터 시작합니다.", - "dialog.usageExceeded.freeTier.actionLabel": "구독", - "dialog.usageExceeded.accountRateLimit.title": "Go 한도에 도달했습니다", - "dialog.usageExceeded.accountRateLimit.description": - "사용량 한도에 도달했습니다. 지금 이 모델을 계속 사용하려면 사용 가능한 잔액에서 사용을 활성화하세요", - "dialog.usageExceeded.accountRateLimit.actionLabel": "설정 열기", - - "ui.sessionTurn.status.delegating": "작업 위임 중", - "ui.sessionTurn.status.planning": "다음 단계 계획 중", - "ui.sessionTurn.status.gatheringContext": "탐색 중", - "ui.sessionTurn.status.gatheredContext": "탐색됨", - "ui.sessionTurn.status.searchingCodebase": "코드베이스 검색 중", - "ui.sessionTurn.status.searchingWeb": "웹 검색 중", - "ui.sessionTurn.status.makingEdits": "편집 수행 중", - "ui.sessionTurn.status.runningCommands": "명령어 실행 중", - "ui.sessionTurn.status.thinking": "생각 중", - "ui.sessionTurn.status.thinkingWithTopic": "생각 중 - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "생각 정리 중", - "ui.sessionTurn.status.consideringNextSteps": "다음 단계 고려 중", - - "ui.messagePart.questions.dismissed": "질문 무시됨", - "ui.messagePart.compaction": "세션 압축됨", - "ui.messagePart.context.read.one": "{{count}}개 읽음", - "ui.messagePart.context.read.other": "{{count}}개 읽음", - "ui.messagePart.context.search.one": "{{count}}개 검색", - "ui.messagePart.context.search.other": "{{count}}개 검색", - "ui.messagePart.context.list.one": "{{count}}개 목록", - "ui.messagePart.context.list.other": "{{count}}개 목록", - "ui.messagePart.diagnostic.error": "오류", - "ui.messagePart.title.edit": "편집", - "ui.messagePart.title.write": "작성", - "ui.messagePart.option.typeOwnAnswer": "직접 답변 입력", - "ui.messagePart.review.title": "답변 검토", - - "ui.list.loading": "로딩 중", - "ui.list.empty": "결과 없음", - "ui.list.clearFilter": "필터 지우기", - "ui.list.emptyWithFilter.prefix": "다음에 대한 결과 없음: ", - "ui.list.emptyWithFilter.suffix": "", - - "ui.messageNav.newMessage": "새 메시지", - - "ui.textField.copyToClipboard": "클립보드에 복사", - "ui.textField.copyLink": "링크 복사", - "ui.textField.copied": "복사됨", - - "ui.imagePreview.alt": "이미지 미리보기", - "ui.scrollView.ariaLabel": "스크롤 가능한 콘텐츠", - - "ui.tool.read": "읽기", - "ui.tool.loaded": "로드됨", - "ui.tool.list": "목록", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "웹 가져오기", - "ui.tool.websearch": "웹 검색", - "ui.tool.shell": "셸", - "ui.tool.patch": "패치", - "ui.tool.todos": "할 일", - "ui.tool.todos.read": "할 일 읽기", - "ui.tool.questions": "질문", - "ui.tool.agent": "{{type}} 에이전트", - "ui.tool.agent.default": "에이전트", - - "ui.common.file.one": "파일", - "ui.common.file.other": "파일", - "ui.common.question.one": "질문", - "ui.common.question.other": "질문", - - "ui.common.add": "추가", - "ui.common.back": "뒤로", - "ui.common.cancel": "취소", - "ui.common.confirm": "확인", - "ui.common.dismiss": "닫기", - "ui.common.close": "닫기", - "ui.common.next": "다음", - "ui.common.submit": "제출", - - "ui.permission.deny": "거부", - "ui.permission.allowAlways": "항상 허용", - "ui.permission.allowOnce": "한 번만 허용", - - "ui.message.expand": "메시지 펼치기", - "ui.message.collapse": "메시지 접기", - "ui.message.copy": "복사", - "ui.message.copyMessage": "메시지 복사", - "ui.message.forkMessage": "새 세션으로 분기", - "ui.message.revertMessage": "이 시점으로 초기화", - "ui.message.copyResponse": "응답 복사", - "ui.message.copied": "복사됨!", - "ui.message.interrupted": "중단됨", - "ui.message.queued": "대기 중", - "ui.message.attachment.alt": "첨부 파일", - - "ui.patch.action.deleted": "삭제됨", - "ui.patch.action.created": "생성됨", - "ui.patch.action.moved": "이동됨", - "ui.patch.action.patched": "패치됨", - - "ui.question.subtitle.answered": "{{count}}개 답변됨", - "ui.question.answer.none": "(답변 없음)", - "ui.question.review.notAnswered": "(답변되지 않음)", - "ui.question.multiHint": "해당하는 항목 모두 선택", - "ui.question.singleHint": "하나의 답변을 선택", - "ui.question.custom.placeholder": "답변 입력...", - - "ui.fileSearch.placeholder": "찾기", - "ui.fileSearch.previousMatch": "이전 항목", - "ui.fileSearch.nextMatch": "다음 항목", - "ui.fileSearch.close": "검색 닫기", - "ui.tool.task": "작업", - "ui.tool.skill": "스킬", - "ui.basicTool.called": "`{{tool}}` 호출됨", - "ui.toolErrorCard.failed": "실패", - "ui.toolErrorCard.copyError": "오류 복사", - "ui.message.duration.seconds": "{{count}}초", - "ui.message.duration.minutesSeconds": "{{minutes}}분 {{seconds}}초", -} diff --git a/packages/ui/src/i18n/no.ts b/packages/ui/src/i18n/no.ts deleted file mode 100644 index ecf67219d5..0000000000 --- a/packages/ui/src/i18n/no.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { dict as en } from "./en" -type Keys = keyof typeof en - -export const dict: Record = { - "ui.sessionReview.title": "Sesjonsendringer", - "ui.sessionReview.title.lastTurn": "Endringer i siste tur", - "ui.sessionReview.diffStyle.unified": "Samlet", - "ui.sessionReview.diffStyle.split": "Delt", - "ui.sessionReview.openFile": "Åpne fil", - "ui.sessionReview.selection.line": "linje {{line}}", - "ui.sessionReview.selection.lines": "linjer {{start}}-{{end}}", - "ui.sessionReview.expandAll": "Utvid alle", - "ui.sessionReview.collapseAll": "Fold sammen alle", - "ui.sessionReview.change.added": "Lagt til", - "ui.sessionReview.change.removed": "Fjernet", - "ui.sessionReview.change.modified": "Endret", - "ui.sessionReview.image.loading": "Laster...", - "ui.sessionReview.image.placeholder": "Bilde", - "ui.sessionReview.largeDiff.title": "Diff er for stor til å gjengi", - "ui.sessionReview.largeDiff.meta": "Grense: {{limit}} endrede linjer. Nåværende: {{current}} endrede linjer.", - "ui.sessionReview.largeDiff.renderAnyway": "Gjengi likevel", - "ui.fileMedia.kind.image": "bilde", - "ui.fileMedia.kind.audio": "lyd", - "ui.fileMedia.state.removed": "Fjernet: {{kind}}", - "ui.fileMedia.state.loading": "Laster inn {{kind}}...", - "ui.fileMedia.state.error": "Feil ved innlasting: {{kind}}", - "ui.fileMedia.state.unavailable": "Ikke tilgjengelig: {{kind}}", - "ui.fileMedia.binary.title": "Binærfil", - "ui.fileMedia.binary.description.path": "{{path}} kan ikke vises fordi det er en binærfil.", - "ui.fileMedia.binary.description.default": "Denne filen kan ikke vises fordi det er en binærfil.", - - "ui.lineComment.label.prefix": "Kommenter på ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "Kommenterer på ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "Legg til kommentar", - "ui.lineComment.submit": "Kommenter", - - "ui.sessionTurn.steps.show": "Vis trinn", - "ui.sessionTurn.steps.hide": "Skjul trinn", - "ui.sessionTurn.summary.response": "Svar", - "ui.sessionTurn.diff.showMore": "Vis flere endringer ({{count}})", - - "ui.sessionTurn.retry.retrying": "Prøver igjen", - "ui.sessionTurn.retry.inSeconds": "om {{seconds}}s", - "ui.sessionTurn.retry.attempt": "forsøk #{{attempt}}", - "ui.sessionTurn.retry.attemptLine": "{{line}} - forsøk #{{attempt}}", - "ui.sessionTurn.retry.geminiHot": "gemini er veldig overbelastet nå", - "ui.sessionTurn.error.freeUsageExceeded": "Gratis bruk overskredet", - "ui.sessionTurn.error.addCredits": "Legg til kreditt", - - "dialog.usageExceeded.freeTier.title": "Gratis grense nådd", - "dialog.usageExceeded.freeTier.description": - "Abonner på OpenCode Go for pålitelig tilgang til de beste åpen kildekode-modellene, fra $5/måned.", - "dialog.usageExceeded.freeTier.actionLabel": "Abonner", - "dialog.usageExceeded.accountRateLimit.title": "Go-grense nådd", - "dialog.usageExceeded.accountRateLimit.description": - "Bruksgrense nådd. For å fortsette å bruke denne modellen nå, aktiver bruk fra din tilgjengelige saldo", - "dialog.usageExceeded.accountRateLimit.actionLabel": "Åpne innstillinger", - - "ui.sessionTurn.status.delegating": "Delegerer arbeid", - "ui.sessionTurn.status.planning": "Planlegger neste trinn", - "ui.sessionTurn.status.gatheringContext": "Utforsker", - "ui.sessionTurn.status.gatheredContext": "Utforsket", - "ui.sessionTurn.status.searchingCodebase": "Søker i kodebasen", - "ui.sessionTurn.status.searchingWeb": "Søker på nettet", - "ui.sessionTurn.status.makingEdits": "Gjør endringer", - "ui.sessionTurn.status.runningCommands": "Kjører kommandoer", - "ui.sessionTurn.status.thinking": "Tenker", - "ui.sessionTurn.status.thinkingWithTopic": "Tenker - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "Samler tanker", - "ui.sessionTurn.status.consideringNextSteps": "Vurderer neste trinn", - - "ui.messagePart.questions.dismissed": "Spørsmål avvist", - "ui.messagePart.compaction": "Økt komprimert", - "ui.messagePart.context.read.one": "{{count}} lest", - "ui.messagePart.context.read.other": "{{count}} lest", - "ui.messagePart.context.search.one": "{{count}} søk", - "ui.messagePart.context.search.other": "{{count}} søk", - "ui.messagePart.context.list.one": "{{count}} liste", - "ui.messagePart.context.list.other": "{{count}} lister", - "ui.messagePart.diagnostic.error": "Feil", - "ui.messagePart.title.edit": "Rediger", - "ui.messagePart.title.write": "Skriv", - "ui.messagePart.option.typeOwnAnswer": "Skriv ditt eget svar", - "ui.messagePart.review.title": "Gjennomgå svarene dine", - - "ui.list.loading": "Laster", - "ui.list.empty": "Ingen resultater", - "ui.list.clearFilter": "Tøm filter", - "ui.list.emptyWithFilter.prefix": "Ingen resultater for", - "ui.list.emptyWithFilter.suffix": "", - - "ui.messageNav.newMessage": "Ny melding", - - "ui.textField.copyToClipboard": "Kopier til utklippstavlen", - "ui.textField.copyLink": "Kopier lenke", - "ui.textField.copied": "Kopiert", - - "ui.imagePreview.alt": "Bildeforhåndsvisning", - "ui.scrollView.ariaLabel": "rullbart innhold", - - "ui.tool.read": "Les", - "ui.tool.loaded": "Lastet", - "ui.tool.list": "Liste", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "Webhenting", - "ui.tool.websearch": "Nettsøk", - "ui.tool.shell": "Shell", - "ui.tool.patch": "Patch", - "ui.tool.todos": "Gjøremål", - "ui.tool.todos.read": "Les gjøremål", - "ui.tool.questions": "Spørsmål", - "ui.tool.agent": "{{type}}-agent", - "ui.tool.agent.default": "Agent", - - "ui.common.file.one": "fil", - "ui.common.file.other": "filer", - "ui.common.question.one": "spørsmål", - "ui.common.question.other": "spørsmål", - - "ui.common.add": "Legg til", - "ui.common.back": "Tilbake", - "ui.common.cancel": "Avbryt", - "ui.common.confirm": "Bekreft", - "ui.common.dismiss": "Avvis", - "ui.common.close": "Lukk", - "ui.common.next": "Neste", - "ui.common.submit": "Send inn", - - "ui.permission.deny": "Avslå", - "ui.permission.allowAlways": "Tillat alltid", - "ui.permission.allowOnce": "Tillat én gang", - - "ui.message.expand": "Utvid melding", - "ui.message.collapse": "Skjul melding", - "ui.message.copy": "Kopier", - "ui.message.copyMessage": "Kopier melding", - "ui.message.forkMessage": "Forgren til ny sesjon", - "ui.message.revertMessage": "Tilbakestill til dette punktet", - "ui.message.copyResponse": "Kopier svar", - "ui.message.copied": "Kopiert!", - "ui.message.interrupted": "Avbrutt", - "ui.message.queued": "I kø", - "ui.message.attachment.alt": "vedlegg", - - "ui.patch.action.deleted": "Slettet", - "ui.patch.action.created": "Opprettet", - "ui.patch.action.moved": "Flyttet", - "ui.patch.action.patched": "Oppdatert", - - "ui.question.subtitle.answered": "{{count}} besvart", - "ui.question.answer.none": "(ingen svar)", - "ui.question.review.notAnswered": "(ikke besvart)", - "ui.question.multiHint": "Velg alle som gjelder", - "ui.question.singleHint": "Velg ett svar", - "ui.question.custom.placeholder": "Skriv svaret ditt...", - - "ui.fileSearch.placeholder": "Finn", - "ui.fileSearch.previousMatch": "Forrige treff", - "ui.fileSearch.nextMatch": "Neste treff", - "ui.fileSearch.close": "Lukk søk", - "ui.tool.task": "Oppgave", - "ui.tool.skill": "Ferdighet", - "ui.basicTool.called": "Kalte `{{tool}}`", - "ui.toolErrorCard.failed": "Mislyktes", - "ui.toolErrorCard.copyError": "Kopier feil", - "ui.message.duration.seconds": "{{count}}s", - "ui.message.duration.minutesSeconds": "{{minutes}}m {{seconds}}s", -} diff --git a/packages/ui/src/i18n/pl.ts b/packages/ui/src/i18n/pl.ts deleted file mode 100644 index 6ef40d2daf..0000000000 --- a/packages/ui/src/i18n/pl.ts +++ /dev/null @@ -1,167 +0,0 @@ -export const dict = { - "ui.sessionReview.title": "Zmiany w sesji", - "ui.sessionReview.title.lastTurn": "Zmiany z ostatniej tury", - "ui.sessionReview.diffStyle.unified": "Ujednolicony", - "ui.sessionReview.diffStyle.split": "Podzielony", - "ui.sessionReview.openFile": "Otwórz plik", - "ui.sessionReview.selection.line": "linia {{line}}", - "ui.sessionReview.selection.lines": "linie {{start}}-{{end}}", - "ui.sessionReview.expandAll": "Rozwiń wszystko", - "ui.sessionReview.collapseAll": "Zwiń wszystko", - - "ui.sessionReview.change.added": "Dodano", - "ui.sessionReview.change.removed": "Usunięto", - "ui.sessionReview.change.modified": "Zmodyfikowano", - "ui.sessionReview.image.loading": "Ładowanie...", - "ui.sessionReview.image.placeholder": "Obraz", - "ui.sessionReview.largeDiff.title": "Diff jest zbyt duży, aby go wyrenderować", - "ui.sessionReview.largeDiff.meta": "Limit: {{limit}} zmienionych linii. Obecnie: {{current}} zmienionych linii.", - "ui.sessionReview.largeDiff.renderAnyway": "Renderuj mimo to", - "ui.fileMedia.kind.image": "obraz", - "ui.fileMedia.kind.audio": "dźwięk", - "ui.fileMedia.state.removed": "{{kind}} usunięty", - "ui.fileMedia.state.loading": "Wczytywanie: {{kind}}...", - "ui.fileMedia.state.error": "Błąd wczytywania: {{kind}}", - "ui.fileMedia.state.unavailable": "{{kind}} niedostępny", - "ui.fileMedia.binary.title": "Plik binarny", - "ui.fileMedia.binary.description.path": "Nie można wyświetlić pliku {{path}}, ponieważ jest to plik binarny.", - "ui.fileMedia.binary.description.default": "Nie można wyświetlić tego pliku, ponieważ jest to plik binarny.", - "ui.lineComment.label.prefix": "Komentarz do ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "Komentowanie: ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "Dodaj komentarz", - "ui.lineComment.submit": "Skomentuj", - "ui.sessionTurn.steps.show": "Pokaż kroki", - "ui.sessionTurn.steps.hide": "Ukryj kroki", - "ui.sessionTurn.summary.response": "Odpowiedź", - "ui.sessionTurn.diff.showMore": "Pokaż więcej zmian ({{count}})", - - "ui.sessionTurn.retry.retrying": "ponawianie", - "ui.sessionTurn.retry.inSeconds": "za {{seconds}}s", - "ui.sessionTurn.retry.attempt": "próba #{{attempt}}", - "ui.sessionTurn.retry.attemptLine": "{{line}} - próba #{{attempt}}", - "ui.sessionTurn.retry.geminiHot": "gemini jest teraz mocno przeciążony", - "ui.sessionTurn.error.freeUsageExceeded": "Przekroczono limit darmowego użytkowania", - "ui.sessionTurn.error.addCredits": "Dodaj kredyty", - - "dialog.usageExceeded.freeTier.title": "Osiągnięto limit darmowy", - "dialog.usageExceeded.freeTier.description": - "Subskrybuj OpenCode Go, aby uzyskać niezawodny dostęp do najlepszych modeli open source, od $5/miesiąc.", - "dialog.usageExceeded.freeTier.actionLabel": "Subskrybuj", - "dialog.usageExceeded.accountRateLimit.title": "Osiągnięto limit Go", - "dialog.usageExceeded.accountRateLimit.description": - "Osiągnięto limit użycia. Aby kontynuować korzystanie z tego modelu teraz, włącz użycie z dostępnego salda", - "dialog.usageExceeded.accountRateLimit.actionLabel": "Otwórz ustawienia", - - "ui.sessionTurn.status.delegating": "Delegowanie pracy", - "ui.sessionTurn.status.planning": "Planowanie kolejnych kroków", - "ui.sessionTurn.status.gatheringContext": "Eksplorowanie", - "ui.sessionTurn.status.gatheredContext": "Wyeksplorowano", - "ui.sessionTurn.status.searchingCodebase": "Przeszukiwanie bazy kodu", - "ui.sessionTurn.status.searchingWeb": "Przeszukiwanie sieci", - "ui.sessionTurn.status.makingEdits": "Wprowadzanie zmian", - "ui.sessionTurn.status.runningCommands": "Uruchamianie poleceń", - "ui.sessionTurn.status.thinking": "Myślenie", - "ui.sessionTurn.status.thinkingWithTopic": "Myślenie - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "Zbieranie myśli", - "ui.sessionTurn.status.consideringNextSteps": "Rozważanie kolejnych kroków", - - "ui.messagePart.questions.dismissed": "Pytania odrzucone", - "ui.messagePart.compaction": "Sesja skompaktowana", - "ui.messagePart.context.read.one": "{{count}} odczyt", - "ui.messagePart.context.read.other": "{{count}} odczyty", - "ui.messagePart.context.search.one": "{{count}} wyszukiwanie", - "ui.messagePart.context.search.other": "{{count}} wyszukiwania", - "ui.messagePart.context.list.one": "{{count}} lista", - "ui.messagePart.context.list.other": "{{count}} listy", - "ui.messagePart.diagnostic.error": "Błąd", - "ui.messagePart.title.edit": "Edycja", - "ui.messagePart.title.write": "Pisanie", - "ui.messagePart.option.typeOwnAnswer": "Wpisz własną odpowiedź", - "ui.messagePart.review.title": "Przejrzyj swoje odpowiedzi", - - "ui.list.loading": "Ładowanie", - "ui.list.empty": "Brak wyników", - "ui.list.clearFilter": "Wyczyść filtr", - "ui.list.emptyWithFilter.prefix": "Brak wyników dla", - "ui.list.emptyWithFilter.suffix": "", - - "ui.messageNav.newMessage": "Nowa wiadomość", - - "ui.textField.copyToClipboard": "Skopiuj do schowka", - "ui.textField.copyLink": "Skopiuj link", - "ui.textField.copied": "Skopiowano", - - "ui.imagePreview.alt": "Podgląd obrazu", - "ui.scrollView.ariaLabel": "treść przewijana", - - "ui.tool.read": "Odczyt", - "ui.tool.loaded": "Załadowano", - "ui.tool.list": "Lista", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "Pobieranie sieciowe", - "ui.tool.websearch": "Wyszukiwanie w sieci", - "ui.tool.shell": "Terminal", - "ui.tool.patch": "Patch", - "ui.tool.todos": "Zadania", - "ui.tool.todos.read": "Czytaj zadania", - "ui.tool.questions": "Pytania", - "ui.tool.agent": "Agent {{type}}", - "ui.tool.agent.default": "Agent", - - "ui.common.file.one": "plik", - "ui.common.file.other": "pliki", - "ui.common.question.one": "pytanie", - "ui.common.question.other": "pytania", - - "ui.common.add": "Dodaj", - "ui.common.back": "Wstecz", - "ui.common.cancel": "Anuluj", - "ui.common.confirm": "Potwierdź", - "ui.common.dismiss": "Odrzuć", - "ui.common.close": "Zamknij", - "ui.common.next": "Dalej", - "ui.common.submit": "Prześlij", - - "ui.permission.deny": "Odmów", - "ui.permission.allowAlways": "Zezwalaj zawsze", - "ui.permission.allowOnce": "Zezwól raz", - - "ui.message.expand": "Rozwiń wiadomość", - "ui.message.collapse": "Zwiń wiadomość", - "ui.message.copy": "Kopiuj", - "ui.message.copyMessage": "Kopiuj wiadomość", - "ui.message.forkMessage": "Rozwidlij do nowej sesji", - "ui.message.revertMessage": "Zresetuj do tego punktu", - "ui.message.copyResponse": "Kopiuj odpowiedź", - "ui.message.copied": "Skopiowano!", - "ui.message.interrupted": "Przerwano", - "ui.message.queued": "W kolejce", - "ui.message.attachment.alt": "załącznik", - - "ui.patch.action.deleted": "Usunięto", - "ui.patch.action.created": "Utworzono", - "ui.patch.action.moved": "Przeniesiono", - "ui.patch.action.patched": "Załatano", - - "ui.question.subtitle.answered": "{{count}} odpowiedzi", - "ui.question.answer.none": "(brak odpowiedzi)", - "ui.question.review.notAnswered": "(bez odpowiedzi)", - "ui.question.multiHint": "Zaznacz wszystkie pasujące", - "ui.question.singleHint": "Wybierz jedną odpowiedź", - "ui.question.custom.placeholder": "Wpisz swoją odpowiedź...", - - "ui.fileSearch.placeholder": "Szukaj", - "ui.fileSearch.previousMatch": "Poprzednie", - "ui.fileSearch.nextMatch": "Następne", - "ui.fileSearch.close": "Zamknij wyszukiwanie", - "ui.tool.task": "Zadanie", - "ui.tool.skill": "Umiejętność", - "ui.basicTool.called": "Wywołano `{{tool}}`", - "ui.toolErrorCard.failed": "Błąd", - "ui.toolErrorCard.copyError": "Kopiuj błąd", - "ui.message.duration.seconds": "{{count}}s", - "ui.message.duration.minutesSeconds": "{{minutes}}m {{seconds}}s", -} diff --git a/packages/ui/src/i18n/ru.ts b/packages/ui/src/i18n/ru.ts deleted file mode 100644 index ed5c4e8f4f..0000000000 --- a/packages/ui/src/i18n/ru.ts +++ /dev/null @@ -1,167 +0,0 @@ -export const dict = { - "ui.sessionReview.title": "Изменения сессии", - "ui.sessionReview.title.lastTurn": "Изменения последнего хода", - "ui.sessionReview.diffStyle.unified": "Объединённый", - "ui.sessionReview.diffStyle.split": "Разделённый", - "ui.sessionReview.openFile": "Открыть файл", - "ui.sessionReview.selection.line": "строка {{line}}", - "ui.sessionReview.selection.lines": "строки {{start}}-{{end}}", - "ui.sessionReview.expandAll": "Развернуть всё", - "ui.sessionReview.collapseAll": "Свернуть всё", - - "ui.sessionReview.change.added": "Добавлено", - "ui.sessionReview.change.removed": "Удалено", - "ui.sessionReview.change.modified": "Изменено", - "ui.sessionReview.image.loading": "Загрузка...", - "ui.sessionReview.image.placeholder": "Изображение", - "ui.sessionReview.largeDiff.title": "Diff слишком большой для отображения", - "ui.sessionReview.largeDiff.meta": "Лимит: {{limit}} изменённых строк. Текущий: {{current}} изменённых строк.", - "ui.sessionReview.largeDiff.renderAnyway": "Отобразить всё равно", - "ui.fileMedia.kind.image": "изображение", - "ui.fileMedia.kind.audio": "аудио", - "ui.fileMedia.state.removed": "{{kind}} удалено", - "ui.fileMedia.state.loading": "Загружается {{kind}}...", - "ui.fileMedia.state.error": "Не удалось загрузить {{kind}}", - "ui.fileMedia.state.unavailable": "{{kind}} недоступно", - "ui.fileMedia.binary.title": "Бинарный файл", - "ui.fileMedia.binary.description.path": "Невозможно отобразить {{path}}, так как это бинарный файл.", - "ui.fileMedia.binary.description.default": "Невозможно отобразить этот файл, так как он бинарный.", - "ui.lineComment.label.prefix": "Комментарий к ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "Комментирование: ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "Добавить комментарий", - "ui.lineComment.submit": "Комментировать", - "ui.sessionTurn.steps.show": "Показать шаги", - "ui.sessionTurn.steps.hide": "Скрыть шаги", - "ui.sessionTurn.summary.response": "Ответ", - "ui.sessionTurn.diff.showMore": "Показать ещё изменений ({{count}})", - - "ui.sessionTurn.retry.retrying": "повтор", - "ui.sessionTurn.retry.inSeconds": "через {{seconds}}с", - "ui.sessionTurn.retry.attempt": "попытка №{{attempt}}", - "ui.sessionTurn.retry.attemptLine": "{{line}} - попытка №{{attempt}}", - "ui.sessionTurn.retry.geminiHot": "gemini сейчас перегружен", - "ui.sessionTurn.error.freeUsageExceeded": "Лимит бесплатного использования превышен", - "ui.sessionTurn.error.addCredits": "Добавить кредиты", - - "dialog.usageExceeded.freeTier.title": "Достигнут бесплатный лимит", - "dialog.usageExceeded.freeTier.description": - "Подпишитесь на OpenCode Go для надёжного доступа к лучшим моделям с открытым исходным кодом, от $5/месяц.", - "dialog.usageExceeded.freeTier.actionLabel": "Подписаться", - "dialog.usageExceeded.accountRateLimit.title": "Достигнут лимит Go", - "dialog.usageExceeded.accountRateLimit.description": - "Достигнут лимит использования. Чтобы продолжить использовать эту модель сейчас, включите использование из доступного баланса", - "dialog.usageExceeded.accountRateLimit.actionLabel": "Открыть настройки", - - "ui.sessionTurn.status.delegating": "Делегирование работы", - "ui.sessionTurn.status.planning": "Планирование следующих шагов", - "ui.sessionTurn.status.gatheringContext": "Исследование", - "ui.sessionTurn.status.gatheredContext": "Исследовано", - "ui.sessionTurn.status.searchingCodebase": "Поиск в кодовой базе", - "ui.sessionTurn.status.searchingWeb": "Поиск в интернете", - "ui.sessionTurn.status.makingEdits": "Внесение изменений", - "ui.sessionTurn.status.runningCommands": "Выполнение команд", - "ui.sessionTurn.status.thinking": "Размышление", - "ui.sessionTurn.status.thinkingWithTopic": "Размышление - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "Сбор мыслей", - "ui.sessionTurn.status.consideringNextSteps": "Рассмотрение следующих шагов", - - "ui.messagePart.questions.dismissed": "Вопросы отклонены", - "ui.messagePart.compaction": "Сессия сжата", - "ui.messagePart.context.read.one": "{{count}} чтение", - "ui.messagePart.context.read.other": "{{count}} чтений", - "ui.messagePart.context.search.one": "{{count}} поиск", - "ui.messagePart.context.search.other": "{{count}} поисков", - "ui.messagePart.context.list.one": "{{count}} список", - "ui.messagePart.context.list.other": "{{count}} списков", - "ui.messagePart.diagnostic.error": "Ошибка", - "ui.messagePart.title.edit": "Редактировать", - "ui.messagePart.title.write": "Написать", - "ui.messagePart.option.typeOwnAnswer": "Введите свой ответ", - "ui.messagePart.review.title": "Проверьте ваши ответы", - - "ui.list.loading": "Загрузка", - "ui.list.empty": "Нет результатов", - "ui.list.clearFilter": "Очистить фильтр", - "ui.list.emptyWithFilter.prefix": "Нет результатов для", - "ui.list.emptyWithFilter.suffix": "", - - "ui.messageNav.newMessage": "Новое сообщение", - - "ui.textField.copyToClipboard": "Копировать в буфер обмена", - "ui.textField.copyLink": "Копировать ссылку", - "ui.textField.copied": "Скопировано", - - "ui.imagePreview.alt": "Предпросмотр изображения", - "ui.scrollView.ariaLabel": "прокручиваемый контент", - - "ui.tool.read": "Чтение", - "ui.tool.loaded": "Загружено", - "ui.tool.list": "Список", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "Webfetch", - "ui.tool.websearch": "Веб-поиск", - "ui.tool.shell": "Оболочка", - "ui.tool.patch": "Патч", - "ui.tool.todos": "Задачи", - "ui.tool.todos.read": "Читать задачи", - "ui.tool.questions": "Вопросы", - "ui.tool.agent": "Агент {{type}}", - "ui.tool.agent.default": "Агент", - - "ui.common.file.one": "файл", - "ui.common.file.other": "файлов", - "ui.common.question.one": "вопрос", - "ui.common.question.other": "вопросов", - - "ui.common.add": "Добавить", - "ui.common.back": "Назад", - "ui.common.cancel": "Отмена", - "ui.common.confirm": "Подтвердить", - "ui.common.dismiss": "Закрыть", - "ui.common.close": "Закрыть", - "ui.common.next": "Далее", - "ui.common.submit": "Отправить", - - "ui.permission.deny": "Запретить", - "ui.permission.allowAlways": "Разрешить всегда", - "ui.permission.allowOnce": "Разрешить один раз", - - "ui.message.expand": "Развернуть сообщение", - "ui.message.collapse": "Свернуть сообщение", - "ui.message.copy": "Копировать", - "ui.message.copyMessage": "Копировать сообщение", - "ui.message.forkMessage": "Ответвить в новую сессию", - "ui.message.revertMessage": "Сбросить до этого момента", - "ui.message.copyResponse": "Копировать ответ", - "ui.message.copied": "Скопировано!", - "ui.message.interrupted": "Прервано", - "ui.message.queued": "В очереди", - "ui.message.attachment.alt": "вложение", - - "ui.patch.action.deleted": "Удалено", - "ui.patch.action.created": "Создано", - "ui.patch.action.moved": "Перемещено", - "ui.patch.action.patched": "Изменено", - - "ui.question.subtitle.answered": "{{count}} отвечено", - "ui.question.answer.none": "(нет ответа)", - "ui.question.review.notAnswered": "(не отвечено)", - "ui.question.multiHint": "Выберите все подходящие", - "ui.question.singleHint": "Выберите один ответ", - "ui.question.custom.placeholder": "Введите ваш ответ...", - - "ui.fileSearch.placeholder": "Найти", - "ui.fileSearch.previousMatch": "Предыдущее", - "ui.fileSearch.nextMatch": "Следующее", - "ui.fileSearch.close": "Закрыть поиск", - "ui.tool.task": "Задача", - "ui.tool.skill": "Навык", - "ui.basicTool.called": "Вызван `{{tool}}`", - "ui.toolErrorCard.failed": "Ошибка", - "ui.toolErrorCard.copyError": "Скопировать ошибку", - "ui.message.duration.seconds": "{{count}}с", - "ui.message.duration.minutesSeconds": "{{minutes}}м {{seconds}}с", -} diff --git a/packages/ui/src/i18n/th.ts b/packages/ui/src/i18n/th.ts deleted file mode 100644 index e2534041ab..0000000000 --- a/packages/ui/src/i18n/th.ts +++ /dev/null @@ -1,169 +0,0 @@ -export const dict = { - "ui.sessionReview.title": "การเปลี่ยนแปลงเซสชัน", - "ui.sessionReview.title.lastTurn": "การเปลี่ยนแปลงของเทิร์นล่าสุด", - "ui.sessionReview.diffStyle.unified": "แบบรวม", - "ui.sessionReview.diffStyle.split": "แบบแยก", - "ui.sessionReview.openFile": "เปิดไฟล์", - "ui.sessionReview.selection.line": "บรรทัดที่ {{line}}", - "ui.sessionReview.selection.lines": "บรรทัดที่ {{start}}-{{end}}", - "ui.sessionReview.expandAll": "ขยายทั้งหมด", - "ui.sessionReview.collapseAll": "ย่อทั้งหมด", - "ui.sessionReview.change.added": "เพิ่ม", - "ui.sessionReview.change.removed": "ลบ", - "ui.sessionReview.change.modified": "แก้ไข", - "ui.sessionReview.image.loading": "กำลังโหลด...", - "ui.sessionReview.image.placeholder": "รูปภาพ", - "ui.sessionReview.largeDiff.title": "Diff มีขนาดใหญ่เกินไปจนไม่สามารถแสดงผลได้", - "ui.sessionReview.largeDiff.meta": - "ขีดจำกัด: {{limit}} บรรทัดที่เปลี่ยนแปลง. ปัจจุบัน: {{current}} บรรทัดที่เปลี่ยนแปลง.", - "ui.sessionReview.largeDiff.renderAnyway": "แสดงผลต่อไป", - "ui.fileMedia.kind.image": "รูปภาพ", - "ui.fileMedia.kind.audio": "เสียง", - "ui.fileMedia.state.removed": "ลบ{{kind}}แล้ว", - "ui.fileMedia.state.loading": "กำลังโหลด{{kind}}...", - "ui.fileMedia.state.error": "เกิดข้อผิดพลาดในการโหลด{{kind}}", - "ui.fileMedia.state.unavailable": "{{kind}}ไม่พร้อมใช้งาน", - "ui.fileMedia.binary.title": "ไฟล์ไบนารี", - "ui.fileMedia.binary.description.path": "{{path}} เป็นไฟล์ไบนารีและไม่สามารถแสดงผลได้", - "ui.fileMedia.binary.description.default": "ไฟล์ไบนารีไม่สามารถแสดงผลได้", - - "ui.lineComment.label.prefix": "แสดงความคิดเห็นบน ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "กำลังแสดงความคิดเห็นบน ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "เพิ่มความคิดเห็น", - "ui.lineComment.submit": "แสดงความคิดเห็น", - - "ui.sessionTurn.steps.show": "แสดงขั้นตอน", - "ui.sessionTurn.steps.hide": "ซ่อนขั้นตอน", - "ui.sessionTurn.summary.response": "การตอบสนอง", - "ui.sessionTurn.diff.showMore": "แสดงการเปลี่ยนแปลงเพิ่มเติม ({{count}})", - - "ui.sessionTurn.retry.retrying": "กำลังลองใหม่", - "ui.sessionTurn.retry.inSeconds": "ใน {{seconds}}วิ", - "ui.sessionTurn.retry.attempt": "ครั้งที่ {{attempt}}", - "ui.sessionTurn.retry.attemptLine": "{{line}} - ครั้งที่ {{attempt}}", - "ui.sessionTurn.retry.geminiHot": "gemini กำลังใช้งานหนาแน่นมาก", - "ui.sessionTurn.error.freeUsageExceeded": "เกินขีดจำกัดการใช้งานฟรี", - "ui.sessionTurn.error.addCredits": "เพิ่มเครดิต", - - "dialog.usageExceeded.freeTier.title": "ถึงขีดจำกัดฟรีแล้ว", - "dialog.usageExceeded.freeTier.description": - "สมัครสมาชิก OpenCode Go เพื่อการเข้าถึงโมเดลโอเพนซอร์สที่ดีที่สุดอย่างเชื่อถือได้ เริ่มต้นที่ $5/เดือน", - "dialog.usageExceeded.freeTier.actionLabel": "สมัครสมาชิก", - "dialog.usageExceeded.accountRateLimit.title": "ถึงขีดจำกัดของ Go แล้ว", - "dialog.usageExceeded.accountRateLimit.description": - "ถึงขีดจำกัดการใช้งานแล้ว หากต้องการใช้โมเดลนี้ต่อในตอนนี้ ให้เปิดใช้งานจากยอดคงเหลือที่มี", - "dialog.usageExceeded.accountRateLimit.actionLabel": "เปิดการตั้งค่า", - - "ui.sessionTurn.status.delegating": "มอบหมายงาน", - "ui.sessionTurn.status.planning": "วางแผนขั้นตอนถัดไป", - "ui.sessionTurn.status.gatheringContext": "กำลังสำรวจ", - "ui.sessionTurn.status.gatheredContext": "สำรวจแล้ว", - "ui.sessionTurn.status.searchingCodebase": "กำลังค้นหาโค้ดเบส", - "ui.sessionTurn.status.searchingWeb": "กำลังค้นหาบนเว็บ", - "ui.sessionTurn.status.makingEdits": "กำลังแก้ไข", - "ui.sessionTurn.status.runningCommands": "กำลังเรียกใช้คำสั่ง", - "ui.sessionTurn.status.thinking": "กำลังคิด", - "ui.sessionTurn.status.thinkingWithTopic": "กำลังคิด - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "รวบรวมความคิด", - "ui.sessionTurn.status.consideringNextSteps": "พิจารณาขั้นตอนถัดไป", - - "ui.messagePart.questions.dismissed": "ละทิ้งคำถามแล้ว", - "ui.messagePart.compaction": "บีบอัดเซสชันแล้ว", - "ui.messagePart.context.read.one": "อ่าน {{count}} รายการ", - "ui.messagePart.context.read.other": "อ่าน {{count}} รายการ", - "ui.messagePart.context.search.one": "ค้นหา {{count}} รายการ", - "ui.messagePart.context.search.other": "ค้นหา {{count}} รายการ", - "ui.messagePart.context.list.one": "รายการ {{count}} รายการ", - "ui.messagePart.context.list.other": "รายการ {{count}} รายการ", - "ui.messagePart.diagnostic.error": "ข้อผิดพลาด", - "ui.messagePart.title.edit": "แก้ไข", - "ui.messagePart.title.write": "เขียน", - "ui.messagePart.option.typeOwnAnswer": "พิมพ์คำตอบของคุณเอง", - "ui.messagePart.review.title": "ตรวจสอบคำตอบของคุณ", - - "ui.list.loading": "กำลังโหลด", - "ui.list.empty": "ไม่มีผลลัพธ์", - "ui.list.clearFilter": "ล้างตัวกรอง", - "ui.list.emptyWithFilter.prefix": "ไม่มีผลลัพธ์สำหรับ", - "ui.list.emptyWithFilter.suffix": "", - - "ui.messageNav.newMessage": "ข้อความใหม่", - - "ui.textField.copyToClipboard": "คัดลอกไปยังคลิปบอร์ด", - "ui.textField.copyLink": "คัดลอกลิงก์", - "ui.textField.copied": "คัดลอกแล้ว", - - "ui.imagePreview.alt": "ตัวอย่างรูปภาพ", - "ui.scrollView.ariaLabel": "เนื้อหาที่เลื่อนได้", - - "ui.tool.read": "อ่าน", - "ui.tool.loaded": "โหลดแล้ว", - "ui.tool.list": "รายการ", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "ดึงจากเว็บ", - "ui.tool.websearch": "ค้นหาเว็บ", - "ui.tool.shell": "เชลล์", - "ui.tool.patch": "แพตช์", - "ui.tool.todos": "รายการงาน", - "ui.tool.todos.read": "อ่านรายการงาน", - "ui.tool.questions": "คำถาม", - "ui.tool.agent": "เอเจนต์ {{type}}", - "ui.tool.agent.default": "เอเจนต์", - - "ui.common.file.one": "ไฟล์", - "ui.common.file.other": "ไฟล์", - "ui.common.question.one": "คำถาม", - "ui.common.question.other": "คำถาม", - - "ui.common.add": "เพิ่ม", - "ui.common.back": "ย้อนกลับ", - "ui.common.cancel": "ยกเลิก", - "ui.common.confirm": "ยืนยัน", - "ui.common.dismiss": "ปิด", - "ui.common.close": "ปิด", - "ui.common.next": "ถัดไป", - "ui.common.submit": "ส่ง", - - "ui.permission.deny": "ปฏิเสธ", - "ui.permission.allowAlways": "อนุญาตเสมอ", - "ui.permission.allowOnce": "อนุญาตครั้งเดียว", - - "ui.message.expand": "ขยายข้อความ", - "ui.message.collapse": "ย่อข้อความ", - "ui.message.copy": "คัดลอก", - "ui.message.copyMessage": "คัดลอกข้อความ", - "ui.message.forkMessage": "แตกแขนงไปยังเซสชันใหม่", - "ui.message.revertMessage": "รีเซ็ตไปยังจุดนี้", - "ui.message.copyResponse": "คัดลอกคำตอบ", - "ui.message.copied": "คัดลอกแล้ว!", - "ui.message.interrupted": "ถูกขัดจังหวะ", - "ui.message.queued": "อยู่ในคิว", - "ui.message.attachment.alt": "ไฟล์แนบ", - - "ui.patch.action.deleted": "ลบ", - "ui.patch.action.created": "สร้าง", - "ui.patch.action.moved": "ย้าย", - "ui.patch.action.patched": "แพตช์", - - "ui.question.subtitle.answered": "{{count}} ตอบแล้ว", - "ui.question.answer.none": "(ไม่มีคำตอบ)", - "ui.question.review.notAnswered": "(ไม่ได้ตอบ)", - "ui.question.multiHint": "เลือกทั้งหมดที่ใช้", - "ui.question.singleHint": "เลือกหนึ่งคำตอบ", - "ui.question.custom.placeholder": "พิมพ์คำตอบของคุณ...", - - "ui.fileSearch.placeholder": "ค้นหา", - "ui.fileSearch.previousMatch": "ก่อนหน้า", - "ui.fileSearch.nextMatch": "ถัดไป", - "ui.fileSearch.close": "ปิดการค้นหา", - "ui.tool.task": "งาน", - "ui.tool.skill": "ทักษะ", - "ui.basicTool.called": "เรียกใช้ `{{tool}}`", - "ui.toolErrorCard.failed": "ล้มเหลว", - "ui.toolErrorCard.copyError": "คัดลอกข้อผิดพลาด", - "ui.message.duration.seconds": "{{count}}วิ", - "ui.message.duration.minutesSeconds": "{{minutes}}นาที {{seconds}}วิ", -} diff --git a/packages/ui/src/i18n/tr.ts b/packages/ui/src/i18n/tr.ts deleted file mode 100644 index 0ce4a73b6f..0000000000 --- a/packages/ui/src/i18n/tr.ts +++ /dev/null @@ -1,174 +0,0 @@ -import { dict as en } from "./en" - -type Keys = keyof typeof en - -export const dict = { - "ui.sessionReview.title": "Oturum değişiklikleri", - "ui.sessionReview.title.lastTurn": "Son tur değişiklikleri", - "ui.sessionReview.diffStyle.unified": "Birleşik", - "ui.sessionReview.diffStyle.split": "Bölünmüş", - "ui.sessionReview.openFile": "Dosyayı aç", - "ui.sessionReview.selection.line": "satır {{line}}", - "ui.sessionReview.selection.lines": "satırlar {{start}}-{{end}}", - "ui.sessionReview.expandAll": "Tümünü genişlet", - "ui.sessionReview.collapseAll": "Tümünü daralt", - - "ui.sessionReview.change.added": "Eklendi", - "ui.sessionReview.change.removed": "Kaldırıldı", - "ui.sessionReview.change.modified": "Değiştirildi", - "ui.sessionReview.image.loading": "Yükleniyor...", - "ui.sessionReview.image.placeholder": "Görsel", - "ui.sessionReview.largeDiff.title": "Fark gösterimi için çok büyük", - "ui.sessionReview.largeDiff.meta": "Limit: {{limit}} değişen satır. Mevcut: {{current}} değişen satır.", - "ui.sessionReview.largeDiff.renderAnyway": "Yine de göster", - - "ui.fileMedia.kind.image": "görsel", - "ui.fileMedia.kind.audio": "ses", - "ui.fileMedia.state.removed": "{{kind}} dosyası kaldırıldı.", - "ui.fileMedia.state.loading": "{{kind}} yükleniyor...", - "ui.fileMedia.state.error": "{{kind}} yüklenemedi.", - "ui.fileMedia.state.unavailable": "{{kind}} önizlemesi kullanılamıyor.", - "ui.fileMedia.binary.title": "İkili dosya", - "ui.fileMedia.binary.description.path": "{{path}} ikili dosyadır.", - "ui.fileMedia.binary.description.default": "İkili içerik", - - "ui.lineComment.label.prefix": "Yorum: ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "Yorum yapılıyor: ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "Yorum ekle", - "ui.lineComment.submit": "Yorum yap", - - "ui.sessionTurn.steps.show": "Adımları göster", - "ui.sessionTurn.steps.hide": "Adımları gizle", - "ui.sessionTurn.summary.response": "Yanıt", - "ui.sessionTurn.diff.showMore": "Daha fazla değişiklik göster ({{count}})", - - "ui.sessionTurn.retry.retrying": "yeniden deneniyor", - "ui.sessionTurn.retry.inSeconds": "{{seconds}}sn içinde", - "ui.sessionTurn.retry.attempt": "deneme #{{attempt}}", - "ui.sessionTurn.retry.attemptLine": "{{line}} - deneme #{{attempt}}", - "ui.sessionTurn.retry.geminiHot": "gemini şu anda aşırı yoğun", - "ui.sessionTurn.error.freeUsageExceeded": "Ücretsiz kullanım aşıldı", - "ui.sessionTurn.error.addCredits": "Kredi ekle", - - "dialog.usageExceeded.freeTier.title": "Ücretsiz sınıra ulaşıldı", - "dialog.usageExceeded.freeTier.description": - "En iyi açık kaynak modellere güvenilir erişim için OpenCode Go'ya abone olun. Aylık $5'tan başlar.", - "dialog.usageExceeded.freeTier.actionLabel": "Abone ol", - "dialog.usageExceeded.accountRateLimit.title": "Go sınırına ulaşıldı", - "dialog.usageExceeded.accountRateLimit.description": - "Kullanım sınırına ulaşıldı. Bu modeli şimdi kullanmaya devam etmek için mevcut bakiyenizden kullanımı etkinleştirin", - "dialog.usageExceeded.accountRateLimit.actionLabel": "Ayarları aç", - - "ui.sessionTurn.status.delegating": "Görev devrediliyor", - "ui.sessionTurn.status.planning": "Sonraki adımlar planlanıyor", - "ui.sessionTurn.status.gatheringContext": "Keşfediliyor", - "ui.sessionTurn.status.gatheredContext": "Keşfedildi", - "ui.sessionTurn.status.searchingCodebase": "Kod tabanı aranıyor", - "ui.sessionTurn.status.searchingWeb": "Web aranıyor", - "ui.sessionTurn.status.makingEdits": "Düzenlemeler yapılıyor", - "ui.sessionTurn.status.runningCommands": "Komutlar çalıştırılıyor", - "ui.sessionTurn.status.thinking": "Düşünüyor", - "ui.sessionTurn.status.thinkingWithTopic": "Düşünüyor - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "Düşünceler toplanıyor", - "ui.sessionTurn.status.consideringNextSteps": "Sonraki adımlar değerlendiriliyor", - - "ui.messagePart.questions.dismissed": "Sorular reddedildi", - "ui.messagePart.compaction": "Oturum sıkıştırıldı", - "ui.messagePart.context.read.one": "{{count}} okuma", - "ui.messagePart.context.read.other": "{{count}} okuma", - "ui.messagePart.context.search.one": "{{count}} arama", - "ui.messagePart.context.search.other": "{{count}} arama", - "ui.messagePart.context.list.one": "{{count}} liste", - "ui.messagePart.context.list.other": "{{count}} liste", - "ui.messagePart.diagnostic.error": "Hata", - "ui.messagePart.title.edit": "Düzenle", - "ui.messagePart.title.write": "Yaz", - "ui.messagePart.option.typeOwnAnswer": "Kendi cevabınızı yazın", - "ui.messagePart.review.title": "Cevapları inceleyin", - - "ui.list.loading": "Yükleniyor", - "ui.list.empty": "Sonuç bulunamadı", - "ui.list.clearFilter": "Filtreyi temizle", - "ui.list.emptyWithFilter.prefix": "Sonuç bulunamadı:", - "ui.list.emptyWithFilter.suffix": "", - - "ui.messageNav.newMessage": "Yeni mesaj", - - "ui.textField.copyToClipboard": "Panoya kopyala", - "ui.textField.copyLink": "Bağlantı kopyala", - "ui.textField.copied": "Kopyalandı", - - "ui.imagePreview.alt": "Görsel önizleme", - "ui.scrollView.ariaLabel": "kaydırılabilir içerik", - - "ui.tool.read": "Oku", - "ui.tool.loaded": "Yüklendi", - "ui.tool.list": "Listele", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "Web getir", - "ui.tool.websearch": "Web Araması", - "ui.tool.shell": "Kabuk", - "ui.tool.patch": "Yama", - "ui.tool.todos": "Görevler", - "ui.tool.todos.read": "Görevleri oku", - "ui.tool.questions": "Sorular", - "ui.tool.agent": "{{type}} Ajan", - "ui.tool.agent.default": "Ajan", - - "ui.common.file.one": "dosya", - "ui.common.file.other": "dosya", - "ui.common.question.one": "soru", - "ui.common.question.other": "soru", - - "ui.common.add": "Ekle", - "ui.common.back": "Geri", - "ui.common.cancel": "İptal", - "ui.common.confirm": "Onayla", - "ui.common.dismiss": "Kapat", - "ui.common.close": "Kapat", - "ui.common.next": "İleri", - "ui.common.submit": "Gönder", - - "ui.permission.deny": "Reddet", - "ui.permission.allowAlways": "Her zaman izin ver", - "ui.permission.allowOnce": "Bir kez izin ver", - - "ui.message.expand": "Mesajı genişlet", - "ui.message.collapse": "Mesajı daralt", - "ui.message.copy": "Kopyala", - "ui.message.copyMessage": "Mesajı kopyala", - "ui.message.forkMessage": "Yeni oturuma dallandır", - "ui.message.revertMessage": "Bu noktaya sıfırla", - "ui.message.copyResponse": "Yanıtı kopyala", - "ui.message.copied": "Kopyalandı", - "ui.message.interrupted": "Kesildi", - "ui.message.queued": "Sırada", - "ui.message.attachment.alt": "ek", - - "ui.patch.action.deleted": "Silindi", - "ui.patch.action.created": "Oluşturuldu", - "ui.patch.action.moved": "Taşındı", - "ui.patch.action.patched": "Yamalandı", - - "ui.question.subtitle.answered": "{{count}} cevaplandı", - "ui.question.answer.none": "(cevap yok)", - "ui.question.review.notAnswered": "(cevaplanmadı)", - "ui.question.multiHint": "Geçerli tüm cevapları seçin", - "ui.question.singleHint": "Bir cevap seçin", - "ui.question.custom.placeholder": "Cevabınızı yazın...", - - "ui.fileSearch.placeholder": "Bul", - "ui.fileSearch.previousMatch": "Önceki", - "ui.fileSearch.nextMatch": "Sonraki", - "ui.fileSearch.close": "Aramayı kapat", - "ui.tool.task": "Görev", - "ui.tool.skill": "Yetenek", - "ui.basicTool.called": "`{{tool}}` çağrıldı", - "ui.toolErrorCard.failed": "Başarısız", - "ui.toolErrorCard.copyError": "Hatayı kopyala", - "ui.message.duration.seconds": "{{count}}sn", - "ui.message.duration.minutesSeconds": "{{minutes}}dk {{seconds}}sn", -} satisfies Partial> diff --git a/packages/ui/src/i18n/uk.ts b/packages/ui/src/i18n/uk.ts deleted file mode 100644 index 8bfb3e4404..0000000000 --- a/packages/ui/src/i18n/uk.ts +++ /dev/null @@ -1,167 +0,0 @@ -export const dict: Record = { - "ui.sessionReview.title": "Зміни сесії", - "ui.sessionReview.title.git": "Зміни Git", - "ui.sessionReview.title.branch": "Зміни гілки", - "ui.sessionReview.title.lastTurn": "Зміни останнього кроку", - "ui.sessionReview.diffStyle.unified": "Об'єднаний", - "ui.sessionReview.diffStyle.split": "Розділений", - "ui.sessionReview.expandAll": "Розгорнути все", - "ui.sessionReview.collapseAll": "Згорнути все", - "ui.sessionReview.change.added": "Додано", - "ui.sessionReview.change.removed": "Видалено", - "ui.sessionReview.change.modified": "Змінено", - "ui.sessionReview.image.loading": "Завантаження...", - "ui.sessionReview.image.placeholder": "Зображення", - "ui.sessionReview.largeDiff.title": "Завеликий diff для відображення", - "ui.sessionReview.largeDiff.meta": "Ліміт: {{limit}} змінених рядків. Поточно: {{current}} змінених рядків.", - "ui.sessionReview.largeDiff.renderAnyway": "Все одно відобразити", - "ui.sessionReview.openFile": "Відкрити файл", - "ui.sessionReview.selection.line": "рядок {{line}}", - "ui.sessionReview.selection.lines": "рядки {{start}}-{{end}}", - - "ui.fileMedia.kind.image": "зображення", - "ui.fileMedia.kind.audio": "аудіо", - "ui.fileMedia.state.removed": "{{kind}} видалено", - "ui.fileMedia.state.loading": "Завантаження {{kind}}...", - "ui.fileMedia.state.error": "Не вдалося завантажити {{kind}}", - "ui.fileMedia.state.unavailable": "{{kind}} недоступне", - "ui.fileMedia.binary.title": "Бінарний файл", - "ui.fileMedia.binary.description.path": "Неможливо відобразити {{path}}, оскільки це бінарний файл.", - "ui.fileMedia.binary.description.default": "Неможливо відобразити цей файл, оскільки він бінарний.", - - "ui.lineComment.label.prefix": "Коментар до ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "Коментування: ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "Додати коментар", - "ui.lineComment.submit": "Коментувати", - - "ui.sessionTurn.steps.show": "Показати кроки", - "ui.sessionTurn.steps.hide": "Приховати кроки", - "ui.sessionTurn.summary.response": "Відповідь", - "ui.sessionTurn.diff.showMore": "Показати більше змін ({{count}})", - "ui.sessionTurn.diffs.changed": "Змінено", - "ui.sessionTurn.diffs.showAll": "Показати всі", - "ui.sessionTurn.diffs.showLess": "Показати менше", - "ui.sessionTurn.diffs.more": "+{{count}} інших файлів", - - "ui.sessionTurn.retry.retrying": "повтор", - "ui.sessionTurn.retry.inSeconds": "за {{seconds}}с", - "ui.sessionTurn.retry.attempt": "спроба №{{attempt}}", - "ui.sessionTurn.retry.attemptLine": "{{line}} — спроба №{{attempt}}", - "ui.sessionTurn.retry.geminiHot": "gemini зараз перевантажений", - "ui.sessionTurn.error.freeUsageExceeded": "Перевищено ліміт безкоштовного використання", - "ui.sessionTurn.error.addCredits": "Додати кредити", - - "ui.sessionTurn.status.delegating": "Делегування роботи", - "ui.sessionTurn.status.planning": "Планування наступних кроків", - "ui.sessionTurn.status.gatheringContext": "Дослідження", - "ui.sessionTurn.status.gatheredContext": "Досліджено", - "ui.sessionTurn.status.searchingCodebase": "Пошук у кодовій базі", - "ui.sessionTurn.status.searchingWeb": "Пошук в інтернеті", - "ui.sessionTurn.status.makingEdits": "Внесення змін", - "ui.sessionTurn.status.runningCommands": "Виконання команд", - "ui.sessionTurn.status.thinking": "Міркування", - "ui.sessionTurn.status.thinkingWithTopic": "Міркування — {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "Збирання думок", - "ui.sessionTurn.status.consideringNextSteps": "Розгляд наступних кроків", - - "ui.messagePart.diagnostic.error": "Помилка", - "ui.messagePart.title.edit": "Редагувати", - "ui.messagePart.title.write": "Написати", - "ui.messagePart.option.typeOwnAnswer": "Введіть власну відповідь", - "ui.messagePart.review.title": "Перевірте свої відповіді", - "ui.messagePart.questions.dismissed": "Питання відхилено", - "ui.messagePart.compaction": "Сесію стиснуто", - "ui.messagePart.context.read.one": "{{count}} читання", - "ui.messagePart.context.read.other": "{{count}} читань", - "ui.messagePart.context.search.one": "{{count}} пошук", - "ui.messagePart.context.search.other": "{{count}} пошуків", - "ui.messagePart.context.list.one": "{{count}} список", - "ui.messagePart.context.list.other": "{{count}} списків", - - "ui.list.loading": "Завантаження", - "ui.list.empty": "Немає результатів", - "ui.list.clearFilter": "Очистити фільтр", - "ui.list.emptyWithFilter.prefix": "Немає результатів для", - "ui.list.emptyWithFilter.suffix": "", - - "ui.fileSearch.placeholder": "Знайти", - "ui.fileSearch.previousMatch": "Попередній збіг", - "ui.fileSearch.nextMatch": "Наступний збіг", - "ui.fileSearch.close": "Закрити пошук", - - "ui.messageNav.newMessage": "Нове повідомлення", - - "ui.textField.copyToClipboard": "Копіювати в буфер обміну", - "ui.textField.copyLink": "Копіювати посилання", - "ui.textField.copied": "Скопійовано", - - "ui.imagePreview.alt": "Попередній перегляд зображення", - "ui.scrollView.ariaLabel": "контент для прокручування", - - "ui.tool.read": "Читання", - "ui.tool.loaded": "Завантажено", - "ui.tool.list": "Список", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.task": "Завдання", - "ui.tool.webfetch": "Веб-отримання", - "ui.tool.websearch": "Веб-пошук", - "ui.tool.shell": "Оболонка", - "ui.tool.patch": "Патч", - "ui.tool.todos": "Завдання", - "ui.tool.todos.read": "Читати завдання", - "ui.tool.questions": "Питання", - "ui.tool.agent": "Агент {{type}}", - "ui.tool.agent.default": "Агент", - "ui.tool.skill": "Навичка", - - "ui.basicTool.called": "Викликано `{{tool}}`", - "ui.toolErrorCard.failed": "Помилка", - "ui.toolErrorCard.copyError": "Копіювати помилку", - - "ui.common.file.one": "файл", - "ui.common.file.other": "файлів", - "ui.common.question.one": "питання", - "ui.common.question.other": "питань", - - "ui.common.add": "Додати", - "ui.common.back": "Назад", - "ui.common.cancel": "Скасувати", - "ui.common.confirm": "Підтвердити", - "ui.common.dismiss": "Відхилити", - "ui.common.close": "Закрити", - "ui.common.next": "Далі", - "ui.common.submit": "Надіслати", - - "ui.permission.deny": "Заборонити", - "ui.permission.allowAlways": "Дозволяти завжди", - "ui.permission.allowOnce": "Дозволити один раз", - - "ui.message.expand": "Розгорнути повідомлення", - "ui.message.collapse": "Згорнути повідомлення", - "ui.message.copy": "Копіювати", - "ui.message.copyMessage": "Копіювати повідомлення", - "ui.message.forkMessage": "Відгалузити в нову сесію", - "ui.message.revertMessage": "Скинути до цього моменту", - "ui.message.copyResponse": "Копіювати відповідь", - "ui.message.copied": "Скопійовано", - "ui.message.duration.seconds": "{{count}}с", - "ui.message.duration.minutesSeconds": "{{minutes}}хв {{seconds}}с", - "ui.message.interrupted": "Перервано", - "ui.message.queued": "У черзі", - "ui.message.attachment.alt": "вкладення", - - "ui.patch.action.deleted": "Видалено", - "ui.patch.action.created": "Створено", - "ui.patch.action.moved": "Переміщено", - "ui.patch.action.patched": "Пропатчено", - - "ui.question.subtitle.answered": "{{count}} відповідей", - "ui.question.answer.none": "(немає відповіді)", - "ui.question.review.notAnswered": "(не відповіли)", - "ui.question.multiHint": "Виберіть усі відповідні варіанти", - "ui.question.singleHint": "Виберіть одну відповідь", - "ui.question.custom.placeholder": "Введіть свою відповідь...", -} diff --git a/packages/ui/src/i18n/zh.ts b/packages/ui/src/i18n/zh.ts deleted file mode 100644 index 1a385620f1..0000000000 --- a/packages/ui/src/i18n/zh.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { dict as en } from "./en" - -type Keys = keyof typeof en - -export const dict = { - "ui.sessionReview.title": "会话变更", - "ui.sessionReview.title.lastTurn": "上一轮变更", - "ui.sessionReview.diffStyle.unified": "统一", - "ui.sessionReview.diffStyle.split": "拆分", - "ui.sessionReview.openFile": "打开文件", - "ui.sessionReview.selection.line": "第 {{line}} 行", - "ui.sessionReview.selection.lines": "第 {{start}}-{{end}} 行", - "ui.sessionReview.expandAll": "全部展开", - "ui.sessionReview.collapseAll": "全部收起", - "ui.sessionReview.change.added": "已添加", - "ui.sessionReview.change.removed": "已移除", - "ui.sessionReview.change.modified": "已修改", - "ui.sessionReview.image.loading": "加载中...", - "ui.sessionReview.image.placeholder": "图片", - "ui.sessionReview.largeDiff.title": "差异过大,无法渲染", - "ui.sessionReview.largeDiff.meta": "限制:{{limit}} 行变更。当前:{{current}} 行变更。", - "ui.sessionReview.largeDiff.renderAnyway": "仍然渲染", - "ui.fileMedia.kind.image": "图片", - "ui.fileMedia.kind.audio": "音频", - "ui.fileMedia.state.removed": "{{kind}}已移除", - "ui.fileMedia.state.loading": "正在加载{{kind}}...", - "ui.fileMedia.state.error": "加载{{kind}}失败", - "ui.fileMedia.state.unavailable": "{{kind}}不可预览", - "ui.fileMedia.binary.title": "二进制文件", - "ui.fileMedia.binary.description.path": "无法显示 {{path}},因为它是二进制文件。", - "ui.fileMedia.binary.description.default": "无法显示此文件,因为它是二进制文件。", - - "ui.lineComment.label.prefix": "评论 ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "正在评论 ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "添加评论", - "ui.lineComment.submit": "评论", - - "ui.sessionTurn.steps.show": "显示步骤", - "ui.sessionTurn.steps.hide": "隐藏步骤", - "ui.sessionTurn.summary.response": "回复", - "ui.sessionTurn.diff.showMore": "显示更多更改({{count}})", - - "ui.sessionTurn.retry.retrying": "重试中", - "ui.sessionTurn.retry.inSeconds": "{{seconds}} 秒后", - "ui.sessionTurn.retry.attempt": "第 {{attempt}} 次", - "ui.sessionTurn.retry.attemptLine": "{{line}} - 第 {{attempt}} 次", - "ui.sessionTurn.retry.geminiHot": "gemini 当前过载", - "ui.sessionTurn.error.freeUsageExceeded": "免费使用额度已用完", - "ui.sessionTurn.error.addCredits": "添加积分", - - "dialog.usageExceeded.freeTier.title": "免费额度已用完", - "dialog.usageExceeded.freeTier.description": "订阅 OpenCode Go,可靠地使用最佳开源模型,每月 $5 起。", - "dialog.usageExceeded.freeTier.actionLabel": "订阅", - "dialog.usageExceeded.accountRateLimit.title": "Go 额度已用完", - "dialog.usageExceeded.accountRateLimit.description": - "使用额度已达上限。如需现在继续使用此模型,请从可用余额中启用使用", - "dialog.usageExceeded.accountRateLimit.actionLabel": "打开设置", - - "ui.sessionTurn.status.delegating": "正在委派工作", - "ui.sessionTurn.status.planning": "正在规划下一步", - "ui.sessionTurn.status.gatheringContext": "正在探索", - "ui.sessionTurn.status.gatheredContext": "已探索", - "ui.sessionTurn.status.searchingCodebase": "正在搜索代码库", - "ui.sessionTurn.status.searchingWeb": "正在搜索网页", - "ui.sessionTurn.status.makingEdits": "正在修改", - "ui.sessionTurn.status.runningCommands": "正在运行命令", - "ui.sessionTurn.status.thinking": "思考中", - "ui.sessionTurn.status.thinkingWithTopic": "思考:{{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "正在整理思路", - "ui.sessionTurn.status.consideringNextSteps": "正在考虑下一步", - - "ui.messagePart.questions.dismissed": "问题已忽略", - "ui.messagePart.compaction": "会话已压缩", - "ui.messagePart.context.read.one": "{{count}} 次读取", - "ui.messagePart.context.read.other": "{{count}} 次读取", - "ui.messagePart.context.search.one": "{{count}} 次搜索", - "ui.messagePart.context.search.other": "{{count}} 次搜索", - "ui.messagePart.context.list.one": "{{count}} 个列表", - "ui.messagePart.context.list.other": "{{count}} 个列表", - "ui.messagePart.diagnostic.error": "错误", - "ui.messagePart.title.edit": "编辑", - "ui.messagePart.title.write": "写入", - "ui.messagePart.option.typeOwnAnswer": "输入自己的答案", - "ui.messagePart.review.title": "检查你的答案", - - "ui.list.loading": "加载中", - "ui.list.empty": "无结果", - "ui.list.clearFilter": "清除筛选", - "ui.list.emptyWithFilter.prefix": "没有关于", - "ui.list.emptyWithFilter.suffix": "的结果", - - "ui.messageNav.newMessage": "新消息", - - "ui.textField.copyToClipboard": "复制到剪贴板", - "ui.textField.copyLink": "复制链接", - "ui.textField.copied": "已复制", - - "ui.imagePreview.alt": "图片预览", - "ui.scrollView.ariaLabel": "可滚动内容", - - "ui.tool.read": "读取", - "ui.tool.loaded": "已加载", - "ui.tool.list": "列表", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "Webfetch", - "ui.tool.websearch": "网络搜索", - "ui.tool.shell": "Shell", - "ui.tool.patch": "补丁", - "ui.tool.todos": "待办", - "ui.tool.todos.read": "读取待办", - "ui.tool.questions": "问题", - "ui.tool.agent": "{{type}} 智能体", - "ui.tool.agent.default": "智能体", - - "ui.common.file.one": "个文件", - "ui.common.file.other": "个文件", - "ui.common.question.one": "个问题", - "ui.common.question.other": "个问题", - - "ui.common.add": "添加", - "ui.common.back": "返回", - "ui.common.cancel": "取消", - "ui.common.confirm": "确认", - "ui.common.dismiss": "忽略", - "ui.common.close": "关闭", - "ui.common.next": "下一步", - "ui.common.submit": "提交", - - "ui.permission.deny": "拒绝", - "ui.permission.allowAlways": "始终允许", - "ui.permission.allowOnce": "允许一次", - - "ui.message.expand": "展开消息", - "ui.message.collapse": "收起消息", - "ui.message.copy": "复制", - "ui.message.copyMessage": "复制消息", - "ui.message.forkMessage": "分叉到新会话", - "ui.message.revertMessage": "重置到此点", - "ui.message.copyResponse": "复制回复", - "ui.message.copied": "已复制!", - "ui.message.interrupted": "已中断", - "ui.message.queued": "排队中", - "ui.message.attachment.alt": "附件", - - "ui.patch.action.deleted": "已删除", - "ui.patch.action.created": "已创建", - "ui.patch.action.moved": "已移动", - "ui.patch.action.patched": "已应用补丁", - - "ui.question.subtitle.answered": "{{count}} 已回答", - "ui.question.answer.none": "(无答案)", - "ui.question.review.notAnswered": "(未回答)", - "ui.question.multiHint": "可多选", - "ui.question.singleHint": "选择一个答案", - "ui.question.custom.placeholder": "输入你的答案...", - - "ui.fileSearch.placeholder": "查找", - "ui.fileSearch.previousMatch": "上一个", - "ui.fileSearch.nextMatch": "下一个", - "ui.fileSearch.close": "关闭搜索", - "ui.tool.task": "任务", - "ui.tool.skill": "技能", - "ui.basicTool.called": "调用了 `{{tool}}`", - "ui.toolErrorCard.failed": "失败", - "ui.toolErrorCard.copyError": "复制错误", - "ui.message.duration.seconds": "{{count}}秒", - "ui.message.duration.minutesSeconds": "{{minutes}}分 {{seconds}}秒", -} satisfies Partial> diff --git a/packages/ui/src/i18n/zht.ts b/packages/ui/src/i18n/zht.ts deleted file mode 100644 index 941e1df636..0000000000 --- a/packages/ui/src/i18n/zht.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { dict as en } from "./en" - -type Keys = keyof typeof en - -export const dict = { - "ui.sessionReview.title": "工作階段變更", - "ui.sessionReview.title.lastTurn": "上一輪變更", - "ui.sessionReview.diffStyle.unified": "整合", - "ui.sessionReview.diffStyle.split": "拆分", - "ui.sessionReview.openFile": "開啟檔案", - "ui.sessionReview.selection.line": "第 {{line}} 行", - "ui.sessionReview.selection.lines": "第 {{start}}-{{end}} 行", - "ui.sessionReview.expandAll": "全部展開", - "ui.sessionReview.collapseAll": "全部收合", - "ui.sessionReview.change.added": "已新增", - "ui.sessionReview.change.removed": "已移除", - "ui.sessionReview.change.modified": "已修改", - "ui.sessionReview.image.loading": "載入中...", - "ui.sessionReview.image.placeholder": "圖片", - "ui.sessionReview.largeDiff.title": "差異過大,無法渲染", - "ui.sessionReview.largeDiff.meta": "限制:{{limit}} 行變更。目前:{{current}} 行變更。", - "ui.sessionReview.largeDiff.renderAnyway": "仍然渲染", - "ui.fileMedia.kind.image": "圖片", - "ui.fileMedia.kind.audio": "音訊", - "ui.fileMedia.state.removed": "{{kind}}已移除", - "ui.fileMedia.state.loading": "正在載入{{kind}}...", - "ui.fileMedia.state.error": "載入{{kind}}失敗", - "ui.fileMedia.state.unavailable": "{{kind}}無法預覽", - "ui.fileMedia.binary.title": "二進位檔案", - "ui.fileMedia.binary.description.path": "無法顯示 {{path}},因為它是二進位檔案。", - "ui.fileMedia.binary.description.default": "無法顯示此檔案,因為它是二進位檔案。", - - "ui.lineComment.label.prefix": "評論 ", - "ui.lineComment.label.suffix": "", - "ui.lineComment.editorLabel.prefix": "正在評論 ", - "ui.lineComment.editorLabel.suffix": "", - "ui.lineComment.placeholder": "新增評論", - "ui.lineComment.submit": "評論", - - "ui.sessionTurn.steps.show": "顯示步驟", - "ui.sessionTurn.steps.hide": "隱藏步驟", - "ui.sessionTurn.summary.response": "回覆", - "ui.sessionTurn.diff.showMore": "顯示更多變更 ({{count}})", - - "ui.sessionTurn.retry.retrying": "重試中", - "ui.sessionTurn.retry.inSeconds": "{{seconds}} 秒後", - "ui.sessionTurn.retry.attempt": "第 {{attempt}} 次", - "ui.sessionTurn.retry.attemptLine": "{{line}} - 第 {{attempt}} 次", - "ui.sessionTurn.retry.geminiHot": "gemini 目前過載", - "ui.sessionTurn.error.freeUsageExceeded": "免費使用額度已用完", - "ui.sessionTurn.error.addCredits": "新增點數", - - "dialog.usageExceeded.freeTier.title": "已達免費額度上限", - "dialog.usageExceeded.freeTier.description": "訂閱 OpenCode Go,可靠地使用最佳開源模型,每月 $5 起。", - "dialog.usageExceeded.freeTier.actionLabel": "訂閱", - "dialog.usageExceeded.accountRateLimit.title": "已達 Go 額度上限", - "dialog.usageExceeded.accountRateLimit.description": - "已達使用額度上限。若要現在繼續使用此模型,請從可用餘額中啟用使用", - "dialog.usageExceeded.accountRateLimit.actionLabel": "開啟設定", - - "ui.sessionTurn.status.delegating": "正在委派工作", - "ui.sessionTurn.status.planning": "正在規劃下一步", - "ui.sessionTurn.status.gatheringContext": "正在探索", - "ui.sessionTurn.status.gatheredContext": "已探索", - "ui.sessionTurn.status.searchingCodebase": "正在搜尋程式碼庫", - "ui.sessionTurn.status.searchingWeb": "正在搜尋網頁", - "ui.sessionTurn.status.makingEdits": "正在修改", - "ui.sessionTurn.status.runningCommands": "正在執行命令", - "ui.sessionTurn.status.thinking": "思考中", - "ui.sessionTurn.status.thinkingWithTopic": "思考 - {{topic}}", - "ui.sessionTurn.status.gatheringThoughts": "正在整理思緒", - "ui.sessionTurn.status.consideringNextSteps": "正在考慮下一步", - - "ui.messagePart.questions.dismissed": "問題已略過", - "ui.messagePart.compaction": "工作階段已壓縮", - "ui.messagePart.context.read.one": "{{count}} 次讀取", - "ui.messagePart.context.read.other": "{{count}} 次讀取", - "ui.messagePart.context.search.one": "{{count}} 次搜尋", - "ui.messagePart.context.search.other": "{{count}} 次搜尋", - "ui.messagePart.context.list.one": "{{count}} 個清單", - "ui.messagePart.context.list.other": "{{count}} 個清單", - "ui.messagePart.diagnostic.error": "錯誤", - "ui.messagePart.title.edit": "編輯", - "ui.messagePart.title.write": "寫入", - "ui.messagePart.option.typeOwnAnswer": "輸入自己的答案", - "ui.messagePart.review.title": "檢查你的答案", - - "ui.list.loading": "載入中", - "ui.list.empty": "無結果", - "ui.list.clearFilter": "清除篩選", - "ui.list.emptyWithFilter.prefix": "沒有關於", - "ui.list.emptyWithFilter.suffix": "的結果", - - "ui.messageNav.newMessage": "新訊息", - - "ui.textField.copyToClipboard": "複製到剪貼簿", - "ui.textField.copyLink": "複製連結", - "ui.textField.copied": "已複製", - - "ui.imagePreview.alt": "圖片預覽", - "ui.scrollView.ariaLabel": "可捲動內容", - - "ui.tool.read": "讀取", - "ui.tool.loaded": "已載入", - "ui.tool.list": "清單", - "ui.tool.glob": "Glob", - "ui.tool.grep": "Grep", - "ui.tool.webfetch": "Webfetch", - "ui.tool.websearch": "網頁搜尋", - "ui.tool.shell": "Shell", - "ui.tool.patch": "修補", - "ui.tool.todos": "待辦", - "ui.tool.todos.read": "讀取待辦", - "ui.tool.questions": "問題", - "ui.tool.agent": "{{type}} 代理程式", - "ui.tool.agent.default": "代理程式", - - "ui.common.file.one": "個檔案", - "ui.common.file.other": "個檔案", - "ui.common.question.one": "個問題", - "ui.common.question.other": "個問題", - - "ui.common.add": "新增", - "ui.common.back": "返回", - "ui.common.cancel": "取消", - "ui.common.confirm": "確認", - "ui.common.dismiss": "忽略", - "ui.common.close": "關閉", - "ui.common.next": "下一步", - "ui.common.submit": "提交", - - "ui.permission.deny": "拒絕", - "ui.permission.allowAlways": "永遠允許", - "ui.permission.allowOnce": "允許一次", - - "ui.message.expand": "展開訊息", - "ui.message.collapse": "收合訊息", - "ui.message.copy": "複製", - "ui.message.copyMessage": "複製訊息", - "ui.message.forkMessage": "分支到新工作階段", - "ui.message.revertMessage": "重設至此點", - "ui.message.copyResponse": "複製回覆", - "ui.message.copied": "已複製!", - "ui.message.interrupted": "已中斷", - "ui.message.queued": "排隊中", - "ui.message.attachment.alt": "附件", - - "ui.patch.action.deleted": "已刪除", - "ui.patch.action.created": "已建立", - "ui.patch.action.moved": "已移動", - "ui.patch.action.patched": "已套用修補", - - "ui.question.subtitle.answered": "{{count}} 已回答", - "ui.question.answer.none": "(無答案)", - "ui.question.review.notAnswered": "(未回答)", - "ui.question.multiHint": "可多選", - "ui.question.singleHint": "選擇一個答案", - "ui.question.custom.placeholder": "輸入你的答案...", - - "ui.fileSearch.placeholder": "搜尋", - "ui.fileSearch.previousMatch": "上一個", - "ui.fileSearch.nextMatch": "下一個", - "ui.fileSearch.close": "關閉搜尋", - "ui.tool.task": "任務", - "ui.tool.skill": "技能", - "ui.basicTool.called": "呼叫了 `{{tool}}`", - "ui.toolErrorCard.failed": "失敗", - "ui.toolErrorCard.copyError": "複製錯誤", - "ui.message.duration.seconds": "{{count}}秒", - "ui.message.duration.minutesSeconds": "{{minutes}}分 {{seconds}}秒", -} satisfies Partial> diff --git a/packages/web/astro.config.mjs b/packages/web/astro.config.mjs index 2b39c60d6b..5225a9c8b5 100644 --- a/packages/web/astro.config.mjs +++ b/packages/web/astro.config.mjs @@ -39,91 +39,11 @@ export default defineConfig({ lang: "en", dir: "ltr", }, - ar: { - label: "العربية", - lang: "ar", - dir: "rtl", - }, - bs: { - label: "Bosanski", - lang: "bs-BA", - dir: "ltr", - }, - da: { - label: "Dansk", - lang: "da-DK", - dir: "ltr", - }, - de: { - label: "Deutsch", - lang: "de-DE", - dir: "ltr", - }, es: { label: "Espa\u00f1ol", lang: "es-ES", dir: "ltr", }, - fr: { - label: "Fran\u00e7ais", - lang: "fr-FR", - dir: "ltr", - }, - it: { - label: "Italiano", - lang: "it-IT", - dir: "ltr", - }, - ja: { - label: "日本語", - lang: "ja-JP", - dir: "ltr", - }, - ko: { - label: "한국어", - lang: "ko-KR", - dir: "ltr", - }, - nb: { - label: "Norsk Bokm\u00e5l", - lang: "nb-NO", - dir: "ltr", - }, - pl: { - label: "Polski", - lang: "pl-PL", - dir: "ltr", - }, - "pt-br": { - label: "Portugu\u00eas (Brasil)", - lang: "pt-BR", - dir: "ltr", - }, - ru: { - label: "Русский", - lang: "ru-RU", - dir: "ltr", - }, - th: { - label: "ไทย", - lang: "th-TH", - dir: "ltr", - }, - tr: { - label: "T\u00fcrk\u00e7e", - lang: "tr-TR", - dir: "ltr", - }, - "zh-cn": { - label: "简体中文", - lang: "zh-CN", - dir: "ltr", - }, - "zh-tw": { - label: "繁體中文", - lang: "zh-TW", - dir: "ltr", - }, }, favicon: "/favicon-v3.svg", head: [ diff --git a/packages/web/src/content/docs/ar/acp.mdx b/packages/web/src/content/docs/ar/acp.mdx deleted file mode 100644 index 1919e42682..0000000000 --- a/packages/web/src/content/docs/ar/acp.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -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) المخصصة -- نظام الوكلاء والأذونات diff --git a/packages/web/src/content/docs/ar/agents.mdx b/packages/web/src/content/docs/ar/agents.mdx deleted file mode 100644 index af12a67691..0000000000 --- a/packages/web/src/content/docs/ar/agents.mdx +++ /dev/null @@ -1,754 +0,0 @@ ---- -title: الوكلاء -description: هيّئ الوكلاء المتخصصين واستخدمهم. ---- - -الوكلاء هم مساعدون متخصصون بالذكاء الاصطناعي يمكن تهيئتهم لمهام وسير عمل محدد. يتيحون لك إنشاء أدوات مركزة مع موجّهات مخصصة ونماذج وصلاحية وصول للأدوات. - -:::tip -استخدم وكيل plan لتحليل الشفرة ومراجعة الاقتراحات بدون إجراء أي تغييرات على الشفرة. -::: - -يمكنك التبديل بين الوكلاء أثناء الجلسة أو استدعاؤهم عبر الإشارة بـ `@`. - ---- - -## الأنواع - -يوجد نوعان من الوكلاء في OpenCode: وكلاء أساسيون ووكلاء فرعيون. - ---- - -### الوكلاء الأساسيون - -الوكلاء الأساسيون هم المساعدون الرئيسيون الذين تتفاعل معهم مباشرة. يمكنك التنقل بينهم باستخدام مفتاح **Tab** أو اختصار `switch_agent` الذي قمت بتهيئته. يتولى هؤلاء الوكلاء محادثتك الرئيسية. يتم ضبط وصول الأدوات عبر الأذونات — على سبيل المثال، يمتلك Build جميع الأدوات مفعلة بينما يكون Plan مقيّدا. - -:::tip -يمكنك استخدام مفتاح **Tab** للتبديل بين الوكلاء الأساسيين أثناء الجلسة. -::: - -يأتي OpenCode مع وكيلين أساسيين مدمجين: **Build** و **Plan**. سنلقي نظرة عليهما أدناه. - ---- - -### الوكلاء الفرعيون - -الوكلاء الفرعيون هم مساعدين متخصصين يمكن للوكلاء الأساسيين استدعاؤهم لمهام محددة. يمكنك أيضا استدعاؤهم يدويا عبر **الإشارة بـ @** في رسائلك. - -يأتي OpenCode مع ثلاثة وكلاء فرعيين مدمجين: **General** و **Explore** و **Scout**. سنلقي نظرة على ذلك أدناه. - ---- - -## المدمجة - -يأتي OpenCode مع وكيلين أساسيين مدمجين وثلاثة وكلاء فرعيين مدمجين. - ---- - -### استخدام Build - -_الوضع_: `primary` - -Build هو الوكيل الأساسي **الافتراضي** مع تفعيل جميع الأدوات. هذا هو الوكيل القياسي لأعمال التطوير عندما تحتاج إلى وصول كامل لعمليات الملفات وأوامر النظام. - ---- - -### استخدام Plan - -_الوضع_: `primary` - -وكيل مقيّد صُمم للتخطيط والتحليل. نستخدم نظام أذونات لمنحك تحكما أكبر ومنع التغييرات غير المقصودة. -افتراضيا، يتم ضبط كل ما يلي على `ask`: - -- `file edits`: جميع عمليات الكتابة والتصحيح (patches) والتحرير -- `bash`: جميع أوامر bash - -يفيد هذا الوكيل عندما تريد من LLM تحليل الشفرة أو اقتراح تغييرات أو إنشاء خطط بدون إجراء أي تعديلات فعلية على قاعدة الشفرة. - ---- - -### استخدام General - -_الوضع_: `subagent` - -وكيل عام الغرض للبحث في أسئلة معقدة وتنفيذ مهام متعددة الخطوات. لديه وصول كامل للأدوات (باستثناء todo)، لذا يمكنه إجراء تغييرات على الملفات عند الحاجة. استخدمه لتشغيل عدة وحدات عمل بالتوازي. - ---- - -### استخدام Explore - -_الوضع_: `subagent` - -وكيل سريع للقراءة فقط لاستكشاف قواعد الشفرة. لا يستطيع تعديل الملفات. استخدمه عندما تحتاج إلى العثور بسرعة على ملفات عبر أنماط، أو البحث في الشفرة عن كلمات مفتاحية، أو الإجابة عن أسئلة حول قاعدة الشفرة. - ---- - -### استخدام Scout - -_الوضع_: `subagent` - -وكيل للقراءة فقط مخصص للوثائق الخارجية وأبحاث التبعيات. استخدمه عندما تحتاج إلى استنساخ مستودع تبعية داخل ذاكرة التخزين المؤقت المُدارة في OpenCode، أو فحص الشفرة المصدرية لمكتبة، أو إجراء مراجع متقاطعة بين الشفرة المحلية والتنفيذات upstream بدون تعديل مساحة العمل الخاصة بك. - ---- - -### استخدام Compaction - -_الوضع_: `primary` - -وكيل نظام مخفي يضغط السياق الطويل إلى ملخص أصغر. يعمل تلقائيا عند الحاجة ولا يمكن اختياره من واجهة المستخدم. - ---- - -### استخدام Title - -_الوضع_: `primary` - -وكيل نظام مخفي ينشئ عناوين قصيرة للجلسات. يعمل تلقائيا ولا يمكن اختياره من واجهة المستخدم. - ---- - -### استخدام Summary - -_الوضع_: `primary` - -وكيل نظام مخفي ينشئ ملخصات للجلسات. يعمل تلقائيا ولا يمكن اختياره من واجهة المستخدم. - ---- - -## الاستخدام - -1. للوكلاء الأساسيين، استخدم مفتاح **Tab** للتنقل بينهم أثناء الجلسة. يمكنك أيضا استخدام اختصار `switch_agent` الذي قمت بتهيئته. - -2. يمكن استدعاء الوكلاء الفرعيين: - - **تلقائيا** بواسطة الوكلاء الأساسيين لمهام متخصصة بناء على أوصافهم. - - يدويا عبر **الإشارة بـ @** إلى وكيل فرعي في رسالتك. على سبيل المثال: - - ```txt frame="none" - @general help me search for this function - ``` - -3. **التنقل بين الجلسات**: عندما ينشئ الوكلاء الفرعيون جلسات فرعية خاصة بهم، يمكنك التنقل بين الجلسة الأم وجميع الجلسات الفرعية باستخدام: - - **\+Right** (أو اختصار `session_child_cycle` الذي قمت بتهيئته) للتنقل للأمام عبر parent → child1 → child2 → ... → parent - - **\+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 -``` diff --git a/packages/web/src/content/docs/ar/cli.mdx b/packages/web/src/content/docs/ar/cli.mdx deleted file mode 100644 index 5aa9b781f9..0000000000 --- a/packages/web/src/content/docs/ar/cli.mdx +++ /dev/null @@ -1,616 +0,0 @@ ---- -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 | -| {"--continue"} | `-c` | متابعة آخر جلسة | -| {"--session"} | `-s` | معرّف الجلسة للمتابعة | -| {"--fork"} | | تفريع الجلسة عند المتابعة (استخدمه مع `--continue` أو `--session`) | -| {"--password"} | `-p` | كلمة مرور المصادقة الأساسية (الافتراضي `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | اسم مستخدم المصادقة الأساسية (الافتراضي `OPENCODE_SERVER_USERNAME` أو `opencode`) | - ---- - -#### 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 -``` - ---- - -### 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) | -| {"--password"} | `-p` | كلمة مرور المصادقة الأساسية (الافتراضي `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | اسم مستخدم المصادقة الأساسية (الافتراضي `OPENCODE_SERVER_USERNAME` أو `opencode`) | -| {"--dir"} | | دليل التشغيل، أو المسار على الخادم البعيد عند الإرفاق | -| {"--variant"} | | متغير النموذج (جهد الاستدلال الخاص بالمزود) | -| {"--thinking"} | | عرض كتل التفكير | -| {"--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 -``` - -يمكنك الاستيراد من ملف محلي أو من رابط مشاركة 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_PLAN_MODE` | boolean | تفعيل وضع الخطة | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | boolean | تفعيل مهام subagent في الخلفية | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | boolean | تفعيل نظام الأحداث التجريبي | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | boolean | تفعيل مسار طلبات LLM الأصلي | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | boolean | تفعيل تنفيذ بحث الويب بالتوازي | -| `OPENCODE_EXPERIMENTAL_SCOUT` | boolean | تفعيل Scout subagent | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | boolean | تفعيل دعم مساحات العمل | diff --git a/packages/web/src/content/docs/ar/commands.mdx b/packages/web/src/content/docs/ar/commands.mdx deleted file mode 100644 index da14065212..0000000000 --- a/packages/web/src/content/docs/ar/commands.mdx +++ /dev/null @@ -1,322 +0,0 @@ ---- -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 -يمكن للأوامر المخصصة تجاوز الأوامر المضمنة. -::: - -إذا عرّفت أمرًا مخصصًا بالاسم نفسه، فسيستبدل الأمر المضمن. diff --git a/packages/web/src/content/docs/ar/config.mdx b/packages/web/src/content/docs/ar/config.mdx deleted file mode 100644 index 8f5b275e5c..0000000000 --- a/packages/web/src/content/docs/ar/config.mdx +++ /dev/null @@ -1,685 +0,0 @@ ---- -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": false - } -} -``` - -- `auto` - ضغط الجلسة تلقائيًا عند امتلاء السياق (الافتراضي: `true`). -- `prune` - إزالة مخرجات الأدوات القديمة لتوفير الرموز (tokens) (الافتراضي: `false`). -- `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 في ملفات منفصلة. -- تضمين ملفات تعليمات كبيرة دون تشويش ملف الإعدادات. -- مشاركة مقتطفات إعدادات مشتركة عبر عدة ملفات إعدادات. diff --git a/packages/web/src/content/docs/ar/custom-tools.mdx b/packages/web/src/content/docs/ar/custom-tools.mdx deleted file mode 100644 index 62eeed9cdc..0000000000 --- a/packages/web/src/content/docs/ar/custom-tools.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -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`. - ---- - -#### عدة أدوات في ملف واحد - -يمكنك أيضا تصدير عدة أدوات من ملف واحد. يصبح كل تصدير **أداة مستقلة** باسم **`_`**: - -```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. diff --git a/packages/web/src/content/docs/ar/ecosystem.mdx b/packages/web/src/content/docs/ar/ecosystem.mdx deleted file mode 100644 index e2a664a1cd..0000000000 --- a/packages/web/src/content/docs/ar/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -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) | تكوينات، ومطالبات، ووكلاء، وإضافات لسير عمل محسن | diff --git a/packages/web/src/content/docs/ar/enterprise.mdx b/packages/web/src/content/docs/ar/enterprise.mdx deleted file mode 100644 index b7b188edeb..0000000000 --- a/packages/web/src/content/docs/ar/enterprise.mdx +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: المؤسسات -description: استخدام OpenCode بأمان داخل مؤسستك. ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -OpenCode Enterprise مخصص للمؤسسات التي تريد التأكد من أن الشيفرة والبيانات لا تغادر بنيتها التحتية مطلقا. ويمكن تحقيق ذلك عبر استخدام إعدادات مركزية تتكامل مع SSO وبوابة AI الداخلية لديك. - -:::note -لا يقوم OpenCode بتخزين أي من شيفرتك أو بيانات السياق. -::: - -لبدء استخدام OpenCode Enterprise: - -1. أجرِ تجربة داخلية مع فريقك. -2. **اتصل بنا** لمناقشة التسعير وخيارات التنفيذ. - ---- - -## تجربة - -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) المستخدمة. لمزيد من التفاصيل حول التسعير وخيارات التنفيذ، **اتصل بنا**. - ---- - -## النشر - -بعد إكمال التجربة وعندما تكون جاهزا لاستخدام OpenCode داخل مؤسستك، يمكنك **الاتصال بنا** لمناقشة التسعير وخيارات التنفيذ. - ---- - -### الإعدادات المركزية - -يمكننا إعداد OpenCode لاستخدام إعدادات مركزية واحدة لكامل مؤسستك. - -يمكن لهذه الإعدادات المركزية أن تتكامل مع مزود SSO لديك، وتضمن أن جميع المستخدمين يصلون فقط إلى بوابة AI الداخلية لديك. - ---- - -### تكامل SSO - -عبر الإعدادات المركزية، يمكن لـ OpenCode التكامل مع مزود SSO في مؤسستك لأغراض المصادقة. - -يتيح ذلك لـ OpenCode الحصول على بيانات الاعتماد لبوابة AI الداخلية لديك عبر نظام إدارة الهوية الحالي لديك. - ---- - -### بوابة AI الداخلية - -مع الإعدادات المركزية، يمكن أيضا تهيئة OpenCode لاستخدام بوابة AI الداخلية لديك فقط. - -يمكنك أيضا تعطيل جميع مزودي AI الآخرين، لضمان مرور جميع الطلبات عبر البنية التحتية المعتمدة في مؤسستك. - ---- - -### الاستضافة الذاتية - -بينما نوصي بتعطيل صفحات المشاركة لضمان ألا تغادر بياناتك مؤسستك مطلقا، يمكننا أيضا مساعدتك على استضافتها ذاتيا على بنيتك التحتية. - -هذا موجود حاليا على خارطة طريقنا. إذا كنت مهتما، **أخبرنا**. - ---- - -## الأسئلة الشائعة - -
-ما هو OpenCode Enterprise؟ - -OpenCode Enterprise مخصص للمؤسسات التي تريد التأكد من أن الشيفرة والبيانات لا تغادر بنيتها التحتية مطلقا. ويمكن تحقيق ذلك عبر استخدام إعدادات مركزية تتكامل مع SSO وبوابة AI الداخلية لديك. - -
- -
-كيف أبدأ باستخدام OpenCode Enterprise؟ - -ابدأ ببساطة بتجربة داخلية مع فريقك. لا يقوم OpenCode افتراضيا بتخزين شيفرتك أو بيانات السياق، مما يجعل البدء سهلا. - -ثم **اتصل بنا** لمناقشة التسعير وخيارات التنفيذ. - -
- -
-كيف يعمل تسعير المؤسسات؟ - -نقدم تسعيرا للمؤسسات لكل مقعد. إذا كانت لديك بوابة LLM خاصة بك، فلن نفرض رسوما على الرموز (tokens) المستخدمة. لمزيد من التفاصيل، **اتصل بنا** للحصول على عرض سعر مخصص بناء على احتياجات مؤسستك. - -
- -
-هل بياناتي آمنة مع OpenCode Enterprise؟ - -نعم. لا يقوم OpenCode بتخزين شيفرتك أو بيانات السياق. تتم جميع المعالجة محليا أو عبر استدعاءات API مباشرة إلى مزود AI لديك. ومع الإعدادات المركزية وتكامل SSO، تظل بياناتك آمنة داخل البنية التحتية لمؤسستك. - -
- -
-هل يمكننا استخدام سجل NPM خاص بنا؟ - -يدعم 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 لضمان إمكانية تثبيت الحزم من سجل مؤسستك. - -
diff --git a/packages/web/src/content/docs/ar/formatters.mdx b/packages/web/src/content/docs/ar/formatters.mdx deleted file mode 100644 index 22ded4b9ef..0000000000 --- a/packages/web/src/content/docs/ar/formatters.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -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`** في الأمر بمسار الملف الذي يجري تنسيقه. diff --git a/packages/web/src/content/docs/ar/github.mdx b/packages/web/src/content/docs/ar/github.mdx deleted file mode 100644 index 1365b74e53..0000000000 --- a/packages/web/src/content/docs/ar/github.mdx +++ /dev/null @@ -1,321 +0,0 @@ ---- -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 المحيط - - معلومات أرقام الأسطر - - يسمح ذلك بطلبات أكثر تحديدًا دون الحاجة لذكر مسارات الملفات أو أرقام الأسطر يدويًا. diff --git a/packages/web/src/content/docs/ar/gitlab.mdx b/packages/web/src/content/docs/ar/gitlab.mdx deleted file mode 100644 index 12e36de108..0000000000 --- a/packages/web/src/content/docs/ar/gitlab.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -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. أنشئ ملف إعداد للتدفق، وإليك مثالًا: - -
- - إعدادات التدفق - - ```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. - - - 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. - - " - - 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 - ``` - -
- -يمكنك الرجوع إلى [وثائق 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 طلب الدمج ويقدّم ملاحظات. diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx deleted file mode 100644 index 4e75f262c9..0000000000 --- a/packages/web/src/content/docs/ar/go.mdx +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: Go -description: اشتراك منخفض التكلفة لنماذج البرمجة المفتوحة. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Go هو اشتراك منخفض التكلفة — **$5 للشهر الأول**، ثم **$10/شهريًا** — يمنحك وصولًا موثوقًا إلى نماذج البرمجة المفتوحة الشائعة. - -يعمل Go مثل أي مزود آخر في OpenCode. تشترك في OpenCode Go وتحصل على مفتاح API الخاص بك. وهو **اختياري تمامًا**، ولا تحتاج إلى استخدامه لاستخدام OpenCode. - -صُمّم أساسًا للمستخدمين الدوليين، مع استضافة النماذج في الولايات المتحدة والاتحاد الأوروبي وسنغافورة لضمان وصول عالمي مستقر. - ---- - -## الخلفية - -أصبحت النماذج المفتوحة جيدة جدًا. فهي الآن تقترب في الأداء من النماذج المملوكة في مهام البرمجة. وبما أن كثيرًا من المزودين يمكنهم تقديمها بشكل تنافسي، فهي عادةً أقل تكلفة بكثير. - -ومع ذلك، قد يكون الحصول على وصول موثوق إليها بزمن استجابة منخفض أمرًا صعبًا. إذ يختلف المزودون في الجودة والتوافر. - -:::tip -اختبرنا مجموعة مختارة من النماذج والمزودين الذين يعملون جيدًا مع OpenCode. -::: - -لمعالجة ذلك، قمنا بعدة أمور: - -1. اختبرنا مجموعة مختارة من النماذج المفتوحة وتحدثنا مع فرقها حول أفضل طريقة لتشغيلها. -2. ثم عملنا مع عدد قليل من المزودين للتأكد من تقديم هذه النماذج بالشكل الصحيح. -3. وأخيرًا، أجرينا مقارنات معيارية لمزيج النموذج/المزود، وتوصلنا إلى قائمة نشعر بالثقة في التوصية بها. - -يمنحك OpenCode Go الوصول إلى هذه النماذج مقابل **$5 للشهر الأول**، ثم **$10/شهريًا**. - ---- - -## كيف يعمل - -يعمل OpenCode Go مثل أي مزود آخر في OpenCode. - -1. تسجّل الدخول إلى **OpenCode Zen**، وتشترك في Go، ثم تنسخ مفتاح API الخاص بك. -2. تشغّل الأمر `/connect` في TUI، وتختار `OpenCode Go`، ثم تلصق مفتاح API الخاص بك. -3. شغّل `/models` في TUI لرؤية قائمة النماذج المتاحة عبر Go. - -:::note -يمكن لعضو واحد فقط في كل workspace الاشتراك في OpenCode Go. -::: - -تشمل قائمة النماذج الحالية: - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -قد تتغير قائمة النماذج مع استمرارنا في اختبار نماذج جديدة وإضافتها. - ---- - -## حدود الاستخدام - -يتضمن OpenCode Go الحدود التالية: - -- **حد 5 ساعات** — استخدام بقيمة $12 -- **الحد الأسبوعي** — استخدام بقيمة $30 -- **الحد الشهري** — استخدام بقيمة $60 - -تُحدَّد الحدود بالقيمة بالدولار. وهذا يعني أن عدد طلباتك الفعلي يعتمد على النموذج الذي تستخدمه. تتيح النماذج الأقل تكلفة مثل DeepSeek V4 Flash عددًا أكبر من الطلبات، بينما تتيح النماذج الأعلى تكلفة مثل GLM-5.2 عددًا أقل. - -يوضح الجدول أدناه عددًا تقديريًا للطلبات بناءً على أنماط استخدام Go المعتادة: - -| Model | الطلبات لكل 5 ساعات | الطلبات في الأسبوع | الطلبات في الشهر | -| ----------------- | ------------------- | ------------------ | ---------------- | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -تستند التقديرات إلى متوسط أنماط الطلبات المرصودة: - -- GLM-5.2/5.1 — ‏700 input، و52,000 cached، و150 output tokens لكل طلب -- Kimi K2.7 Code/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 M3 — ‏510 input، و56,000 cached، و190 output tokens لكل طلب -- MiniMax M2.7 — ‏300 input، و55,000 cached، و125 output tokens لكل طلب -- Qwen3.7 Max — ‏420 input، و66,000 cached، و200 output tokens لكل طلب -- Qwen3.7 Plus — ‏500 input، و57,000 cached، و190 output tokens لكل طلب -- Qwen3.6 Plus — ‏500 input، و57,000 cached، و190 output tokens لكل طلب -- MiMo-V2.5 — ‏830 input، و71,500 cached، و295 output tokens لكل طلب -- MiMo-V2.5-Pro — ‏790 input، و86,000 cached، و305 output tokens لكل طلب - -تستند التقديرات أيضًا إلى الأسعار التالية لكل 1M tokens: - -| النموذج | الإدخال | الإخراج | القراءة المخزنة | الكتابة المخزنة | -| ---------------------------- | ------- | ------- | --------------- | --------------- | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -يمكنك تتبّع استخدامك الحالي في **console**. - -:::tip -إذا وصلت إلى حد الاستخدام، يمكنك الاستمرار في استخدام النماذج المجانية. -::: - -قد تتغير حدود الاستخدام مع تعلّمنا من الاستخدام المبكر والملاحظات. - ---- - -### الاستخدام بعد تجاوز الحدود - -إذا كان لديك أيضًا رصيد في Zen balance، فيمكنك تفعيل خيار **Use balance** في console. عند تفعيله، سيعود Go إلى استخدام Zen balance الخاص بك بعد بلوغ حدود الاستخدام بدلًا من حظر الطلبات. - ---- - -## نقاط النهاية - -يمكنك أيضًا الوصول إلى نماذج Go عبر نقاط نهاية API التالية. - -| Model | Model ID | Endpoint | AI SDK Package | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -يستخدم [model id](/docs/config/#models) في إعدادات OpenCode لديك التنسيق `opencode-go/`. على سبيل المثال، بالنسبة إلى Kimi K2.7 Code، ستستخدم `opencode-go/kimi-k2.7-code` في إعداداتك. - ---- - -### النماذج - -يمكنك جلب القائمة الكاملة بالنماذج المتاحة وبياناتها الوصفية من: - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## الخصوصية - -صُمّمت هذه الخطة أساسًا للمستخدمين الدوليين، مع استضافة النماذج في الولايات المتحدة والاتحاد الأوروبي وسنغافورة لضمان وصول عالمي مستقر. ويتّبع مزودونا سياسة عدم الاحتفاظ بالبيانات، ولا يستخدمون بياناتك لتدريب النماذج. - ---- - -## الأهداف - -أنشأنا OpenCode Go من أجل: - -1. جعل البرمجة بالذكاء الاصطناعي **متاحة** لعدد أكبر من الأشخاص عبر اشتراك منخفض التكلفة. -2. توفير وصول **موثوق** إلى أفضل نماذج البرمجة المفتوحة. -3. تنسيق نماذج **مختبرة وخضعت لمقارنات معيارية** لاستخدامها مع وكلاء البرمجة. -4. **عدم فرض قيود ارتباط** من خلال السماح لك أيضًا باستخدام أي مزود آخر مع OpenCode. diff --git a/packages/web/src/content/docs/ar/ide.mdx b/packages/web/src/content/docs/ar/ide.mdx deleted file mode 100644 index 354d95a07d..0000000000 --- a/packages/web/src/content/docs/ar/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -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 لديه الصلاحية لتثبيت الامتدادات diff --git a/packages/web/src/content/docs/ar/index.mdx b/packages/web/src/content/docs/ar/index.mdx deleted file mode 100644 index ff2de9c512..0000000000 --- a/packages/web/src/content/docs/ar/index.mdx +++ /dev/null @@ -1,344 +0,0 @@ ---- -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 مع سمة opencode](../../../assets/lander/screenshot.png) - -لنبدأ. - ---- - -#### المتطلبات - -لاستخدام 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** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **باستخدام 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" - - ``` - - الآن لنصف ما نريده أن يفعله. - - ```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" - - ``` - - ثم اطلب منه تنفيذ التغييرات. - - ```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). diff --git a/packages/web/src/content/docs/ar/keybinds.mdx b/packages/web/src/content/docs/ar/keybinds.mdx deleted file mode 100644 index d40d49729e..0000000000 --- a/packages/web/src/content/docs/ar/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: اختصارات لوحة المفاتيح -description: خصّص اختصارات لوحة المفاتيح. ---- - -يوفّر OpenCode قائمة باختصارات لوحة المفاتيح يمكنك تخصيصها عبر إعدادات OpenCode. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "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 أو افتح علامة تبويب جديدة. diff --git a/packages/web/src/content/docs/ar/lsp.mdx b/packages/web/src/content/docs/ar/lsp.mdx deleted file mode 100644 index 8b2c721df2..0000000000 --- a/packages/web/src/content/docs/ar/lsp.mdx +++ /dev/null @@ -1,207 +0,0 @@ ---- -title: خوادم LSP -description: يتكامل OpenCode مع خوادم LSP لديك. ---- - -يمكن أن يتكامل OpenCode مع خوادم Language Server Protocol (LSP) لاستخدام التشخيصات كملاحظات للوكيل. - ---- - -## المدمجة - -يأتي 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`. -::: - ---- - -## كيف يعمل - -عند تفعيل LSP وفتح opencode لملف، فإنه: - -1. يفحص امتداد الملف مقابل جميع خوادم LSP المفعّلة. -2. يشغّل خادم LSP المناسب إذا لم يكن قيد التشغيل بالفعل. - ---- - -## أفضل الممارسات - -يمكن أن تساعد LSP الوكيل على العثور على المشاكل وإصلاحها عبر توفير التشخيصات من خوادم اللغة. هذا مفيد في بعض المشاريع، لكنه ليس دائما مكسبا صافيا. - -قد تخرج خوادم اللغة عن المزامنة، وتستهلك ذاكرة كبيرة، وتختلف حسب الإصدار أو المشروع، وتبطئ سير عمل الوكيل. في كثير من المشاريع، يكون من الأفضل أن يشغّل الوكيل lint أو typecheck أو أدوات CLI التشخيصية الأخرى مباشرة، بحيث تعود الأخطاء إلى حلقة الوكيل دون هذه المفاضلات. وثّق هذه الأوامر في ملفات التعليمات مثل `AGENTS.md` أو المهارات حتى يعرف الوكيل ما يجب تشغيله. فعّل LSP عندما يستفيد مشروعك من ملاحظات إضافية من خادم اللغة. - ---- - -## الإعداد - -يمكنك تفعيل خوادم LSP وتخصيصها عبر قسم `lsp` في إعدادات opencode. - -لتفعيل جميع خوادم LSP المدمجة، اضبط `lsp` على `true`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -استخدم كائنا لإبقاء الخوادم المدمجة مفعلة أثناء إعداد التجاوزات أو الخوادم المخصصة. - -```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 معطلة. لتعطيل جميع خوادم 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` - -يجب أن يحتوي الملف على مفتاح الترخيص فقط دون أي محتوى إضافي. diff --git a/packages/web/src/content/docs/ar/mcp-servers.mdx b/packages/web/src/content/docs/ar/mcp-servers.mdx deleted file mode 100644 index dacdb9490b..0000000000 --- a/packages/web/src/content/docs/ar/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -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 `. - ---- - -### مُسجَّل مسبقا - -إذا كانت لديك بيانات اعتماد العميل من موفّر خادم 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. -``` diff --git a/packages/web/src/content/docs/ar/models.mdx b/packages/web/src/content/docs/ar/models.mdx deleted file mode 100644 index dcb6aa519e..0000000000 --- a/packages/web/src/content/docs/ar/models.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -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. أول نموذج وفق أولوية داخلية. diff --git a/packages/web/src/content/docs/ar/network.mdx b/packages/web/src/content/docs/ar/network.mdx deleted file mode 100644 index 62f9b94a88..0000000000 --- a/packages/web/src/content/docs/ar/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -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. diff --git a/packages/web/src/content/docs/ar/permissions.mdx b/packages/web/src/content/docs/ar/permissions.mdx deleted file mode 100644 index c50428cb77..0000000000 --- a/packages/web/src/content/docs/ar/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -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` — بحث الويب (يطابق الاستعلام) -- `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 *"`) عند تمرير معاملات. -::: diff --git a/packages/web/src/content/docs/ar/plugins.mdx b/packages/web/src/content/docs/ar/plugins.mdx deleted file mode 100644 index d7c025bbc3..0000000000 --- a/packages/web/src/content/docs/ar/plugins.mdx +++ /dev/null @@ -1,385 +0,0 @@ ---- -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` في هذه الحالة. diff --git a/packages/web/src/content/docs/ar/providers.mdx b/packages/web/src/content/docs/ar/providers.mdx deleted file mode 100644 index c4812fe5d5..0000000000 --- a/packages/web/src/content/docs/ar/providers.mdx +++ /dev/null @@ -1,1983 +0,0 @@ ---- -title: المزوّدون -description: استخدام أي موفّر LLM في OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console - -يستخدم OpenCode ‏[AI SDK](https://ai-sdk.dev/) و[Models.dev](https://models.dev) لدعم **أكثر من 75 موفّر LLM**، كما يدعم تشغيل النماذج المحلية. - -لإضافة مزوّد تحتاج إلى: - -1. أضف مفاتيح API الخاصة بالمزوّد باستخدام الأمر `/connect`. -2. اضبط المزوّد في ملف إعدادات OpenCode. - ---- - -### بيانات الاعتماد - -عند إضافة مفاتيح API الخاصة بمزوّد عبر الأمر `/connect`، يتم تخزينها -في `~/.local/share/opencode/auth.json`. - ---- - -### الإعدادات - -يمكنك تخصيص المزوّدات عبر قسم `provider` في ملف إعدادات OpenCode. - ---- - -#### عنوان URL الأساسي - -يمكنك تخصيص عنوان URL الأساسي لأي مزوّد عبر خيار `baseURL`. يفيد ذلك عند استخدام خدمات وسيطة (proxy) أو نقاط نهاية مخصّصة. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen هي قائمة نماذج يوفّرها فريق OpenCode وقد تم -اختبارها والتحقق من أنها تعمل بشكل جيد مع OpenCode. [اعرف المزيد](/docs/zen). - -:::tip -إذا كنت جديدا، فننصح بالبدء مع OpenCode Zen. -::: - -1. شغّل الأمر `/connect` في TUI، واختر opencode، ثم انتقل إلى [opencode.ai/auth](https://opencode.ai/auth). - - ```txt - /connect - ``` - -2. سجّل الدخول، وأضف تفاصيل الفوترة، ثم انسخ مفتاح API الخاص بك. - -3. الصق مفتاح API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل `/models` في TUI لعرض قائمة النماذج التي نوصي بها. - - ```txt - /models - ``` - -يعمل مثل أي مزوّد آخر في OpenCode واستخدامه اختياري بالكامل. - ---- - -## OpenCode Go - -OpenCode Go هي خطة اشتراك منخفضة التكلفة توفّر وصولا موثوقا إلى نماذج البرمجة المفتوحة الشهيرة المقدّمة من فريق OpenCode، والتي تم اختبارها والتحقق من أنها تعمل بشكل جيد مع OpenCode. - -1. شغّل الأمر `/connect` في TUI، واختر `OpenCode Go`، ثم انتقل إلى [opencode.ai/auth](https://opencode.ai/zen). - - ```txt - /connect - ``` - -2. سجّل الدخول، وأضف تفاصيل الفوترة، ثم انسخ مفتاح API الخاص بك. - -3. الصق مفتاح API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل `/models` في TUI لعرض قائمة النماذج التي نوصي بها. - - ```txt - /models - ``` - -يعمل مثل أي مزوّد آخر في OpenCode واستخدامه اختياري بالكامل. - ---- - -## الدليل - -لنلقِ نظرة على بعض المزوّدات بالتفصيل. إذا رغبت في إضافة مزوّد إلى القائمة، -فلا تتردد في فتح PR. - -:::note -لم تجد المزوّد الذي تبحث عنه؟ أرسل PR. -::: - ---- - -### 302.AI - -1. توجّه إلى [302.AI console](https://302.ai/)، وأنشئ حسابا، ثم أنشئ مفتاح API. - -2. شغّل الأمر `/connect` وابحث عن **302.AI**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ 302.AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج. - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -لاستخدام Amazon Bedrock مع OpenCode: - -1. توجّه إلى **Model catalog** في Amazon Bedrock console واطلب - الوصول إلى النماذج التي تريدها. - - :::tip - يجب أن يكون لديك وصول إلى النموذج الذي تريده في Amazon Bedrock. - ::: - -2. **اضبط المصادقة** باستخدام إحدى الطرق التالية: - - #### متغيرات البيئة (بدء سريع) - - عيّن أحد متغيرات البيئة التالية أثناء تشغيل opencode: - - ```bash - # الخيار 1: استخدام مفاتيح وصول AWS - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # الخيار 2: استخدام ملف تعريف AWS مسمّى - AWS_PROFILE=my-profile opencode - - # الخيار 3: استخدام رمز Bedrock المميز (bearer token) - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - أو أضفها إلى bash profile: - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - #### ملف الإعدادات (موصى به) - - للإعداد الخاص بالمشروع أو الإعداد الدائم، استخدم `opencode.json`: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **الخيارات المتاحة:** - - `region` - منطقة AWS (مثل `us-east-1`، `eu-west-1`) - - `profile` - ملف تعريف AWS المسمّى من `~/.aws/credentials` - - `endpoint` - عنوان URL لنقطة نهاية مخصّصة لنقاط نهاية VPC (اسم بديل لخيار `baseURL` العام) - - :::tip - خيارات ملف الإعدادات لها أولوية على متغيرات البيئة. - ::: - - #### متقدم: نقاط نهاية VPC - - إذا كنت تستخدم نقاط نهاية VPC لـ Bedrock: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } - } - ``` - - :::note - خيار `endpoint` هو اسم بديل لخيار `baseURL` العام باستخدام مصطلحات AWS. إذا تم تحديد كل من `endpoint` و`baseURL`، فستكون الأولوية لـ `endpoint`. - ::: - - #### طرق المصادقة - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: أنشئ مستخدم IAM وأنشئ مفاتيح وصول من AWS Console - - **`AWS_PROFILE`**: استخدم ملفات تعريف مسمّاة من `~/.aws/credentials`. اضبط أولا عبر `aws configure --profile my-profile` أو `aws sso login` - - **`AWS_BEARER_TOKEN_BEDROCK`**: أنشئ مفاتيح API طويلة الأجل من Amazon Bedrock console - - **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**: لـ EKS IRSA (IAM Roles for Service Accounts) أو بيئات Kubernetes أخرى مع اتحاد OIDC. يتم حقن متغيرات البيئة هذه تلقائيا بواسطة Kubernetes عند استخدام تعليقات حساب الخدمة. - - #### أولوية المصادقة - - يستخدم Amazon Bedrock أولوية المصادقة التالية: - 1. **Bearer Token** - متغير البيئة `AWS_BEARER_TOKEN_BEDROCK` أو الرمز من الأمر `/connect` - 2. **AWS Credential Chain** - الملف الشخصي، مفاتيح الوصول، بيانات الاعتماد المشتركة، أدوار IAM، رموز Web Identity (EKS IRSA)، بيانات تعريف المثيل - - :::note - عند تعيين bearer token (عبر `/connect` أو `AWS_BEARER_TOKEN_BEDROCK`)، ستكون له أولوية على جميع طرق بيانات اعتماد AWS بما في ذلك ملفات التعريف المضبوطة. - ::: - -3. شغّل الأمر `/models` لاختيار النموذج الذي تريده. - - ```txt - /models - ``` - -:::note -بالنسبة إلى ملفات تعريف الاستدلال المخصّصة، استخدم اسم النموذج واسم المزوّد في المفتاح وعيّن الخاصية `id` إلى arn. يضمن ذلك التخزين المؤقت الصحيح: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - -::: - ---- - -### Anthropic - -1. بعد إنشاء حسابك، شغّل الأمر `/connect` واختر Anthropic. - - ```txt - /connect - ``` - -2. هنا يمكنك اختيار خيار **Claude Pro/Max** وسيتم فتح المتصفح - وسيطلب منك المصادقة. - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. الآن يجب أن تكون جميع نماذج Anthropic متاحة عند استخدام الأمر `/models`. - - ```txt - /models - ``` - -:::info -استخدام اشتراك Claude Pro/Max داخل OpenCode غير مدعوم رسميا من [Anthropic](https://anthropic.com). -::: - -##### استخدام مفاتيح API - -يمكنك أيضا اختيار **Create an API Key** إذا لم يكن لديك اشتراك Pro/Max. سيفتح ذلك المتصفح أيضا ويطلب منك تسجيل الدخول إلى Anthropic ويعطيك رمزا يمكنك لصقه في terminal. - -أو إذا كان لديك مفتاح API بالفعل، يمكنك اختيار **Manually enter API Key** ولصقه في terminal. - ---- - -### Atomic Chat - -يمكنك تكوين opencode لاستخدام النماذج المحلية عبر [Atomic Chat](https://atomic.chat)، وهو تطبيق سطح مكتب يقوم بتشغيل LLMs المحلية خلف خادم API متوافق مع OpenAI (نقطة النهاية الافتراضية `http://127.0.0.1:1337/v1`). - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -في هذا المثال: - -- `atomic-chat` هو معرف الموفر المخصص. يمكن أن يكون أي سلسلة نصية. -- `npm` يحدد الحزمة المستخدمة لهذا الموفر. هنا يُستخدم `@ai-sdk/openai-compatible` لأي واجهة برمجة تطبيقات متوافقة مع OpenAI. -- `name` هو الاسم المعروض للموفر في الواجهة. -- `options.baseURL` هو نقطة نهاية الخادم المحلي. غيّر المضيف والمنفذ لتتطابق مع إعدادات Atomic Chat الخاصة بك. -- `models` هو خريطة لمعرفات النماذج إلى أسمائها المعروضة. يجب أن يتطابق كل معرف مع `id` الذي يرجعه `GET /v1/models` — قم بتشغيل `curl http://127.0.0.1:1337/v1/models` لإدراج المعرفات المحملة حاليًا في Atomic Chat. - -:::tip -إذا لم تعمل استدعاءات الأدوات بشكل جيد، فاختر نموذجًا محملًا بدعم قوي لاستدعاء الأدوات (على سبيل المثال، متغير Qwen-Coder أو DeepSeek-Coder). -::: - ---- - -### Azure OpenAI - -:::note -إذا واجهت أخطاء "I'm sorry, but I cannot assist with that request"، فجرّب تغيير مرشح المحتوى من **DefaultV2** إلى **Default** في مورد Azure الخاص بك. -::: - -1. توجّه إلى [Azure portal](https://portal.azure.com/) وأنشئ موردا من نوع **Azure OpenAI**. ستحتاج إلى: - - **Resource name**: يصبح جزءا من نقطة نهاية API لديك (`https://RESOURCE_NAME.openai.azure.com/`) - - **API key**: إما `KEY 1` أو `KEY 2` من موردك - -2. اذهب إلى [Azure AI Foundry](https://ai.azure.com/) وانشر نموذجا. - - :::note - يجب أن يطابق اسم النشر اسم النموذج كي يعمل opencode بشكل صحيح. - ::: - -3. شغّل الأمر `/connect` وابحث عن **Azure**. - - ```txt - /connect - ``` - -4. أدخل مفتاح API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. عيّن اسم المورد كمتغير بيئة: - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - - أو أضفه إلى bash profile: - - ```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX - ``` - -6. شغّل الأمر `/models` لاختيار النموذج الذي قمت بنشره. - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. توجّه إلى [Azure portal](https://portal.azure.com/) وأنشئ موردا من نوع **Azure OpenAI**. ستحتاج إلى: - - **Resource name**: يصبح جزءا من نقطة نهاية API لديك (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) - - **API key**: إما `KEY 1` أو `KEY 2` من موردك - -2. اذهب إلى [Azure AI Foundry](https://ai.azure.com/) وانشر نموذجا. - - :::note - يجب أن يطابق اسم النشر اسم النموذج كي يعمل opencode بشكل صحيح. - ::: - -3. شغّل الأمر `/connect` وابحث عن **Azure Cognitive Services**. - - ```txt - /connect - ``` - -4. أدخل مفتاح API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. عيّن اسم المورد كمتغير بيئة: - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - - أو أضفه إلى bash profile: - - ```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX - ``` - -6. شغّل الأمر `/models` لاختيار النموذج الذي قمت بنشره. - - ```txt - /models - ``` - ---- - -### Baseten - -1. توجّه إلى [Baseten](https://app.baseten.co/)، وأنشئ حسابا، ثم أنشئ مفتاح API. - -2. شغّل الأمر `/connect` وابحث عن **Baseten**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ Baseten. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج. - - ```txt - /models - ``` - ---- - -### Cerebras - -1. توجّه إلى [Cerebras console](https://inference.cerebras.ai/)، وأنشئ حسابا، ثم أنشئ مفتاح API. - -2. شغّل الأمر `/connect` وابحث عن **Cerebras**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ Cerebras. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج مثل _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -تتيح Cloudflare AI Gateway الوصول إلى نماذج من OpenAI وAnthropic وWorkers AI وغيرها عبر نقطة نهاية موحّدة. مع [Unified Billing](https://developers.cloudflare.com/ai-gateway/features/unified-billing/) لن تحتاج إلى مفاتيح API منفصلة لكل مزوّد. - -1. توجّه إلى [Cloudflare dashboard](https://dash.cloudflare.com/)، وانتقل إلى **AI** > **AI Gateway**، وأنشئ بوابة جديدة. - -2. عيّن Account ID وGateway ID كمتغيرات بيئة. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. شغّل الأمر `/connect` وابحث عن **Cloudflare AI Gateway**. - - ```txt - /connect - ``` - -4. أدخل Cloudflare API token. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - - أو عيّنه كمتغير بيئة. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token - ``` - -5. شغّل الأمر `/models` لاختيار نموذج. - - ```txt - /models - ``` - - يمكنك أيضا إضافة نماذج عبر إعدادات opencode. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } - } - ``` - ---- - -### Cortecs - -1. توجّه إلى [Cortecs console](https://cortecs.ai/)، وأنشئ حسابا، ثم أنشئ مفتاح API. - -2. شغّل الأمر `/connect` وابحث عن **Cortecs**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ Cortecs. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج مثل _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. توجّه إلى [DeepSeek console](https://platform.deepseek.com/)، وأنشئ حسابا، ثم انقر **Create new API key**. - -2. شغّل الأمر `/connect` وابحث عن **DeepSeek**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ DeepSeek. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج من DeepSeek مثل _DeepSeek V4 Pro_. - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. توجّه إلى [Deep Infra dashboard](https://deepinfra.com/dash)، وأنشئ حسابا، ثم أنشئ مفتاح API. - -2. شغّل الأمر `/connect` وابحث عن **Deep Infra**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ Deep Infra. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج. - - ```txt - /models - ``` - ---- - -### FrogBot - -1. توجّه إلى [FrogBot dashboard](https://app.frogbot.ai/signup)، وأنشئ حسابا، ثم أنشئ مفتاح API. - -2. شغّل الأمر `/connect` وابحث عن **FrogBot**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ FrogBot. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج. - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. توجّه إلى [Fireworks AI console](https://app.fireworks.ai/)، وأنشئ حسابا، ثم انقر **Create API Key**. - -2. شغّل الأمر `/connect` وابحث عن **Fireworks AI**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ Fireworks AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج مثل _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### GitLab Duo - -يوفّر GitLab Duo دردشة وكيلة (agentic) مدعومة بالذكاء الاصطناعي مع قدرات استدعاء أدوات بشكل مدمج عبر Anthropic proxy الخاصة بـ GitLab. - -1. شغّل الأمر `/connect` واختر GitLab. - - ```txt - /connect - ``` - -2. اختر طريقة المصادقة: - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### استخدام OAuth (موصى به) - - اختر **OAuth** وسيفتح المتصفح لإتمام التفويض. - - #### استخدام Personal Access Token 1. اذهب إلى [GitLab User Settings > Access Tokens](https://gitlab.com/-/user_settings/personal_access_tokens) - 2. انقر **Add new token** - 3. Name: `OpenCode`، Scopes: `api` - 4. انسخ الرمز (يبدأ بـ `glpat-`) - 5. أدخله في terminal - -3. شغّل الأمر `/models` لعرض النماذج المتاحة. - - ```txt - /models - ``` - - تتوفر ثلاثة نماذج مبنية على Claude: - - **duo-chat-haiku-4-5** (Default) - استجابات سريعة للمهام السريعة - - **duo-chat-sonnet-4-5** - أداء متوازن لمعظم سير العمل - - **duo-chat-opus-4-5** - الأكثر قدرة للتحليل المعقّد - -:::note -يمكنك أيضا تعيين متغير البيئة 'GITLAB_TOKEN' إذا لم تكن تريد -تخزين الرمز في مساحة تخزين مصادقة opencode. -::: - -##### GitLab مستضاف ذاتيا - -:::note[ملاحظة امتثال] -يستخدم OpenCode نموذجا صغيرا لبعض مهام الذكاء الاصطناعي مثل إنشاء عنوان الجلسة. -تم ضبطه لاستخدام gpt-5-nano افتراضيا، مستضافا عبر Zen. لحصر OpenCode -على استخدام مثيل GitLab المستضاف لديك فقط، أضف ما يلي إلى ملف -`opencode.json` لديك. يوصى أيضا بتعطيل مشاركة الجلسات. - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -لمثيلات GitLab المستضافة ذاتيا: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -إذا كان مثيلك يشغّل AI Gateway مخصّصة: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -أو أضفها إلى bash profile: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -يجب على مدير GitLab لديك تفعيل ما يلي: - -1. [Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) للمستخدم أو المجموعة أو المثيل -2. Feature flags (عبر Rails console): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### OAuth للمثيلات المستضافة ذاتيا - -لكي يعمل Oauth مع مثيلك المستضاف ذاتيا، تحتاج إلى إنشاء -تطبيق جديد (Settings → Applications) مع -callback URL ‏`http://127.0.0.1:8080/callback` ونطاقات الصلاحيات التالية: - -- api (Access the API on your behalf) -- read_user (Read your personal information) -- read_repository (Allows read-only access to the repository) - -ثم عرّض application ID كمتغير بيئة: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -مزيد من التوثيق على صفحة [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth). - -##### التهيئة - -خصّص عبر `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### أدوات GitLab API (اختياري، لكن موصى به بشدة) - -للوصول إلى أدوات GitLab (merge requests وissues وpipelines وCI/CD وغيرها): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -يوفّر هذا الملحق قدرات شاملة لإدارة مستودعات GitLab بما في ذلك مراجعات MR وتتبع issues ومراقبة pipelines وغير ذلك. - ---- - -### GitHub Copilot - -لاستخدام اشتراك GitHub Copilot مع opencode: - -:::note -قد تتطلب بعض النماذج اشتراك [Pro+](https://github.com/features/copilot/plans) للاستخدام. - -تحتاج بعض النماذج إلى تفعيل يدوي من [إعدادات GitHub Copilot](https://docs.github.com/en/copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use). -::: - -1. شغّل الأمر `/connect` وابحث عن GitHub Copilot. - - ```txt - /connect - ``` - -2. انتقل إلى [github.com/login/device](https://github.com/login/device) وأدخل الرمز. - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - └ Waiting for authorization... - ``` - -3. الآن شغّل الأمر `/models` لاختيار النموذج الذي تريده. - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -لاستخدام Google Vertex AI مع OpenCode: - -1. توجّه إلى **Model Garden** في Google Cloud Console وتحقق من - النماذج المتاحة في منطقتك. - - :::note - تحتاج إلى مشروع Google Cloud مع تفعيل Vertex AI API. - ::: - -2. عيّن متغيرات البيئة المطلوبة: - - `GOOGLE_CLOUD_PROJECT`: معرّف مشروع Google Cloud لديك - - `VERTEX_LOCATION` (اختياري): منطقة Vertex AI (الافتراضي `global`) - - المصادقة (اختر واحدا): - - `GOOGLE_APPLICATION_CREDENTIALS`: مسار ملف مفتاح حساب الخدمة بصيغة JSON - - المصادقة عبر gcloud CLI: ‏`gcloud auth application-default login` - - عيّنها أثناء تشغيل opencode. - - ```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode - ``` - - أو أضفها إلى bash profile. - - ```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global - ``` - -:::tip -تساعد منطقة `global` على تحسين التوفر وتقليل الأخطاء دون تكلفة إضافية. استخدم نقاط نهاية إقليمية (مثل `us-central1`) لمتطلبات موضع البيانات. [اعرف المزيد](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. شغّل الأمر `/models` لاختيار النموذج الذي تريده. - - ```txt - /models - ``` - ---- - -### Groq - -1. توجّه إلى [Groq console](https://console.groq.com/)، وانقر **Create API Key**، ثم انسخ المفتاح. - -2. شغّل الأمر `/connect` وابحث عن Groq. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بالمزوّد. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار ما تريده. - - ```txt - /models - ``` - ---- - -### Hugging Face - -توفّر [Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers) وصولا إلى نماذج مفتوحة مدعومة من أكثر من 17 مزوّدا. - -1. توجّه إلى [Hugging Face settings](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained) لإنشاء رمز (token) بصلاحية إجراء طلبات إلى Inference Providers. - -2. شغّل الأمر `/connect` وابحث عن **Hugging Face**. - - ```txt - /connect - ``` - -3. أدخل token الخاص بـ Hugging Face. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج مثل _Kimi-K2-Instruct_ أو _GLM-4.6_. - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) منصة لملاحظة LLM (observability) توفّر التسجيل والمراقبة والتحليلات لتطبيقات الذكاء الاصطناعي لديك. تقوم Helicone AI Gateway بتوجيه طلباتك تلقائيا إلى المزوّد المناسب بناء على النموذج. - -1. توجّه إلى [Helicone](https://helicone.ai)، وأنشئ حسابا، ثم أنشئ مفتاح API من لوحة التحكم. - -2. شغّل الأمر `/connect` وابحث عن **Helicone**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ Helicone. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج. - - ```txt - /models - ``` - -لمزيد من المزوّدات والميزات المتقدمة مثل التخزين المؤقت (caching) وتحديد المعدّل (rate limiting)، راجع [توثيق Helicone](https://docs.helicone.ai). - -#### إعدادات اختيارية - -إذا رأيت ميزة أو نموذجا في Helicone لم يتم ضبطه تلقائيا عبر opencode، فيمكنك دائما ضبطه بنفسك. - -هذه هي [Helicone's Model Directory](https://helicone.ai/models)، وستحتاجها للحصول على IDs الخاصة بالنماذج التي تريد إضافتها. - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### ترويسات مخصّصة - -تدعم Helicone ترويسات مخصّصة لميزات مثل التخزين المؤقت وتتبع المستخدم وإدارة الجلسات. أضفها إلى إعداد المزوّد عبر `options.headers`: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### تتبع الجلسات - -تتيح ميزة [Sessions](https://docs.helicone.ai/features/sessions) في Helicone تجميع طلبات LLM المرتبطة معا. استخدم ملحق [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) لتسجيل كل محادثة OpenCode تلقائيا كجلسة في Helicone. - -```bash -npm install -g opencode-helicone-session -``` - -أضفه إلى إعداداتك. - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -يقوم الملحق بحقن ترويسات `Helicone-Session-Id` و`Helicone-Session-Name` ضمن طلباتك. في صفحة Sessions داخل Helicone، سترى كل محادثة OpenCode مدرجة كجلسة مستقلة. - -##### ترويسات Helicone الشائعة - -| Header | الوصف | -| -------------------------- | -------------------------------------------------------- | -| `Helicone-Cache-Enabled` | تفعيل التخزين المؤقت للاستجابات (`true`/`false`) | -| `Helicone-User-Id` | تتبع المقاييس حسب المستخدم | -| `Helicone-Property-[Name]` | إضافة خصائص مخصّصة (مثل `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | ربط الطلبات بإصدارات prompt | - -راجع [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory) لعرض جميع الترويسات المتاحة. - ---- - -### llama.cpp - -يمكنك ضبط opencode لاستخدام نماذج محلية عبر أداة llama-server ضمن [llama.cpp](https://github.com/ggml-org/llama.cpp) - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -في هذا المثال: - -- `llama.cpp` هو ID مزوّد مخصّص. يمكن أن يكون أي سلسلة نصية تريدها. -- `npm` يحدد الحزمة المستخدمة لهذا المزوّد. هنا يتم استخدام `@ai-sdk/openai-compatible` لأي API متوافق مع OpenAI. -- `name` هو اسم العرض للمزوّد في واجهة المستخدم. -- `options.baseURL` هو نقطة نهاية الخادم المحلي. -- `models` هو خريطة من IDs النماذج إلى إعداداتها. سيتم عرض اسم النموذج ضمن قائمة اختيار النماذج. - ---- - -### IO.NET - -تقدّم IO.NET ‏17 نموذجا محسّنا لاستخدامات متعددة: - -1. توجّه إلى [IO.NET console](https://ai.io.net/)، وأنشئ حسابا، ثم أنشئ مفتاح API. - -2. شغّل الأمر `/connect` وابحث عن **IO.NET**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ IO.NET. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج. - - ```txt - /models - ``` - ---- - -### LM Studio - -يمكنك ضبط opencode لاستخدام نماذج محلية عبر LM Studio. - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -في هذا المثال: - -- `lmstudio` هو ID مزوّد مخصّص. يمكن أن يكون أي سلسلة نصية تريدها. -- `npm` يحدد الحزمة المستخدمة لهذا المزوّد. هنا يتم استخدام `@ai-sdk/openai-compatible` لأي API متوافق مع OpenAI. -- `name` هو اسم العرض للمزوّد في واجهة المستخدم. -- `options.baseURL` هو نقطة نهاية الخادم المحلي. -- `models` هو خريطة من IDs النماذج إلى إعداداتها. سيتم عرض اسم النموذج ضمن قائمة اختيار النماذج. - ---- - -### Moonshot AI - -لاستخدام Kimi K2 من Moonshot AI: - -1. توجّه إلى [Moonshot AI console](https://platform.moonshot.ai/console)، وأنشئ حسابا، ثم انقر **Create API key**. - -2. شغّل الأمر `/connect` وابحث عن **Moonshot AI**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ Moonshot. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار _Kimi K2_. - - ```txt - /models - ``` - ---- - -### MiniMax - -1. توجّه إلى [MiniMax API Console](https://platform.minimax.io/login)، وأنشئ حسابا، ثم أنشئ مفتاح API. - -2. شغّل الأمر `/connect` وابحث عن **MiniMax**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ MiniMax. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج مثل _M2.1_. - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. توجّه إلى [Nebius Token Factory console](https://tokenfactory.nebius.com/)، وأنشئ حسابا، ثم انقر **Add Key**. - -2. شغّل الأمر `/connect` وابحث عن **Nebius Token Factory**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ Nebius Token Factory. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج مثل _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Ollama - -يمكنك ضبط opencode لاستخدام نماذج محلية عبر Ollama. - -:::tip -يمكن لـ Ollama ضبط نفسه تلقائيا للعمل مع OpenCode. راجع [توثيق تكامل Ollama](https://docs.ollama.com/integrations/opencode) للتفاصيل. -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -في هذا المثال: - -- `ollama` هو ID مزوّد مخصّص. يمكن أن يكون أي سلسلة نصية تريدها. -- `npm` يحدد الحزمة المستخدمة لهذا المزوّد. هنا يتم استخدام `@ai-sdk/openai-compatible` لأي API متوافق مع OpenAI. -- `name` هو اسم العرض للمزوّد في واجهة المستخدم. -- `options.baseURL` هو نقطة نهاية الخادم المحلي. -- `models` هو خريطة من IDs النماذج إلى إعداداتها. سيتم عرض اسم النموذج ضمن قائمة اختيار النماذج. - -:::tip -إذا لم تكن tool calls تعمل، جرّب زيادة `num_ctx` في Ollama. ابدأ بنحو 16k - 32k. -::: - ---- - -### Ollama Cloud - -لاستخدام Ollama Cloud مع OpenCode: - -1. توجّه إلى [https://ollama.com/](https://ollama.com/) وسجّل الدخول أو أنشئ حسابا. - -2. انتقل إلى **Settings** > **Keys** وانقر **Add API Key** لإنشاء مفتاح API جديد. - -3. انسخ مفتاح API لاستخدامه في OpenCode. - -4. شغّل الأمر `/connect` وابحث عن **Ollama Cloud**. - - ```txt - /connect - ``` - -5. أدخل مفتاح API الخاص بـ Ollama Cloud. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **مهم**: قبل استخدام نماذج السحابة في OpenCode، يجب سحب معلومات النموذج محليا: - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. شغّل الأمر `/models` لاختيار نموذج Ollama Cloud. - - ```txt - /models - ``` - ---- - -### OpenAI - -نوصي بالاشتراك في [ChatGPT Plus أو Pro](https://chatgpt.com/pricing). - -1. بعد الاشتراك، شغّل الأمر `/connect` واختر OpenAI. - - ```txt - /connect - ``` - -2. هنا يمكنك اختيار خيار **ChatGPT Plus/Pro** وسيتم فتح المتصفح - وسيطلب منك المصادقة. - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. الآن يجب أن تكون جميع نماذج OpenAI متاحة عند استخدام الأمر `/models`. - - ```txt - /models - ``` - -##### استخدام مفاتيح API - -إذا كان لديك مفتاح API بالفعل، يمكنك اختيار **Manually enter API Key** ولصقه في terminal. - ---- - -### OpenCode Zen - -OpenCode Zen هي قائمة من النماذج التي تم اختبارها والتحقق منها مقدّمة من فريق OpenCode. [اعرف المزيد](/docs/zen). - -1. سجّل الدخول إلى **OpenCode Zen** وانقر **Create API Key**. - -2. شغّل الأمر `/connect` وابحث عن **OpenCode Zen**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ OpenCode. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج مثل _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. توجّه إلى [OpenRouter dashboard](https://openrouter.ai/settings/keys)، وانقر **Create API Key**، ثم انسخ المفتاح. - -2. شغّل الأمر `/connect` وابحث عن OpenRouter. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بالمزوّد. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. يتم تحميل العديد من نماذج OpenRouter مسبقا بشكل افتراضي؛ شغّل الأمر `/models` لاختيار ما تريده. - - ```txt - /models - ``` - - يمكنك أيضا إضافة نماذج إضافية عبر إعدادات opencode. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. يمكنك أيضا تخصيصها عبر إعدادات opencode. إليك مثالا على تحديد مزوّد - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -يوفّر SAP AI Core وصولا إلى أكثر من 40 نموذجا من OpenAI وAnthropic وGoogle وAmazon وMeta وMistral وAI21 عبر منصة موحّدة. - -1. اذهب إلى [SAP BTP Cockpit](https://account.hana.ondemand.com/)، وانتقل إلى مثيل خدمة SAP AI Core لديك، ثم أنشئ service key. - - :::tip - service key هو كائن JSON يحتوي على `clientid` و`clientsecret` و`url` و`serviceurls.AI_API_URL`. يمكنك العثور على مثيل AI Core ضمن **Services** > **Instances and Subscriptions** في BTP Cockpit. - ::: - -2. شغّل الأمر `/connect` وابحث عن **SAP AI Core**. - - ```txt - /connect - ``` - -3. أدخل JSON الخاص بـ service key. - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - أو عيّن متغير البيئة `AICORE_SERVICE_KEY`: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - أو أضفه إلى bash profile: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. اختياريا، عيّن deployment ID وresource group: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - هذه الإعدادات اختيارية ويجب ضبطها وفقا لإعداد SAP AI Core لديك. - ::: - -5. شغّل الأمر `/models` للاختيار من بين أكثر من 40 نموذجا متاحا. - - ```txt - /models - ``` - ---- - -### STACKIT - -توفّر خدمة STACKIT AI Model Serving بيئة استضافة سيادية مُدارة بالكامل لنماذج الذكاء الاصطناعي، مع التركيز على نماذج LLM مثل Llama وMistral وQwen، مع أقصى درجات سيادة البيانات على بنية تحتية أوروبية. - -1. توجّه إلى [STACKIT Portal](https://portal.stackit.cloud)، وانتقل إلى **AI Model Serving**، وأنشئ رمز مصادقة (auth token) لمشروعك. - - :::tip - تحتاج إلى حساب عميل STACKIT وحساب مستخدم ومشروع قبل إنشاء رموز المصادقة. - ::: - -2. شغّل الأمر `/connect` وابحث عن **STACKIT**. - - ```txt - /connect - ``` - -3. أدخل رمز مصادقة STACKIT AI Model Serving. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` للاختيار من النماذج المتاحة مثل _Qwen3-VL 235B_ أو _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. توجّه إلى [OVHcloud panel](https://ovh.com/manager). انتقل إلى قسم `Public Cloud`، ثم `AI & Machine Learning` > `AI Endpoints`، وفي تبويب `API Keys` انقر **Create a new API key**. - -2. شغّل الأمر `/connect` وابحث عن **OVHcloud AI Endpoints**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ OVHcloud AI Endpoints. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج مثل _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Scaleway - -لاستخدام [Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/) مع Opencode: - -1. توجّه إلى [Scaleway Console IAM settings](https://console.scaleway.com/iam/api-keys) لإنشاء مفتاح API جديد. - -2. شغّل الأمر `/connect` وابحث عن **Scaleway**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ Scaleway. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج مثل _devstral-2-123b-instruct-2512_ أو _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Together AI - -1. توجّه إلى [Together AI console](https://api.together.ai)، وأنشئ حسابا، ثم انقر **Add Key**. - -2. شغّل الأمر `/connect` وابحث عن **Together AI**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ Together AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج مثل _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Venice AI - -1. توجّه إلى [Venice AI console](https://venice.ai)، وأنشئ حسابا، ثم أنشئ مفتاح API. - -2. شغّل الأمر `/connect` وابحث عن **Venice AI**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ Venice AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج مثل _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -تتيح Vercel AI Gateway الوصول إلى نماذج من OpenAI وAnthropic وGoogle وxAI وغيرها عبر نقطة نهاية موحّدة. تُقدّم النماذج بسعر القائمة دون أي زيادة. - -1. توجّه إلى [Vercel dashboard](https://vercel.com/)، وانتقل إلى تبويب **AI Gateway**، ثم انقر **API keys** لإنشاء مفتاح API جديد. - -2. شغّل الأمر `/connect` وابحث عن **Vercel AI Gateway**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ Vercel AI Gateway. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج. - - ```txt - /models - ``` - -يمكنك أيضا تخصيص النماذج عبر إعدادات opencode. إليك مثالا على تحديد ترتيب توجيه المزوّدات. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -بعض خيارات التوجيه المفيدة: - -| Option | الوصف | -| ------------------- | ----------------------------------------------- | -| `order` | تسلسل المزوّدات التي سيتم تجربتها | -| `only` | تقييد الاستخدام على مزوّدات محددة | -| `zeroDataRetention` | استخدام مزوّدات بسياسات احتفاظ بيانات صفرية فقط | - ---- - -### xAI - -1. توجّه إلى [xAI console](https://console.x.ai/)، وأنشئ حسابا، ثم أنشئ مفتاح API. - -2. شغّل الأمر `/connect` وابحث عن **xAI**. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بـ xAI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج مثل _Grok Beta_. - - ```txt - /models - ``` - ---- - -### Z.AI - -1. توجّه إلى [Z.AI API console](https://z.ai/manage-apikey/apikey-list)، وأنشئ حسابا، ثم انقر **Create a new API key**. - -2. شغّل الأمر `/connect` وابحث عن **Z.AI**. - - ```txt - /connect - ``` - - إذا كنت مشتركا في **GLM Coding Plan**، فاختر **Z.AI Coding Plan**. - -3. أدخل مفتاح API الخاص بـ Z.AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. شغّل الأمر `/models` لاختيار نموذج مثل _GLM-4.7_. - - ```txt - /models - ``` - ---- - -### ZenMux - -1. توجّه إلى [ZenMux dashboard](https://zenmux.ai/settings/keys)، وانقر **Create API Key**، ثم انسخ المفتاح. - -2. شغّل الأمر `/connect` وابحث عن ZenMux. - - ```txt - /connect - ``` - -3. أدخل مفتاح API الخاص بالمزوّد. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. يتم تحميل العديد من نماذج ZenMux مسبقا بشكل افتراضي؛ شغّل الأمر `/models` لاختيار ما تريده. - - ```txt - /models - ``` - - يمكنك أيضا إضافة نماذج إضافية عبر إعدادات opencode. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## موفّر مخصّص - -لإضافة أي مزوّد **OpenAI-compatible** غير موجود ضمن الأمر `/connect`: - -:::tip -يمكنك استخدام أي مزوّد OpenAI-compatible مع opencode. معظم مزوّدي الذكاء الاصطناعي الحديثة يقدّمون APIs متوافقة مع OpenAI. -::: - -1. شغّل الأمر `/connect` ومرّر للأسفل حتى **Other**. - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. أدخل ID فريدا للمزوّد. - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - اختر ID سهل التذكر؛ ستستخدمه في ملف الإعدادات. - ::: - -3. أدخل مفتاح API الخاص بالمزوّد. - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. أنشئ أو حدّث ملف `opencode.json` في دليل مشروعك: - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - - خيارات التهيئة هي: - - **npm**: حزمة AI SDK المستخدمة؛ استخدم `@ai-sdk/openai-compatible` للمزوّدات OpenAI-compatible - - **name**: اسم العرض في واجهة المستخدم. - - **models**: النماذج المتاحة. - - **options.baseURL**: عنوان URL لنقطة نهاية API. - - **options.apiKey**: تعيين مفتاح API اختياريا إذا لم تكن تستخدم auth. - - **options.headers**: تعيين ترويسات مخصّصة اختياريا. - - مزيد من التفاصيل حول الخيارات المتقدمة في المثال التالي. - -5. شغّل الأمر `/models` وستظهر المزوّدات والنماذج المخصّصة في قائمة الاختيار. - ---- - -##### مثال - -إليك مثالا يضبط خيارات `apiKey` و`headers` وخيارات `limit` الخاصة بالنموذج. - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -تفاصيل التهيئة: - -- **apiKey**: يتم تعيينه عبر صيغة متغيرات `env`، [اعرف المزيد](/docs/config#env-vars). -- **headers**: ترويسات مخصّصة تُرسل مع كل طلب. -- **limit.context**: الحد الأقصى لرموز الإدخال التي يقبلها النموذج. -- **limit.output**: الحد الأقصى للرموز التي يمكن للنموذج توليدها. - -تسمح حقول `limit` لـ OpenCode بفهم مقدار السياق المتبقي لديك. تسحب المزوّدات القياسية هذه القيم تلقائيا من models.dev. - ---- - -## استكشاف الأخطاء وإصلاحها - -إذا كنت تواجه مشكلة في تهيئة مزوّد، فتحقق مما يلي: - -1. **تحقق من إعداد auth**: شغّل `opencode auth list` لمعرفة ما إذا كانت بيانات الاعتماد - الخاصة بالمزوّد قد أضيفت إلى إعداداتك. - - لا ينطبق هذا على مزوّدات مثل Amazon Bedrock التي تعتمد على متغيرات البيئة لـ auth. - -2. للمزوّدات المخصّصة، راجع إعدادات opencode وتأكد من: - - أن provider ID المستخدم في الأمر `/connect` يطابق الـ ID في إعدادات opencode. - - استخدام حزمة npm الصحيحة للمزوّد. على سبيل المثال استخدم `@ai-sdk/cerebras` لـ Cerebras. ولكل المزوّدات الأخرى المتوافقة مع OpenAI استخدم `@ai-sdk/openai-compatible`. - - استخدام نقطة نهاية API الصحيحة في الحقل `options.baseURL`. diff --git a/packages/web/src/content/docs/ar/rules.mdx b/packages/web/src/content/docs/ar/rules.mdx deleted file mode 100644 index 8e3d9886d4..0000000000 --- a/packages/web/src/content/docs/ar/rules.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -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`) أسهل للصيانة من التعليمات اليدوية. -::: diff --git a/packages/web/src/content/docs/ar/sdk.mdx b/packages/web/src/content/docs/ar/sdk.mdx deleted file mode 100644 index bae101acf0..0000000000 --- a/packages/web/src/content/docs/ar/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -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 الخاصة بالخادم ومتاحة في ملف الأنواع. - ---- - -## الأخطاء - -يمكن أن ترمي 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()` | سرد جميع الوكلاء المتاحين | Agent[] | - ---- - -#### أمثلة - -```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()` | سرد جميع المشاريع | Project[] | -| `project.current()` | جلب المشروع الحالي | Project | - ---- - -#### أمثلة - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### المسار (`path`) - -| الطريقة | الوصف | الاستجابة | -| ------------ | ----------------- | ---------------------------------------- | -| `path.get()` | جلب المسار الحالي | Path | - ---- - -#### أمثلة - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### الإعدادات (`config`) - -| الطريقة | الوصف | الاستجابة | -| -------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | جلب معلومات الإعدادات | Config | -| `config.providers()` | سرد المزوّدين والنماذج الافتراضية | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### أمثلة - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### الجلسات (`session`) - -| الطريقة | الوصف | ملاحظات | -| ---------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `session.list()` | سرد الجلسات | يعيد Session[] | -| `session.get({ path })` | جلب جلسة | يعيد Session | -| `session.children({ path })` | سرد الجلسات الفرعية | يعيد Session[] | -| `session.create({ body })` | إنشاء جلسة | يعيد Session | -| `session.delete({ path })` | حذف جلسة | يعيد `boolean` | -| `session.update({ path, body })` | تحديث خصائص الجلسة | يعيد Session | -| `session.init({ path, body })` | تحليل التطبيق وإنشاء `AGENTS.md` | يعيد `boolean` | -| `session.abort({ path })` | إيقاف جلسة قيد التشغيل | يعيد `boolean` | -| `session.share({ path })` | مشاركة جلسة | يعيد Session | -| `session.unshare({ path })` | إلغاء مشاركة جلسة | يعيد Session | -| `session.summarize({ path, body })` | تلخيص جلسة | يعيد `boolean` | -| `session.messages({ path })` | سرد الرسائل في جلسة | يعيد `{ info: `Message`, parts: `Part[]`}[]` | -| `session.message({ path })` | جلب تفاصيل الرسالة | يعيد `{ info: `Message`, parts: `Part[]`}` | -| `session.prompt({ path, body })` | إرسال رسالة مطالبة | `body.noReply: true` يعيد UserMessage (للسياق فقط). الافتراضي يعيد AssistantMessage مع استجابة AI. يدعم `body.outputFormat` من أجل [المخرجات المنظمة](#المخرجات-المنظمة) | -| `session.command({ path, body })` | إرسال أمر إلى الجلسة | يعيد `{ info: `AssistantMessage`, parts: `Part[]`}` | -| `session.shell({ path, body })` | تشغيل أمر shell | يعيد AssistantMessage | -| `session.revert({ path, body })` | التراجع عن رسالة | يعيد Session | -| `session.unrevert({ path })` | استعادة الرسائل المتراجع عنها | يعيد Session | -| `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 })` | العثور على رموز مساحة العمل | Symbol[] | -| `file.read({ query })` | قراءة ملف | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | جلب حالة الملفات المتتبَّعة | File[] | - -يدعم `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) -} -``` diff --git a/packages/web/src/content/docs/ar/server.mdx b/packages/web/src/content/docs/ar/server.mdx deleted file mode 100644 index 017a81eafa..0000000000 --- a/packages/web/src/content/docs/ar/server.mdx +++ /dev/null @@ -1,287 +0,0 @@ ---- -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 ] [--hostname ] [--cors ] -``` - -#### الخيارات - -| الخيار | الوصف | الافتراضي | -| --------------- | ------------------------------------- | ---------------- | -| `--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://:/doc -``` - -على سبيل المثال: `http://localhost:4096/doc`. استخدم المواصفة لتوليد عملاء أو لفحص أنواع الطلبات والاستجابات. أو اعرضها في مستكشف Swagger. - ---- - -## واجهات API - -يعرض خادم opencode واجهات API التالية. - ---- - -### عام - -| الطريقة | المسار | الوصف | الاستجابة | -| ------- | ---------------- | ------------------------------------ | ------------------------------------ | -| `GET` | `/global/health` | الحصول على صحة الخادم وإصداره | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | الحصول على الأحداث العامة (تدفق SSE) | تدفق أحداث | - ---- - -### المشروع - -| الطريقة | المسار | الوصف | الاستجابة | -| ------- | ------------------ | ------------------------- | --------------------------------------------- | -| `GET` | `/project` | سرد جميع المشاريع | Project[] | -| `GET` | `/project/current` | الحصول على المشروع الحالي | Project | - ---- - -### المسار و VCS - -| الطريقة | المسار | الوصف | الاستجابة | -| ------- | ------- | ------------------------------------- | ------------------------------------------- | -| `GET` | `/path` | الحصول على المسار الحالي | Path | -| `GET` | `/vcs` | الحصول على معلومات VCS للمشروع الحالي | VcsInfo | - ---- - -### المثيل - -| الطريقة | المسار | الوصف | الاستجابة | -| ------- | ------------------- | ----------------------- | --------- | -| `POST` | `/instance/dispose` | التخلص من المثيل الحالي | `boolean` | - ---- - -### الإعدادات - -| الطريقة | المسار | الوصف | الاستجابة | -| ------- | ------------------- | --------------------------------- | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | الحصول على معلومات الإعدادات | Config | -| `PATCH` | `/config` | تحديث الإعدادات | Config | -| `GET` | `/config/providers` | سرد المزوّدين والنماذج الافتراضية | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -### المزوّد - -| الطريقة | المسار | الوصف | الاستجابة | -| ------- | -------------------------------- | ----------------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | سرد جميع المزوّدين | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | الحصول على طرق مصادقة المزوّد | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | تفويض مزوّد باستخدام OAuth | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | معالجة رد نداء OAuth لمزوّد | `boolean` | - ---- - -### الجلسات - -| الطريقة | المسار | الوصف | الملاحظات | -| -------- | ---------------------------------------- | ------------------------------------- | -------------------------------------------------------------------------------- | -| `GET` | `/session` | سرد جميع الجلسات | يعيد Session[] | -| `POST` | `/session` | إنشاء جلسة جديدة | المتن: `{ parentID?, title? }`، يعيد Session | -| `GET` | `/session/status` | الحصول على حالة الجلسات جميعها | يعيد `{ [sessionID: string]: `SessionStatus` }` | -| `GET` | `/session/:id` | الحصول على تفاصيل الجلسة | يعيد Session | -| `DELETE` | `/session/:id` | حذف جلسة وجميع بياناتها | يعيد `boolean` | -| `PATCH` | `/session/:id` | تحديث خصائص الجلسة | المتن: `{ title? }`، يعيد Session | -| `GET` | `/session/:id/children` | الحصول على الجلسات الفرعية لجلسة | يعيد Session[] | -| `GET` | `/session/:id/todo` | الحصول على قائمة المهام (todo) للجلسة | يعيد Todo[] | -| `POST` | `/session/:id/init` | تحليل التطبيق وإنشاء `AGENTS.md` | المتن: `{ messageID, providerID, modelID }`، يعيد `boolean` | -| `POST` | `/session/:id/fork` | تفريع جلسة موجودة عند رسالة | المتن: `{ messageID? }`، يعيد Session | -| `POST` | `/session/:id/abort` | إلغاء جلسة قيد التشغيل | يعيد `boolean` | -| `POST` | `/session/:id/share` | مشاركة جلسة | يعيد Session | -| `DELETE` | `/session/:id/share` | إلغاء مشاركة جلسة | يعيد Session | -| `GET` | `/session/:id/diff` | الحصول على diff لهذه الجلسة | الاستعلام: `messageID?`، يعيد FileDiff[] | -| `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: `Message`, parts: `Part[]`}[]` | -| `POST` | `/session/:id/message` | إرسال رسالة والانتظار للحصول على رد | المتن: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`، يعيد `{ info: `Message`, parts: `Part[]`}` | -| `GET` | `/session/:id/message/:messageID` | الحصول على تفاصيل الرسالة | يعيد `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/prompt_async` | إرسال رسالة بشكل غير متزامن (بدون انتظار) | المتن: مثل `/session/:id/message`، يعيد `204 No Content` | -| `POST` | `/session/:id/command` | تنفيذ أمر شرطة مائلة (slash) | المتن: `{ messageID?, agent?, model?, command, arguments }`، يعيد `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/shell` | تشغيل أمر في shell | المتن: `{ agent, model?, command }`، يعيد `{ info: `Message`, parts: `Part[]`}` | - ---- - -### الأوامر - -| الطريقة | المسار | الوصف | الاستجابة | -| ------- | ---------- | ---------------- | --------------------------------------------- | -| `GET` | `/command` | سرد جميع الأوامر | Command[] | - ---- - -### الملفات - -| الطريقة | المسار | الوصف | الاستجابة | -| ------- | ------------------------ | ----------------------------------- | --------------------------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | البحث عن نص داخل الملفات | مصفوفة من كائنات المطابقة تحتوي على `path` و`lines` و`line_number` و`absolute_offset` و`submatches` | -| `GET` | `/find/file?query=` | العثور على الملفات والمجلدات بالاسم | `string[]` (مسارات) | -| `GET` | `/find/symbol?query=` | العثور على رموز مساحة العمل | Symbol[] | -| `GET` | `/file?path=` | سرد الملفات والمجلدات | FileNode[] | -| `GET` | `/file/content?path=

` | قراءة ملف | FileContent | -| `GET` | `/file/status` | الحصول على حالة الملفات المتعقّبة | File[] | - -#### معلمات الاستعلام لـ `/find/file` - -- `query` (مطلوب) — سلسلة البحث (مطابقة ضبابية) -- `type` (اختياري) — حصر النتائج في `"file"` أو `"directory"` -- `directory` (اختياري) — تجاوز جذر المشروع لأجل البحث -- `limit` (اختياري) — الحد الأقصى للنتائج (1–200) -- `dirs` (اختياري) — خيار قديم (إرجاع `"false"` يعيد الملفات فقط) - ---- - -### الأدوات (تجريبية) - -| الطريقة | المسار | الوصف | الاستجابة | -| ------- | ------------------------------------------- | --------------------------------- | -------------------------------------------- | -| `GET` | `/experimental/tool/ids` | سرد جميع معرّفات الأدوات | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | سرد الأدوات مع مخططات JSON لنموذج | ToolList | - ---- - -### LSP والمنسّقات و MCP - -| الطريقة | المسار | الوصف | الاستجابة | -| ------- | ------------ | ------------------------- | -------------------------------------------------------- | -| `GET` | `/lsp` | الحصول على حالة خادم LSP | LSPStatus[] | -| `GET` | `/formatter` | الحصول على حالة المنسّقات | FormatterStatus[] | -| `GET` | `/mcp` | الحصول على حالة خادم MCP | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | إضافة خادم MCP ديناميكيا | المتن: `{ name, config }`، يعيد كائن حالة MCP | - ---- - -### الوكلاء - -| الطريقة | المسار | الوصف | الاستجابة | -| ------- | -------- | ------------------------- | ------------------------------------------- | -| `GET` | `/agent` | سرد جميع الوكلاء المتاحين | Agent[] | - ---- - -### التسجيل - -| الطريقة | المسار | الوصف | الاستجابة | -| ------- | ------ | ------------------------------------------------------------- | --------- | -| `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 | diff --git a/packages/web/src/content/docs/ar/share.mdx b/packages/web/src/content/docs/ar/share.mdx deleted file mode 100644 index 6d13410458..0000000000 --- a/packages/web/src/content/docs/ar/share.mdx +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: المشاركة -description: شارك محادثات OpenCode الخاصة بك. ---- - -تتيح لك ميزة المشاركة في OpenCode إنشاء روابط عامة لمحادثات OpenCode الخاصة بك، بحيث يمكنك التعاون مع زملائك أو الحصول على المساعدة من الآخرين. - -:::note -المحادثات المشتركة متاحة للعامة لأي شخص لديه الرابط. -::: - ---- - -## كيف تعمل - -عند مشاركة محادثة، يقوم OpenCode بما يلي: - -1. ينشئ عنوان URL عاما فريدا لجلستك -2. يزامن سجل محادثتك مع خوادمنا -3. يجعل المحادثة متاحة عبر رابط قابل للمشاركة — `opncd.ai/s/` - ---- - -## المشاركة - -يدعم 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 في مؤسستك. diff --git a/packages/web/src/content/docs/ar/skills.mdx b/packages/web/src/content/docs/ar/skills.mdx deleted file mode 100644 index b658e7d942..0000000000 --- a/packages/web/src/content/docs/ar/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: "مهارات الوكيل" -description: "عرّف سلوكاً قابلاً لإعادة الاستخدام عبر تعريفات SKILL.md" ---- - -تتيح مهارات الوكيل لـ OpenCode اكتشاف تعليمات قابلة لإعادة الاستخدام من مستودعك أو من دليل المنزل. -تُحمَّل المهارات عند الطلب عبر أداة `skill` المدمجة — يرى الوكلاء المهارات المتاحة ويمكنهم تحميل المحتوى الكامل عند الحاجة. - ---- - -## وضع الملفات - -أنشئ مجلداً واحداً لكل اسم مهارة وضع بداخله ملف `SKILL.md`. -يبحث OpenCode في هذه المواقع: - -- إعدادات المشروع: `.opencode/skills//SKILL.md` -- إعدادات عامة: `~/.config/opencode/skills//SKILL.md` -- مشروع متوافق مع Claude: `.claude/skills//SKILL.md` -- عام متوافق مع Claude: `~/.claude/skills//SKILL.md` -- مشروع متوافق مع الوكلاء: `.agents/skills//SKILL.md` -- عام متوافق مع الوكلاء: `~/.agents/skills//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 - - - git-release - Create consistent releases and changelogs - - -``` - -يقوم الوكيل بتحميل مهارة عبر استدعاء الأداة: - -``` -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 - } - } - } -} -``` - -عند تعطيلها، يتم حذف قسم `` بالكامل. - ---- - -## استكشاف أخطاء التحميل - -إذا لم تظهر مهارة: - -1. تحقّق من أن `SKILL.md` مكتوب بأحرف كبيرة بالكامل -2. تحقّق من أن `frontmatter` تتضمن `name` و `description` -3. تأكد من أن أسماء المهارات فريدة عبر جميع المواقع -4. تحقّق من الصلاحيات — المهارات ذات `deny` تكون مخفية عن الوكلاء diff --git a/packages/web/src/content/docs/ar/themes.mdx b/packages/web/src/content/docs/ar/themes.mdx deleted file mode 100644 index 822401cdfb..0000000000 --- a/packages/web/src/content/docs/ar/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -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. **مجلد جذر المشروع** - معرّف في `/.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" - } - } -} -``` diff --git a/packages/web/src/content/docs/ar/tools.mdx b/packages/web/src/content/docs/ar/tools.mdx deleted file mode 100644 index 0323e8d8ec..0000000000 --- a/packages/web/src/content/docs/ar/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -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`. diff --git a/packages/web/src/content/docs/ar/troubleshooting.mdx b/packages/web/src/content/docs/ar/troubleshooting.mdx deleted file mode 100644 index 5b3d11e3c4..0000000000 --- a/packages/web/src/content/docs/ar/troubleshooting.mdx +++ /dev/null @@ -1,299 +0,0 @@ ---- -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، فسيتم تخزينه في `.//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` -- **إضافات المشروع** (فقط إذا كنت تستخدم إعدادات لكل مشروع) - - `/.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` فمن المرجح أنك تشير إلى نموذج بشكل غير صحيح في مكان ما. -يجب الإشارة إلى النماذج بهذه الصيغة: `/` - -أمثلة: - -- `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`. diff --git a/packages/web/src/content/docs/ar/tui.mdx b/packages/web/src/content/docs/ar/tui.mdx deleted file mode 100644 index 2a437d4841..0000000000 --- a/packages/web/src/content/docs/ar/tui.mdx +++ /dev/null @@ -1,426 +0,0 @@ ---- -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`. - - - - ```bash - # مثال لـ nano أو vim - export EDITOR=nano - export EDITOR=vim - - # للمحررات الرسومية، VS Code، Cursor، VSCodium، Windsurf، Zed، إلخ. - # قم بتضمين --wait - export EDITOR="code --wait" - ``` - - لجعل ذلك دائما، أضف هذا إلى ملف تهيئة shell لديك؛ - `~/.bashrc`، `~/.zshrc`، إلخ. - - - - - ```bash - set EDITOR=notepad - - # للمحررات الرسومية، VS Code، Cursor، VSCodium، Windsurf، Zed، إلخ. - # قم بتضمين --wait - set EDITOR=code --wait - ``` - - لجعل ذلك دائما، استخدم **System Properties** > **Environment Variables**. - - - - - ```powershell - $env:EDITOR = "notepad" - - # للمحررات الرسومية، VS Code، Cursor، VSCodium، Windsurf، Zed، إلخ. - # قم بتضمين --wait - $env:EDITOR = "code --wait" - ``` - - لجعل ذلك دائما، أضف هذا إلى ملف تهيئة PowerShell لديك. - - - - -تتضمن خيارات المحررات الشائعة ما يلي: - -- `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 من خلال `tui.json` (أو `tui.jsonc`). - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -هذا منفصل عن `opencode.json`، الذي يضبط سلوك الخادم ووقت التشغيل. - -يتم دمج `keybinds` مع الاختصارات الافتراضية المدمجة، لذلك لا تحتاج إلا إلى ضبط الاختصارات التي تريد تغييرها. - -### الخيارات - -- `theme` - يحدد سمة UI. [اعرف المزيد](/docs/themes). -- `keybinds` - يخصص اختصارات لوحة المفاتيح. [اعرف المزيد](/docs/keybinds). -- `leader_timeout` - يتحكم في مدة انتظار OpenCode بعد الضغط على leader key. القيمة الافتراضية `2000`. -- `scroll_acceleration.enabled` - يفعّل تسارع التمرير على نمط macOS لتمرير سلس وطبيعي. عند تفعيله، تزداد سرعة التمرير مع إيماءات التمرير السريعة وتبقى دقيقة للحركات الأبطأ. **يتقدّم هذا الإعداد على `scroll_speed` ويستبدله عند تفعيله.** -- `scroll_speed` - يتحكم في سرعة تمرير TUI عند استخدام أوامر التمرير (الحد الأدنى: `0.001`، ويدعم القيم العشرية). القيمة الافتراضية `3`. **ملاحظة: يتم تجاهل هذا إذا تم ضبط `scroll_acceleration.enabled` على `true`.** -- `diff_style` - يتحكم في عرض الفروقات (diff). القيمة `"auto"` تتكيف مع عرض terminal، و`"stacked"` تعرض عمودًا واحدًا دائمًا. -- `mouse` - يفعّل أو يعطّل التقاط الماوس في TUI (القيمة الافتراضية: `true`). عند تعطيله، يتم الحفاظ على سلوك terminal الأصلي لتحديد النص والتمرير بالماوس. -- `attention` - يضبط desktop notifications والأصوات في TUI. معطل افتراضيًا. - -استخدم `OPENCODE_TUI_CONFIG` لتحميل مسار إعدادات TUI مخصص. - -### Attention - -تجعل ميزة Attention واجهة TUI تنبهك عندما ينتظر OpenCode ردًا منك، أو يحتاج إلى الموافقة على permission، أو يواجه session error، أو ينهي session. فعّلها باستخدام `attention.enabled`؛ تشغّل الأحداث المدمجة صوتًا عند حدوثها. لا تُرسل desktop notifications إلا عندما لا تكون نافذة terminal في المقدمة، ولا تُستخدم مع أحداث subagent. - -- `enabled` - يفعّل جميع notifications والأصوات الخاصة بميزة Attention. القيمة الافتراضية `false`. -- `notifications` - عند تفعيل Attention، يسمح لـ TUI بإرسال desktop notifications عبر terminal. القيمة الافتراضية `true`. -- `sound` - عند تفعيل Attention، يسمح بتشغيل أصوات التنبيه. القيمة الافتراضية `true`. -- `volume` - مستوى صوت التنبيهات الافتراضي من `0` إلى `1`. القيمة الافتراضية `0.4`. -- `sound_pack` - sound pack ID المراد استخدامه. القيمة الافتراضية `opencode.default`. -- `sounds` - يحدد ملفات صوت مخصصة لـ `default` أو `question` أو `permission` أو `error` أو `done` أو `subagent_done`. يمكن أن تكون المسارات مطلقة، أو `file://` URLs، أو نسبية إلى `tui.json`. - ---- - -## التخصيص - -يمكنك تخصيص جوانب مختلفة من عرض واجهة TUI باستخدام لوحة الأوامر (`ctrl+x h` أو `/help`). تبقى هذه الإعدادات محفوظة عبر عمليات إعادة التشغيل. - ---- - -#### عرض اسم المستخدم - -بدّل ما إذا كان اسم المستخدم يظهر في رسائل الدردشة. يمكنك الوصول إلى هذا عبر: - -- لوحة الأوامر: ابحث عن "username" أو "hide username" -- يُحفظ الإعداد تلقائيا وسيتم تذكره عبر جلسات واجهة TUI diff --git a/packages/web/src/content/docs/ar/web.mdx b/packages/web/src/content/docs/ar/web.mdx deleted file mode 100644 index 30df068767..0000000000 --- a/packages/web/src/content/docs/ar/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: الويب -description: استخدام OpenCode في متصفحك. ---- - -يمكن تشغيل OpenCode كتطبيق ويب داخل متصفحك، ليمنحك تجربة البرمجة القوية بالذكاء الاصطناعي نفسها دون الحاجة إلى terminal. - -![OpenCode Web - جلسة جديدة](../../../assets/web/web-homepage-new-session.png) - -## البدء - -ابدأ تشغيل واجهة الويب عبر تنفيذ: - -```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 الخاصة بك. - -### الجلسات - -اعرض جلساتك وأدرها من الصفحة الرئيسية. يمكنك رؤية الجلسات النشطة وبدء جلسات جديدة. - -![OpenCode Web - جلسة نشطة](../../../assets/web/web-homepage-active-session.png) - -### حالة الخادم - -انقر على "See Servers" لعرض الخوادم المتصلة وحالتها. - -![OpenCode Web - See Servers (عرض الخوادم)](../../../assets/web/web-homepage-see-servers.png) - ---- - -## إرفاق 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 ذات أولوية أعلى من إعدادات ملف الإعدادات. diff --git a/packages/web/src/content/docs/ar/windows-wsl.mdx b/packages/web/src/content/docs/ar/windows-wsl.mdx deleted file mode 100644 index 59d96bd236..0000000000 --- a/packages/web/src/content/docs/ar/windows-wsl.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -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. -::: - ---- - -## الإعداد - - - -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 - ``` - - - ---- - -## تطبيق سطح المكتب + خادم 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://: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:` (يعرض 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/` diff --git a/packages/web/src/content/docs/ar/zen.mdx b/packages/web/src/content/docs/ar/zen.mdx deleted file mode 100644 index aa827f6304..0000000000 --- a/packages/web/src/content/docs/ar/zen.mdx +++ /dev/null @@ -1,306 +0,0 @@ ---- -title: Zen -description: قائمة منتقاة من النماذج يوفّرها OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen هي قائمة بالنماذج التي اختبرها فريق OpenCode وتحقّق منها. - -يعمل Zen مثل أي مزوّد آخر في OpenCode. تسجّل الدخول إلى OpenCode Zen وتحصل على -مفتاح API. استخدامه **اختياري بالكامل** ولا تحتاج إليه لاستخدام OpenCode. - ---- - -## الخلفية - -يوجد عدد كبير من النماذج، لكن عددا قليلا فقط منها يعمل جيدا كعوامل للبرمجة. -إضافة إلى ذلك، يتم إعداد معظم المزوّدين بطرق مختلفة جدا؛ لذلك ستحصل على أداء -وجودة مختلفين بشكل كبير. - -:::tip -اختبرنا مجموعة منتقاة من النماذج والمزوّدين الذين يعملون جيدا مع OpenCode. -::: - -لذلك إذا كنت تستخدم نموذجا عبر خدمة مثل OpenRouter، فلا يمكنك أبدا التأكد مما -إذا كنت تحصل على أفضل نسخة من النموذج الذي تريده. - -ولحل ذلك، قمنا بعدة أمور: - -1. اختبرنا مجموعة منتقاة من النماذج وتحدثنا مع فرقها حول أفضل طريقة لتشغيلها. -2. ثم عملنا مع عدد من المزوّدين للتأكد من تقديم هذه النماذج بالشكل الصحيح. -3. وأخيرا، أجرينا قياسا معياريا لتوليفة النموذج/المزوّد ووضعنا قائمة نشعر بثقة في التوصية بها. - -OpenCode Zen هي بوابة AI تتيح لك الوصول إلى هذه النماذج. - ---- - -## كيف يعمل - -يعمل OpenCode Zen مثل أي مزوّد آخر في OpenCode. - -1. تسجّل الدخول إلى **OpenCode Zen**، وتضيف تفاصيل الفوترة، ثم تنسخ مفتاح 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -يستخدم [معرّف النموذج](/docs/config/#models) في إعدادات OpenCode الصيغة `opencode/`. على سبيل المثال، بالنسبة إلى GPT 5.5، ستستخدم `opencode/gpt-5.5` في إعداداتك. - ---- - -### النماذج - -يمكنك جلب القائمة الكاملة بالنماذج المتاحة وبياناتها الوصفية من: - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## التسعير - -ندعم نموذج الدفع حسب الاستخدام. فيما يلي الأسعار **لكل 1M tokens**. - -| النموذج | الإدخال | الإخراج | القراءة المخزنة | الكتابة المخزنة | -| --------------------------------- | ------- | ------- | --------------- | --------------- | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -قد تلاحظ _Claude Haiku 3.5_ في سجل الاستخدام. هذا [نموذج منخفض التكلفة](/docs/config/#models) يُستخدم لتوليد عناوين جلساتك. - -:::note -يتم تمرير رسوم بطاقات الائتمان بالتكلفة الفعلية (4.4% + $0.30 لكل معاملة)؛ ولا نفرض أي رسوم إضافية فوق ذلك. -::: - -النماذج المجانية: - -- DeepSeek V4 Flash Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. -- MiMo-V2.5 Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. -- North Mini Code Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. -- Nemotron 3 Ultra Free متاح على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. -- Big Pickle نموذج خفي ومتاح مجانا على OpenCode لفترة محدودة. يستخدم الفريق هذه الفترة لجمع الملاحظات وتحسين النموذج. - -تواصل معنا إذا كانت لديك أي أسئلة. - ---- - -### إعادة الشحن التلقائي - -إذا انخفض رصيدك عن $5، فسيقوم Zen تلقائيا بإعادة شحن $20. - -يمكنك تغيير مبلغ إعادة الشحن التلقائي. ويمكنك أيضا تعطيل إعادة الشحن التلقائي بالكامل. - ---- - -### الحدود الشهرية - -يمكنك أيضا تعيين حد شهري للاستخدام لمساحة العمل بالكامل ولكل عضو في فريقك. - -على سبيل المثال، لنفترض أنك ضبطت حد الاستخدام الشهري على $20، فلن يستخدم Zen أكثر من $20 خلال شهر. لكن إذا كانت إعادة الشحن التلقائي مفعّلة، فقد ينتهي الأمر بخصم أكثر من $20 إذا انخفض رصيدك عن $5. - ---- - -### النماذج المهملة - -| النموذج | تاريخ الإيقاف | -| ------------------ | ----------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## الخصوصية - -تتم استضافة جميع نماذجنا في الولايات المتحدة. يلتزم مزوّدونا بسياسة عدم الاحتفاظ بالبيانات ولا يستخدمون بياناتك لتدريب النماذج، مع الاستثناءات التالية: - -- Big Pickle: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج. -- DeepSeek V4 Flash Free: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج. -- MiMo-V2.5 Free: خلال فترته المجانية، قد تُستخدم البيانات المجمعة لتحسين النموذج. -- North Mini Code Free: خلال فترته المجانية، قد يُحتفَظ بالبيانات المُجمَّعة وتُستخدم لتحسين النموذج. لا تُرسل بيانات شخصية أو سرية. راجع [شروط الاستخدام](https://cohere.com/terms-of-use) و[سياسة الخصوصية](https://cohere.com/privacy). -- Nemotron 3 Ultra Free (نقاط نهاية NVIDIA المجانية): للاستخدام التجريبي فقط — لا ترسل بيانات شخصية أو سرية. يُسجَّل استخدامك لأغراض أمنية ولتحسين منتجات وخدمات NVIDIA. بيانات الجلسة المُسجَّلة لأغراض التحسين غير مرتبطة بهويتك أو بأي مُعرِّف دائم. لمزيد من المعلومات حول ممارسات معالجة البيانات لدينا، راجع [سياسة الخصوصية](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). بتفاعلك مع نقطة النهاية هذه، فإنك توافق على جمعنا لهذه المعلومات وتسجيلها واستخدامها وعلى [شروط خدمة النسخة التجريبية من واجهة NVIDIA API](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). -- 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 أيضا دائما. diff --git a/packages/web/src/content/docs/bs/acp.mdx b/packages/web/src/content/docs/bs/acp.mdx deleted file mode 100644 index a2b2707c88..0000000000 --- a/packages/web/src/content/docs/bs/acp.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -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 diff --git a/packages/web/src/content/docs/bs/agents.mdx b/packages/web/src/content/docs/bs/agents.mdx deleted file mode 100644 index a2e211b19a..0000000000 --- a/packages/web/src/content/docs/bs/agents.mdx +++ /dev/null @@ -1,754 +0,0 @@ ---- -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 tri ugrađena subagenta, **General**, **Explore** i **Scout**. Ovo ćemo pogledati u nastavku. - ---- - -## Ugrađeni - -OpenCode dolazi sa dva ugrađena primarna agenta i tri 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. - ---- - -### Scout agent - -_Režim_: `subagent` - -Agent samo za čitanje za istraživanje eksterne dokumentacije i zavisnosti. Koristite ga kada trebate klonirati repozitorij zavisnosti u OpenCode-ov upravljani cache, pregledati izvorni kod biblioteke ili uporediti lokalni kod sa upstream implementacijama bez mijenjanja vašeg radnog prostora. - ---- - -### 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: - - **\+Right** (ili vaša konfigurirana `session_child_cycle` veza) za kretanje naprijed kroz roditelj → dijete1 → dijete2 → ... → roditelj - - **\+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 -``` diff --git a/packages/web/src/content/docs/bs/cli.mdx b/packages/web/src/content/docs/bs/cli.mdx deleted file mode 100644 index 8883e6889a..0000000000 --- a/packages/web/src/content/docs/bs/cli.mdx +++ /dev/null @@ -1,614 +0,0 @@ ---- -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 | -| {"--continue"} | `-c` | Nastavi posljednju sesiju | -| {"--session"} | `-s` | ID sesije za nastavak | -| {"--fork"} | | Forkuj sesiju prilikom nastavka (koristite sa `--continue` ili `--session`) | -| {"--password"} | `-p` | Lozinka za osnovnu autentifikaciju (zadano: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Korisničko ime za osnovnu autentifikaciju (zadano: `OPENCODE_SERVER_USERNAME` ili `opencode`) | - ---- - -#### 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 -``` - ---- - -### 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) | -| {"--password"} | `-p` | Lozinka za osnovnu autentifikaciju (zadano: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Korisničko ime za osnovnu autentifikaciju (zadano: `OPENCODE_SERVER_USERNAME` ili `opencode`) | -| {"--dir"} | | Direktorij za pokretanje, ili putanja na udaljenom serveru pri spajanju | -| {"--variant"} | | Varijanta modela (napor zaključivanja specifičan za provajdera) | -| {"--thinking"} | | Prikaži blokove razmišljanja | -| {"--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 -``` - -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 eksperimentalne funkcije pod zbirnom zastavicom | -| `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_PLAN_MODE` | boolean | Omogući Plan mod | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | boolean | Omogući pozadinske zadatke subagenata | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | boolean | Omogući eksperimentalni sistem događaja | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | boolean | Omogući nativnu putanju LLM zahtjeva | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | boolean | Omogući paralelno izvršavanje web pretrage | -| `OPENCODE_EXPERIMENTAL_SCOUT` | boolean | Omogući Scout subagenta | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | boolean | Omogući podršku za radne prostore | diff --git a/packages/web/src/content/docs/bs/commands.mdx b/packages/web/src/content/docs/bs/commands.mdx deleted file mode 100644 index 388a4504bd..0000000000 --- a/packages/web/src/content/docs/bs/commands.mdx +++ /dev/null @@ -1,316 +0,0 @@ ---- -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. diff --git a/packages/web/src/content/docs/bs/config.mdx b/packages/web/src/content/docs/bs/config.mdx deleted file mode 100644 index b37683f020..0000000000 --- a/packages/web/src/content/docs/bs/config.mdx +++ /dev/null @@ -1,685 +0,0 @@ ---- -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": false, - "reserved": 10000 - } -} -``` - -- `auto` - Automatski sažimanje sesije kada je kontekst pun (podrazumevano: `true`). -- `prune` - Uklonite stare izlaze alata da sačuvate tokene (podrazumevano: `false`). -- `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. diff --git a/packages/web/src/content/docs/bs/custom-tools.mdx b/packages/web/src/content/docs/bs/custom-tools.mdx deleted file mode 100644 index e933c7cb12..0000000000 --- a/packages/web/src/content/docs/bs/custom-tools.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -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 **`_`**: - -```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. diff --git a/packages/web/src/content/docs/bs/ecosystem.mdx b/packages/web/src/content/docs/bs/ecosystem.mdx deleted file mode 100644 index 65a665ca9c..0000000000 --- a/packages/web/src/content/docs/bs/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -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 | diff --git a/packages/web/src/content/docs/bs/enterprise.mdx b/packages/web/src/content/docs/bs/enterprise.mdx deleted file mode 100644 index 5851498aeb..0000000000 --- a/packages/web/src/content/docs/bs/enterprise.mdx +++ /dev/null @@ -1,165 +0,0 @@ ---- -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. **Kontaktirajte nas** 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, **kontaktirajte nas**. - ---- - -## Postavljanje - -Nakon što završite probni period i spremni ste koristiti OpenCode u svojoj organizaciji, možete **kontaktirati nas** 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, **javite nam**. - ---- - -## Često postavljana pitanja - -

-Šta je OpenCode Enterprise? - -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. - -
- -
-Kako započeti s OpenCode Enterprise? - -Jednostavno započnite internu probu sa svojim timom. OpenCode po defaultu ne pohranjuje vaš kod ni kontekstualne podatke, što olakšava početak. - -Zatim **kontaktirajte nas** da razgovaramo o cijenama i opcijama implementacije. - -
- -
-Kako funkcionišu enterprise cijene? - -Nudimo enterprise cijene po sjedištu. Ako imate vlastiti LLM gateway, ne naplaćujemo korištene tokene. Za više detalja, **kontaktirajte nas** za prilagođenu ponudu prema potrebama vaše organizacije. - -
- -
-Jesu li moji podaci sigurni uz OpenCode Enterprise? - -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. - -
- -
-Možemo li koristiti vlastiti privatni NPM registar? - -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. - -
diff --git a/packages/web/src/content/docs/bs/formatters.mdx b/packages/web/src/content/docs/bs/formatters.mdx deleted file mode 100644 index af0b103ef5..0000000000 --- a/packages/web/src/content/docs/bs/formatters.mdx +++ /dev/null @@ -1,124 +0,0 @@ ---- -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. diff --git a/packages/web/src/content/docs/bs/github.mdx b/packages/web/src/content/docs/bs/github.mdx deleted file mode 100644 index 5946b34429..0000000000 --- a/packages/web/src/content/docs/bs/github.mdx +++ /dev/null @@ -1,311 +0,0 @@ ---- -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. diff --git a/packages/web/src/content/docs/bs/gitlab.mdx b/packages/web/src/content/docs/bs/gitlab.mdx deleted file mode 100644 index a819ef5fd4..0000000000 --- a/packages/web/src/content/docs/bs/gitlab.mdx +++ /dev/null @@ -1,188 +0,0 @@ ---- -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: - -
- - Konfiguracija toka - - ```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. - - - 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. - - " - - 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 - ``` - -
- -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. diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx deleted file mode 100644 index aaef5523ef..0000000000 --- a/packages/web/src/content/docs/bs/go.mdx +++ /dev/null @@ -1,211 +0,0 @@ ---- -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. - -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 **OpenCode Zen**, 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.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **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 DeepSeek V4 Flash omogućavaju više zahtjeva, dok skuplji modeli poput GLM-5.2 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.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| 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.2/5.1 — 700 ulaznih (input), 52,000 keširanih, 150 izlaznih (output) tokena po zahtjevu -- Kimi K2.7 Code/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 M3 — 510 ulaznih, 56,000 keširanih, 190 izlaznih tokena po zahtjevu -- MiniMax M2.7 — 300 ulaznih, 55,000 keširanih, 125 izlaznih tokena po zahtjevu -- Qwen3.7 Max — 420 ulaznih, 66,000 keširanih, 200 izlaznih tokena po zahtjevu -- Qwen3.7 Plus — 500 ulaznih, 57,000 keširanih, 190 izlaznih tokena po zahtjevu -- Qwen3.6 Plus — 500 ulaznih, 57,000 keširanih, 190 izlaznih tokena po zahtjevu -- MiMo-V2.5 — 830 ulaznih, 71,500 keširanih, 295 izlaznih tokena po zahtjevu -- MiMo-V2.5-Pro — 790 ulaznih, 86,000 keširanih, 305 izlaznih tokena po zahtjevu - -Procjene se također zasnivaju na sljedećim cijenama po 1M tokena: - -| Model | Input | Output | Cached Read | Cached Write | -| ---------------------------- | ----- | ------ | ----------- | ------------ | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -Svoju trenutnu potrošnju možete pratiti u **konzoli**. - -:::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.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -[Model id](/docs/config/#models) u vašoj OpenCode konfiguraciji -koristi format `opencode-go/`. Na primjer, za Kimi K2.7 Code, koristili biste -`opencode-go/kimi-k2.7-code` 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. diff --git a/packages/web/src/content/docs/bs/ide.mdx b/packages/web/src/content/docs/bs/ide.mdx deleted file mode 100644 index a455b91ee2..0000000000 --- a/packages/web/src/content/docs/bs/ide.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -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 diff --git a/packages/web/src/content/docs/bs/index.mdx b/packages/web/src/content/docs/bs/index.mdx deleted file mode 100644 index 4af699485a..0000000000 --- a/packages/web/src/content/docs/bs/index.mdx +++ /dev/null @@ -1,323 +0,0 @@ ---- -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. -![OpenCode TUI sa opencode temom](../../../assets/lander/screenshot.png) -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** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **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" - -``` - -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" - -``` - -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). diff --git a/packages/web/src/content/docs/bs/keybinds.mdx b/packages/web/src/content/docs/bs/keybinds.mdx deleted file mode 100644 index 31fed59005..0000000000 --- a/packages/web/src/content/docs/bs/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -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,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "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. diff --git a/packages/web/src/content/docs/bs/lsp.mdx b/packages/web/src/content/docs/bs/lsp.mdx deleted file mode 100644 index a30d589f9a..0000000000 --- a/packages/web/src/content/docs/bs/lsp.mdx +++ /dev/null @@ -1,204 +0,0 @@ ---- -title: LSP serveri -description: OpenCode se integriše sa vašim LSP serverima. ---- - -OpenCode se može integrisati sa Language Server Protocol (LSP) serverima kako bi koristio dijagnostiku kao feedback za agenta. - -## 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 je podrazumijevano isključen. Kada je omogućen, serveri se pokreću 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 je LSP omogućen i 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. - ---- - -## Najbolje prakse - -LSP može pomoći agentu da pronađe i popravi probleme pružanjem dijagnostike iz jezičkih servera. Ovo je korisno u nekim projektima, ali nije uvijek neto pozitivno. - -Jezički serveri mogu ispasti iz sinhronizacije, koristiti mnogo memorije, razlikovati se po verziji ili projektu i usporiti agent workflow. U mnogim projektima je bolje da agent direktno pokreće lint, typecheck ili druge dijagnostičke CLI alate, tako da se greške vraćaju u agent loop bez tih kompromisa. Dokumentujte te komande u instrukcijskim fajlovima kao što su `AGENTS.md` ili skills, kako bi agent znao šta treba pokrenuti. Uključite LSP kada vaš projekt ima koristi od dodatnog feedbacka jezičkog servera. - ---- - -## Konfiguracija - -Možete omogućiti i prilagoditi LSP servere kroz `lsp` odjeljak u vašoj opencode konfiguraciji. - -Da biste omogućili sve ugrađene LSP servere, postavite `lsp` na `true`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -Koristite objekt da zadržite ugrađene servere omogućene dok konfigurirate izmjene ili prilagođene servere. - -```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 - -Ako je `lsp` izostavljen, svi LSP serveri su onemogućeni. Da biste onemogućili sve LSP servere nakon što ih je druga konfiguracija omogućila, 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. diff --git a/packages/web/src/content/docs/bs/mcp-servers.mdx b/packages/web/src/content/docs/bs/mcp-servers.mdx deleted file mode 100644 index b516bcec08..0000000000 --- a/packages/web/src/content/docs/bs/mcp-servers.mdx +++ /dev/null @@ -1,482 +0,0 @@ ---- -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 `. - -### 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. -``` diff --git a/packages/web/src/content/docs/bs/models.mdx b/packages/web/src/content/docs/bs/models.mdx deleted file mode 100644 index b6099740bb..0000000000 --- a/packages/web/src/content/docs/bs/models.mdx +++ /dev/null @@ -1,201 +0,0 @@ ---- -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. diff --git a/packages/web/src/content/docs/bs/network.mdx b/packages/web/src/content/docs/bs/network.mdx deleted file mode 100644 index aa21332842..0000000000 --- a/packages/web/src/content/docs/bs/network.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -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. diff --git a/packages/web/src/content/docs/bs/permissions.mdx b/packages/web/src/content/docs/bs/permissions.mdx deleted file mode 100644 index 4192694fe3..0000000000 --- a/packages/web/src/content/docs/bs/permissions.mdx +++ /dev/null @@ -1,228 +0,0 @@ ---- -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` — pretraživanje weba (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. -::: diff --git a/packages/web/src/content/docs/bs/plugins.mdx b/packages/web/src/content/docs/bs/plugins.mdx deleted file mode 100644 index 7e046cb83d..0000000000 --- a/packages/web/src/content/docs/bs/plugins.mdx +++ /dev/null @@ -1,371 +0,0 @@ ---- -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. diff --git a/packages/web/src/content/docs/bs/providers.mdx b/packages/web/src/content/docs/bs/providers.mdx deleted file mode 100644 index f6e54fc6ad..0000000000 --- a/packages/web/src/content/docs/bs/providers.mdx +++ /dev/null @@ -1,1993 +0,0 @@ ---- -title: Provajderi -description: Korištenje bilo kojeg LLM provajdera u OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console - -OpenCode koristi [AI SDK](https://ai-sdk.dev/) i [Models.dev](https://models.dev) za podršku **75+ LLM provajdera** i podržava pokretanje lokalnih modela. - -Za dodavanje provajdera potrebno je: - -1. Dodajte API ključeve za provajdera koristeći naredbu `/connect`. -2. Konfigurirajte dobavljača u vašoj OpenCode konfiguraciji. - ---- - -### Vjerodajnice - -Kada dodate API ključeve dobavljača sa naredbom `/connect`, oni se pohranjuju -u `~/.local/share/opencode/auth.json`. - ---- - -### Konfiguracija - -Možete prilagoditi dobavljače putem odjeljka `provider` u vašem OpenCode -config. - ---- - -#### Osnovni URL - -Možete prilagoditi osnovni URL za bilo kojeg provajdera postavljanjem opcije `baseURL`. Ovo je korisno kada koristite proxy usluge ili prilagođene krajnje tačke. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen je lista modela koje je obezbedio OpenCode tim koji su bili -testirano i potvrđeno da dobro radi sa OpenCode. [Saznajte više](/docs/zen). - -:::tip -Ako ste novi, preporučujemo da počnete sa OpenCode Zen. -::: - -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 -``` - -4. Pokrenite `/models` u TUI da vidite listu modela koje preporučujemo. - -```txt - /models -``` - -Radi kao i svaki drugi provajder u OpenCode i potpuno je opcionalan za korištenje. - ---- - -## OpenCode Go - -OpenCode Go je jeftin plan pretplate koji pruža pouzdan pristup popularnim modelima otvorenog kodiranja koje pruža OpenCode tim i koji su testirani i verificirani da dobro rade s OpenCode-om. - -1. Pokrenite naredbu `/connect` u TUI-u, odaberite `OpenCode Go` i idite na [opencode.ai/auth](https://opencode.ai/zen). - - ```txt - /connect - ``` - -2. Prijavite se, dodajte svoje detalje naplate i kopirajte svoj API ključ. - -3. Zalijepite svoj API ključ. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Pokrenite naredbu `/models` u TUI da vidite listu modela koje preporučujemo. - - ```txt - /models - ``` - -Radi kao i svaki drugi provajder u OpenCode i potpuno je opcionalan za korištenje. - ---- - -## Direktorij - -Pogledajmo neke od provajdera detaljno. Ako želite dodati provajdera na -listu, slobodno otvori PR. - -:::note -Ne vidite provajdera ovdje? Pošaljite PR. -::: - ---- - -### 302.AI - -1. Idite na [302.AI konzolu](https://302.ai/), kreirajte račun i generirajte API ključ. - -2. Pokrenite naredbu `/connect` i potražite **302.AI**. - -```txt - /connect -``` - -3. Unesite svoj 302.AI API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model. - -```txt - /models -``` - ---- - -### Amazon Bedrock - -Da biste koristili Amazon Bedrock s OpenCode: - -1. Idite na **Katalog modela** na Amazon Bedrock konzoli i zatražite - pristup modelima koje želite. - - :::tip - Morate imati pristup modelu koji želite u Amazon Bedrock. - ::: - -2. **Konfigurirajte autentifikaciju** koristeći jedan od sljedećih metoda: - - #### Varijable okruženja (Brzi početak) - - Postavite jednu od ovih varijabli okruženja dok pokrećete opencode: - -```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode -``` - -Ili ih dodajte na svoj bash profil: - -```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 -``` - -#### Konfiguracijski fajl (Preporučeno) - -Za konfiguraciju specifičnu za projekat ili trajnu konfiguraciju, koristite `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } -} -``` - -**Dostupne opcije:** - -- `region` - ​​AWS regija (npr. `us-east-1`, `eu-west-1`) -- `profile` - ​​AWS je imenovao profil od `~/.aws/credentials` -- `endpoint` - ​​URL prilagođene krajnje tačke za VPC krajnje tačke (pseudonim za generičku opciju `baseURL`) - -:::tip -Opcije konfiguracijske datoteke imaju prednost nad varijablama okruženja. -::: - -#### Napredno: VPC krajnje tačke - -Ako koristite VPC krajnje tačke za Bedrock: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } -} -``` - -:::note -Opcija `endpoint` je pseudonim za generičku opciju `baseURL`, koristeći terminologiju specifičnu za AWS. Ako su specificirani i `endpoint` i `baseURL`, `endpoint` ima prednost. -::: - -#### Metode provjere autentičnosti - -- **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: Kreirajte IAM korisnika i generirajte pristupne ključeve u AWS konzoli -- **`AWS_PROFILE`**: Koristite imenovane profile od `~/.aws/credentials`. Prvo konfigurirajte sa `aws configure --profile my-profile` ili `aws sso login` -- **`AWS_BEARER_TOKEN_BEDROCK`**: Generirajte dugoročne API ključeve sa Amazon Bedrock konzole -- **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**: Za EKS IRSA (IAM uloge za servisne naloge) ili druga Kubernetes okruženja sa OIDC federacijom. Kubernetes automatski ubacuje ove varijable okruženja kada se koriste napomene naloga usluge. - -#### Prioritet autentifikacije - -Amazon Bedrock koristi sljedeći prioritet autentifikacije: - -1. **Token nosioca** - `AWS_BEARER_TOKEN_BEDROCK` varijabla okruženja ili token iz naredbe `/connect` -2. **AWS lanac vjerodajnica** - profil, pristupni ključevi, dijeljeni vjerodajnici, IAM uloge, tokeni web identiteta (EKS IRSA), metapodaci instance - -:::note -Kada se postavi token nosioca (putem `/connect` ili `AWS_BEARER_TOKEN_BEDROCK`), on ima prednost nad svim AWS metodama akreditiva uključujući konfigurirane profile. -::: - -3. Pokrenite naredbu `/models` da odaberete model koji želite. - -```txt - /models -``` - -:::note -Za prilagođene profile zaključivanja, koristite ime modela i dobavljača u ključu i postavite svojstvo `id` na arn. Ovo osigurava ispravno keširanje: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - -::: - ---- - -### Anthropic - -1. Nakon što ste se prijavili, pokrenite naredbu `/connect` i odaberite Anthropic. - -```txt - /connect -``` - -2. Ovdje možete odabrati opciju **Claude Pro/Max** i ona će otvoriti vaš pretraživač - i traži od vas da se autentifikujete. - -```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ -``` - -3. Sada bi svi Anthropic modeli trebali biti dostupni kada koristite naredbu `/models`. - -```txt - /models -``` - -:::info -[Anthropic] (https://anthropic.com) službeno ne podržava korištenje vaše Claude Pro/Max pretplate u OpenCode. -::: - -##### Korištenje API ključeva - -Također možete odabrati **Kreiraj API ključ** ako nemate Pro/Max pretplatu. Također će otvoriti vaš pretraživač i zatražiti od vas da se prijavite na Anthropic i dati vam kod koji možete zalijepiti u svoj terminal. - -Ili ako već imate API ključ, možete odabrati **Ručno unesite API ključ** i zalijepite ga u svoj terminal. - ---- - -### Atomic Chat - -Možete konfigurirati opencode za korištenje lokalnih modela preko [Atomic Chata](https://atomic.chat) — desktop aplikacije koja pokreće lokalne LLM-ove iza OpenAI-kompatibilnog API servera (zadana krajnja tačka `http://127.0.0.1:1337/v1`). - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -U ovom primjeru: - -- `atomic-chat` je prilagođeni ID provajdera. Može biti bilo koji niz. -- `npm` specificira paket koji se koristi za ovog provajdera. Ovdje se koristi `@ai-sdk/openai-compatible` za svaki OpenAI-kompatibilni API. -- `name` je prikazano ime provajdera u interfejsu. -- `options.baseURL` je krajnja tačka lokalnog servera. Promijenite host i port da odgovaraju vašoj Atomic Chat konfiguraciji. -- `models` je mapa ID-ova modela u njihova prikazana imena. Svaki ID mora odgovarati `id` vrijednosti koju vraća `GET /v1/models` — pokrenite `curl http://127.0.0.1:1337/v1/models` da vidite ID-ove trenutno učitane u Atomic Chat. - -:::tip -Ako pozivi alata ne rade dobro, odaberite učitani model sa jakom podrškom za tool calling (na primjer, Qwen-Coder ili DeepSeek-Coder varijantu). -::: - ---- - -### Azure OpenAI - -:::note -Ako naiđete na greške "Žao mi je, ali ne mogu pomoći s tim zahtjevom", pokušajte promijeniti filter sadržaja iz **DefaultV2** u **Default** u vašem Azure resursu. -::: - -1. Idite na [Azure portal](https://portal.azure.com/) i kreirajte **Azure OpenAI** resurs. trebat će vam: - - **Naziv resursa**: Ovo postaje dio vaše krajnje tačke API-ja (`https://RESOURCE_NAME.openai.azure.com/`) - - **API ključ**: Ili `KEY 1` ili `KEY 2` sa vašeg izvora - -2. Idite na [Azure AI Foundry](https://ai.azure.com/) i implementirajte model. - - :::note - Ime implementacije mora odgovarati imenu modela da bi opencode ispravno radio. - ::: - -3. Pokrenite naredbu `/connect` i potražite **Azure**. - -```txt - /connect -``` - -4. Unesite svoj API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -5. Postavite ime vašeg resursa kao varijablu okruženja: - -```bash - AZURE_RESOURCE_NAME=XXX opencode -``` - -Ili ga dodajte na svoj bash profil: - -```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX -``` - -6. Pokrenite naredbu `/models` da odaberete svoj raspoređeni model. - -```txt - /models -``` - ---- - -### Azure Cognitive Services - -1. Idite na [Azure portal](https://portal.azure.com/) i kreirajte **Azure OpenAI** resurs. trebat će vam: - - **Naziv resursa**: Ovo postaje dio vaše krajnje tačke API-ja (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) - - **API ključ**: Ili `KEY 1` ili `KEY 2` sa vašeg izvora - -2. Idite na [Azure AI Foundry](https://ai.azure.com/) i implementirajte model. - - :::note - Ime implementacije mora odgovarati imenu modela da bi opencode ispravno radio. - ::: - -3. Pokrenite naredbu `/connect` i potražite **Azure kognitivne usluge**. - -```txt - /connect -``` - -4. Unesite svoj API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -5. Postavite ime vašeg resursa kao varijablu okruženja: - -```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode -``` - -Ili ga dodajte na svoj bash profil: - -```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX -``` - -6. Pokrenite naredbu `/models` da odaberete svoj raspoređeni model. - -```txt - /models -``` - ---- - -### Baseten - -1. Idite na [Baseten](https://app.baseten.co/), kreirajte račun i generirajte API ključ. - -2. Pokrenite naredbu `/connect` i potražite **Baseten**. - -```txt - /connect -``` - -3. Unesite svoj Baseten API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model. - -```txt - /models -``` - ---- - -### Cerebras - -1. Idite na [Cerebras konzolu](https://inference.cerebras.ai/), kreirajte račun i generirajte API ključ. - -2. Pokrenite naredbu `/connect` i potražite **Cerebras**. - -```txt - /connect -``` - -3. Unesite svoj Cerebras API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model kao što je _Qwen 3 Coder 480B_. - -```txt - /models -``` - ---- - -### Cloudflare AI Gateway - -Cloudflare AI Gateway vam omogućava da pristupite modelima iz OpenAI, Anthropic, Workers AI i više preko objedinjene krajnje tačke. Sa [Unified Billing](https://developers.cloudflare.com/ai-gateway/features/unified-billing/) nisu vam potrebni posebni API ključevi za svakog provajdera. - -1. Idite na [Cloudflare kontrolnu tablu](https://dash.cloudflare.com/), idite na **AI** > **AI Gateway** i kreirajte novi pristupnik. - -2. Postavite svoj ID naloga i ID pristupnika kao varijable okruženja. - -```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id -``` - -3. Pokrenite naredbu `/connect` i potražite **Cloudflare AI Gateway**. - -```txt - /connect -``` - -4. Unesite svoj Cloudflare API token. - -```txt - ┌ API key - │ - │ - └ enter -``` - -Ili ga postavite kao varijablu okruženja. - -```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token -``` - -5. Pokrenite naredbu `/models` da odaberete model. - -```txt - /models -``` - -Također možete dodati modele kroz svoju opencode konfiguraciju. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } -} -``` - ---- - -### Cortecs - -1. Idite na [Cortecs konzolu](https://cortecs.ai/), kreirajte račun i generirajte API ključ. - -2. Pokrenite naredbu `/connect` i potražite **Cortecs**. - -```txt - /connect -``` - -3. Unesite svoj Cortecs API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model kao što je _Kimi K2 Instruct_. - -```txt - /models -``` - ---- - -### DeepSeek - -1. Idite na [DeepSeek konzolu](https://platform.deepseek.com/), kreirajte nalog i kliknite na **Kreiraj novi API ključ**. - -2. Pokrenite naredbu `/connect` i potražite **DeepSeek**. - -```txt - /connect -``` - -3. Unesite svoj DeepSeek API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete DeepSeek model kao što je _DeepSeek V4 Pro_. - -```txt - /models -``` - ---- - -### Deep Infra - -1. Idite na [Deep Infra kontrolnu tablu](https://deepinfra.com/dash), kreirajte nalog i generišite API ključ. - -2. Pokrenite naredbu `/connect` i potražite **Deep Infra**. - -```txt - /connect -``` - -3. Unesite svoj Deep Infra API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model. - -```txt - /models -``` - ---- - -### FrogBot - -1. Idite na [kontrolnu tablu firmvera](https://app.frogbot.ai/signup), kreirajte nalog i generišite API ključ. - -2. Pokrenite naredbu `/connect` i potražite **FrogBot**. - -```txt - /connect -``` - -3. Unesite svoj FrogBot API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model. - -```txt - /models -``` - ---- - -### Fireworks AI - -1. Idite na [Fireworks AI konzolu](https://app.fireworks.ai/), kreirajte račun i kliknite na **Kreiraj API ključ**. - -2. Pokrenite naredbu `/connect` i potražite **Fireworks AI**. - -```txt - /connect -``` - -3. Unesite svoj Fireworks AI API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model kao što je _Kimi K2 Instruct_. - -```txt - /models -``` - ---- - -### GitLab Duo - -GitLab Duo pruža agentsko ćaskanje sa AI-om sa izvornim mogućnostima pozivanja alata preko GitLab-ovog Anthropic proxyja. - -1. Pokrenite naredbu `/connect` i odaberite GitLab. - -```txt - /connect -``` - -2. Odaberite svoj način autentifikacije: - -```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ -``` - -#### Korištenje OAuth-a (preporučeno) - -Odaberite **OAuth** i vaš pretraživač će se otvoriti za autorizaciju. - -#### Korištenje tokena ličnog pristupa - -1. Idite na [GitLab korisničke postavke > Pristupni tokeni](https://gitlab.com/-/user_settings/personal_access_tokens) -2. Kliknite **Dodaj novi token** -3. Naziv: `OpenCode`, opseg: `api` -4. Kopirajte token (počinje sa `glpat-`) -5. Unesite ga u terminal - -6. Pokrenite naredbu `/models` da vidite dostupne modele. - -```txt - /models -``` - -Dostupna su tri modela bazirana na Claudeu: - -- **duo-chat-haiku-4-5** (zadano) - Brzi odgovori za brze zadatke -- **duo-chat-sonnet-4-5** - Uravnotežene performanse za većinu tokova posla -- **duo-chat-opus-4-5** - Najsposobniji za kompleksnu analizu - -:::note -Također možete odrediti 'GITLAB_TOKEN' varijablu okruženja ako ne želite -da pohrani token u opencode auth memoriju. -::: - -##### Samostalni GitLab - -:::note[Napomena o usklađenosti] -OpenCode koristi mali model za neke AI zadatke kao što je generiranje naslova sesije. -Podrazumevano je konfigurisan da koristi gpt-5-nano, a hostuje ga Zen. Da zaključate OpenCode -da biste koristili samo svoju vlastitu instancu koju hostuje GitLab, dodajte sljedeće u svoju -`opencode.json` fajl. Također se preporučuje da onemogućite dijeljenje sesije. - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -Za GitLab instance koje hostuju sami: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -Ako vaša instanca pokreće prilagođeni AI Gateway: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -Ili dodajte na svoj bash profil: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -Vaš GitLab administrator mora omogućiti sljedeće: - -1. [Duo Agent Platforma](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) za korisnika, grupu ili instancu -2. Zastavice funkcija (preko Rails konzole): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### OAuth za self-hosted instance - -Da bi Oauth radio za vašu instancu koju sami hostujete, morate kreirati -novu aplikaciju (Podešavanja → Aplikacije) sa -URL povratnog poziva `http://127.0.0.1:8080/callback` i sljedeći opseg: - -- api (pristupite API-ju u svoje ime) -- read_user (Pročitajte svoje lične podatke) -- read_repository (omogućava pristup spremištu samo za čitanje) - -Zatim izložite ID aplikacije kao varijablu okruženja: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -Više dokumentacije na početnoj stranici [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth). - -##### Konfiguracija - -Prilagodite putem `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### GitLab API alati (opciono, ali se preporučuje) - -Za pristup GitLab alatima (zahtjevi za spajanje, problemi, cjevovodi, CI/CD, itd.): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -Ovaj dodatak pruža sveobuhvatne mogućnosti upravljanja GitLab repozitorijumom, uključujući MR preglede, praćenje problema, praćenje procesa i još mnogo toga. - ---- - -### GitHub Copilot - -Da biste koristili svoju GitHub Copilot pretplatu s opencode: - -:::note -Neki modeli će možda trebati [Pro+ -pretplata](https://github.com/features/copilot/plans) za korištenje. - -Neki modeli moraju biti ručno omogućeni u vašim [postavkama GitHub Copilot](https://docs.github.com/en/copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use). -::: - -1. Pokrenite naredbu `/connect` i potražite GitHub Copilot. - -```txt - /connect -``` - -2. Idite na [github.com/login/device](https://github.com/login/device) i unesite kod. - -```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - └ Waiting for authorization... -``` - -3. Sada pokrenite naredbu `/models` da odaberete model koji želite. - -```txt - /models -``` - ---- - -### Google Vertex AI - -Za korištenje Google Vertex AI s OpenCode: - -1. Idite do **Model Garden** u Google Cloud Console i provjerite - modeli dostupni u vašoj regiji. - - :::note - Morate imati Google Cloud projekat sa omogućenim Vertex AI API. - ::: - -2. Postavite potrebne varijable okruženja: - - `GOOGLE_CLOUD_PROJECT`: ID vašeg Google Cloud projekta - - `VERTEX_LOCATION` (opciono): Region za Vertex AI (podrazumevano na `global`) - - Autentifikacija (odaberite jednu): - - `GOOGLE_APPLICATION_CREDENTIALS`: Put do JSON ključnog fajla vašeg naloga usluge - - Autentifikacija koristeći gcloud CLI: `gcloud auth application-default login` - - Postavite ih dok se pokreće opencode. - -```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode -``` - -Ili ih dodajte svom bash profilu. - -```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global -``` - -:::tip -Regija `global` poboljšava dostupnost i smanjuje greške bez dodatnih troškova. Koristite regionalne krajnje tačke (npr. `us-central1`) za zahtjeve rezidentnosti podataka. [Saznajte više](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. Pokrenite naredbu `/models` da odaberete model koji želite. - -```txt - /models -``` - ---- - -### Groq - -1. Idite na [Groq konzolu](https://console.groq.com/), kliknite **Kreiraj API ključ** i kopirajte ključ. - -2. Pokrenite naredbu `/connect` i potražite Groq. - -```txt - /connect -``` - -3. Unesite API ključ za provajdera. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete onu koju želite. - -```txt - /models -``` - ---- - -### Hugging Face - -[Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers) omogućava pristup otvorenim modelima koje podržava 17+ provajdera. - -1. Idite na [Postavke zagrljaja](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained) da kreirate token s dozvolom za upućivanje poziva dobavljačima inference. - -2. Pokrenite naredbu `/connect` i potražite **Hugging Face**. - -```txt - /connect -``` - -3. Unesite svoj token Hugging Face. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model kao što je _Kimi-K2-Instruct_ ili _GLM-4.6_. - -```txt - /models -``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) je platforma za praćenje LLM koja pruža evidenciju, praćenje i analitiku za vaše AI aplikacije. Helicone AI Gateway automatski usmjerava vaše zahtjeve do odgovarajućeg provajdera na osnovu modela. - -1. Idite na [Helicone](https://helicone.ai), kreirajte račun i generirajte API ključ sa svoje kontrolne table. - -2. Pokrenite naredbu `/connect` i potražite **Helicone**. - -```txt - /connect -``` - -3. Unesite svoj Helicone API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model. - -```txt - /models -``` - -Za više provajdera i napredne funkcije kao što su keširanje i ograničavanje brzine, provjerite [Helicone dokumentaciju](https://docs.helicone.ai). - -#### Opcione konfiguracije - -U slučaju da vidite funkciju ili model iz Helicone-a koji nije automatski konfiguriran putem opencodea, uvijek ga možete sami konfigurirati. - -Evo [Heliconeov katalog modela](https://helicone.ai/models), ovo će vam trebati da preuzmete ID-ove modela koje želite dodati. - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### Prilagođena zaglavlja - -Helicone podržava prilagođena zaglavlja za funkcije kao što su keširanje, praćenje korisnika i upravljanje sesijom. Dodajte ih u konfiguraciju svog provajdera koristeći `options.headers`: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### Praćenje sesije - -Heliconeova funkcija [Sessions](https://docs.helicone.ai/features/sessions) vam omogućava da grupišete povezane LLM zahtjeve zajedno. Koristite dodatak [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) da automatski prijavite svaki OpenCode razgovor kao sesiju u Helicone-u. - -```bash -npm install -g opencode-helicone-session -``` - -Dodajte ga u svoju konfiguraciju. - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -Dodatak ubacuje zaglavlja `Helicone-Session-Id` i `Helicone-Session-Name` u vaše zahtjeve. Na stranici Helicone Sessions, vidjet ćete svaki OpenCode razgovor naveden kao zasebna sesija. - -##### Uobičajena Helicone zaglavlja - -| Header | Opis | -| -------------------------- | ------------------------------------------------------------------- | -| `Helicone-Cache-Enabled` | Omogući keširanje odgovora (`true`/`false`) | -| `Helicone-User-Id` | Pratite metriku po korisniku | -| `Helicone-Property-[Name]` | Dodajte prilagođena svojstva (npr. `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | Povezivanje zahtjeva sa brzim verzijama | - -Pogledajte [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory) za sva dostupna zaglavlja. - ---- - -### llama.cpp - -Možete konfigurirati opencode za korištenje lokalnih modela putem [llama.cpp's](https://github.com/ggml-org/llama.cpp) uslužnog programa llama-server - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -U ovom primjeru: - -- `llama.cpp` je ID prilagođenog provajdera. Ovo može biti bilo koji niz koji želite. -- `npm` specificira paket koji će se koristiti za ovog provajdera. Ovdje se `@ai-sdk/openai-compatible` koristi za bilo koji OpenAI kompatibilan API. -- `name` je ime za prikaz za provajdera u korisničkom sučelju. -- `options.baseURL` je krajnja tačka za lokalni server. -- `models` je mapa ID-ova modela prema njihovim konfiguracijama. Naziv modela će biti prikazan na listi za odabir modela. - ---- - -### IO.NET - -IO.NET nudi 17 modela optimiziranih za različite slučajeve upotrebe: - -1. Idite na [IO.NET konzolu](https://ai.io.net/), kreirajte račun i generirajte API ključ. - -2. Pokrenite naredbu `/connect` i potražite **IO.NET**. - -```txt - /connect -``` - -3. Unesite svoj IO.NET API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model. - -```txt - /models -``` - ---- - -### LM Studio - -Možete konfigurirati opencode za korištenje lokalnih modela preko LM Studio. - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -U ovom primjeru: - -- `lmstudio` je ID prilagođenog provajdera. Ovo može biti bilo koji niz koji želite. -- `npm` specificira paket koji će se koristiti za ovog provajdera. Ovdje se `@ai-sdk/openai-compatible` koristi za bilo koji OpenAI kompatibilan API. -- `name` je ime za prikaz za provajdera u korisničkom sučelju. -- `options.baseURL` je krajnja tačka za lokalni server. -- `models` je mapa ID-ova modela prema njihovim konfiguracijama. Naziv modela će biti prikazan na listi za odabir modela. - ---- - -### Moonshot AI - -Da biste koristili Kimi K2 iz Moonshot AI: - -1. Idite na [Moonshot AI konzolu](https://platform.moonshot.ai/console), kreirajte nalog i kliknite na **Kreiraj API ključ**. - -2. Pokrenite naredbu `/connect` i potražite **Moonshot AI**. - -```txt - /connect -``` - -3. Unesite svoj Moonshot API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete _Kimi K2_. - -```txt - /models -``` - ---- - -### MiniMax - -1. Prijeđite na [MiniMax API konzolu](https://platform.minimax.io/login), kreirajte račun i generirajte API ključ. - -2. Pokrenite naredbu `/connect` i potražite **MiniMax**. - -```txt - /connect -``` - -3. Unesite svoj MiniMax API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model kao što je _M2.1_. - -```txt - /models -``` - ---- - -### Nebius Token Factory - -1. Idite na [Nebius Token Factory konzolu](https://tokenfactory.nebius.com/), kreirajte nalog i kliknite na **Dodaj ključ**. - -2. Pokrenite naredbu `/connect` i potražite **Nebius Token Factory**. - -```txt - /connect -``` - -3. Unesite svoj Nebius Token Factory API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model kao što je _Kimi K2 Instruct_. - -```txt - /models -``` - ---- - -### Ollama - -Možete konfigurirati opencode za korištenje lokalnih modela putem Ollame. - -:::tip -Ollama se može automatski konfigurirati za OpenCode. Pogledajte [Ollama integracijske dokumente](https://docs.ollama.com/integrations/opencode) za detalje. -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -U ovom primjeru: - -- `ollama` je ID prilagođenog provajdera. Ovo može biti bilo koji niz koji želite. -- `npm` specificira paket koji će se koristiti za ovog provajdera. Ovdje se `@ai-sdk/openai-compatible` koristi za bilo koji OpenAI kompatibilan API. -- `name` je ime za prikaz za provajdera u korisničkom sučelju. -- `options.baseURL` je krajnja tačka za lokalni server. -- `models` je mapa ID-ova modela prema njihovim konfiguracijama. Naziv modela će biti prikazan na listi za odabir modela. - -:::tip -Ako pozivi alata ne rade, pokušajte povećati `num_ctx` u Ollama. Počnite oko 16k - 32k. -::: - ---- - -### Ollama Cloud - -Da biste koristili Ollama Cloud s OpenCode: - -1. Idite na [https://ollama.com/](https://ollama.com/) i prijavite se ili kreirajte račun. - -2. Idite na **Postavke** > **Ključevi** i kliknite na **Dodaj API ključ** da generišete novi API ključ. - -3. Kopirajte API ključ za korištenje u OpenCode. - -4. Pokrenite naredbu `/connect` i potražite **Ollama Cloud**. - -```txt - /connect -``` - -5. Unesite svoj Ollama Cloud API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -6. **Važno**: Prije upotrebe modela oblaka u OpenCode, morate lokalno povući informacije o modelu: - -```bash - ollama pull gpt-oss:20b-cloud -``` - -7. Pokrenite naredbu `/models` da odaberete svoj model Ollama Cloud. - -```txt - /models -``` - ---- - -### OpenAI - -Preporučujemo da se prijavite za [ChatGPT Plus ili Pro](https://chatgpt.com/pricing). - -1. Nakon što ste se prijavili, pokrenite naredbu `/connect` i odaberite OpenAI. - -```txt - /connect -``` - -2. Ovdje možete odabrati opciju **ChatGPT Plus/Pro** i ona će otvoriti vaš pretraživač - i traži od vas da se autentifikujete. - -```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ -``` - -3. Sada bi svi OpenAI modeli trebali biti dostupni kada koristite naredbu `/models`. - -```txt - /models -``` - -##### Korištenje API ključeva - -Ako već imate API ključ, možete odabrati **Ručno unesite API ključ** i zalijepite ga u svoj terminal. - ---- - -### OpenCode Zen - -OpenCode Zen je lista testiranih i verifikovanih modela koju je obezbedio OpenCode tim. [Saznajte više](/docs/zen). - -1. Prijavite se na **OpenCode Zen** i kliknite na **Kreiraj API ključ**. - -2. Pokrenite naredbu `/connect` i potražite **OpenCode Zen**. - -```txt - /connect -``` - -3. Unesite svoj OpenCode API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model kao što je _Qwen 3 Coder 480B_. - -```txt - /models -``` - ---- - -### OpenRouter - -1. Idite na [OpenRouter nadzornu ploču](https://openrouter.ai/settings/keys), kliknite na **Kreiraj API ključ** i kopirajte ključ. - -2. Pokrenite naredbu `/connect` i potražite OpenRouter. - -```txt - /connect -``` - -3. Unesite API ključ za provajdera. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Mnogi OpenRouter modeli su unapred učitani po defaultu, pokrenite naredbu `/models` da odaberete onaj koji želite. - -```txt - /models -``` - -Također možete dodati dodatne modele putem vaše opencode konfiguracije. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } -} -``` - -5. Također ih možete prilagoditi putem vaše opencode konfiguracije. Evo primjera navođenja provajdera - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } -} -``` - ---- - -### SAP AI Core - -SAP AI Core omogućava pristup preko 40+ modela iz OpenAI, Anthropic, Google, Amazon, Meta, Mistral i AI21 putem objedinjene platforme. - -1. Idite na vaš [SAP BTP Cockpit](https://account.hana.ondemand.com/), idite na instancu usluge SAP AI Core i kreirajte servisni ključ. - - :::tip - Servisni ključ je JSON objekat koji sadrži `clientid`, `clientsecret`, `url` i `serviceurls.AI_API_URL`. Svoju AI Core instancu možete pronaći pod **Usluge** > **Instance i pretplate** u BTP kokpitu. - ::: - -2. Pokrenite naredbu `/connect` i potražite **SAP AI Core**. - -```txt - /connect -``` - -3. Unesite JSON svoj servisni ključ. - -```txt - ┌ Service key - │ - │ - └ enter -``` - -Ili postavite varijablu okruženja `AICORE_SERVICE_KEY`: - -```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode -``` - -Ili ga dodajte na svoj bash profil: - -```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' -``` - -4. Opciono postavite ID implementacije i grupu resursa: - -```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode -``` - -:::note -Ove postavke su opcione i treba ih konfigurirati u skladu s vašim SAP AI Core postavkama. -::: - -5. Pokrenite naredbu `/models` da odaberete između 40+ dostupnih modela. - - ```txt - /models - ``` - ---- - -### STACKIT - -STACKIT AI Model Serving pruža potpuno upravljano suvereno hosting okruženje za AI modele, fokusirajući se na LLM-ove kao što su Llama, Mistral i Qwen, uz maksimalan suverenitet podataka na evropskoj infrastrukturi. - -1. Idite na [STACKIT Portal](https://portal.stackit.cloud), idite na **AI Model Serving** i kreirajte token za autentifikaciju za svoj projekat. - - :::tip - Potreban vam je STACKIT korisnički račun, korisnički nalog i projekat prije kreiranja tokena za autentifikaciju. - ::: - -2. Pokrenite naredbu `/connect` i potražite **STACKIT**. - - ```txt - /connect - ``` - -3. Unesite svoj STACKIT AI Model Serving token za autentifikaciju. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Pokrenite naredbu `/models` da odaberete dostupne modele kao što su _Qwen3-VL 235B_ ili _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### OVHcloud AI krajnje tačke - -1. Idite na [OVHcloud panel](https://ovh.com/manager). Idite do odjeljka `Public Cloud`, `AI & Machine Learning` > `AI Endpoints` i na kartici `API Keys` kliknite na **Kreiraj novi API ključ**. - -2. Pokrenite naredbu `/connect` i potražite **OVHcloud AI krajnje točke**. - -```txt - /connect -``` - -3. Unesite svoj OVHcloud AI Endpoints API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model kao što je _gpt-oss-120b_. - -```txt - /models -``` - ---- - -### Scaleway - -Da biste koristili [Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/) sa Opencodeom: - -1. Prijeđite na [Scaleway Console IAM postavke](https://console.scaleway.com/iam/api-keys) da generišete novi API ključ. - -2. Pokrenite naredbu `/connect` i potražite **Scaleway**. - -```txt - /connect -``` - -3. Unesite svoj Scaleway API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model kao što je _devstral-2-123b-instruct-2512_ ili _gpt-oss-120b_. - -```txt - /models -``` - ---- - -### Together AI - -1. Idite na [Together AI console](https://api.together.ai), kreirajte nalog i kliknite na **Dodaj ključ**. - -2. Pokrenite naredbu `/connect` i potražite **Together AI**. - -```txt - /connect -``` - -3. Unesite svoj Together AI API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model kao što je _Kimi K2 Instruct_. - -```txt - /models -``` - ---- - -### Venice AI - -1. Idite na [Venice AI konzolu](https://venice.ai), kreirajte račun i generirajte API ključ. - -2. Pokrenite naredbu `/connect` i potražite **Venice AI**. - -```txt - /connect -``` - -3. Unesite svoj Venice AI API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model kao što je _Llama 3.3 70B_. - -```txt - /models -``` - ---- - -### Vercel AI Gateway - -Vercel AI Gateway vam omogućava da pristupite modelima iz OpenAI, Anthropic, Google, xAI i drugih putem objedinjene krajnje tačke. Modeli se nude po kataloškim cijenama bez maraka. - -1. Idite na [Vercel kontrolnu tablu](https://vercel.com/), idite na karticu **AI Gateway** i kliknite na **API ključevi** da kreirate novi API ključ. - -2. Pokrenite naredbu `/connect` i potražite **Vercel AI Gateway**. - -```txt - /connect -``` - -3. Unesite svoj Vercel AI Gateway API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model. - -```txt - /models -``` - -Također možete prilagoditi modele kroz svoju opencode konfiguraciju. Evo primjera specificiranja redoslijeda usmjeravanja dobavljača. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -Neke korisne opcije rutiranja: - -| Opcija | Opis | -| ------------------- | ------------------------------------------------------------------ | -| `order` | Redoslijed dobavljača za pokušaj | -| `only` | Ograničiti na određene provajdere | -| `zeroDataRetention` | Koristite samo provajdere sa nultom politikom zadržavanja podataka | - ---- - -### xAI - -1. Prijeđite na [xAI konzolu](https://console.x.ai/), kreirajte račun i generirajte API ključ. - -2. Pokrenite naredbu `/connect` i potražite **xAI**. - -```txt - /connect -``` - -3. Unesite svoj xAI API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model kao što je _Grok Beta_. - -```txt - /models -``` - ---- - -### Z.AI - -1. Idite na [Z.AI API konzolu](https://z.ai/manage-apikey/apikey-list), kreirajte nalog i kliknite na **Kreiraj novi API ključ**. - -2. Pokrenite naredbu `/connect` i potražite **Z.AI**. - -```txt - /connect -``` - -Ako ste pretplaćeni na **GLM plan kodiranja**, odaberite **Z.AI plan kodiranja**. - -3. Unesite svoj Z.AI API ključ. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Pokrenite naredbu `/models` da odaberete model kao što je _GLM-4.7_. - -```txt - /models -``` - ---- - -### ZenMux - -1. Idite na [ZenMux kontrolnu tablu](https://zenmux.ai/settings/keys), kliknite na **Kreiraj API ključ** i kopirajte ključ. - -2. Pokrenite naredbu `/connect` i potražite ZenMux. - -```txt - /connect -``` - -3. Unesite API ključ za provajdera. - -```txt - ┌ API key - │ - │ - └ enter -``` - -4. Mnogi ZenMux modeli su unaprijed učitani po defaultu, pokrenite naredbu `/models` da odaberete onaj koji želite. - -```txt - /models -``` - -Također možete dodati dodatne modele putem vaše opencode konfiguracije. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } -} -``` - ---- - -## Prilagođeni provajder - -Da biste dodali bilo kojeg **OpenAI-kompatibilnog** provajdera koji nije naveden u naredbi `/connect`: - -:::tip -Možete koristiti bilo kojeg OpenAI kompatibilnog provajdera s opencode-om. Većina modernih AI provajdera nudi API-je kompatibilne sa OpenAI. -::: - -1. Pokrenite naredbu `/connect` i pomaknite se prema dolje do **Ostalo**. - -```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ -``` - -2. Unesite jedinstveni ID za provajdera. - -```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ -``` - -:::note -Odaberite ID koji se pamti, to ćete koristiti u svom konfiguracijskom fajlu. -::: - -3. Unesite svoj API ključ za provajdera. - -```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ -``` - -4. Kreirajte ili ažurirajte svoju `opencode.json` datoteku u direktoriju projekta: - -```json title="opencode.json" ""myprovider"" {5-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } -} -``` - -Evo opcija konfiguracije: - -- **npm**: AI SDK paket za korištenje, `@ai-sdk/openai-compatible` za OpenAI-kompatibilne provajdere -- **name**: Ime za prikaz u korisničkom sučelju. -- **modeli**: Dostupni modeli. -- **options.baseURL**: URL krajnje tačke API-ja. -- **options.apiKey**: Opciono postavite API ključ, ako ne koristite auth. -- **options.headers**: Opciono postavite prilagođena zaglavlja. - -Više o naprednim opcijama u primjeru ispod. - -5. Pokrenite naredbu `/models` i vaš prilagođeni provajder i modeli će se pojaviti na listi izbora. - ---- - -##### Primjer - -Evo primjera postavljanja opcija `apiKey`, `headers` i modela `limit`. - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -Detalji konfiguracije: - -- **apiKey**: Postavite pomoću sintakse varijable `env`, [saznajte više](/docs/config#env-vars). -- **zaglavlja**: Prilagođena zaglavlja se šalju sa svakim zahtjevom. -- **limit.context**: Maksimalni ulazni tokeni koje model prihvata. -- **limit.output**: Maksimalni tokeni koje model može generirati. - -Polja `limit` omogućavaju OpenCode da shvati koliko vam je konteksta ostalo. Standardni dobavljači ih automatski preuzimaju sa models.dev. - ---- - -## Rješavanje problema - -Ako imate problema s konfiguracijom provajdera, provjerite sljedeće: - -1. **Provjerite postavke autentifikacije**: Pokrenite `opencode auth list` da vidite da li su vjerodajnice - za provajdera se dodaju u vašu konfiguraciju. - - Ovo se ne odnosi na dobavljače kao što je Amazon Bedrock, koji se oslanjaju na varijable okruženja za svoju autentifikaciju. - -2. Za prilagođene provajdere, provjerite OpenCode konfiguraciju i: - - Uvjerite se da ID provajdera korišten u naredbi `/connect` odgovara ID-u u vašoj opencode konfiguraciji. - - Za provajdera se koristi pravi npm paket. Na primjer, koristite `@ai-sdk/cerebras` za Cerebras. A za sve ostale OpenAI kompatibilne provajdere, koristite `@ai-sdk/openai-compatible`. - - Provjerite da li se ispravna krajnja tačka API-ja koristi u polju `options.baseURL`. diff --git a/packages/web/src/content/docs/bs/rules.mdx b/packages/web/src/content/docs/bs/rules.mdx deleted file mode 100644 index 3d186a045d..0000000000 --- a/packages/web/src/content/docs/bs/rules.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -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. -::: diff --git a/packages/web/src/content/docs/bs/sdk.mdx b/packages/web/src/content/docs/bs/sdk.mdx deleted file mode 100644 index cc9c2b3bf4..0000000000 --- a/packages/web/src/content/docs/bs/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -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 types datoteci. - ---- - -## 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 | Agent[] | - ---- - -#### 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 | Project[] | -| `project.current()` | Trenutni projekat | Project | - ---- - -#### 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 | Path | - ---- - -#### Primjeri - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### Konfiguracija - -| Metoda | Opis | Odgovor | -| -------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | Info o konfiguraciji | Config | -| `config.providers()` | Lista provajdera i default modela | `{ providers: `Provider[]`, 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 Session[] | -| `session.get({ path })` | Get session | Returns Session | -| `session.children({ path })` | List child sessions | Returns Session[] | -| `session.create({ body })` | Create session | Returns Session | -| `session.delete({ path })` | Delete session | Returns `boolean` | -| `session.update({ path, body })` | Update session properties | Returns Session | -| `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 Session | -| `session.unshare({ path })` | Unshare session | Returns Session | -| `session.summarize({ path, body })` | Summarize session | Returns `boolean` | -| `session.messages({ path })` | List messages in a session | Returns `{ info: `Message`, parts: `Part[]`}[]` | -| `session.message({ path })` | Get message details | Returns `{ info: `Message`, parts: `Part[]`}` | -| `session.prompt({ path, body })` | Send prompt message | `body.noReply: true` returns UserMessage (context only). Default returns AssistantMessage with AI response. Supports `body.outputFormat` for [structured output](#strukturirani-izlaz) | -| `session.command({ path, body })` | Send command to session | Returns `{ info: `AssistantMessage`, parts: `Part[]`}` | -| `session.shell({ path, body })` | Run a shell command | Returns AssistantMessage | -| `session.revert({ path, body })` | Revert a message | Returns Session | -| `session.unrevert({ path })` | Restore reverted messages | Returns Session | -| `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 | Symbol[] | -| `file.read({ query })` | Read a file | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | Get status for tracked files | File[] | - -`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) -} -``` diff --git a/packages/web/src/content/docs/bs/server.mdx b/packages/web/src/content/docs/bs/server.mdx deleted file mode 100644 index 5237873d5f..0000000000 --- a/packages/web/src/content/docs/bs/server.mdx +++ /dev/null @@ -1,284 +0,0 @@ ---- -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 ] [--hostname ] [--cors ] -``` - -#### 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://:/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 | Project[] | -| `GET` | `/project/current` | Dohvati trenutni projekt | Project | - ---- - -### Putanja i VCS - -| Metoda | Putanja | Opis | Odgovor | -| ------ | ------- | ------------------------------------------- | ------------------------------------------- | -| `GET` | `/path` | Dohvati trenutnu putanju | Path | -| `GET` | `/vcs` | Dohvati VCS informacije za trenutni projekt | VcsInfo | - ---- - -### Instanca - -| Metoda | Putanja | Opis | Odgovor | -| ------ | ------------------- | ----------------------- | --------- | -| `POST` | `/instance/dispose` | Ugasi trenutnu instancu | `boolean` | - ---- - -### Konfiguracija - -| Metoda | Putanja | Opis | Odgovor | -| ------- | ------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | Dohvati informacije o konfiguraciji | Config | -| `PATCH` | `/config` | Ažuriraj konfiguraciju | Config | -| `GET` | `/config/providers` | Izlistaj provajdere i zadane modele | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -### Provajder - -| Metoda | Putanja | Opis | Odgovor | -| ------ | -------------------------------- | ----------------------------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | Izlistaj sve provajdere | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | Dohvati metode autentifikacije provajdera | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | Autoriziraj provajdera koristeći OAuth | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | Obradi OAuth povratni poziv za provajdera | `boolean` | - ---- - -### Sesije - -| Metoda | Putanja | Opis | Napomene | -| -------- | ---------------------------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------- | -| `GET` | `/session` | Izlistaj sve sesije | Returns Session[] | -| `POST` | `/session` | Kreiraj novu sesiju | body: `{ parentID?, title? }`, returns Session | -| `GET` | `/session/status` | Dohvati status sesije za sve sesije | Returns `{ [sessionID: string]: `SessionStatus` }` | -| `GET` | `/session/:id` | Dohvati detalje sesije | Returns Session | -| `DELETE` | `/session/:id` | Obriši sesiju i sve njene podatke | Returns `boolean` | -| `PATCH` | `/session/:id` | Ažuriraj svojstva sesije | body: `{ title? }`, returns Session | -| `GET` | `/session/:id/children` | Dohvati pod-sesije sesije | Returns Session[] | -| `GET` | `/session/:id/todo` | Dohvati listu zadataka za sesiju | Returns Todo[] | -| `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 Session | -| `POST` | `/session/:id/abort` | Prekini sesiju u toku | Returns `boolean` | -| `POST` | `/session/:id/share` | Podijeli sesiju | Returns Session | -| `DELETE` | `/session/:id/share` | Prestani dijeliti sesiju | Returns Session | -| `GET` | `/session/:id/diff` | Dohvati razlike za ovu sesiju | query: `messageID?`, returns FileDiff[] | -| `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: `Message`, parts: `Part[]`}[]` | -| `POST` | `/session/:id/message` | Pošalji poruku i čekaj odgovor | body: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, returns `{ info: `Message`, parts: `Part[]`}` | -| `GET` | `/session/:id/message/:messageID` | Dohvati detalje poruke | Returns `{ info: `Message`, parts: `Part[]`}` | -| `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: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/shell` | Pokreni shell naredbu | body: `{ agent, model?, command }`, returns `{ info: `Message`, parts: `Part[]`}` | - ---- - -### Naredbe - -| Metoda | Putanja | Opis | Odgovor | -| ------ | ---------- | -------------------- | --------------------------------------------- | -| `GET` | `/command` | Izlistaj sve naredbe | Command[] | - ---- - -### Datoteke - -| Metoda | Putanja | Opis | Odgovor | -| ------ | ------------------------ | --------------------------------------- | ------------------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | Traži tekst u datotekama | Array of match objects with `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `GET` | `/find/file?query=` | Pronađi datoteke i direktorije po imenu | `string[]` (paths) | -| `GET` | `/find/symbol?query=` | Pronađi simbole radnog prostora | Symbol[] | -| `GET` | `/file?path=` | Izlistaj datoteke i direktorije | FileNode[] | -| `GET` | `/file/content?path=

` | Pročitaj datoteku | FileContent | -| `GET` | `/file/status` | Dohvati status za praćene datoteke | File[] | - -#### `/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 | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | Izlistaj alate sa JSON šemama za model | ToolList | - ---- - -### LSP, Formateri & MCP - -| Metoda | Putanja | Opis | Odgovor | -| ------ | ------------ | -------------------------- | -------------------------------------------------------- | -| `GET` | `/lsp` | Dohvati status LSP servera | LSPStatus[] | -| `GET` | `/formatter` | Dohvati status formatera | FormatterStatus[] | -| `GET` | `/mcp` | Dohvati status MCP servera | `{ [name: string]: `MCPStatus` }` | -| `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 | Agent[] | - ---- - -### 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 | diff --git a/packages/web/src/content/docs/bs/share.mdx b/packages/web/src/content/docs/bs/share.mdx deleted file mode 100644 index b0760ee0c1..0000000000 --- a/packages/web/src/content/docs/bs/share.mdx +++ /dev/null @@ -1,127 +0,0 @@ ---- -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/` - ---- - -## 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. diff --git a/packages/web/src/content/docs/bs/skills.mdx b/packages/web/src/content/docs/bs/skills.mdx deleted file mode 100644 index 655dc9d107..0000000000 --- a/packages/web/src/content/docs/bs/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -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//SKILL.md` -- Globalna konfiguracija: `~/.config/opencode/skills//SKILL.md` -- Claude kompatibilno u projektu: `.claude/skills//SKILL.md` -- Globalno Claude kompatibilno: `~/.claude/skills//SKILL.md` -- Agent kompatibilno u projektu: `.agents/skills//SKILL.md` -- Globalno agent kompatibilno: `~/.agents/skills//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 - - - git-release - Create consistent releases and changelogs - - -``` - -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 `` 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 diff --git a/packages/web/src/content/docs/bs/themes.mdx b/packages/web/src/content/docs/bs/themes.mdx deleted file mode 100644 index edb17e6fa4..0000000000 --- a/packages/web/src/content/docs/bs/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -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** - `/.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" - } - } -} -``` diff --git a/packages/web/src/content/docs/bs/tools.mdx b/packages/web/src/content/docs/bs/tools.mdx deleted file mode 100644 index c2d5aa2dd2..0000000000 --- a/packages/web/src/content/docs/bs/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -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`. diff --git a/packages/web/src/content/docs/bs/troubleshooting.mdx b/packages/web/src/content/docs/bs/troubleshooting.mdx deleted file mode 100644 index 7dff4b24c0..0000000000 --- a/packages/web/src/content/docs/bs/troubleshooting.mdx +++ /dev/null @@ -1,300 +0,0 @@ ---- -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 `.//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) - - `/.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: `/` - -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`. diff --git a/packages/web/src/content/docs/bs/tui.mdx b/packages/web/src/content/docs/bs/tui.mdx deleted file mode 100644 index 98c7c4d728..0000000000 --- a/packages/web/src/content/docs/bs/tui.mdx +++ /dev/null @@ -1,432 +0,0 @@ ---- -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`. - - - - - ```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. - - - - - - ```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**. - - - - - - ```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. - - - - -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", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -Ovo je odvojeno od `opencode.json`, koji konfiguriše ponašanje servera/izvršavanja. - -`keybinds` se spaja s ugrađenim zadanim vrijednostima, tako da trebate konfigurisati samo prečice koje želite promijeniti. - -### Opcije - -- `theme` - Postavlja vašu UI temu. [Saznajte više](/docs/themes). -- `keybinds` - Prilagođava prečice na tastaturi. [Saznajte više](/docs/keybinds). -- `leader_timeout` - Kontroliše koliko dugo OpenCode čeka nakon leader key. Podrazumijevano je `2000`. -- `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. -- `mouse` - Omogućava ili onemogućava hvatanje miša u TUI (podrazumijevano: `true`). Kada je onemogućeno, zadržava se izvorno ponašanje terminala za označavanje i pomicanje mišem. -- `attention` - Konfiguriše desktop obavještenja i zvukove za TUI. Podrazumijevano je onemogućeno. - -Koristite `OPENCODE_TUI_CONFIG` da učitate prilagođenu putanju TUI konfiguracije. - -### Attention - -Attention omogućava da vas TUI obavijesti kada OpenCode čeka odgovor, treba odobrenje dozvole, prijavi grešku sesije ili završi sesiju. Omogućite ga pomoću `attention.enabled`; ugrađeni događaji reproduciraju zvuk kada se dogode. Desktop obavještenja se šalju samo kada prozor terminala nije u fokusu i ne koriste se za subagent događaje. - -- `enabled` - Omogućava sva obavještenja i zvukove za Attention. Podrazumijevano je `false`. -- `notifications` - Kada je Attention omogućen, dozvoljava TUI-ju da šalje desktop obavještenja putem terminala. Podrazumijevano je `true`. -- `sound` - Kada je Attention omogućen, dozvoljava zvukove upozorenja. Podrazumijevano je `true`. -- `volume` - Podrazumijevana jačina zvukova upozorenja od `0` do `1`. Podrazumijevano je `0.4`. -- `sound_pack` - Sound pack ID koji se koristi. Podrazumijevano je `opencode.default`. -- `sounds` - Postavlja prilagođene zvučne datoteke za `default`, `question`, `permission`, `error`, `done` ili `subagent_done`. Putanje mogu biti apsolutne, `file://` URL-ovi ili relativne u odnosu na `tui.json`. - ---- - -## 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 diff --git a/packages/web/src/content/docs/bs/web.mdx b/packages/web/src/content/docs/bs/web.mdx deleted file mode 100644 index 6110162a97..0000000000 --- a/packages/web/src/content/docs/bs/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -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. - -![OpenCode Web - Nova sesija](../../../assets/web/web-homepage-new-session.png) - -## 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. - -![OpenCode Web - aktivna sesija](../../../assets/web/web-homepage-active-session.png) - -### Status servera - -Kliknite "Pogledajte servere" da vidite povezane servere i njihov status. - -![OpenCode Web - Vidi servere](../../../assets/web/web-homepage-see-servers.png) - ---- - -## 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. diff --git a/packages/web/src/content/docs/bs/windows-wsl.mdx b/packages/web/src/content/docs/bs/windows-wsl.mdx deleted file mode 100644 index 04d62a5314..0000000000 --- a/packages/web/src/content/docs/bs/windows-wsl.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -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 - - - -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 - ``` - - - ---- - -## 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://: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:` (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/` diff --git a/packages/web/src/content/docs/bs/zen.mdx b/packages/web/src/content/docs/bs/zen.mdx deleted file mode 100644 index d19e13c6e9..0000000000 --- a/packages/web/src/content/docs/bs/zen.mdx +++ /dev/null @@ -1,324 +0,0 @@ ---- -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. - -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 **OpenCode Zen**, 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-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/`. 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 | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -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: - -- DeepSeek V4 Flash Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. -- MiMo-V2.5 Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. -- North Mini Code Free je dostupan na OpenCode ograničeno vrijeme. Tim koristi ovo vrijeme da prikupi povratne informacije i poboljša model. -- Nemotron 3 Ultra 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. - -Kontaktirajte nas 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 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. -- DeepSeek V4 Flash Free: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela. -- MiMo-V2.5 Free: Tokom besplatnog perioda, prikupljeni podaci mogu se koristiti za poboljšanje modela. -- North Mini Code Free: Tokom besplatnog perioda, prikupljeni podaci mogu biti zadržani i korišteni za poboljšanje modela. Nemojte slati lične ili povjerljive podatke. Pogledajte naše [Uslove korištenja](https://cohere.com/terms-of-use) i [Politiku privatnosti](https://cohere.com/privacy). -- Nemotron 3 Ultra Free (besplatni NVIDIA endpointi): Samo za probnu upotrebu — nemojte slati lične ili povjerljive podatke. Vaše korištenje se bilježi radi sigurnosti i poboljšanja NVIDIA proizvoda i usluga. Zabilježeni podaci sesije koji se koriste u svrhu poboljšanja nisu povezani s vašim identitetom niti bilo kojim trajnim identifikatorom. Za više informacija o našim praksama obrade podataka pogledajte našu [Politiku privatnosti](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Interakcijom s ovim endpointom pristajete na naše prikupljanje, bilježenje i korištenje takvih informacija te na [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). -- 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. diff --git a/packages/web/src/content/docs/da/acp.mdx b/packages/web/src/content/docs/da/acp.mdx deleted file mode 100644 index 06cdc89c40..0000000000 --- a/packages/web/src/content/docs/da/acp.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -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 diff --git a/packages/web/src/content/docs/da/agents.mdx b/packages/web/src/content/docs/da/agents.mdx deleted file mode 100644 index 058f9eec6e..0000000000 --- a/packages/web/src/content/docs/da/agents.mdx +++ /dev/null @@ -1,755 +0,0 @@ ---- -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 tre indbyggede subagenter, **General**, **Explore** og **Scout**. Vi ser nærmere på dem nedenfor. - ---- - -## Indbyggede - -OpenCode leveres med to indbyggede primære agenter og tre 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. - ---- - -### Scout-agenten - -_Tilstand_: `subagent` - -En skrivebeskyttet agent til eksterne docs og research af dependencies. Brug denne, når du har brug for at klone et dependency-repository ind i OpenCode's administrerede cache, inspicere kildekoden i et bibliotek eller krydstjekke lokal kode mod upstream-implementeringer uden at ændre dit workspace. - ---- - -### 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: - - **\+Højre** (eller din konfigurerede `session_child_cycle`-tastebinding) for at cykle fremad gennem forælder → barn1 → barn2 →... → forælder - - **\+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 -``` diff --git a/packages/web/src/content/docs/da/cli.mdx b/packages/web/src/content/docs/da/cli.mdx deleted file mode 100644 index 814d2b819e..0000000000 --- a/packages/web/src/content/docs/da/cli.mdx +++ /dev/null @@ -1,617 +0,0 @@ ---- -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 | -| {"--continue"} | `-c` | Fortsæt den seneste session | -| {"--session"} | `-s` | Sessions-id for at fortsætte | -| {"--fork"} | | Forgren sessionen ved fortsættelse (brug med `--continue` eller `--session`) | -| {"--password"} | `-p` | Adgangskode til basic auth (standard: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Brugernavn til basic auth (standard: `OPENCODE_SERVER_USERNAME` eller `opencode`) | - ---- - -#### 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 -``` - ---- - -### 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) | -| {"--password"} | `-p` | Adgangskode til basic auth (standard: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Brugernavn til basic auth (standard: `OPENCODE_SERVER_USERNAME` eller `opencode`) | -| {"--dir"} | | Mappe at køre i, eller sti på fjernserveren ved tilkobling | -| {"--variant"} | | Modelvariant (udbyder-specifik ræsonneringsindsats) | -| {"--thinking"} | | Vis tænkeblokke | -| {"--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 -``` - -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 eksperimentelle funktioner under samleflaget | -| `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_PLAN_MODE` | boolean | Aktiver plantilstand | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | boolean | Aktiver baggrundsopgaver for subagenter | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | boolean | Aktiver eksperimentelt hændelsessystem | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | boolean | Aktiver native LLM-anmodningssti | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | boolean | Aktiver parallel udførelse af websøgning | -| `OPENCODE_EXPERIMENTAL_SCOUT` | boolean | Aktiver Scout-subagent | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | boolean | Aktiver workspace-understøttelse | diff --git a/packages/web/src/content/docs/da/commands.mdx b/packages/web/src/content/docs/da/commands.mdx deleted file mode 100644 index 1b624b57a3..0000000000 --- a/packages/web/src/content/docs/da/commands.mdx +++ /dev/null @@ -1,323 +0,0 @@ ---- -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. diff --git a/packages/web/src/content/docs/da/config.mdx b/packages/web/src/content/docs/da/config.mdx deleted file mode 100644 index 189c7e5d08..0000000000 --- a/packages/web/src/content/docs/da/config.mdx +++ /dev/null @@ -1,688 +0,0 @@ ---- -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": false, - "reserved": 10000 - } -} -``` - -- `auto` - Komprimer automatisk sessionen, når konteksten er fuld (standard: `true`). -- `prune` - Fjern gamle værktøjsudgange for at gemme tokens (standard: `false`). -- `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. diff --git a/packages/web/src/content/docs/da/custom-tools.mdx b/packages/web/src/content/docs/da/custom-tools.mdx deleted file mode 100644 index 75746dcb49..0000000000 --- a/packages/web/src/content/docs/da/custom-tools.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -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 **`_`**: - -```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. diff --git a/packages/web/src/content/docs/da/ecosystem.mdx b/packages/web/src/content/docs/da/ecosystem.mdx deleted file mode 100644 index e8382216b2..0000000000 --- a/packages/web/src/content/docs/da/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -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 | diff --git a/packages/web/src/content/docs/da/enterprise.mdx b/packages/web/src/content/docs/da/enterprise.mdx deleted file mode 100644 index 6228c5c910..0000000000 --- a/packages/web/src/content/docs/da/enterprise.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -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. **Kontakt os** 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, **kontakt os**. - ---- - -## Implementering - -Når du har afsluttet din prøveperiode, og du er klar til at bruge OpenCode kl -din organisation, kan du **kontakte os** 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, **giv os besked**. - ---- - -## FAQ - -

-Hvad er OpenCode Enterprise? - -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. - -
- -
-Hvordan kommer jeg i gang med OpenCode Enterprise? - -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å **kontakt os** for at diskutere priser og implementeringsmuligheder. - -
- -
-Hvordan fungerer virksomhedspriser? - -Vi tilbyder virksomhedspriser pr. sæde. Hvis du har din egen LLM-gateway, kræver vi ikke betaling for brugte tokens. For yderligere detaljer, **kontakt os** for et brugerdefineret tilbud baseret på din organisations behov. - -
- -
-Er mine data sikret med OpenCode Enterprise? - -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. - -
- -
-Kan vi bruge vores eget private NPM-register? - -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. - -
diff --git a/packages/web/src/content/docs/da/formatters.mdx b/packages/web/src/content/docs/da/formatters.mdx deleted file mode 100644 index 33a2d6ff3a..0000000000 --- a/packages/web/src/content/docs/da/formatters.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -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. diff --git a/packages/web/src/content/docs/da/github.mdx b/packages/web/src/content/docs/da/github.mdx deleted file mode 100644 index cffe85f13f..0000000000 --- a/packages/web/src/content/docs/da/github.mdx +++ /dev/null @@ -1,321 +0,0 @@ ---- -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. diff --git a/packages/web/src/content/docs/da/gitlab.mdx b/packages/web/src/content/docs/da/gitlab.mdx deleted file mode 100644 index 8c83daaefb..0000000000 --- a/packages/web/src/content/docs/da/gitlab.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -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: - -
- - Flowkonfiguration - - ```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. - - - 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. - - " - - 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 - ``` - -
- -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. diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx deleted file mode 100644 index 3fa73b0f14..0000000000 --- a/packages/web/src/content/docs/da/go.mdx +++ /dev/null @@ -1,211 +0,0 @@ ---- -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. - -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å **OpenCode Zen**, 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.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **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 DeepSeek V4 Flash tillader flere anmodninger, mens dyrere modeller som GLM-5.2 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.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| 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.2/5.1 — 700 input, 52.000 cachelagrede, 150 output-tokens pr. anmodning -- Kimi K2.7 Code/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 M3 — 510 input, 56.000 cachelagrede, 190 output-tokens pr. anmodning -- MiniMax M2.7 — 300 input, 55.000 cachelagrede, 125 output-tokens pr. anmodning -- Qwen3.7 Max — 420 input, 66.000 cachelagrede, 200 output-tokens pr. anmodning -- Qwen3.7 Plus — 500 input, 57.000 cachelagrede, 190 output-tokens pr. anmodning -- Qwen3.6 Plus — 500 input, 57.000 cachelagrede, 190 output-tokens pr. anmodning -- MiMo-V2.5 — 830 input, 71.500 cachelagrede, 295 output-tokens pr. anmodning -- MiMo-V2.5-Pro — 790 input, 86.000 cachelagrede, 305 output-tokens pr. anmodning - -Estimaterne er også baseret på følgende priser pr. 1M tokens: - -| Model | Input | Output | Cached Read | Cached Write | -| ---------------------------- | ----- | ------ | ----------- | ------------ | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -Du kan spore dit nuværende forbrug i **konsollen**. - -:::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.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -Dit [model id](/docs/config/#models) i din OpenCode config -bruger formatet `opencode-go/`. For eksempel for Kimi K2.7 Code, vil du -bruge `opencode-go/kimi-k2.7-code` 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. diff --git a/packages/web/src/content/docs/da/ide.mdx b/packages/web/src/content/docs/da/ide.mdx deleted file mode 100644 index 17f9cec1e7..0000000000 --- a/packages/web/src/content/docs/da/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -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 diff --git a/packages/web/src/content/docs/da/index.mdx b/packages/web/src/content/docs/da/index.mdx deleted file mode 100644 index 65cf34f9a9..0000000000 --- a/packages/web/src/content/docs/da/index.mdx +++ /dev/null @@ -1,360 +0,0 @@ ---- -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. - -![OpenCode TUI med opencode-temaet](../../../assets/lander/screenshot.png) - -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** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **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" - - ``` - - 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" - - ``` - - 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). diff --git a/packages/web/src/content/docs/da/keybinds.mdx b/packages/web/src/content/docs/da/keybinds.mdx deleted file mode 100644 index 7b2f2a7f31..0000000000 --- a/packages/web/src/content/docs/da/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -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,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "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. diff --git a/packages/web/src/content/docs/da/lsp.mdx b/packages/web/src/content/docs/da/lsp.mdx deleted file mode 100644 index 0b6ea0fee8..0000000000 --- a/packages/web/src/content/docs/da/lsp.mdx +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: LSP-servere -description: OpenCode integreres med dine LSP-servere. ---- - -OpenCode kan integreres med Language Server Protocol (LSP)-servere for at bruge diagnostik som feedback til agenten. - ---- - -## 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 er deaktiveret som standard. Når det er aktiveret, starter servere, 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 LSP er aktiveret, og 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. - ---- - -## Bedste praksis - -LSP kan hjælpe agenten med at finde og rette problemer ved at levere diagnostik fra sprogservere. Det er nyttigt i nogle projekter, men er ikke altid en klar fordel. - -Sprogservere kan komme ud af sync, bruge meget hukommelse, variere efter version eller projekt og gøre agentarbejdsgange langsommere. I mange projekter er det bedre, at agenten kører lint, typecheck eller andre diagnostiske CLI-værktøjer direkte, så fejl føres tilbage i agentens loop uden disse afvejninger. Dokumentér disse kommandoer i instruktionsfiler som `AGENTS.md` eller skills, så agenten ved, hvad den skal køre. Aktivér LSP, når dit projekt har gavn af ekstra sprogserverfeedback. - ---- - -## Konfiguration - -Du kan aktivere og tilpasse LSP-servere gennem sektionen `lsp` i din opencode-konfiguration. - -For at aktivere alle indbyggede LSP-servere skal du indstille `lsp` til `true`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -Brug et objekt til at holde indbyggede servere aktiveret, mens du konfigurerer tilsidesættelser eller brugerdefinerede servere. - -```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 - -Hvis `lsp` udelades, er alle LSP-servere deaktiveret. For at deaktivere alle LSP-servere efter at en anden konfiguration har aktiveret dem, 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. diff --git a/packages/web/src/content/docs/da/mcp-servers.mdx b/packages/web/src/content/docs/da/mcp-servers.mdx deleted file mode 100644 index fa356131ba..0000000000 --- a/packages/web/src/content/docs/da/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -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 `. - ---- - -### 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. -``` diff --git a/packages/web/src/content/docs/da/models.mdx b/packages/web/src/content/docs/da/models.mdx deleted file mode 100644 index 7bacdd9f26..0000000000 --- a/packages/web/src/content/docs/da/models.mdx +++ /dev/null @@ -1,223 +0,0 @@ ---- -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. diff --git a/packages/web/src/content/docs/da/network.mdx b/packages/web/src/content/docs/da/network.mdx deleted file mode 100644 index a948689083..0000000000 --- a/packages/web/src/content/docs/da/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -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. diff --git a/packages/web/src/content/docs/da/permissions.mdx b/packages/web/src/content/docs/da/permissions.mdx deleted file mode 100644 index 2594f4d243..0000000000 --- a/packages/web/src/content/docs/da/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -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` — websø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. -::: diff --git a/packages/web/src/content/docs/da/plugins.mdx b/packages/web/src/content/docs/da/plugins.mdx deleted file mode 100644 index 908c6e1111..0000000000 --- a/packages/web/src/content/docs/da/plugins.mdx +++ /dev/null @@ -1,389 +0,0 @@ ---- -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. diff --git a/packages/web/src/content/docs/da/providers.mdx b/packages/web/src/content/docs/da/providers.mdx deleted file mode 100644 index 9b04d6be82..0000000000 --- a/packages/web/src/content/docs/da/providers.mdx +++ /dev/null @@ -1,1981 +0,0 @@ ---- -title: Udbydere -description: Brug en hvilken som helst LLM-udbyder i OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console - -OpenCode bruger [AI SDK](https://ai-sdk.dev/) og [Models.dev](https://models.dev) til at understøtte **75+ LLM-udbydere** og understøtter kørsel af lokale modeller. - -For at tilføje en udbyder skal du: - -1. Tilføje API-nøglerne for udbyderen ved at bruge kommandoen `/connect`. -2. Konfigurere udbyderen i OpenCode-konfigurationen. - ---- - -### Legitimationsoplysninger - -Når du tilføjer en udbyders API-nøgler med `/connect`-kommandoen, gemmes de i `~/.local/share/opencode/auth.json`. - ---- - -### Konfiguration - -Du kan tilpasse udbyderne gennem `provider`-delen i OpenCode-konfigurationen. - ---- - -#### Base URL - -Du kan tilpasse base URL for enhver udbyder ved at angive muligheden `baseURL`. Dette er nyttigt, når du bruger proxy-tjenester eller tilpassede endpoints. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen er en liste over modeller leveret af OpenCode-teamet, som er blevet testet og verificeret til at fungere godt med OpenCode. [Læs mere](/docs/zen). - -:::tip -Hvis du er ny, anbefaler vi at starte med OpenCode Zen. -::: - -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 API-nøglen. - -3. Indsæt API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør `/models` i TUI for at se listen over modeller, vi anbefaler. - - ```txt - /models - ``` - -Det fungerer som alle andre udbydere i OpenCode og er helt valgfrit at bruge. - ---- - -## OpenCode Go - -OpenCode Go er en billig abonnementsplan, der giver pålidelig adgang til populære åbne kodningsmodeller leveret af OpenCode-teamet, som er testet og verificeret til at fungere godt med OpenCode. - -1. Kør kommandoen `/connect` i TUI, vælg `OpenCode Go`, og gå til [opencode.ai/auth](https://opencode.ai/zen). - - ```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 - ``` - -4. Kør `/models` i TUI for at se listen over modeller, vi anbefaler. - - ```txt - /models - ``` - -Det fungerer som alle andre udbydere i OpenCode og er helt valgfrit at bruge. - ---- - -## Katalog - -Lad os se på nogle af udbyderne i detaljer. Hvis du vil tilføje en udbyder til listen, er du velkommen til at åbne en PR. - -:::note -Ser du ikke en udbyder her? Indsend en PR. -::: - ---- - -### 302.AI - -1. Gå til [302.AI-konsollen](https://302.ai/), opret en konto og generer en API-nøgle. - -2. Kør kommandoen `/connect` og søg efter **302.AI**. - - ```txt - /connect - ``` - -3. Indtast 302.AI API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model. - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -Sådan bruger du Amazon Bedrock med OpenCode: - -1. Gå til **modelkataloget** i Amazon Bedrock-konsollen og anmod om adgang til de modeller, du ønsker. - - :::tip - Du skal have adgang til modellen du ønsker i Amazon Bedrock. - ::: - -2. **Konfigurer godkendelse** ved at bruge en af følgende metoder: - - #### Miljøvariabler (hurtigstart) - - Angiv en af disse miljøvariabler, mens du kører opencode: - - ```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - Eller tilføj dem til din bash-profil: - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - #### Konfigurationsfil (anbefalet) - - For projektspecifik eller vedvarende konfiguration, brug `opencode.json`: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **Tilgængelige muligheder:** - - `region` - AWS region (f.eks. `us-east-1`, `eu-west-1`) - - `profile` - AWS navngivet profil fra `~/.aws/credentials` - - `endpoint` - Brugerdefineret endpoint URL for VPC endpoints (alias for generisk `baseURL`-mulighed) - - :::tip - Konfigurationsfil-muligheder har forrang over miljøvariabler. - ::: - - #### Avanceret: VPC Endpoints - - Hvis du bruger VPC endpoints for Bedrock: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } - } - ``` - - :::note - Muligheden `endpoint` er et alias for den generiske mulighed `baseURL`, der bruger AWS-specifik terminologi. Hvis både `endpoint` og `baseURL` er specificeret, har `endpoint` forrang. - ::: - - #### Godkendelsesmetoder - - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: Opret en IAM-bruger og generer adgangsnøgler i AWS-konsollen - - **`AWS_PROFILE`**: Brug navngivne profiler fra `~/.aws/credentials`. Konfigurer først med `aws configure --profile my-profile` eller `aws sso login` - - **`AWS_BEARER_TOKEN_BEDROCK`**: Generer langsigtede API-nøgler fra Amazon Bedrock-konsollen - - **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**: For EKS IRSA (IAM roller for tjenestekonti) eller andre Kubernetes-miljøer med OIDC føderation. Disse miljøvariabler injiceres automatisk af Kubernetes, når du bruger tjenestekontokommentarer. - - #### Godkendelsesprioritet - - Amazon Bedrock bruger følgende godkendelsesprioritet: - 1. **Bearer Token** - `AWS_BEARER_TOKEN_BEDROCK` miljøvariabel eller token fra kommandoen `/connect` - 2. **AWS legitimationskæde** - profil, adgangsnøgler, delte legitimationsoplysninger, IAM roller, webidentitetstokens (EKS IRSA), instansmetadata - - :::note - Når et bearer token er angivet (via `/connect` eller `AWS_BEARER_TOKEN_BEDROCK`), har det forrang over alle AWS godkendelsesmetoder inklusiv konfigurerede profiler. - ::: - -3. Kør kommandoen `/models` for at vælge den model, du ønsker. - - ```txt - /models - ``` - -:::note -For brugerdefinerede inferensprofiler, brug modellen og udbydernavnet i nøglen og sæt egenskaben `id` til arn. Dette sikrer korrekt caching: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - -::: - ---- - -### Anthropic - -1. Når du har registreret dig, kør kommandoen `/connect` og vælg Anthropic. - - ```txt - /connect - ``` - -2. Her kan du vælge muligheden **Claude Pro/Max**, og det vil åbne din browser og bede dig om at godkende. - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. Nu skal alle de Anthropiske modeller være tilgængelige, når du bruger kommandoen `/models`. - - ```txt - /models - ``` - -:::info -At bruge dit Claude Pro/Max-abonnement i OpenCode understøttes ikke officielt af [Anthropic](https://anthropic.com). -::: - -##### Brug API-nøgler - -Du kan også vælge **Create an API Key**, hvis du ikke har et Pro/Max-abonnement. Det åbner også din browser og beder dig logge på Anthropic og giver dig en kode, du kan indsætte i din terminal. - -Eller hvis du allerede har en API-nøgle, kan du vælge **Manually enter API Key** og indsætte den i terminalen. - ---- - -### Atomic Chat - -Du kan konfigurere opencode til at bruge lokale modeller via [Atomic Chat](https://atomic.chat) — en desktopapplikation, der kører lokale LLM'er bag en OpenAI-kompatibel API-server (standard-endpoint `http://127.0.0.1:1337/v1`). - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -I dette eksempel: - -- `atomic-chat` er det brugerdefinerede udbyder-ID. Det kan være en vilkårlig streng. -- `npm` specificerer pakken, der skal bruges for denne udbyder. Her bruges `@ai-sdk/openai-compatible` til enhver OpenAI-kompatibel API. -- `name` er det viste navn på udbyderen i grænsefladen. -- `options.baseURL` er endpoint'et for den lokale server. Ændr vært og port for at matche din Atomic Chat-opsætning. -- `models` er en afbildning af model-ID'er til deres viste navne. Hvert ID skal matche det `id`, der returneres af `GET /v1/models` — kør `curl http://127.0.0.1:1337/v1/models` for at liste ID'erne, der i øjeblikket er indlæst i Atomic Chat. - -:::tip -Hvis værktøjskald ikke fungerer godt, så vælg en indlæst model med god tool calling-understøttelse (for eksempel en Qwen-Coder- eller DeepSeek-Coder-variant). -::: - ---- - -### Azure OpenAI - -:::note -Hvis du støder på "Beklager, men jeg kan ikke hjælpe med den anmodning"-fejl, kan du prøve at ændre indholdsfilteret fra **DefaultV2** til **Default** i Azure-ressourcen. -::: - -1. Gå til [Azure-portalen](https://portal.azure.com/) og opret en **Azure OpenAI**-ressource. Du skal bruge: - - **Ressourcenavn**: Dette bliver en del af API-endpointet (`https://RESOURCE_NAME.openai.azure.com/`) - - **API-nøgle**: Enten `KEY 1` eller `KEY 2` fra din ressource - -2. Gå til [Azure AI Foundry](https://ai.azure.com/) og distribuer en model. - - :::note - Distributionsnavnet skal matche modelnavnet for at opencode skal fungere korrekt. - ::: - -3. Kør kommandoen `/connect` og søg efter **Azure**. - - ```txt - /connect - ``` - -4. Indtast API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Angiv dit ressourcenavn som en miljøvariabel: - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - - Eller tilføj den til din bash-profil: - - ```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX - ``` - -6. Kør kommandoen `/models` for at vælge den distribuerede model. - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. Gå til [Azure-portalen](https://portal.azure.com/) og opret en **Azure OpenAI**-ressource. Du skal bruge: - - **Ressourcenavn**: Dette bliver en del af API-endpointet (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) - - **API-nøgle**: Enten `KEY 1` eller `KEY 2` fra din ressource - -2. Gå til [Azure AI Foundry](https://ai.azure.com/) og distribuer en model. - - :::note - Distributionsnavnet skal matche modelnavnet for at opencode skal fungere korrekt. - ::: - -3. Kør kommandoen `/connect` og søg efter **Azure Cognitive Services**. - - ```txt - /connect - ``` - -4. Indtast API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Angiv dit ressourcenavn som en miljøvariabel: - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - - Eller tilføj den til din bash-profil: - - ```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX - ``` - -6. Kør kommandoen `/models` for at vælge den distribuerede model. - - ```txt - /models - ``` - ---- - -### Baseten - -1. Gå til [Baseten](https://app.baseten.co/), opret en konto og generer en API-nøgle. - -2. Kør kommandoen `/connect` og søg efter **Baseten**. - - ```txt - /connect - ``` - -3. Indtast din Baseten API-nøgle. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model. - - ```txt - /models - ``` - ---- - -### Cerebras - -1. Gå til [Cerebras-konsollen](https://inference.cerebras.ai/), opret en konto og generer en API-nøgle. - -2. Kør kommandoen `/connect` og søg efter **Cerebras**. - - ```txt - /connect - ``` - -3. Indtast Cerebras API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model som _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -Cloudflare AI Gateway lader dig få adgang til modeller fra OpenAI, Anthropic, Workers AI og flere gennem et samlet endpoint. Med [Unified Billing](https://developers.cloudflare.com/ai-gateway/features/unified-billing/) behøver du ikke separate API-nøgler for hver udbyder. - -1. Gå til [Cloudflare-dashboardet](https://dash.cloudflare.com/), naviger til **AI** > **AI Gateway**, og opret en ny gateway. - -2. Angiv konto-ID og gateway-ID som miljøvariabler. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. Kør kommandoen `/connect` og søg efter **Cloudflare AI Gateway**. - - ```txt - /connect - ``` - -4. Indtast din Cloudflare API-token. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - - Eller angiv den som en miljøvariabel. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token - ``` - -5. Kør kommandoen `/models` for at vælge en model. - - ```txt - /models - ``` - - Du kan også tilføje modeller gennem opencode-konfigurationen. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } - } - ``` - ---- - -### Cortecs - -1. Gå til [Cortecs-konsollen](https://cortecs.ai/), opret en konto og generer en API-nøgle. - -2. Kør kommandoen `/connect` og søg efter **Cortecs**. - - ```txt - /connect - ``` - -3. Indtast Cortecs API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model som _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. Gå til [DeepSeek-konsollen](https://platform.deepseek.com/), opret en konto og klik på **Create API Key**. - -2. Kør kommandoen `/connect` og søg efter **DeepSeek**. - - ```txt - /connect - ``` - -3. Indtast DeepSeek API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en DeepSeek-model som _DeepSeek V4 Pro_. - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. Gå til [Deep Infra-dashboardet](https://deepinfra.com/dash), opret en konto og generer en API-nøgle. - -2. Kør kommandoen `/connect` og søg efter **Deep Infra**. - - ```txt - /connect - ``` - -3. Indtast Deep Infra API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model. - - ```txt - /models - ``` - ---- - -### FrogBot - -1. Gå til [FrogBot dashboard](https://app.frogbot.ai/signup), opret en konto og generer en API-nøgle. - -2. Kør kommandoen `/connect` og søg efter **FrogBot**. - - ```txt - /connect - ``` - -3. Indtast frogbot API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model. - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. Gå til [Fireworks AI-konsollen](https://app.fireworks.ai/), opret en konto og klik på **Create API Key**. - -2. Kør kommandoen `/connect` og søg efter **Fireworks AI**. - - ```txt - /connect - ``` - -3. Indtast Fireworks AI API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model som _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo giver AI-drevet agentchat med native værktøjskaldsfunktioner gennem GitLabs anthropiske proxy. - -1. Kør kommandoen `/connect` og vælg GitLab. - - ```txt - /connect - ``` - -2. Vælg din godkendelsesmetode: - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### Brug OAuth (anbefalet) - - Vælg **OAuth** og din browser åbner for autorisation. - - #### Brug personlig adgangstoken - 1. Gå til [GitLab User Settings > Access Tokens](https://gitlab.com/-/user_settings/personal_access_tokens) - 2. Klik på **Add new token** - 3. Navn: `OpenCode`, omfang: `api` - 4. Kopier tokenet (starter med `glpat-`) - 5. Indtast den i terminalen - -3. Kør kommandoen `/models` for at se tilgængelige modeller. - - ```txt - /models - ``` - - Tre Claude-baserede modeller er tilgængelige: - - **duo-chat-haiku-4-5** (standard) - Hurtige svar til hurtige opgaver - - **duo-chat-sonnet-4-5** - Balanceret ydeevne til de fleste arbejdsgange - - **duo-chat-opus-4-5** - Mest egnet til kompleks analyse - -:::note -Du kan også specificere 'GITLAB_TOKEN' miljøvariabel, hvis du ikke vil -gemme tokenet i opencode auth-lagring. -::: - -##### Selvhostet GitLab - -:::note[overholdelsesbemærkning] -OpenCode bruger en lille model til nogle AI-opgaver som at generere sessionstitlen. -Den er konfigureret til at bruge gpt-5-nano som standard, hostet af Zen. For at låse OpenCode -til kun at bruge din egen GitLab-hostede instans, tilføj følgende i din -`opencode.json` fil. Det anbefales også at deaktivere sessionsdeling. - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -For selvhostede GitLab-instanser: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -Hvis din instans kører en brugerdefineret AI-gateway: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -Eller tilføj til din bash-profil: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -Din GitLab-administrator skal aktivere følgende: - -1. [Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) for brugeren, gruppen eller instansen -2. Funktionsflag (via Rails-konsollen): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### OAuth for selvhostede instanser - -For at få Oauth til at fungere for din selvhostede instans, skal du oprette -en ny applikation (Indstillinger → Applikationer) med -callback URL `http://127.0.0.1:8080/callback` og følgende omfang: - -- api (Få adgang til API på dine vegne) -- read_user (Læs din personlige information) -- read_repository (tillader skrivebeskyttet adgang til depotet) - -Udsæt derefter applikations-ID som miljøvariabel: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -Mere dokumentation på [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth) hjemmesiden. - -##### Konfiguration - -Tilpas gennem `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### GitLab API-værktøjer (valgfrit, men stærkt anbefalet) - -For at få adgang til GitLab-værktøjer (merge requests, problemer, pipelines, CI/CD, etc.): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -Denne plugin giver omfattende GitLab-repository-administrationsfunktioner, inklusiv MR-anmeldelser, problemsporing, pipeline-overvågning og mere. - ---- - -### GitHub Copilot - -Sådan bruger du GitHub Copilot-abonnementet med OpenCode: - -:::note -Nogle modeller kan kræve et [Pro+ -abonnement](https://github.com/features/copilot/plans) at bruge. - -Nogle modeller skal aktiveres manuelt i [GitHub Copilot-indstillingerne](https://docs.github.com/en/copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use). -::: - -1. Kør kommandoen `/connect` og søg efter GitHub Copilot. - - ```txt - /connect - ``` - -2. Naviger til [github.com/login/device](https://github.com/login/device) og indtast koden. - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - │ Waiting for authorization... - ``` - -3. Kør nu kommandoen `/models` for at vælge modellen du ønsker. - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -Sådan bruger du Google Vertex AI med OpenCode: - -1. Gå til **Model Garden** i Google Cloud Console og tjek - modeller tilgængelig i din region. - - :::note - Du skal have et Google Cloud-projekt med Vertex AI API aktiveret. - ::: - -2. Angiv de nødvendige miljøvariabler: - - `GOOGLE_CLOUD_PROJECT`: Dit Google Cloud-projekt ID - - `VERTEX_LOCATION` (valgfrit): Regionen for Vertex AI (standard til `global`) - - Godkendelse (vælg en): - - `GOOGLE_APPLICATION_CREDENTIALS`: Sti til tjenestekontoens JSON-nøglefil - - Godkend med gcloud CLI: `gcloud auth application-default login` - - Sæt dem mens du kører opencode. - - ```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode - ``` - - Eller tilføj dem til din bash-profil. - - ```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global - ``` - -:::tip -`global`-regionen forbedrer tilgængeligheden og reducerer fejl uden ekstra omkostninger. Brug regionale endpoints (f.eks. `us-central1`) for krav til dataophold. [Læs mere](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. Kør kommandoen `/models` for at vælge modellen du ønsker. - - ```txt - /models - ``` - ---- - -### Groq - -1. Gå til [Groq-konsollen](https://console.groq.com/), klik på **Create API Key**, og kopier nøglen. - -2. Kør kommandoen `/connect` og søg efter Groq. - - ```txt - /connect - ``` - -3. Indtast API-nøglen for udbyderen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge den du ønsker. - - ```txt - /models - ``` - ---- - -### Hugging Face - -[Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers) giver adgang til åbne modeller som støttes af 17+ udbydere. - -1. Gå til [Hugging Face-indstillinger](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained) for at oprette et token med tilladelse til at kalde inferensudbydere. - -2. Kør kommandoen `/connect` og søg efter **Hugging Face**. - - ```txt - /connect - ``` - -3. Indtast dit Hugging Face-token. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model som _Kimi-K2-Instruct_ eller _GLM-4.6_. - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) er en LLM observerbarhedsplatform som giver logning, overvågning og analyser for dine AI-applikationer. Helicone AI Gateway ruter dine anmodninger til den rigtige udbyder automatisk baseret på modellen. - -1. Gå til [Helicone](https://helicone.ai), opret en konto og generer en API-nøgle fra dashboardet. - -2. Kør kommandoen `/connect` og søg efter **Helicone**. - - ```txt - /connect - ``` - -3. Indtast Helicone API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model. - - ```txt - /models - ``` - -For flere udbydere og avancerede funktioner som caching og hastighedsbegrænsning, tjek [Helicone-dokumentationen](https://docs.helicone.ai). - -#### Valgfrie konfigurationer - -I tilfælde af at du ser en funktion eller model fra Helicone som ikke konfigureres automatisk gennem opencode, kan du altid konfigurere den selv. - -Her er [Helicone's Model Directory](https://helicone.ai/models), du skal bruge denne for at hente ID'erne til de modeller du vil tilføje. - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### Brugerdefinerede headers - -Helicone understøtter tilpassede headers for funktioner som caching, brugersporing og sessionsadministration. Læg dem til din udbyderkonfiguration ved at bruge `options.headers`: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### Sessionssporing - -Helicones [Sessions](https://docs.helicone.ai/features/sessions) funktion lader dig gruppe relaterede LLM anmodninger sammen. Brug [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) plugin for automatisk at logge hver OpenCode-samtale som en session i Helicone. - -```bash -npm install -g opencode-helicone-session -``` - -Tilføj den til din konfiguration. - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -Programmatisk injicerer `Helicone-Session-Id` og `Helicone-Session-Name` headers i dine anmodninger. På Helicones Sessions-side vil du se hver OpenCode-samtale opført som en separat session. - -##### Almindelige Helicone-headers - -| Header | Beskrivelse | -| -------------------------- | ------------------------------------------------------------------------- | -| `Helicone-Cache-Enabled` | Aktiver respons-caching (`true`/`false`) | -| `Helicone-User-Id` | Spor beregninger efter bruger | -| `Helicone-Property-[Name]` | Tilføj egendefinerede egenskaber (f.eks. `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | Knyt anmodninger til prompt-versioner | - -Se [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory) for alle tilgængelige headers. - ---- - -### llama.cpp - -Du kan konfigurere opencode til at bruge lokale modeller gennem [llama.cpps](https://github.com/ggml-org/llama.cpp) llama-server-værktøj - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -I dette eksempel: - -- `llama.cpp` er den tilpassede udbyder ID. Dette kan være hvilken som helst streng du vil. -- `npm` specificerer pakken som skal bruges for denne udbyder. Her bruges `@ai-sdk/openai-compatible` for enhver OpenAI-kompatibel API. -- `name` er visningsnavnet for udbyderen i UI. -- `options.baseURL` er endpointet for den lokale server. -- `models` er et kort over model-ID'er til deres konfigurationer. Modelnavnet vil vises i modelvalglisten. - ---- - -### IO.NET - -IO.NET tilbyder 17 modeller optimeret for forskellige brugstilfælde: - -1. Gå til [IO.NET-konsollen](https://ai.io.net/), opret en konto og generer en API-nøgle. - -2. Kør kommandoen `/connect` og søg efter **IO.NET**. - - ```txt - /connect - ``` - -3. Indtast nøglen IO.NET API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model. - - ```txt - /models - ``` - ---- - -### LM Studio - -Du kan konfigurere opencode til at bruge lokale modeller gennem LM Studio. - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -I dette eksempel: - -- `lmstudio` er den tilpassede udbyder ID. Dette kan være hvilken som helst streng du vil. -- `npm` specificerer pakken som skal bruges for denne udbyder. Her bruges `@ai-sdk/openai-compatible` for enhver OpenAI-kompatibel API. -- `name` er visningsnavnet for udbyderen i UI. -- `options.baseURL` er endpointet for den lokale server. -- `models` er et kort over model-ID'er til deres konfigurationer. Modelnavnet vil vises i modelvalglisten. - ---- - -### Moonshot AI - -Sådan bruger du Kimi K2 fra Moonshot AI: - -1. Gå til [Moonshot AI-konsollen](https://platform.moonshot.ai/console), opret en konto og klik på **Create API Key**. - -2. Kør kommandoen `/connect` og søg efter **Moonshot AI**. - - ```txt - /connect - ``` - -3. Indtast Moonshot API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge _Kimi K2_. - - ```txt - /models - ``` - ---- - -### MiniMax - -1. Gå til [MiniMax API-konsollen](https://platform.minimax.io/login), opret en konto og generer en API-nøgle. - -2. Kør kommandoen `/connect` og søg efter **MiniMax**. - - ```txt - /connect - ``` - -3. Indtast MiniMax API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model som _M2.1_. - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. Gå til [Nebius Token Factory-konsollen](https://tokenfactory.nebius.com/), opret en konto og klik på **Add Key**. - -2. Kør kommandoen `/connect` og søg efter **Nebius Token Factory**. - - ```txt - /connect - ``` - -3. Indtast Nebius Token Factory API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model som _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Ollama - -Du kan konfigurere opencode til at bruge lokale modeller gennem Ollama. - -:::tip -Ollama kan automatisk konfigurere sig selv for OpenCode. Se [Ollama-integrationsdokumenterne](https://docs.ollama.com/integrations/opencode) for detaljer. -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -I dette eksempel: - -- `ollama` er den tilpassede udbyder ID. Dette kan være hvilken som helst streng du vil. -- `npm` specificerer pakken som skal bruges for denne udbyder. Her bruges `@ai-sdk/openai-compatible` for enhver OpenAI-kompatibel API. -- `name` er visningsnavnet for udbyderen i UI. -- `options.baseURL` er endpointet for den lokale server. -- `models` er et kort over model-ID'er til deres konfigurationer. Modelnavnet vil vises i modelvalglisten. - -:::tip -Hvis værktøjskald ikke fungerer, prøv at øge `num_ctx` i Ollama. Start omkring 16k - 32k. -::: - ---- - -### Ollama Cloud - -Sådan bruger du Ollama Cloud med OpenCode: - -1. Gå til [https://ollama.com/](https://ollama.com/) og log på eller opret en konto. - -2. Naviger til **Settings** > **Keys** og klik på **Add API Key** for at generere en ny API-nøgle. - -3. Kopier API-nøglen til brug i OpenCode. - -4. Kør kommandoen `/connect` og søg efter **Ollama Cloud**. - - ```txt - /connect - ``` - -5. Indtast din Ollama Cloud API-nøgle. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **Vigtigt**: Før du bruger skymodeller i OpenCode, skal du hente modelinformationen lokalt: - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. Kør kommandoen `/models` for at vælge din Ollama Cloud-model. - - ```txt - /models - ``` - ---- - -### OpenAI - -Vi anbefaler at du registrerer dig for [ChatGPT Plus eller Pro](https://chatgpt.com/pricing). - -1. Når du har registreret dig, kør kommandoen `/connect` og vælg OpenAI. - - ```txt - /connect - ``` - -2. Her kan du vælge muligheden **ChatGPT Plus/Pro** og det åbner din browser - og beder dig om at godkende. - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. Nu skal alle OpenAI-modellerne være tilgængelige, når du bruger kommandoen `/models`. - - ```txt - /models - ``` - -##### Brug API-nøgler - -Hvis du allerede har en API-nøgle, kan du vælge **Manually enter API Key** og indsætte den i terminalen. - ---- - -### OpenCode Zen - -OpenCode Zen er en liste over testede og verificerede modeller leveret af OpenCode-teamet. [Læs mere](/docs/zen). - -1. Log på **OpenCode Zen** og klik på **Create API Key**. - -2. Kør kommandoen `/connect` og søg efter **OpenCode Zen**. - - ```txt - /connect - ``` - -3. Indtast OpenCode API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model som _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. Gå til [OpenRouter-dashboardet](https://openrouter.ai/settings/keys), klik på **Create API Key**, og kopier nøglen. - -2. Kør kommandoen `/connect` og søg efter OpenRouter. - - ```txt - /connect - ``` - -3. Indtast API-nøglen for udbyderen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Mange OpenRouter-modeller er forudindlæst som standard, kør kommandoen `/models` for at vælge den du ønsker. - - ```txt - /models - ``` - - Du kan også tilføje flere modeller gennem opencode-konfigurationen. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. Du kan også tilpasse dem gennem opencode-konfigurationen. Her er et eksempel på at specificere en udbyder - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI Core giver adgang til 40+ modeller fra OpenAI, Anthropic, Google, Amazon, Meta, Mistral og AI21 gennem en samlet platform. - -1. Gå til din [SAP BTP Cockpit](https://account.hana.ondemand.com/), naviger til din SAP AI kerne-tjenesteinstans, og opret en tjenestenøgle. - - :::tip - Tjenestenøglen er et JSON-objekt som indeholder `clientid`, `clientsecret`, `url` og `serviceurls.AI_API_URL`. Du finder din AI-kerneinstans under **Services** > **Instances and Subscriptions** i BTP cockpittet. - ::: - -2. Kør kommandoen `/connect` og søg efter **SAP AI Core**. - - ```txt - /connect - ``` - -3. Indtast tjenestenøglen JSON. - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - Eller angiv miljøvariablen `AICORE_SERVICE_KEY`: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - Eller tilføj den til din bash-profil: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. Angiv eventuelt deployment-ID og ressourcegruppe: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - Disse indstillinger er valgfrie og bør konfigureres i henhold til SAP AI kerne-opsætningen. - ::: - -5. Kør kommandoen `/models` for at vælge fra 40+ tilgængelige modeller. - - ```txt - /models - ``` - ---- - -### STACKIT - -STACKIT AI Model Serving leverer fuldt administreret suverænt hostingmiljø til AI-modeller, med fokus på LLM'er som Llama, Mistral og Qwen, med maksimal datasuverænitet på europæisk infrastruktur. - -1. Gå til [STACKIT Portal](https://portal.stackit.cloud), naviger til **AI Model Serving**, og opret en auth-token til dit projekt. - - :::tip - Du skal have en STACKIT-kundekonto, brugerkonto og projekt, før du opretter auth-tokens. - ::: - -2. Kør kommandoen `/connect` og søg efter **STACKIT**. - - ```txt - /connect - ``` - -3. Indtast din STACKIT AI Model Serving auth-token. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge fra tilgængelige modeller som _Qwen3-VL 235B_ eller _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. Gå til [OVHcloud-panelet](https://ovh.com/manager). Naviger til `Public Cloud`-delen, `AI & Machine Learning` > `AI Endpoints` og i `API Keys`-fanen klikker du på **Opret en ny API-nøgle**. - -2. Kør kommandoen `/connect` og søg efter **OVHcloud AI Endpoints**. - - ```txt - /connect - ``` - -3. Indtast OVHcloud AI Endpoints API-nøgle. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model som _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Scaleway - -Sådan bruger du [Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/) med OpenCode: - -1. Gå til [Scaleway Console IAM indstillinger](https://console.scaleway.com/iam/api-keys) for at generere en ny API-nøgle. - -2. Kør kommandoen `/connect` og søg efter **Scaleway**. - - ```txt - /connect - ``` - -3. Indtast Scaleway API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model som _devstral-2-123b-instruct-2512_ eller _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Together AI - -1. Gå til [Together AI-konsollen](https://api.together.ai), opret en konto og klik på **Add Key**. - -2. Kør kommandoen `/connect` og søg efter **Together AI**. - - ```txt - /connect - ``` - -3. Indtast Together AI API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model som _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Venice AI - -1. Gå til [Venice AI-konsollen](https://venice.ai), opret en konto og generer en API-nøgle. - -2. Kør kommandoen `/connect` og søg efter **Venice AI**. - - ```txt - /connect - ``` - -3. Indtast Venice AI API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model som _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -Vercel AI Gateway lader dig få adgang til modeller fra OpenAI, Anthropic, Google, xAI og mere gennem et samlet endpoint. Modeller tilbydes til listepris uden påslag. - -1. Gå til [Vercel dashboard](https://vercel.com/), naviger til fanen **AI Gateway**, og klik på **API Keys** for at oprette en ny API-nøgle. - -2. Kør kommandoen `/connect` og søg efter **Vercel AI Gateway**. - - ```txt - /connect - ``` - -3. Indtast Vercel AI Gateway API-nøgle. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model. - - ```txt - /models - ``` - -Du kan også tilpasse modeller gennem opencode-konfigurationen. Her er et eksempel på specificering af udbyder-rutingsrækkefølge. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -Nogle nyttige rutealternativer: - -| Alternativ | Beskrivelse | -| ------------------- | -------------------------------------------------------- | -| `order` | Providersekvens for at prøve | -| `only` | Begræns til specifikke udbydere | -| `zeroDataRetention` | Brug kun udbydere med nul retningslinjer for datalagring | - ---- - -### xAI - -1. Gå til [xAI-konsollen](https://console.x.ai/), opret en konto og generer en API-nøgle. - -2. Kør kommandoen `/connect` og søg efter **xAI**. - - ```txt - /connect - ``` - -3. Indtast xAI API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model som _Grok Beta_. - - ```txt - /models - ``` - ---- - -### Z.AI - -1. Gå til [Z.AI API-konsollen](https://z.ai/manage-apikey/apikey-list), opret en konto og klik på **Create new API Key**. - -2. Kør kommandoen `/connect` og søg efter **Z.AI**. - - ```txt - /connect - ``` - - Hvis du abonnerer på **GLM Coding Plan**, vælg **Z.AI Coding Plan**. - -3. Indtast Z.AI API-nøglen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kør kommandoen `/models` for at vælge en model som _GLM-4.7_. - - ```txt - /models - ``` - ---- - -### ZenMux - -1. Gå til [ZenMux-dashboardet](https://zenmux.ai/settings/keys), klik på **Create API Key**, og kopier nøglen. - -2. Kør kommandoen `/connect` og søg efter ZenMux. - - ```txt - /connect - ``` - -3. Indtast API-nøglen for udbyderen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Mange ZenMux-modeller er forudindlæst som standard, kør kommandoen `/models` for at vælge den du ønsker. - - ```txt - /models - ``` - - Du kan også tilføje flere modeller gennem opencode-konfigurationen. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## Brugerdefineret udbyder - -Sådan tilføjer du en **OpenAI-kompatibel** udbyder som ikke er opført i `/connect`-kommandoen: - -:::tip -Du kan bruge hvilken som helst OpenAI-kompatibel udbyder med opencode. De fleste moderne AI-udbydere tilbyder OpenAI-kompatible API'er. -::: - -1. Kør kommandoen `/connect` og rul ned til **Other**. - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. Indtast et unikt ID for udbyderen. - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - Vælg et mindeværdigt ID, du vil bruge dette i din konfigurationsfil. - ::: - -3. Indtast API-nøglen for udbyderen. - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. Opret eller opdater `opencode.json`-filen i projektkataloget: - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - - Her er konfigurationsmulighederne: - - **npm**: AI SDK pakke at bruge, `@ai-sdk/openai-compatible` for OpenAI-kompatible udbydere - - **name**: Visningsnavn i UI. - - **models**: Tilgængelige modeller. - - **options.baseURL**: API endpoint URL. - - **options.apiKey**: Angiv API-nøglen hvis du ikke bruger auth. - - **options.headers**: Angiv egendefinerede headers. - - Mere om de avancerede muligheder i eksemplet nedenfor. - -5. Kør kommandoen `/models` og din egendefinerede udbyder og modeller vil vises i udvalgslisten. - ---- - -##### Eksempel - -Her er et eksempel på indstilling af mulighederne `apiKey`, `headers` og model `limit`. - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -Konfigurationsdetaljer: - -- **apiKey**: Angiv med `env` variabel syntaks, [læs mere](/docs/config#env-vars). -- **headers**: Egendefinerede headers sendt med hver anmodning. -- **limit.context**: Maksimalt input-tokens som modellen accepterer. -- **limit.output**: Maksimalt antal tokens modellen kan generere. - -`limit`-felterne lader OpenCode forstå hvor meget kontekst du har tilbage. Standardudbydere henter disse automatisk fra models.dev. - ---- - -## Fejlfinding - -Hvis du har problemer med at konfigurere en udbyder, tjek følgende: - -1. **Tjek godkendelsesopsætningen**: Kør `opencode auth list` for at se om legitimationsoplysningerne - for udbyderen er tilføjet til din konfiguration. - - Dette gælder ikke udbydere som Amazon Bedrock, som er afhængige af miljøvariabler for godkendelse. - -2. For tilpassede udbydere, tjek opencode-konfigurationen og: - - Sørg for at udbyderens ID som bruges i `/connect`-kommandoen matcher ID i opencode-konfigurationen. - - Den rigtige npm-pakke bruges for udbyderen. Brug for eksempel `@ai-sdk/cerebras` for Cerebras. Og for alle andre OpenAI-kompatible udbydere, brug `@ai-sdk/openai-compatible`. - - Kontroller at korrekt API-endpoint er brugt i `options.baseURL`-feltet. diff --git a/packages/web/src/content/docs/da/rules.mdx b/packages/web/src/content/docs/da/rules.mdx deleted file mode 100644 index 8c7ccac9e8..0000000000 --- a/packages/web/src/content/docs/da/rules.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -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. -::: diff --git a/packages/web/src/content/docs/da/sdk.mdx b/packages/web/src/content/docs/da/sdk.mdx deleted file mode 100644 index cde874d5a2..0000000000 --- a/packages/web/src/content/docs/da/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: SDK -description: Typesikker JS-klient for åpen kodeserver. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -Åpenkoden JS/TS SDK gir en typesikker klient for samhandling med serveren. -Brug den til at bygge integrasjoner og kontrollere opencode programmatisk. - -[Finn ut mer](/docs/server) om hvordan serveren fungerer. For eksempler, tjek ut [prosjektene](/docs/ecosystem#projects) bygget av fellesskapet. - ---- - -## Installation - -Installer SDK fra npm: - -```bash -npm install @opencode-ai/sdk -``` - ---- - -## Opret klient - -Opret en forekomst av opencode: - -```javascript -import { createOpencode } from "@opencode-ai/sdk" - -const { client } = await createOpencode() -``` - -Dette starter både en server og en klient - -#### Indstillinger - -| Alternativ | Skriv | Beskrivelse | Standard | -| ---------- | ------------- | -------------------------------- | ----------- | -| `hostname` | `string` | Server vertsnavn | `127.0.0.1` | -| `port` | `number` | Serverport | `4096` | -| `signal` | `AbortSignal` | Avbryt signal for kansellering | `undefined` | -| `timeout` | `number` | Tidsavbrudd i ms for serverstart | `5000` | -| `config` | `Config` | Konfigurasjonsobjekt | `{}` | - ---- - -## Konfig - -Du kan sende et konfigurasjonsobjekt for at tilpasse virkemåten. Forekomsten henter fortsatt din `opencode.json`, men du kan overstyre eller tilføje til konfigurasjon 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() -``` - -## Kun klient - -Hvis du allerede har en kjørende forekomst av opencode, kan du oprete en klientforekomst for at koble til den: - -```javascript -import { createOpencodeClient } from "@opencode-ai/sdk" - -const client = createOpencodeClient({ - baseUrl: "http://localhost:4096", -}) -``` - -#### Indstillinger - -| Alternativ | Skriv inn | Beskrivelse | Standard | -| --------------- | ---------- | ---------------------------------- | ----------------------- | -| `baseUrl` | `string` | URL av serveren | `http://localhost:4096` | -| `fetch` | `function` | Egendefinert hentingimplementering | `globalThis.fetch` | -| `parseAs` | `string` | Svarparsingmetode | `auto` | -| `responseStyle` | `string` | Returstil: `data` eller `fields` | `fields` | -| `throwOnError` | `boolean` | Kast feil i stedet for retur | `false` | - ---- - -## Typer - -SDK inkluderer TypeScript-definisjoner for alle API-typer. Importer dem direkte: - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -Alle typer er generert fra serverens OpenAPI-spesifikasjon og tilgængelig i types-filen. - ---- - -## Fejl - -SDK kan gi feil som du kan fange opp og håndtere: - -```typescript -try { - await client.session.get({ path: { id: "invalid-id" } }) -} catch (error) { - console.error("Failed to get session:", (error as Error).message) -} -``` - ---- - -## Struktureret output - -Du kan anmode om struktureret JSON-output fra modellen ved at angive et `format` med et JSON-skema. Modellen vil bruge et `StructuredOutput`-værktøj til at returnere valideret JSON, der matcher dit skema. - -### Grundlæggende brug - -```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"] } -``` - -### Outputformat-typer - -| Type | Beskrivelse | -| ------------- | -------------------------------------------------------- | -| `text` | Standard. Standard tekstsvar (intet struktureret output) | -| `json_schema` | Returnerer valideret JSON, der matcher det angivne skema | - -### JSON-skemaformat - -Når du bruger `type: 'json_schema'`, skal du angive: - -| Felt | Type | Beskrivelse | -| ------------ | --------------- | ---------------------------------------------------------- | -| `type` | `'json_schema'` | Påkrævet. Angiver JSON-skematilstand | -| `schema` | `object` | Påkrævet. JSON-skemaobjekt, der definerer outputstrukturen | -| `retryCount` | `number` | Valgfri. Antal valideringsforsøg (standard: 2) | - -### Fejlhåndtering - -Hvis modellen ikke formår at producere gyldigt struktureret output efter alle forsøg, vil svaret inkludere en `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) -} -``` - -### Bedste praksis - -1. **Giv klare beskrivelser** i dine skemaegenskaber for at hjælpe modellen med at forstå, hvilke data der skal udtrækkes -2. **Brug `required`** til at angive, hvilke felter der skal være til stede -3. **Hold skemaer fokuserede** - komplekse indlejrede skemaer kan være sværere for modellen at udfylde korrekt -4. **Indstil passende `retryCount`** - øg for komplekse skemaer, sænk for enkle - ---- - -## API'er - -SDK avslører alle server-APIer gjennom en typesikker klient. - ---- - -### Globalt - -| Metode | Beskrivelse | Svar | -| ----------------- | --------------------------- | ------------------------------------ | -| `global.health()` | Tjek serverhelse og versjon | `{ healthy: true, version: string }` | - ---- - -#### Eksempler - -```javascript -const health = await client.global.health() -console.log(health.data.version) -``` - ---- - -### App - -| Metode | Beskrivelse | Svar | -| -------------- | ------------------------------- | ------------------------------------------- | -| `app.log()` | Skriv en loggoppføring | `boolean` | -| `app.agents()` | Liste alle tilgængelige agenter | Agent[] | - ---- - -#### Eksempler - -```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() -``` - ---- - -### Projekt - -| Metode | Beskrivelse | Svar | -| ------------------- | -------------------------- | ---------------------------------------------- | -| `project.list()` | Liste over alle prosjekter | Prosjekt[] | -| `project.current()` | Få nåværende prosjekt | Prosjekt | - ---- - -#### Eksempler - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### Sti - -| Metode | Beskrivelse | Svar | -| ------------ | ----------------- | ---------------------------------------- | -| `path.get()` | Få nuværende bane | Path | - ---- - -#### Eksempler - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### Konfiguration - -| Metode | Beskrivelse | Svar | -| -------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | Få konfigurasjonsinformasjon | Config | -| `config.providers()` | Liste leverandører og standardmodeller | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### Eksempler - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### Sessioner - -| Metode | Beskrivelse | Noter | -| ---------------------------------------------------------- | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `session.list()` | Liste sessioner | Returnerer Session[] | -| `session.get({ path })` | Få session | Returnerer Session | -| `session.children({ path })` | Liste over barnesessioner | Returnerer Session[] | -| `session.create({ body })` | Opret session | Returnerer Session | -| `session.delete({ path })` | Slett session | Returnerer `boolean` | -| `session.update({ path, body })` | Opdater sessionegenskaper | Returnerer Session | -| `session.init({ path, body })` | Analyser appen og lag `AGENTS.md` | Returnerer `boolean` | -| `session.abort({ path })` | Avbryt en løpesession | Returnerer `boolean` | -| `session.share({ path })` | Del sessionen | Returnerer Session | -| `session.unshare({ path })` | Slutt at dele sessionen | Returnerer Session | -| `session.summarize({ path, body })` | Oppsummer sessionen | Returnerer `boolean` | -| `session.messages({ path })` | Liste meldinger i en session | Returnerer `{ info: `Message`, parts: `Part[]`}[]` | -| `session.message({ path })` | Få meldingsdetaljer | Returnerer `{ info: `Message`, parts: `Part[]`}` | -| `session.prompt({ path, body })` | Send melding | `body.noReply: true` returnerer UserMessage (kun kontekst). Standard returnerer AssistantMessage med AI svar. Understøtter `body.outputFormat` for [struktureret output](#struktureret-output) | -| `session.command({ path, body })` | Send kommando til session | Returnerer `{ info: `AssistantMessage`, parts: `Part[]`}` | -| `session.shell({ path, body })` | Kjør en shell-kommando | Returnerer AssistantMessage | -| `session.revert({ path, body })` | Tilbakestill en melding | Returnerer Session | -| `session.unrevert({ path })` | Gjenopret nulstillete meldinger | Returnerer Session | -| `postSessionByIdPermissionsByPermissionId({ path, body })` | Svar på en tillatelsesforespørsel | Returnerer `boolean` | - ---- - -#### Eksempler - -```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." }], - }, -}) -``` - ---- - -### Filer - -| Metode | Beskrivelse | Svar | -| ------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------ | -| `find.text({ query })` | Søk etter tekst i filer | En rekke matchobjekter med `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `find.files({ query })` | Finn filer og kataloger etter navn | `string[]` (baner) | -| `find.symbols({ query })` | Finn arbeidsområdesymboler | Symbol[] | -| `file.read({ query })` | Les en fil | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | Få status for sporede filer | Fil[] | - -`find.files` støtter nogle få valgfrie søkefelt: - -- `type`: `"file"` eller `"directory"` -- `directory`: overstyr prosjektroten for søket -- `limit`: maksimalt antall resultater (1–200) - ---- - -#### Eksempler - -```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 - -| Metode | Beskrivelse | Svar | -| ------------------------------ | ---------------------------- | --------- | -| `tui.appendPrompt({ body })` | Legg til tekst i ledeteksten | `boolean` | -| `tui.openHelp()` | Åpne hjelpedialogen | `boolean` | -| `tui.openSessions()` | Åpne sessionvelgeren | `boolean` | -| `tui.openThemes()` | Åpne temavelgeren | `boolean` | -| `tui.openModels()` | Åpne modellvelgeren | `boolean` | -| `tui.submitPrompt()` | Send inn nuværende ledetekst | `boolean` | -| `tui.clearPrompt()` | Fjern ledeteksten | `boolean` | -| `tui.executeCommand({ body })` | Utfør en kommando | `boolean` | -| `tui.showToast({ body })` | Vis toastvarsel | `boolean` | - ---- - -#### Eksempler - -```javascript -// Control TUI interface -await client.tui.appendPrompt({ - body: { text: "Add this to prompt" }, -}) - -await client.tui.showToast({ - body: { message: "Task completed", variant: "success" }, -}) -``` - ---- - -### Godkendelse - -| Metode | Beskrivelse | Svar | -| ------------------- | ------------------------------- | --------- | -| `auth.set({ ... })` | Angi autentiseringslegitimasjon | `boolean` | - ---- - -#### Eksempler - -```javascript -await client.auth.set({ - path: { id: "anthropic" }, - body: { type: "api", key: "your-api-key" }, -}) -``` - ---- - -### Hændelser - -| Metode | Beskrivelse | Svar | -| ------------------- | ------------------------------ | ------------------------------ | -| `event.subscribe()` | Server-sendte hendelser stream | Server-sendte hendelser stream | - ---- - -#### Eksempler - -```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) -} -``` diff --git a/packages/web/src/content/docs/da/server.mdx b/packages/web/src/content/docs/da/server.mdx deleted file mode 100644 index 6eb74d946d..0000000000 --- a/packages/web/src/content/docs/da/server.mdx +++ /dev/null @@ -1,287 +0,0 @@ ---- -title: Server -description: Interager med opencode-serveren over HTTP. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -Kommandoen `opencode serve` kører en hovedløs HTTP-server, som afslører et OpenAPI-endpoint, som en opencode-klient kan bruge. - ---- - -### Brug - -```bash -opencode serve [--port ] [--hostname ] [--cors ] -``` - -#### Indstillinger - -| Flag | Beskrivelse | Standard | -| --------------- | -------------------------------------------- | ---------------- | -| `--port` | Port at lytte på | `4096` | -| `--hostname` | Værtsnavn at lytte på | `127.0.0.1` | -| `--mdns` | Aktiver mDNS-opdagelse | `false` | -| `--mdns-domain` | Brugerdefineret domænenavn for mDNS-tjeneste | `opencode.local` | -| `--cors` | Yderligere browseroprindelse for at tillade | `[]` | - -`--cors` kan angives flere gange: - -```bash -opencode serve --cors http://localhost:5173 --cors https://app.example.com -``` - ---- - -### Godkendelse - -Indstil `OPENCODE_SERVER_PASSWORD` for at beskytte serveren med HTTP grundlæggende godkendelse. Brugernavnet er som standard `opencode`, eller indstil `OPENCODE_SERVER_USERNAME` for at tilsidesætte det. Dette gælder både `opencode serve` og `opencode web`. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve -``` - ---- - -### Sådan fungerer det - -Når du kører `opencode` starter den en TUI og en server. Hvor TUI er -klient som taler med serveren. Serveren viser en OpenAPI 3.1-specifikation -endpoint. Dette endpoint bruges også til at generere en [SDK](/docs/sdk). - -:::tip -Brug opencode-serveren til at interagere med opencode programmatisk. -::: - -Denne arkitektur lader opencode understøtte flere klienter og lader dig interagere med opencode programmatisk. - -Du kan køre `opencode serve` for at starte en selvstændig server. Hvis du har -opencode TUI kørende, vil `opencode serve` starte en ny server. - ---- - -#### Opret forbindelse til en eksisterende server - -Når du starter TUI, tildeler den tilfældigt en port og et værtsnavn. Du kan i stedet sende `--hostname` og `--port` [flagene](/docs/cli). Brug derefter disse til at forbinde til serveren. - -[`/tui`](#tui) endpointet kan bruges til at køre TUI gennem serveren. Du kan for eksempel forududfylde eller køre en forespørgsel. Denne opsætning bruges af OpenCode [IDE](/docs/ide) plugins. - ---- - -## Specifikation - -Serveren publicerer en OpenAPI 3.1-specifikation som kan vises på: - -``` -http://:/doc -``` - -For eksempel `http://localhost:4096/doc`. Brug specifikationen til at generere klienter eller inspicere forespørgsels- og svartyper. Eller se den i en Swagger-utforsker. - ---- - -## API'er - -OpenCode-serveren viser følgende API'er. - ---- - -### Globalt - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ---------------- | -------------------------------- | ------------------------------------ | -| `GET` | `/global/health` | Få serverhelbred og version | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | Få globale hændelser (SSE strøm) | Eventstrøm | - ---- - -### Projekt - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------------------ | ------------------------- | --------------------------------------------- | -| `GET` | `/project` | Liste over alle projekter | Project[] | -| `GET` | `/project/current` | Få det nuværende projekt | Project | - ---- - -### Sti og VCS - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------- | --------------------------------- | ------------------------------------------- | -| `GET` | `/path` | Få nuværende sti | Path | -| `GET` | `/vcs` | Få VCS info for nuværende projekt | VcsInfo | - ---- - -### Instans - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------------------- | ------------------------ | --------- | -| `POST` | `/instance/dispose` | Kassér nuværende instans | `boolean` | - ---- - -### Konfiguration - -| Metode | Sti | Beskrivelse | Svar | -| ------- | ------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | Få konfigurationsinformation | Config | -| `PATCH` | `/config` | Opdater konfiguration | Config | -| `GET` | `/config/providers` | Liste udbydere og standardmodeller | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -### Udbyder - -| Metode | Sti | Beskrivelse | Svar | -| ------ | -------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | Liste alle udbydere | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | Få udbydergodkendelsesmetoder | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | Autoriser en udbyder ved at bruge OAuth | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | Håndter OAuth-callback for en udbyder | `boolean` | - ---- - -### Sessioner - -| Metode | Sti | Beskrivelse | Noter | -| -------- | ---------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------- | -| `GET` | `/session` | Liste alle sessioner | Returnerer Session[] | -| `POST` | `/session` | Opret en ny session | body: `{ parentID?, title? }`, returnerer Session | -| `GET` | `/session/status` | Få sessionstatus for alle sessioner | Returnerer `{ [sessionID: string]: `SessionStatus` }` | -| `GET` | `/session/:id` | Få sessiondetaljer | Returnerer Session | -| `DELETE` | `/session/:id` | Slet en session og alle dens data | Returnerer `boolean` | -| `PATCH` | `/session/:id` | Opdater sessionegenskaber | body: `{ title? }`, returnerer Session | -| `GET` | `/session/:id/children` | Få en sessions undersessioner | Returnerer Session[] | -| `GET` | `/session/:id/todo` | Få to-do-listen for en session | Returnerer Todo[] | -| `POST` | `/session/:id/init` | Analyser appen og lav `AGENTS.md` | body: `{ messageID, providerID, modelID }`, returnerer `boolean` | -| `POST` | `/session/:id/fork` | Fork en eksisterende session ved en besked | body: `{ messageID? }`, returnerer Session | -| `POST` | `/session/:id/abort` | Afbryd en kørende session | Returnerer `boolean` | -| `POST` | `/session/:id/share` | Del en session | Returnerer Session | -| `DELETE` | `/session/:id/share` | Stop med at dele en session | Returnerer Session | -| `GET` | `/session/:id/diff` | Få diff for denne session | query: `messageID?`, returnerer FileDiff[] | -| `POST` | `/session/:id/summarize` | Opsummér sessionen | body: `{ providerID, modelID }`, returnerer `boolean` | -| `POST` | `/session/:id/revert` | Tilbagestil en besked | body: `{ messageID, partID? }`, returnerer `boolean` | -| `POST` | `/session/:id/unrevert` | Gendan alle nulstillede beskeder | Returnerer `boolean` | -| `POST` | `/session/:id/permissions/:permissionID` | Svar på en tilladelsesforespørgsel | body: `{ response, remember? }`, returnerer `boolean` | - ---- - -### Beskeder - -| Metode | Sti | Beskrivelse | Noter | -| ------ | --------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `GET` | `/session/:id/message` | Liste beskeder i en session | query: `limit?`, returnerer `{ info: `Message`, parts: `Part[]`}[]` | -| `POST` | `/session/:id/message` | Send en besked og vent på svar | body: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, returnerer `{ info: `Message`, parts: `Part[]`}` | -| `GET` | `/session/:id/message/:messageID` | Få beskeddetaljer | Returnerer `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/prompt_async` | Send en besked asynkront (ingen vent) | body: samme som `/session/:id/message`, returnerer `204 No Content` | -| `POST` | `/session/:id/command` | Udfør en skråstregskommando | body: `{ messageID?, agent?, model?, command, arguments }`, returnerer `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/shell` | Kør en shell-kommando | body: `{ agent, model?, command }`, returnerer `{ info: `Message`, parts: `Part[]`}` | - ---- - -### Kommandoer - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ---------- | --------------------- | --------------------------------------------- | -| `GET` | `/command` | Liste alle kommandoer | Command[] | - ---- - -### Filer - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------------------------ | ------------------------------- | ------------------------------------------------------------------------------------------ | -| `GET` | `/find?pattern=` | Søg efter tekst i filer | En række matchobjekter med `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `GET` | `/find/file?query=` | Find filer og mapper efter navn | `string[]` (stier) | -| `GET` | `/find/symbol?query=` | Find arbejdsområdesymboler | Symbol[] | -| `GET` | `/file?path=` | Liste filer og mapper | FileNode[] | -| `GET` | `/file/content?path=

` | Læs en fil | FileContent | -| `GET` | `/file/status` | Få status for sporede filer | File[] | - -#### /find/file forespørgselsparametre - -- `query` (obligatorisk) - søgestreng (fuzzy match) -- `type` (valgfrit) - begræns resultaterne til `"file"` eller `"directory"` -- `directory` (valgfrit) — overstyr projektroden for søget -- `limit` (valgfrit) - maks. resultater (1–200) -- `dirs` (valgfrit) - ældre flag (`"false"` returnerer kun filer) - ---- - -### Værktøjer (eksperimentelt) - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------------------------------------------- | --------------------------------------------- | -------------------------------------------- | -| `GET` | `/experimental/tool/ids` | Vis alle værktøjs-ID'er | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | Liste værktøjer med JSON-skemaer for en model | ToolList | - ---- - -### LSP, formattere og MCP - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------------ | -------------------------- | -------------------------------------------------------- | -| `GET` | `/lsp` | Få LSP serverstatus | LSPStatus[] | -| `GET` | `/formatter` | Få formateringsstatus | FormatterStatus[] | -| `GET` | `/mcp` | Få MCP serverstatus | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | Tilføj MCP server dynamisk | body: `{ name, config }`, returnerer MCP statusobjekt | - ---- - -### Agenter - -| Metode | Sti | Beskrivelse | Svar | -| ------ | -------- | ------------------------------- | ------------------------------------------- | -| `GET` | `/agent` | Liste alle tilgængelige agenter | Agent[] | - ---- - -### Logning - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------ | ---------------------------------------------------------- | --------- | -| `POST` | `/log` | Skriv logpost. Body: `{ service, level, message, extra? }` | `boolean` | - ---- - -### TUI - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ----------------------- | ------------------------------------------- | -------------------------- | -| `POST` | `/tui/append-prompt` | Tilføj tekst til prompten | `boolean` | -| `POST` | `/tui/open-help` | Åbn hjælp-dialogen | `boolean` | -| `POST` | `/tui/open-sessions` | Åbn sessionsvælgeren | `boolean` | -| `POST` | `/tui/open-themes` | Åbn temavælgeren | `boolean` | -| `POST` | `/tui/open-models` | Åbn modelvælgeren | `boolean` | -| `POST` | `/tui/submit-prompt` | Indsend nuværende prompt | `boolean` | -| `POST` | `/tui/clear-prompt` | Ryd prompten | `boolean` | -| `POST` | `/tui/execute-command` | Udfør en kommando (`{ command }`) | `boolean` | -| `POST` | `/tui/show-toast` | Vis toast (`{ title?, message, variant }`) | `boolean` | -| `GET` | `/tui/control/next` | Vent på næste kontrolforespørgsel | Kontrolforespørgselsobjekt | -| `POST` | `/tui/control/response` | Svar på en kontrolforespørgsel (`{ body }`) | `boolean` | - ---- - -### Godkendelse - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ----------- | ------------------------------------------------------------ | --------- | -| `PUT` | `/auth/:id` | Angiv godkendelsesoplysninger. Body skal matche udbyderskema | `boolean` | - ---- - -### Hændelser - -| Metode | Sti | Beskrivelse | Svar | -| ------ | -------- | ----------------------------------------------------------------------------------------- | --------------------------- | -| `GET` | `/event` | Server-sendt hændelsesstrøm. Første hændelse er `server.connected`, derefter bushændelser | Server-sendt hændelsesstrøm | - ---- - -### Dokumentation - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------ | ------------------------- | ----------------------------------- | -| `GET` | `/doc` | OpenAPI 3.1-specifikation | HTML side med OpenAPI-specifikation | diff --git a/packages/web/src/content/docs/da/share.mdx b/packages/web/src/content/docs/da/share.mdx deleted file mode 100644 index 80b9f0959e..0000000000 --- a/packages/web/src/content/docs/da/share.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Deling -description: Del dine OpenCode-samtaler. ---- - -OpenCodes delingsfunksjon lar deg lage offentlige lenker til dine OpenCode-samtaler, slik at du kan samarbeide med lagkamerater eller få hjelp fra andre. - -:::note -Delte samtaler er offentlig tilgængelige for alle med linken. -::: - ---- - -## Sådan fungerer det - -Når du deler en samtale, OpenCode: - -1. Opreter en unik offentlig URL for sessionen din -2. Synkroniserer samtaleloggen din til serverne våre -3. Gør samtalen tilgængelig via den delbare lenken — `opncd.ai/s/` - ---- - -## Tilstande - -OpenCode støtter tre delingsmoduser som kontrollerer hvordan samtaler deles: - ---- - -### Manuel (standard) - -Som standard bruger OpenCode manuell delingsmodus. Sessioner deles ikke automatisk, men du kan dele dem manuelt ved at bruge kommandoen `/share`: - -``` -/share -``` - -Dette vil generere en unik URL som vil bli kopiert til utklippstavlen din. - -For at eksplisitt angi manuell modus i [konfigurasjonsfilen](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - ---- - -### Automatisk deling - -Du kan aktivere automatisk deling for alle nye samtaler ved at sette alternativet `share` til `"auto"` i [konfigurasjonsfilen](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "auto" -} -``` - -Med automatisk deling aktivert, vil hver nye samtale automatisk bli delt og en kobling vil bli generert. - ---- - -### Deaktiveret - -Du kan deaktivere deling helt ved at sette alternativet `share` til `"disabled"` i [konfigurasjonsfilen](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -For at håndheve dette på tvers av teamet ditt for et gitt prosjekt, tilføj det til `opencode.json` i prosjektet ditt og tjek inn i Git. - ---- - -## Ophæv deling - -Slik slutter du at dele en samtale og fjerner den fra offentlig tilgang: - -``` -/unshare -``` - -Dette vil fjerne delelinken og slette dataene knyttet til samtalen. - ---- - -## Privatliv - -Det er et par ting du må huske på når du deler en samtale. - ---- - -### Datalagring - -Delte samtaler forblir tilgængelige til du eksplisitt opphever deling av dem. Dette -inkluderer: - -- Full samtalehistorikk -- Alle meldinger og svar -- Metadata for sessioner - ---- - -### Anbefalinger - -- Del kun samtaler som ikke inneholder sensitiv informasjon. -- Se gjennom samtaleinnholdet før du deler. -- Opphev deling av samtaler når samarbeidet er fullført. -- Unngå at dele samtaler med proprietær kode eller konfidensielle data. -- For sensitive prosjekter, deaktiver deling helt. - ---- - -## For virksomheder - -For bedriftsimplementeringer kan delingsfunksjonen være: - -- **Deaktivert** helt for overholdelse av sikkerhet -- **Begrenset** til brugere som kun er autentisert gjennom SSO -- **Selvvert** på din egen infrastruktur - -[Finn ut mer](/docs/enterprise) om brug av opencode i organisasjonen din. diff --git a/packages/web/src/content/docs/da/skills.mdx b/packages/web/src/content/docs/da/skills.mdx deleted file mode 100644 index 83badb3bf9..0000000000 --- a/packages/web/src/content/docs/da/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: "Agentfærdigheder" -description: "Definer gjenbrugbar atferd via SKILL.md-definisjoner" ---- - -Agentferdigheter lar OpenCode oppdage gjenbrugbare instruksjoner fra repo- eller hjemmekatalogen din. -Ferdigheter lastes inn på forespørsel via det opprinnelige `skill`-verktøyet – agenter ser tilgængelige ferdigheter og kan laste inn hele innholdet når det er nødvendig. - ---- - -## Placer filer - -Opret én mappe per ferdighetsnavn og tilføj inn en `SKILL.md` i den. -OpenCode søker etter disse stedene: - -- Prosjektkonfigurasjon: `.opencode/skills//SKILL.md` -- Global konfigurasjon: `~/.config/opencode/skills//SKILL.md` -- Prosjekt Claude-kompatibel: `.claude/skills//SKILL.md` -- Global Claude-kompatibel: `~/.claude/skills//SKILL.md` -- Prosjektagent-kompatibel: `.agents/skills//SKILL.md` -- Global agent-kompatibel: `~/.agents/skills//SKILL.md` - ---- - -## Forstå opdagelsen - -For prosjektlokale stier går OpenCode opp fra din nåværende arbejdskatalog til den når git-arbeidstreet. -Den laster alle matchende `skills/*/SKILL.md` i `.opencode/` og alle matchende `.claude/skills/*/SKILL.md` eller `.agents/skills/*/SKILL.md` underveis. - -Globale definisjoner lastes også inn fra `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` og `~/.agents/skills/*/SKILL.md`. - ---- - -## Skriv frontmatter - -Hver `SKILL.md` må starte med YAML frontmatter. -Bare disse feltene gjenkjennes: - -- `name` (påkrevd) -- `description` (påkrevd) -- `license` (valgfritt) -- `compatibility` (valgfritt) -- `metadata` (valgfritt, streng-til-streng kart) - -Ukjente frontmatter-felter ignoreres. - ---- - -## Bekræft navn - -`name` må: - -- Bestå av 1–64 tegn -- Vær alfanumerisk med små bokstaver med skilletegn med enkelt bindestrek -- Ikke begynne eller slutte med `-` -- Ikke inneholde påfølgende `--` -- Match katalognavnet som inneholder `SKILL.md` - -Ekvivalent regulært uttrykk: - -```text -^[a-z0-9]+(-[a-z0-9]+)*$ -``` - ---- - -## Følg længdereglerne - -`description` må bestå av 1-1024 tegn. -Hold det spesifikt nok til at agenten kan velge riktig. - ---- - -## Brug et eksempel - -Lag `.opencode/skills/git-release/SKILL.md` slik: - -```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. -``` - ---- - -## Genkend værktøjsbeskrivelsen - -OpenCode viser tilgængelige ferdigheter i `skill` verktøybeskrivelsen. -Hver oppføring inneholder ferdighetsnavnet og beskrivelsen: - -```xml - - - git-release - Create consistent releases and changelogs - - -``` - -Agenten laster inn en ferdighet ved at kalle verktøyet: - -``` -skill({ name: "git-release" }) -``` - ---- - -## Konfigurer tilladelser - -Kontroller hvilke ferdigheter agenter har tilgang til ved at bruge mønsterbaserte tillatelser i `opencode.json`: - -```json -{ - "permission": { - "skill": { - "*": "allow", - "pr-review": "allow", - "internal-*": "deny", - "experimental-*": "ask" - } - } -} -``` - -| Tillatelse | Atferd | -| ---------- | ------------------------------------------ | -| `allow` | Ferdigheter lastes umiddelbart | -| `deny` | Ferdighet skjult for agent, tilgang avvist | -| `ask` | Bruger bedt om godkjenning før lasting | - -Mønstre støtter jokertegn: `internal-*` samsvarer med `internal-docs`, `internal-tools` osv. - ---- - -## Tilsidesættelse pr. agent - -Gi spesifikke agenter andre tillatelser enn de globale standardinnstillingene. - -**For egendefinerte agenter** (i agent frontmatter): - -```yaml ---- -permission: - skill: - "documents-*": "allow" ---- -``` - -**For innebygde agenter** (i `opencode.json`): - -```json -{ - "agent": { - "plan": { - "permission": { - "skill": { - "internal-*": "allow" - } - } - } - } -} -``` - ---- - -## Deaktiver færdighedsværktøjet - -Deaktiver ferdigheter fullstendig for agenter som ikke bør bruge dem: - -**For egendefinerte agenter**: - -```yaml ---- -tools: - skill: false ---- -``` - -**For innebygde agenter**: - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -Når den er deaktivert, blir ``-delen utelatt helt. - ---- - -## Fejlfind indlæsning - -Hvis en ferdighet ikke vises: - -1. Kontroller at `SKILL.md` er stavet med store bokstaver -2. Tjek at frontmatter inkluderer `name` og `description` -3. Sørg for at ferdighetsnavnene er unike på alle steder -4. Tjek tillatelser – ferdigheter med `deny` er skjult for agenter diff --git a/packages/web/src/content/docs/da/themes.mdx b/packages/web/src/content/docs/da/themes.mdx deleted file mode 100644 index d250e7f02f..0000000000 --- a/packages/web/src/content/docs/da/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -title: Temaer -description: Velg et innebygd tema eller definer ditt eget. ---- - -Med OpenCode kan du velge fra ett av flere innebygde temaer, bruge et tema som tilpasser seg terminaltemaet ditt, eller definere ditt eget tilpassede tema. - -Som standard bruger OpenCode vårt eget `opencode`-tema. - ---- - -## Terminalkrav - -For at temaer skal vises riktig med fullfarvepalett, må terminalen din støtte **truecolor** (24-biters farver). De fleste moderne terminaler støtter dette som standard, men du må kanskje aktivere det: - -- **Tjek støtte**: Kjør `echo $COLORTERM` - den skal gi ut `truecolor` eller `24bit` -- **Aktiver truecolor**: Sett miljøvariabelen `COLORTERM=truecolor` i shellprofilen din -- **Terminalkompatibilitet**: Sørg for at terminalemulatoren din støtter 24-bits farver (de fleste moderne terminaler som iTerm2, Alacritty, Kitty, Windows Terminal og nyere versioner av GNOME Terminal gør det) - -Uden truecolor-støtte kan temaer vises med redusert farvenøjagtighed eller falde tilbage til nærmeste 256-farvers tilnærming. - ---- - -## Indbyggede temaer - -OpenCode kommer med flere innebygde temaer. - -| Navn | Beskrivelse | -| ---------------------- | ------------------------------------------------------------------------- | -| `system` | Tilpasser seg terminalens bakgrunnsfarve | -| `tokyonight` | Basert på [Tokyonight](https://github.com/folke/tokyonight.nvim)-temaet | -| `everforest` | Basert på [Everforest](https://github.com/sainnhe/everforest)-temaet | -| `ayu` | Basert på [Ayu](https://github.com/ayu-theme) mørke tema | -| `catppuccin` | Basert på [Catppuccin](https://github.com/catppuccin)-temaet | -| `catppuccin-macchiato` | Basert på [Catppuccin](https://github.com/catppuccin)-temaet | -| `gruvbox` | Basert på [Gruvbox](https://github.com/morhetz/gruvbox)-temaet | -| `kanagawa` | Basert på [Kanagawa](https://github.com/rebelot/kanagawa.nvim)-temaet | -| `nord` | Basert på [Nord](https://github.com/nordtheme/nord)-temaet | -| `matrix` | Hacker-stil grønt på svart tema | -| `one-dark` | Basert på [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) Mørkt tema | - -Og mer, vi tilføjer stadig til nye temaer. - ---- - -## Systemtema - -`system`-temaet er designet for at automatisk tilpasse seg terminalens farvevalg. I motsetning til tradisjonelle temaer som bruger faste farver, er _system_-temaet: - -- **Genererer gråskala**: Opreter en brugerdefineret gråskala basert på terminalens bakgrunnsfarve, og sikrer optimal kontrast. -- **Bruger ANSI farver**: Bruger standard ANSI farver (0-15) for syntaksutheving og UI elementer, som respekterer terminalens farvepalett. -- **Bevarer terminalens standardinnstillinger**: Bruger `none` for tekst- og bakgrunnsfarver for at opretholde terminalens opprinnelige utseende. - -Systemtemaet er for brugere som: - -- Vil at OpenCode skal matche terminalens utseende -- Brug tilpassede terminalfarveskjemaer -- Foretrekker et konsistent utseende på tvers av alle terminalapplikasjoner - ---- - -## Brug et tema - -Du kan velge et tema ved at hente frem temavalg med kommandoen `/theme`. Eller du kan angive det i `tui.json`. - -```json title="tui.json" {3} -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - ---- - -## Brugerdefinerede temaer - -OpenCode støtter et fleksibelt JSON-basert temasystem som lar brugere enkelt lage og tilpasse temaer. - ---- - -### Hierarki - -Temaer lastes inn fra flere kataloger i følgende rekkefølge der senere kataloger overstyrer tidligere: - -1. **Innebygde temaer** - Disse er innebygd i binæren -2. **Brugerkonfigurasjonskatalog** - Definert i `~/.config/opencode/themes/*.json` eller `$XDG_CONFIG_HOME/opencode/themes/*.json` -3. **Prosjektrotkatalog** - Definert i `/.opencode/themes/*.json` -4. **Nuværende arbejdskatalog** - Definert i `./.opencode/themes/*.json` - -Hvis flere kataloger inneholder et tema med samme navn, vil temaet fra katalogen med høyere prioritet bli brugt. - ---- - -### Oprettelse af et tema - -For at lage et brugerdefineret tema, lag en JSON-fil i en av temakatalogene. - -For brugeromfattende temaer: - -```bash no-frame -mkdir -p ~/.config/opencode/themes -vim ~/.config/opencode/themes/my-theme.json -``` - -Og for prosjektspesifikke temaer. - -```bash no-frame -mkdir -p .opencode/themes -vim .opencode/themes/my-theme.json -``` - ---- - -### JSON-format - -Temaer bruger et fleksibelt JSON-format med støtte for: - -- **Sekskantfarver**: `"#ffffff"` -- **ANSI farver**: `3` (0-255) -- **Farvereferanser**: `"primary"` eller egendefinerte definisjoner -- **Mørke/lyse varianter**: `{"dark": "#000", "light": "#fff"}` -- **Ingen farve**: `"none"` - Bruger terminalens standardfarve eller transparent - ---- - -### Farvedefinitioner - -`defs`-delen er valgfri, og den lar deg definere gjenbrugbare farver som kan refereres til i temaet. - ---- - -### Terminalstandarder - -Spesialverdien `"none"` kan bruges for hvilken som helst farve for at arve terminalens standardfarve. Dette er spesielt nyttig for at lage temaer som passer sømløst med terminalens farveskjema: - -- `"text": "none"` - Bruger terminalens standard forgrunnsfarve -- `"background": "none"` - Bruger terminalens standard bakgrunnsfarve - ---- - -### Eksempel - -Her er et eksempel på et brugerdefineret tema: - -```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" - } - } -} -``` diff --git a/packages/web/src/content/docs/da/tools.mdx b/packages/web/src/content/docs/da/tools.mdx deleted file mode 100644 index 31c980082e..0000000000 --- a/packages/web/src/content/docs/da/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -title: Værktøjer -description: Administrer de værktøjer, en LLM kan bruge. ---- - -Verktøy lar LLM utføre handlinger i kodebasen din. OpenCode kommer med et sett med innebygde verktøy, men du kan utvide det med [egendefinerte verktøy](/docs/custom-tools) eller [MCP servere](/docs/mcp-servers). - -Som standard er alle verktøy **aktivert** og trenger ikke tillatelse for at kjøre. Du kan kontrollere verktøyets oppførsel gjennom [tillatelser](/docs/permissions). - ---- - -## Konfiguration - -Brug feltet `permission` for at kontrollere verktøyets oppførsel. Du kan tillate, avslå eller kreve godkjenning for hvert verktøy. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny", - "bash": "ask", - "webfetch": "allow" - } -} -``` - -Du kan også bruge jokertegn for at kontrollere flere verktøy samtidig. For eksempel, for at kreve godkjenning for alle verktøy fra en MCP-server: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "mymcp_*": "ask" - } -} -``` - -[Finn ut mer](/docs/permissions) om konfigurering av tillatelser. - ---- - -## Indbyggede - -Her er alle de innebygde verktøyene som er tilgængelige i OpenCode. - ---- - -### bash - -Utfør shellkommandoer i prosjektmiljøet ditt. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "bash": "allow" - } -} -``` - -Dette verktøyet lar LLM kjøre terminalkommandoer som `npm install`, `git status` eller en hvilken som helst annen shell-kommando. - ---- - -### edit - -Endre eksisterende filer ved at bruge eksakte strengerstatninger. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Dette verktøyet utfører nøyaktige redigeringer av filer ved at erstatte eksakte teksttreff. Det er den primære måten LLM endrer kode på. - ---- - -### write - -Opret nye filer eller overskriv eksisterende. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Brug denne for at la LLM lage nye filer. Den vil overskrive eksisterende filer hvis de allerede eksisterer. - -:::note -`write`-verktøyet kontrolleres av tillatelsen `edit`, som dekker alle filendringer (`edit`, `write`, `patch`). -::: - ---- - -### read - -Les filinnholdet fra kodebasen din. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "read": "allow" - } -} -``` - -Dette verktøyet leser filer og returnerer innholdet. Den støtter lesing av spesifikke linjeområder for store filer. - ---- - -### grep - -Søk i filinnhold ved hjelp av regulære uttrykk. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "grep": "allow" - } -} -``` - -Rask innholdssøk på tvers av kodebasen din. Støtter full regex-syntaks og filmønsterfiltrering. - ---- - -### glob - -Finn filer etter mønstermatching. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "glob": "allow" - } -} -``` - -Søk etter filer ved at bruge glob-mønstre som `**/*.js` eller `src/**/*.ts`. Returnerer samsvarende filbaner sortert etter endringstid. - ---- - -### lsp (experimental) - -Samhandle med dine konfigurerte LSP-servere for at få kodeintelligensfunksjoner som definisjoner, referanser, sveveinformasjon og anropshierarki. - -:::note -Dette verktøyet er bare tilgængelig når `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (eller `OPENCODE_EXPERIMENTAL=true`). -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "lsp": "allow" - } -} -``` - -Støttede operasjoner inkluderer `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` og `outgoingCalls`. - -For at konfigurere hvilke LSP-servere som er tilgængelige for prosjektet ditt, se [LSP-servere](/docs/lsp). - ---- - -### patch - -Brug patcher på filer. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Dette verktøyet bruger opdateringsfiler til kodebasen din. Nyttig for at påføre diff og lapper fra forskjellige kilder. - -:::note -`patch`-verktøyet kontrolleres av tillatelsen `edit`, som dekker alle filendringer (`edit`, `write`, `patch`). -::: - ---- - -### skill - -Last inn en [ferdighet](/docs/skills) (en `SKILL.md` fil) og returner innholdet i samtalen. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "skill": "allow" - } -} -``` - ---- - -### todowrite - -Administrer to-doslister under kodingssessioner. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "todowrite": "allow" - } -} -``` - -Opreter og opdaterer oppgavelister for at spore fremdrift under komplekse operasjoner. LLM bruger dette til at organisere flertrinnsoppgaver. - -:::note -Dette verktøyet er deaktivert for subagenter som standard, men du kan aktivere det manuelt. [Finn ut mer](/docs/agents/#permissions) -::: - ---- - -### webfetch - -Hent nettinnhold. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "webfetch": "allow" - } -} -``` - -Lar LLM hente og lese nettsider. Nyttig for at slå opp dokumentasjon eller forske på nettressurser. - ---- - -### websearch - -Søk på nettet for informasjon. - -:::note -Dette verktøyet er bare tilgængelig når du bruger OpenCode-leverandøren eller når miljøvariabelen `OPENCODE_ENABLE_EXA` er satt til en sannverdi (f.eks. `true` eller `1`). - -Slik aktiverer du når du starter OpenCode: - -```bash -OPENCODE_ENABLE_EXA=1 opencode -``` - -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "websearch": "allow" - } -} -``` - -Utfører nettsøk med Exa AI for at finne relevant informasjon på nettet. Nyttig for at undersøke emner, finne aktuelle hendelser eller samle informasjon utover treningsdataavbruddet. - -Ingen API-nøgle kreves — verktøyet kobles direkte til Exa AIs vertsbaserte MCP-tjeneste uten autentisering. - -:::tip -Brug `websearch` når du trenger at finne informasjon (oppdagelse), og `webfetch` når du trenger at hente innhold fra en bestemt URL (henting). -::: - ---- - -### question - -Still brugeren spørsmål under utførelse. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "question": "allow" - } -} -``` - -Dette verktøyet lar LLM stille spørsmål til brugeren under en oppgave. Det er nyttig for: - -- Samle brugerpreferanser eller krav -- Avklarende tvetydige instruksjoner -- Få beslutninger om gjennomføringsvalg -- Tilbyr valg om hvilken retning du skal ta - -Hvert spørsmål inkluderer en overskrift, spørsmålsteksten og en liste over alternativer. Brugere kan velge fra de angitte alternativene eller skrive inn et brugerdefineret svar. Når det er flere spørsmål, kan brugerne navigere mellom dem før de sender inn alle svarene. - ---- - -## Brugerdefinerede værktøjer - -Egendefinerte verktøy lar deg definere dine egne funksjoner som LLM kan kalle. Disse er definert i konfigurasjonsfilen din og kan kjøre vilkårlig kode. - -[Finn ut mer](/docs/custom-tools) om at lage tilpassede verktøy. - ---- - -## MCP-servere - -MCP (Model Context Protocol) servere lar deg integrere eksterne verktøy og tjenester. Dette inkluderer databasetilgang, API-integrasjoner og tredjepartstjenester. - -[Les mer](/docs/mcp-servers) om konfigurering av MCP-servere. - ---- - -## Interne - -Internt bruger verktøy som `grep` og `glob` [ripgrep](https://github.com/BurntSushi/ripgrep) under panseret. Som standard respekterer ripgrep `.gitignore`-mønstre, noe som betyr at filer og kataloger som er oppført i `.gitignore` vil bli ekskludert fra søk og lister. - ---- - -### Ignoreringsmønstre - -For at inkludere filer som normalt vil bli ignorert, lag en `.ignore`-fil i prosjektroten. Denne filen kan eksplisitt tillate visse stier. - -```text title=".ignore" -!node_modules/ -!dist/ -!build/ -``` - -For eksempel lar denne `.ignore` filen ripgrep søke i `node_modules/`, `dist/` og `build/` kataloger selv om de er oppført i `.gitignore`. diff --git a/packages/web/src/content/docs/da/troubleshooting.mdx b/packages/web/src/content/docs/da/troubleshooting.mdx deleted file mode 100644 index 475c81f9f0..0000000000 --- a/packages/web/src/content/docs/da/troubleshooting.mdx +++ /dev/null @@ -1,300 +0,0 @@ ---- -title: Fejlfinding -description: Almindelige problemer, og hvordan de løses. ---- - -For at fejlfinde problemer med OpenCode, start med at tjekke logfilerne og de lokale data, den gemmer på disken. - ---- - -## Logfiler - -Logfiler skrives til: - -- **macOS/Linux**: `~/.local/share/opencode/log/` -- **Windows**: Tryk `WIN+R` og indsæt `%USERPROFILE%\.local\share\opencode\log` - -Logfiler navngives med tidsstempler (f.eks. `2025-01-09T123456.log`) og de sidste 10 logfiler beholdes. - -Du kan angive logniveauet med kommandolinjeflaget `--log-level` for at få mere detaljeret fejlfindingsinformation. For eksempel `opencode --log-level DEBUG`. - ---- - -## Lagring - -opencode gemmer sessionsdata og andre applikationsdata på disken på: - -- **macOS/Linux**: `~/.local/share/opencode/` -- **Windows**: Tryk `WIN+R` og indsæt `%USERPROFILE%\.local\share\opencode` - -Denne mappe indeholder: - -- `auth.json` - Godkendelsesdata som API-nøgler, OAuth-tokens -- `log/` - Applikationslogs -- `project/` - Projektspecifikke data som sessions- og beskeddata - - Hvis projektet er inden for et Git-repo, gemmes det i `.//storage/` - - Hvis det ikke er et Git-repo, gemmes det i `./global/storage/` - ---- - -## Desktop-app - -OpenCode Desktop kører en lokal OpenCode-server (`opencode-cli` sidevognen) i baggrunden. De fleste problemer er forårsaget af et plugin, der fungerer dårligt, en ødelagt cache eller en dårlig serverindstilling. - -### Hurtige tjek - -- Afslut og start appen på ny. -- Hvis appen viser en fejlskærm, klikker du på **Start på ny** og kopierer fejldetaljerne. -- Kun macOS: `OpenCode`-menu -> **Genindlæs webvisning** (hjælper hvis UI er tom/frosset). - ---- - -### Deaktiver plugins - -Hvis skrivebordsappen går ned ved opstart, hænger eller opfører sig mærkeligt, start med at deaktivere plugins. - -#### Tjek den globale konfiguration - -Åbn den globale konfigurationsfil og se efter en `plugin`-nøgle. - -- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (eller `~/.config/opencode/opencode.json`) -- **macOS/Linux** (ældre installationer): `~/.local/share/opencode/opencode.jsonc` -- **Windows**: Tryk `WIN+R` og indsæt `%USERPROFILE%\.config\opencode\opencode.jsonc` - -Hvis du har konfigureret plugins, deaktiver dem midlertidigt ved at fjerne nøglen eller sætte den til et tomt array: - -```jsonc -{ - "$schema": "https://opencode.ai/config.json", - "plugin": [], -} -``` - -#### Tjek plugin-mapper - -OpenCode kan også indlæse lokale plugins fra disken. Flyt disse midlertidigt væk (eller giv mappen nyt navn) og start skrivebordsappen på ny: - -- **Globale plugins** - - **macOS/Linux**: `~/.config/opencode/plugins/` - - **Windows**: Tryk `WIN+R` og indsæt `%USERPROFILE%\.config\opencode\plugins` -- **Projektplugins** (kun hvis du bruger konfiguration per projekt) - - `/.opencode/plugins/` - -Hvis appen begynder at fungere igen, aktiverer du plugins én ad gangen for at finde ud af, hvilken som forårsager problemet. - ---- - -### Ryd cachen - -Hvis deaktivering af plugins ikke hjælper (eller en plugin-installation sidder fast), tøm cachen så OpenCode kan genopbygge den. - -1. Afslut OpenCode Desktop helt. -2. Slet cache-mappen: - -- **macOS**: Finder -> `Cmd+Shift+G` -> indsæt `~/.cache/opencode` -- **Linux**: slet `~/.cache/opencode` (eller kør `rm -rf ~/.cache/opencode`) -- **Windows**: Tryk `WIN+R` og indsæt `%USERPROFILE%\.cache\opencode` - -3. Start OpenCode Desktop på ny. - ---- - -### Løs problemer med serverforbindelse - -OpenCode Desktop kan enten starte sin egen lokale server (standard) eller forbinde til en server URL, du har konfigureret. - -Hvis du ser en **"Forbindelse mislykkedes"**-dialogboks (eller appen kommer aldrig forbi splash-skærmen), se efter en brugerdefineret server URL. - -#### Slet standardserveren for skrivebordet URL - -Fra startskærmen klikker du på servernavnet (med statusprikken) for at åbne servervælgeren. I delen **Standardserver** klikker du på **Slet**. - -#### Fjern `server.port` / `server.hostname` fra din konfiguration - -Hvis `opencode.json(c)` indeholder en `server`-del, fjern den midlertidigt og start skrivebordsappen på ny. - -#### Tjek miljøvariabler - -Hvis du har `OPENCODE_PORT` sat i dit miljø, vil skrivebordsappen prøve at bruge den port for den lokale server. - -- Deaktiver `OPENCODE_PORT` (eller vælg en ledig port) og start på ny. - ---- - -### Linux: Wayland / X11-problemer - -På Linux kan nogle Wayland-opsætninger forårsage tomme vinduer eller kompositorfejl. - -- Hvis du er på Wayland og appen er tom/crasher, prøv at starte med `OC_ALLOW_WAYLAND=1`. -- Hvis det gør ting værre, fjern det og prøv at starte under en X11-session i stedet. - ---- - -### Windows: WebView2-runtime - -På Windows kræver OpenCode Desktop Microsoft Edge **WebView2 Runtime**. Hvis appen åbnes i et tomt vindue eller ikke starter, installer/opdater WebView2 og prøv igen. - ---- - -### Windows: Generelle ydeevneproblemer - -Hvis du oplever langsom ydeevne, problemer med filadgang eller terminalproblemer på Windows, kan du prøve at bruge [WSL (Windows Subsystem for Linux)](/docs/windows-wsl). WSL giver et Linux-miljø som fungerer mere sømløst med funktionerne i OpenCode. - ---- - -### Meddelelser vises ikke - -OpenCode Desktop viser kun systemvarsler når: - -- varsler er aktiveret for OpenCode i dine OS-indstillinger, og -- appvinduet ikke er fokuseret. - ---- - -### Nulstil desktop-applagring (sidste udvej) - -Hvis appen ikke starter og du ikke kan slette indstillingerne fra UI, nulstil skrivebordsappens gemte tilstand. - -1. Afslut OpenCode Desktop. -2. Find og slet disse filer (de findes i OpenCode Desktop-appens datamappe): - -- `opencode.settings.dat` (skrivebordsstandardserver URL) -- `opencode.global.dat` og `opencode.workspace.*.dat` (UI tilstand som nylige servere/projekter) - -Sådan finder du mappen hurtigt: - -- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (søg derefter efter filnavnene ovenfor) -- **Linux**: søg under `~/.local/share` efter filnavnene ovenfor -- **Windows**: Tryk `WIN+R` -> `%APPDATA%` (søg derefter efter filnavnene ovenfor) - ---- - -## Få hjælp - -Hvis du oplever problemer med OpenCode: - -1. **Rapporter problemer på GitHub** - - Den bedste måde at rapportere fejl eller bede om funktioner på er gennem vores GitHub-repo: - - [**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues) - - Før du opretter et nyt issue, søg i eksisterende issues for at se om dit problem allerede er rapporteret. - -2. **Bliv en del af vores Discord** - - For hjælp i realtid og fællesskabsdiskussion, bliv en del af vores Discord-server: - - [**opencode.ai/discord**](https://opencode.ai/discord) - ---- - -## Almindelige problemer - -Her er nogle almindelige problemer og hvordan du kan løse dem. - ---- - -### OpenCode vil ikke starte - -1. Tjek logfilerne for fejlmeddelelser -2. Prøv at køre med `--print-logs` for at se output i terminalen -3. Sørg for at du har den nyeste version med `opencode upgrade` - ---- - -### Godkendelsesproblemer - -1. Prøv at godkende på ny med kommandoen `/connect` i TUI -2. Tjek at dine API-nøgler er gyldige -3. Sørg for at dit netværk tillader forbindelser til udbyderens API - ---- - -### Modellen er ikke tilgængelig - -1. Tjek at du har godkendt dig med udbyderen -2. Kontroller at modelnavnet i konfigurationen er rigtigt -3. Nogle modeller kan kræve specifik adgang eller abonnement - -Hvis du støder på `ProviderModelNotFoundError` refererer du mest sandsynligt forkert -til en model et sted. -Modeller skal refereres sådan: `/` - -Eksempler: - -- `openai/gpt-4.1` -- `openrouter/google/gemini-2.5-flash` -- `opencode/kimi-k2` - -For at finde ud af hvilke modeller du har adgang til, kør `opencode models` - ---- - -### ProviderInitError - -Hvis du støder på en ProviderInitError, har du sandsynligvis en ugyldig eller ødelagt konfiguration. - -For at løse dette: - -1. Kontroller først at din udbyder er rigtigt konfigureret ved at følge [udbydervejledningen](/docs/providers) -2. Hvis problemet vedvarer, prøv at tømme den gemte konfiguration: - - ```bash - rm -rf ~/.local/share/opencode - ``` - - På Windows, tryk `WIN+R` og slet: `%USERPROFILE%\.local\share\opencode` - -3. Godkend på ny med din udbyder ved at bruge kommandoen `/connect` i TUI. - ---- - -### AI_APICallError og udbyderpakkeproblemer - -Hvis du støder på API-kaldsfejl, kan dette skyldes forældede udbyderpakker. opencode installerer dynamisk udbyderpakker (OpenAI, Anthropic, Google, etc.) efter behov og cacher dem lokalt. - -For at løse problemer med udbyderpakke: - -1. Tøm udbyderens pakkecache: - - ```bash - rm -rf ~/.cache/opencode - ``` - - På Windows, tryk `WIN+R` og slet: `%USERPROFILE%\.cache\opencode` - -2. Start opencode på ny for at installere de nyeste udbyderpakker på ny - -Dette vil tvinge opencode til at downloade de nyeste versioner af udbyderpakkerne, som ofte løser kompatibilitetsproblemer med modelparametre og API-ændringer. - ---- - -### Kopier/indsæt virker ikke på Linux - -Linux-brugere skal have et af følgende udklipsholderværktøjer installeret for at kopier/indsæt-funktionalitet skal fungere: - -**For X11-systemer:** - -```bash -apt install -y xclip -# or -apt install -y xsel -``` - -**For Wayland-systemer:** - -```bash -apt install -y wl-clipboard -``` - -**For hovedløse miljøer:** - -```bash -apt install -y xvfb -# and run: -Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & -export DISPLAY=:99.0 -``` - -opencode vil opdage om du bruger Wayland og foretrække `wl-clipboard`, ellers vil den prøve at finde udklipsholderværktøjer i rækkefølgen: `xclip` og `xsel`. diff --git a/packages/web/src/content/docs/da/tui.mdx b/packages/web/src/content/docs/da/tui.mdx deleted file mode 100644 index e7481f7257..0000000000 --- a/packages/web/src/content/docs/da/tui.mdx +++ /dev/null @@ -1,426 +0,0 @@ ---- -title: TUI -description: Brug af OpenCode-terminalbrugergrænsefladen. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode giver en interaktiv terminalgrænseflade eller TUI til at arbejde med dine projekter med en LLM. - -At køre OpenCode starter TUI for den nuværende mappe. - -```bash -opencode -``` - -Eller du kan starte den for en bestemt arbejdsmappe. - -```bash -opencode /path/to/project -``` - -Når du er i TUI, kan du spørge den med en besked. - -```text -Give me a quick summary of the codebase. -``` - ---- - -## Filreferencer - -Du kan referere til filer i dine beskeder med `@`. Det laver en fuzzy filsøgning i den nuværende arbejdsmappe. - -:::tip -Du kan også bruge `@` til at referere til filer i dine beskeder. -::: - -```text "@packages/functions/src/api/index.ts" -How is auth handled in @packages/functions/src/api/index.ts? -``` - -Indholdet i filen tilføjes automatisk til samtalen. - ---- - -## Bash-kommandoer - -Start en besked med `!` for at køre en shell-kommando. - -```bash frame="none" -!ls -la -``` - -Outputtet fra kommandoen tilføjes til samtalen som et værktøjsresultat. - ---- - -## Kommandoer - -Når du bruger OpenCode TUI, kan du skrive `/` efterfulgt af et kommandonavn for hurtigt at udføre handlinger. For eksempel: - -```bash frame="none" -/help -``` - -De fleste kommandoer har også genvejstaster som bruger `ctrl+x` som Leader-tast, hvor `ctrl+x` er standard Leader-tast. [Læs mere](/docs/keybinds). - -Her er alle tilgængelige skråstregskommandoer: - ---- - -### connect - -Tilføj en udbyder til OpenCode. Lader dig vælge fra tilgængelige udbydere og tilføje deres API-nøgler. - -```bash frame="none" -/connect -``` - ---- - -### compact - -Komprimer nuværende session. _Alias_: `/summarize` - -```bash frame="none" -/compact -``` - -**Genvejstast:** `ctrl+x c` - ---- - -### details - -Skift visning af værktøjsudførelsesdetaljer. - -```bash frame="none" -/details -``` - -**Genvejstast:** `ctrl+x d` - ---- - -### editor - -Åbn eksternt redigeringsprogram for at skrive beskeder. Bruger redigeringsprogrammet i miljøvariablen `EDITOR`. [Læs mere](#editor-setup). - -```bash frame="none" -/editor -``` - -**Genvejstast:** `ctrl+x e` - ---- - -### exit - -Afslut OpenCode. _Aliaser_: `/quit`, `/q` - -```bash frame="none" -/exit -``` - -**Genvejstast:** `ctrl+x q` - ---- - -### export - -Eksporter nuværende samtale til Markdown og åbn i standardredigeringsprogrammet. Bruger redigeringsprogrammet i miljøvariablen `EDITOR`. [Læs mere](#editor-setup). - -```bash frame="none" -/export -``` - -**Genvejstast:** `ctrl+x x` - ---- - -### help - -Vis hjælpedialogen. - -```bash frame="none" -/help -``` - -**Genvejstast:** `ctrl+x h` - ---- - -### init - -Opret eller opdater `AGENTS.md`-fil. [Læs mere](/docs/rules). - -```bash frame="none" -/init -``` - -**Genvejstast:** `ctrl+x i` - ---- - -### models - -Liste over tilgængelige modeller. - -```bash frame="none" -/models -``` - -**Genvejstast:** `ctrl+x m` - ---- - -### new - -Start en ny session. _Alias_: `/clear` - -```bash frame="none" -/new -``` - -**Genvejstast:** `ctrl+x n` - ---- - -### redo - -Gentag en tidligere fortrudt besked. Kun tilgængelig efter brug af `/undo`. - -:::tip -Eventuelle filændringer vil også blive genoprettet. -::: - -Internt bruger dette Git til at administrere filændringerne. Så dit projekt **skal være et Git-depot**. - -```bash frame="none" -/redo -``` - -**Genvejstast:** `ctrl+x r` - ---- - -### sessions - -List og skift mellem sessioner. _Aliaser_: `/resume`, `/continue` - -```bash frame="none" -/sessions -``` - -**Genvejstast:** `ctrl+x l` - ---- - -### share - -Del nuværende session. [Læs mere](/docs/share). - -```bash frame="none" -/share -``` - -**Genvejstast:** `ctrl+x s` - ---- - -### themes - -Liste over tilgængelige temaer. - -```bash frame="none" -/theme -``` - -**Genvejstast:** `ctrl+x t` - ---- - -### thinking - -Skift synligheden af tænke-/ræsonneringsblokke i samtalen. Når den er aktiveret, kan du se modellens ræsonneringsproces for modeller, som understøtter udvidet tænkning. - -:::note -Denne kommando kontrollerer bare om tænkeblokke **vises** - den aktiverer eller deaktiverer ikke modellens ræsonneringsmuligheder. For at skifte mellem faktiske ræsonneringsmuligheder, brug `ctrl+t` for at bladre gennem modelvarianter. -::: - -```bash frame="none" -/thinking -``` - ---- - -### undo - -Fortryd sidste besked i samtalen. Fjerner den sidste brugerbesked, alle efterfølgende svar og eventuelle filændringer. - -:::tip -Eventuelle filændringer vil også blive nulstillet. -::: - -Internt bruger dette Git til at administrere filændringerne. Så dit projekt **skal være et Git-depot**. - -```bash frame="none" -/undo -``` - -**Genvejstast:** `ctrl+x u` - ---- - -### unshare - -Ophæv deling af nuværende session. [Læs mere](/docs/share#un-sharing). - -```bash frame="none" -/unshare -``` - ---- - -## Opsætning af editor - -Både kommandoerne `/editor` og `/export` bruger editoren som er specificeret i miljøvariablen `EDITOR`. - - - - ```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" - ``` - - For at gøre det permanent, tilføj dette til din shellprofil; - `~/.bashrc`, `~/.zshrc` osv. - - - - - ```bash - set EDITOR=notepad - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - set EDITOR=code --wait - ``` - - For at gøre det permanent, brug **Systemegenskaber** > **Miljøvariabler**. - - - - - ```powershell - $env:EDITOR = "notepad" - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - $env:EDITOR = "code --wait" - ``` - - For at gøre det permanent, tilføj dette til din PowerShell-profil. - - - - -Populære redigeringsalternativer inkluderer: - -- `code` - Visual Studio Code -- `cursor` - Cursor -- `windsurf` - Windsurf -- `nvim` - Neovim-editor -- `vim` - Vim editor -- `nano` - Nano-editor -- `notepad` - Windows Notesblok -- `subl` - Sublime Text - -:::note -Nogle editorer som VS Code skal startes med flaget `--wait`. -::: - -Nogle editorer kræver kommandolinjeargumenter for at køre i blokeringstilstand. `--wait`-flaget gør at redigeringsprocessen blokeres indtil den lukkes. - ---- - -## Konfigurer - -Du kan tilpasse TUI-adfærd gennem `tui.json` (eller `tui.jsonc`). - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -Dette er adskilt fra `opencode.json`, som konfigurerer server-/kørselstidsadfærd. - -`keybinds` flettes sammen med de indbyggede standarder, så du behøver kun at konfigurere de genveje, du vil ændre. - -### Indstillinger - -- `theme` - Indstiller dit brugergrænsefladetema. [Læs mere](/docs/themes). -- `keybinds` - Tilpasser tastaturgenveje. [Læs mere](/docs/keybinds). -- `leader_timeout` - Styrer hvor længe OpenCode venter efter leader key. Standard er `2000`. -- `scroll_acceleration.enabled` - Aktiver rulleacceleration i macOS-stil for jævn, naturlig rulning. Når aktiveret, øger rullehastigheden med hurtige rullebevægelser og forbliver præcis for langsommere bevægelser. **Denne indstilling har forrang over `scroll_speed` og tilsidesætter den, når den er aktiveret.** -- `scroll_speed` - Styrer hvor hurtigt TUI ruller, når du bruger rullekommandoer (minimum: `0.001`, understøtter decimalværdier). Standard er `3`. **Bemærk: Dette ignoreres hvis `scroll_acceleration.enabled` er sat til `true`.** -- `diff_style` - Styrer diff-gengivelse. `"auto"` tilpasser sig terminalbredde, `"stacked"` viser altid et enkeltkolonne-layout. -- `mouse` - Aktiverer eller deaktiverer musefangst i TUI (standard: `true`). Når den er deaktiveret, bevares terminalens oprindelige musemarkering og rulning. -- `attention` - Konfigurerer skrivebordsnotifikationer og lyde for TUI. Deaktiveret som standard. - -Brug `OPENCODE_TUI_CONFIG` til at indlæse en brugerdefineret TUI-konfigurationssti. - -### Attention - -Attention lader TUI give dig besked, når OpenCode venter på et svar, kræver godkendelse af en tilladelse, rapporterer en sessionsfejl eller har afsluttet en session. Aktivér det med `attention.enabled`; indbyggede hændelser afspiller en lyd, når de sker. Skrivebordsnotifikationer sendes kun, når terminalvinduet ikke er i fokus, og bruges ikke til subagent-hændelser. - -- `enabled` - Aktiverer alle notifikationer og lyde for Attention. Standard er `false`. -- `notifications` - Når Attention er aktiveret, lader dette TUI sende skrivebordsnotifikationer via terminalen. Standard er `true`. -- `sound` - Når Attention er aktiveret, tillader dette advarselslyde. Standard er `true`. -- `volume` - Standard lydstyrke for advarselslyde fra `0` til `1`. Standard er `0.4`. -- `sound_pack` - Sound pack-ID der skal bruges. Standard er `opencode.default`. -- `sounds` - Angiver brugerdefinerede lydfiler for `default`, `question`, `permission`, `error`, `done` eller `subagent_done`. Stier kan være absolutte, `file://` URL'er eller relative til `tui.json`. - ---- - -## Tilpasning - -Du kan tilpasse forskellige aspekter af TUI-visningen ved at bruge kommandopaletten (`ctrl+x h` eller `/help`). Disse indstillinger gemmes ved genstart. - ---- - -#### Visning af brugernavn - -Skift om dit brugernavn vises i chat-beskeder. Få adgang til dette gennem: - -- Kommandopalet: Søg efter "brugernavn" eller "skjul brugernavn" -- Indstillingen gemmes automatisk og vil blive husket over TUI-sessioner diff --git a/packages/web/src/content/docs/da/web.mdx b/packages/web/src/content/docs/da/web.mdx deleted file mode 100644 index 889045ca20..0000000000 --- a/packages/web/src/content/docs/da/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Web -description: Brug af OpenCode i din browser. ---- - -OpenCode kan køre som en webapplikation i din browser, hvilket giver den samme kraftfulde AI-kodningsoplevelse uden behov for en terminal. - -![OpenCode Web - Ny session](../../../assets/web/web-homepage-new-session.png) - -## Kom godt i gang - -Start webgrænsefladen ved at køre: - -```bash -opencode web -``` - -Dette starter en lokal server på `127.0.0.1` med en tilfældig tilgængelig port og åbner automatisk OpenCode i din standardbrowser. - -:::caution -Hvis `OPENCODE_SERVER_PASSWORD` ikke er indstillet, vil serveren være usikret. Dette er fint til lokal brug, men bør indstilles til netværksadgang. -::: - -:::tip[Windows-brugere] -For den bedste oplevelse skal du køre `opencode web` fra [WSL](/docs/windows-wsl) i stedet for PowerShell. Dette sikrer korrekt filsystemadgang og terminalintegration. -::: - ---- - -## Konfiguration - -Du kan konfigurere webserveren ved hjælp af kommandolinjeflag eller i din [config-fil](/docs/config). - -### Port - -Som standard vælger OpenCode en tilgængelig port. Du kan angive en port: - -```bash -opencode web --port 4096 -``` - -### Værtsnavn - -Som standard binder serveren til `127.0.0.1` (kun lokal vært). Sådan gør du OpenCode tilgængelig på dit netværk: - -```bash -opencode web --hostname 0.0.0.0 -``` - -Når du bruger `0.0.0.0`, vil OpenCode vise både lokale adresser og netværksadresser: - -``` - Local access: http://localhost:4096 - Network access: http://192.168.1.100:4096 -``` - -### mDNS-opdagelse - -Aktiver mDNS for at gøre din server synlig på det lokale netværk: - -```bash -opencode web --mdns -``` - -Dette indstiller automatisk værtsnavnet til `0.0.0.0` og annoncerer serveren som `opencode.local`. - -Du kan tilpasse mDNS-domænenavnet til at køre flere forekomster på det samme netværk: - -```bash -opencode web --mdns --mdns-domain myproject.local -``` - -### CORS - -For at tillade yderligere domæner til CORS (nyttigt til brugerdefinerede frontends): - -```bash -opencode web --cors https://example.com -``` - -### Godkendelse - -For at beskytte adgangen skal du angive en adgangskode ved hjælp af `OPENCODE_SERVER_PASSWORD` miljøvariablen: - -```bash -OPENCODE_SERVER_PASSWORD=secret opencode web -``` - -Brugernavnet er som standard `opencode`, men kan ændres med `OPENCODE_SERVER_USERNAME`. - ---- - -## Brug af webgrænsefladen - -Når den er startet, giver webgrænsefladen adgang til dine OpenCode-sessioner. - -### Sessioner - -Se og administrer dine sessioner fra hjemmesiden. Du kan se aktive sessioner og starte nye. - -![OpenCode Web - Active Session](../../../assets/web/web-homepage-active-session.png) - -### Serverstatus - -Klik på "Se servere" for at se tilsluttede servere og deres status. - -![OpenCode Web - Se servere](../../../assets/web/web-homepage-see-servers.png) - ---- - -## Tilslutning af en terminal - -Du kan vedhæfte en terminal TUI til en kørende webserver: - -```bash -# Start the web server -opencode web --port 4096 - -# In another terminal, attach the TUI -opencode attach http://localhost:4096 -``` - -Dette giver dig mulighed for at bruge både webgrænsefladen og terminalen samtidigt og dele de samme sessioner og tilstand. - ---- - -## Konfigurationsfil - -Du kan også konfigurere serverindstillinger i din `opencode.json`-konfigurationsfil: - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -Kommandolinjeflag har forrang over konfigurationsfilindstillinger. diff --git a/packages/web/src/content/docs/da/windows-wsl.mdx b/packages/web/src/content/docs/da/windows-wsl.mdx deleted file mode 100644 index 37be049638..0000000000 --- a/packages/web/src/content/docs/da/windows-wsl.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Windows (WSL) -description: Kør OpenCode på Windows med WSL for den bedste oplevelse. ---- - -import { Steps } from "@astrojs/starlight/components" - -Selvom OpenCode kan køre direkte på Windows, anbefaler vi at bruge [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) for den bedste oplevelse. WSL giver et Linux-miljø, der fungerer problemfrit med OpenCodes funktioner. - -:::tip[Hvorfor WSL?] -WSL giver bedre filsystemydelse, fuld terminalunderstøttelse og kompatibilitet med de udviklingsværktøjer, som OpenCode er afhængig af. -::: - ---- - -## Opsætning - - - -1. **Installer WSL** - - Hvis du ikke allerede har gjort det, så [installer WSL](https://learn.microsoft.com/en-us/windows/wsl/install) med Microsofts officielle vejledning. - -2. **Installer OpenCode i WSL** - - Når WSL er sat op, skal du åbne din WSL-terminal og installere OpenCode med en af [installationsmetoderne](/docs/). - - ```bash - curl -fsSL https://opencode.ai/install | bash - ``` - -3. **Brug OpenCode fra WSL** - - Gå til din projektmappe (få adgang til Windows-filer via `/mnt/c/`, `/mnt/d/` osv.) og kør OpenCode. - - ```bash - cd /mnt/c/Users/YourName/project - opencode - ``` - - - ---- - -## Desktop-app + WSL-server - -Hvis du foretrækker OpenCode Desktop-appen, men vil køre serveren i WSL: - -1. **Start serveren i WSL** med `--hostname 0.0.0.0` for at tillade eksterne forbindelser: - - ```bash - opencode serve --hostname 0.0.0.0 --port 4096 - ``` - -2. **Forbind Desktop-appen** til `http://localhost:4096` - -:::note -Hvis `localhost` ikke virker i din opsætning, så forbind i stedet med WSL-IP-adressen (fra WSL: `hostname -I`) og brug `http://:4096`. -::: - -:::caution -Når du bruger `--hostname 0.0.0.0`, skal du sætte `OPENCODE_SERVER_PASSWORD` for at sikre serveren. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0 -``` - -::: - ---- - -## Webklient + WSL - -For den bedste weboplevelse på Windows: - -1. **Kør `opencode web` i WSL-terminalen** i stedet for PowerShell: - - ```bash - opencode web --hostname 0.0.0.0 - ``` - -2. **Åbn fra din Windows-browser** på `http://localhost:` (OpenCode udskriver URL'en) - -Når du kører `opencode web` fra WSL, får du korrekt filsystemadgang og terminalintegration, samtidig med at det stadig er tilgængeligt fra din Windows-browser. - ---- - -## Adgang til Windows-filer - -WSL kan få adgang til alle dine Windows-filer via `/mnt/`-mappen: - -- `C:`-drev → `/mnt/c/` -- `D:`-drev → `/mnt/d/` -- Og så videre... - -Eksempel: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -For den mest problemfri oplevelse kan du overveje at klone/kopiere dit repo ind i WSL-filsystemet (for eksempel under `~/code/`) og køre OpenCode derfra. -::: - ---- - -## Tips - -- Lad OpenCode køre i WSL for projekter, der ligger på Windows-drev - filadgangen er problemfri -- Brug VS Codes [WSL-udvidelse](https://code.visualstudio.com/docs/remote/wsl) sammen med OpenCode for et integreret udviklingsworkflow -- Din OpenCode-konfiguration og dine sessioner gemmes i WSL-miljøet i `~/.local/share/opencode/` diff --git a/packages/web/src/content/docs/da/zen.mdx b/packages/web/src/content/docs/da/zen.mdx deleted file mode 100644 index 346af2b51b..0000000000 --- a/packages/web/src/content/docs/da/zen.mdx +++ /dev/null @@ -1,319 +0,0 @@ ---- -title: Zen -description: Udvalgt liste over modeller leveret af OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen er en liste over testede og verificerede modeller leveret af OpenCode-teamet. - -Zen fungerer som enhver anden udbyder i OpenCode. Du logger ind på OpenCode Zen og får -din API-nøgle. Det er **helt valgfrit**, og du behøver ikke bruge det for at bruge -OpenCode. - ---- - -## Baggrund - -Der findes et stort antal modeller, men kun få af dem -fungerer godt som kodeagenter. Derudover er de fleste udbydere -konfigureret meget forskelligt, så du får meget forskellig ydeevne og kvalitet. - -:::tip -Vi testede en udvalgt gruppe modeller og udbydere, som fungerer godt med OpenCode. -::: - -Så hvis du bruger en model gennem noget som OpenRouter, kan du aldrig være -sikker på, om du får den bedste version af den model, du vil have. - -For at løse det gjorde vi et par ting: - -1. Vi testede en udvalgt gruppe modeller og talte med deres teams om, hvordan - de bedst køres. -2. Derefter arbejdede vi sammen med nogle få udbydere for at sikre, at de blev leveret - korrekt. -3. Til sidst benchmarkede vi kombinationen af model/udbyder og lavede - en liste, som vi trygt kan anbefale. - -OpenCode Zen er en AI gateway, der giver dig adgang til disse modeller. - ---- - -## Sådan fungerer det - -OpenCode Zen fungerer som enhver anden udbyder i OpenCode. - -1. Du logger ind på **OpenCode Zen**, tilføjer dine faktureringsoplysninger - og kopierer din API-nøgle. -2. Du kører kommandoen `/connect` i TUI, vælger OpenCode Zen og indsætter din API-nøgle. -3. Kør `/models` i TUI for at se listen over modeller, vi anbefaler. - -Du bliver opkrævet pr. anmodning, og du kan tilføje kredit til din konto. - ---- - -## Endpoints - -Du kan også få adgang til vores modeller gennem følgende API-endpoints. - -| Model | Model ID | Endpoint | AI SDK-pakke | -| ---------------------- | ---------------------- | ---------------------------------------------------- | --------------------------- | -| 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -[model id](/docs/config/#models) i din OpenCode-konfiguration -bruger formatet `opencode/`. For eksempel ville du for GPT 5.5 -bruge `opencode/gpt-5.5` i din konfiguration. - ---- - -### Modeller - -Du kan hente den fulde liste over tilgængelige modeller og deres metadata fra: - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## Priser - -Vi understøtter en pay-as-you-go-model. Nedenfor er priserne **pr. 1M tokens**. - -| Model | Input | Output | Cached Read | Cached Write | -| --------------------------------- | ------ | ------- | ----------- | ------------ | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -Du vil måske bemærke _Claude Haiku 3.5_ i din brugshistorik. Det er en [lavprismodel](/docs/config/#models), som bruges til at generere titlerne på dine sessioner. - -:::note -Kreditkortgebyrer videregives til kostpris (4.4% + $0.30 pr. transaktion); vi opkræver ikke noget ud over det. -::: - -De gratis modeller: - -- DeepSeek V4 Flash Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. -- MiMo-V2.5 Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. -- North Mini Code Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. -- Nemotron 3 Ultra Free er tilgængelig på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. -- Big Pickle er en stealth-model, som er gratis på OpenCode i en begrænset periode. Teamet bruger denne tid til at indsamle feedback og forbedre modellen. - -Kontakt os, hvis du har spørgsmål. - ---- - -### Automatisk genopfyldning - -Hvis din saldo kommer under $5, genopfylder Zen automatisk med $20. - -Du kan ændre beløbet for automatisk genopfyldning. Du kan også deaktivere automatisk genopfyldning helt. - ---- - -### Månedlige grænser - -Du kan også sætte en månedlig forbrugsgrænse for hele arbejdsområdet og for hvert -medlem af dit team. - -Lad os for eksempel sige, at du sætter en månedlig forbrugsgrænse til $20. Zen vil ikke bruge -mere end $20 på en måned. Men hvis du har automatisk genopfyldning aktiveret, kan Zen ende med -at opkræve dig mere end $20, hvis din saldo kommer under $5. - ---- - -### Udfasede modeller - -| Model | Udfasningsdato | -| ------------------ | ----------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## Privatliv - -Alle vores modeller hostes i US. Vores udbydere følger en nul-opbevaringspolitik og bruger ikke dine data til modeltræning, med følgende undtagelser: - -- Big Pickle: I den gratis periode kan indsamlede data blive brugt til at forbedre modellen. -- DeepSeek V4 Flash Free: I den gratis periode kan indsamlede data blive brugt til at forbedre modellen. -- MiMo-V2.5 Free: I den gratis periode kan indsamlede data blive brugt til at forbedre modellen. -- North Mini Code Free: I gratisperioden kan indsamlede data blive opbevaret og brugt til at forbedre modellen. Indsend ikke personlige eller fortrolige oplysninger. Se vores [Brugsvilkår](https://cohere.com/terms-of-use) og [Privatlivspolitik](https://cohere.com/privacy). -- Nemotron 3 Ultra Free (gratis NVIDIA-endpoints): Kun til prøvebrug — indsend ikke personlige eller fortrolige data. Din brug logges af sikkerhedshensyn og for at forbedre NVIDIAs produkter og tjenester. De loggede sessionsdata, der bruges til forbedringsformål, er ikke knyttet til din identitet eller nogen vedvarende identifikator. For mere information om vores databehandlingspraksis, se vores [privatlivspolitik](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ved at interagere med dette endpoint giver du samtykke til vores indsamling, registrering og brug af sådanne oplysninger samt [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). -- OpenAI APIs: Anmodninger opbevares i 30 dage i overensstemmelse med [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). -- Anthropic APIs: Anmodninger opbevares i 30 dage i overensstemmelse med [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). - ---- - -## For teams - -Zen fungerer også rigtig godt for teams. Du kan invitere teammedlemmer, tildele roller, kuratere -de modeller dit team bruger, og mere. - -:::note -Arbejdsområder er i øjeblikket gratis for teams som en del af betaen. -::: - -Det er i øjeblikket gratis for teams at administrere deres arbejdsområde som en del af betaen. Vi deler -flere detaljer om priserne snart. - ---- - -### Roller - -Du kan invitere teammedlemmer til dit arbejdsområde og tildele roller: - -- **Admin**: Administrer modeller, medlemmer, API-nøgler og fakturering -- **Medlem**: Administrer kun sine egne API-nøgler - -Administratorer kan også sætte månedlige forbrugsgrænser for hvert medlem for at holde omkostningerne under kontrol. - ---- - -### Modeladgang - -Administratorer kan aktivere eller deaktivere bestemte modeller for arbejdsområdet. Anmodninger til en deaktiveret model returnerer en fejl. - -Dette er nyttigt i tilfælde, hvor du vil deaktivere brugen af en model, der -indsamler data. - ---- - -### Brug din egen nøgle - -Du kan bruge dine egne OpenAI- eller Anthropic API-nøgler, mens du stadig har adgang til andre modeller i Zen. - -Når du bruger dine egne nøgler, bliver tokens faktureret direkte af udbyderen, ikke af Zen. - -For eksempel kan din organisation allerede have en nøgle til OpenAI eller Anthropic, -og du vil bruge den i stedet for den, som Zen stiller til rådighed. - ---- - -## Mål - -Vi skabte OpenCode Zen for at: - -1. **Benchmarke** de bedste modeller/udbydere til kodeagenter. -2. Give adgang til muligheder af **højeste kvalitet** uden at nedgradere ydeevnen eller route til billigere udbydere. -3. Videreføre eventuelle **prisfald** ved at sælge til kostpris; så den eneste markup er for at dække vores behandlingsgebyrer. -4. Have **ingen lock-in** ved at lade dig bruge det med enhver anden kodeagent. Og altid lade dig bruge enhver anden udbyder med OpenCode også. diff --git a/packages/web/src/content/docs/de/acp.mdx b/packages/web/src/content/docs/de/acp.mdx deleted file mode 100644 index d63a13c527..0000000000 --- a/packages/web/src/content/docs/de/acp.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: ACP-Unterstützung -description: Verwenden Sie OpenCode in jedem ACP-kompatiblen Editor. ---- - -OpenCode unterstützt [Agent Client Protocol](https://agentclientprotocol.com) oder (ACP), sodass Sie es direkt in kompatiblen Editoren und IDEs verwenden können. - -:::tip -Eine Liste der Editoren und Tools, die ACP unterstützen, finden Sie unter [ACP progress report](https://zed.dev/blog/acp-progress-report#available-now). -::: - -ACP ist ein offenes Protokoll, das die Kommunikation zwischen Code-Editoren und AI-Coding-Agenten standardisiert. - ---- - -## Konfiguration - -Um OpenCode über ACP zu verwenden, konfigurieren Sie Ihren Editor für die Ausführung des Befehls `opencode acp`. - -Der Befehl startet OpenCode als ACP-kompatiblen Unterprozess, der über stdio über JSON-RPC mit Ihrem Editor kommuniziert. - -Nachfolgend finden Sie Beispiele für beliebte Editoren, die ACP unterstützen. - ---- - -### Zed - -Fügen Sie Ihrer [Zed](https://zed.dev)-Konfiguration (`~/.config/zed/settings.json`) Folgendes hinzu: - -```json title="~/.config/zed/settings.json" -{ - "agent_servers": { - "OpenCode": { - "command": "opencode", - "args": ["acp"] - } - } -} -``` - -Um es zu öffnen, verwenden Sie die Aktion `agent: new thread` in der **Befehlspalette**. - -Sie können auch eine Tastenkombination binden, indem Sie Ihren `keymap.json` bearbeiten: - -```json title="keymap.json" -[ - { - "bindings": { - "cmd-alt-o": [ - "agent::NewExternalAgentThread", - { - "agent": { - "custom": { - "name": "OpenCode", - "command": { - "command": "opencode", - "args": ["acp"] - } - } - } - } - ] - } - } -] -``` - ---- - -### JetBrains IDEs - -Fügen Sie zu Ihrem [JetBrains IDE](https://www.jetbrains.com/) acp.json gemäß [Dokumentation](https://www.jetbrains.com/help/ai-assistant/acp.html) hinzu: - -```json title="acp.json" -{ - "agent_servers": { - "OpenCode": { - "command": "/absolute/path/bin/opencode", - "args": ["acp"] - } - } -} -``` - -Um es zu öffnen, verwenden Sie den neuen Agenten „OpenCode“ in der AI Chat Agent Selector. - ---- - -### Avante.nvim - -Fügen Sie Ihrer [Avante.nvim](https://github.com/yetone/avante.nvim)-Konfiguration Folgendes hinzu: - -```lua -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" } - } - } -} -``` - -Wenn Sie Umgebungsvariablen übergeben müssen: - -```lua {6-8} -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" }, - env = { - OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY") - } - } - } -} -``` - ---- - -### CodeCompanion.nvim - -Um OpenCode als ACP-Agent in [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim) zu verwenden, fügen Sie Folgendes zu Ihrer Neovim-Konfiguration hinzu: - -```lua -require("codecompanion").setup({ - interactions = { - chat = { - adapter = { - name = "opencode", - model = "claude-sonnet-4", - }, - }, - }, -}) -``` - -Diese Konfiguration richtet CodeCompanion so ein, dass OpenCode als ACP-Agent für den Chat verwendet wird. - -Wenn Sie Umgebungsvariablen (wie `OPENCODE_API_KEY`) übergeben müssen, finden Sie ausführliche Informationen zu [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) in der Dokumentation zu CodeCompanion.nvim. - -## Unterstützung - -OpenCode funktioniert über ACP genauso wie im Terminal. Alle Funktionen werden unterstützt: - -:::note -Einige integrierte Slash-Befehle wie `/undo` und `/redo` werden derzeit nicht unterstützt. -::: - -- Integrierte Tools (Dateioperationen, Terminalbefehle usw.) -- Benutzerdefinierte Tools und Slash-Befehle -- MCP-Server, die in Ihrer OpenCode-Konfiguration konfiguriert sind -- Projektspezifische Regeln von `AGENTS.md` -- Benutzerdefinierte Formatierer und Linters -- Agenten- und Berechtigungssystem diff --git a/packages/web/src/content/docs/de/agents.mdx b/packages/web/src/content/docs/de/agents.mdx deleted file mode 100644 index 6bca53488d..0000000000 --- a/packages/web/src/content/docs/de/agents.mdx +++ /dev/null @@ -1,741 +0,0 @@ ---- -title: Agenten -description: Konfigurieren und verwenden Sie spezielle Agenten. ---- - -Agenten sind spezialisierte AI-Assistenten, die für bestimmte Aufgaben und Arbeitsabläufe konfiguriert werden können. Sie ermöglichen Ihnen die Erstellung gezielter Werkzeuge mit benutzerdefinierten Eingabeaufforderungen, Modellen und Werkzeugzugriff. - -:::tip -Verwenden Sie den Planagenten, um Code zu analysieren und Vorschläge zu überprüfen, ohne Codeänderungen vorzunehmen. -::: - -Sie können während einer Sitzung zwischen Agenten wechseln oder sie mit der Erwähnung `@` aufrufen. - ---- - -## Typen - -Es gibt zwei Arten von Agenten in OpenCode; Primäragenten und Subagenten. - ---- - -### Primäragenten - -Primäragenten sind die Hauptassistenten, mit denen Sie direkt interagieren. Sie können sie mit der **Tabulatortaste** oder Ihrer konfigurierten Tastenkombination `switch_agent` durchblättern. Diese Agenten kümmern sich um Ihr Hauptgespräch. Der Werkzeugzugriff wird über Berechtigungen konfiguriert – zum Beispiel sind bei „Build“ alle Werkzeuge aktiviert, während „Plan“ eingeschränkt ist. - -:::tip -Sie können die **Tabulatortaste** verwenden, um während einer Sitzung zwischen primären Agenten zu wechseln. -::: - -OpenCode verfügt über zwei integrierte Primäragenten: **Build** und **Plan**. Auch -Schauen wir uns diese unten an. - ---- - -### Build - -_Modus_: `primary` - -Build ist der **Standard**-Primäragent mit allen aktivierten Tools. Dies ist der Standardagent für Entwicklungsarbeiten, bei dem Sie vollen Zugriff auf Dateioperationen und Systembefehle benötigen. - ---- - -### Plan - -_Modus_: `primary` - -Ein eingeschränkter Agent, der für Planung und Analyse entwickelt wurde. Wir verwenden ein Berechtigungssystem, um Ihnen mehr Kontrolle zu geben und unbeabsichtigte Änderungen zu verhindern. -Standardmäßig sind alle folgenden Elemente auf `ask` gesetzt: - -- `file edits`: Alle Schreibvorgänge, Patches und Bearbeitungen -- `bash`: Alle Bash-Befehle - -Dieser Agent ist nützlich, wenn Sie möchten, dass LLM Code analysiert, Änderungen vorgeschlagen oder Pläne erstellt werden, ohne tatsächliche Änderungen an Ihrer Codebasis vorzunehmen. - ---- - -### General - -_Modus_: `subagent` - -Ein Allzweckagent zur Recherche komplexerer Fragen und zur Ausführung mehrstufiger Aufgaben. Verfügt über vollständigen Zugriff auf das Tool (außer Todo), sodass bei Bedarf Dateiänderungen vorgenommen werden können. Verwenden Sie Matrizen, um mehrere Arbeitseinheiten parallel auszuführen. - ---- - -### Explore - -_Modus_: `subagent` - -Ein schneller, schreibgeschützter Agent zum Erkunden von Codebasen. Dateien können nicht geändert werden. Verwenden Sie dies, wenn Sie Dateien schnell anhand von Mustern finden, Code nach Schlüsselwörtern durchsuchen oder Fragen zur Codebasis beantworten müssen. - ---- - -### Scout - -_Modus_: `subagent` - -Ein schreibgeschützter Agent für externe Dokumentation und Dependency-Recherche. Verwenden Sie ihn, wenn Sie ein Dependency-Repository in den von OpenCode verwalteten Cache klonen, den Quellcode einer Bibliothek untersuchen oder lokalen Code mit Upstream-Implementierungen abgleichen müssen, ohne Ihren Workspace zu verändern. - ---- - -### Compaction - -_Modus_: `primary` - -Versteckter Systemagent, der lange Kontext in einer kleineren Zusammenfassung komprimiert. Es wird bei Bedarf automatisch ausgeführt und ist im UI nicht auswählbar. - ---- - -### Title - -_Modus_: `primary` - -Versteckter Systemagent, der kurze Sitzungstitel generiert. Es läuft automatisch und ist im UI nicht auswählbar. - ---- - -### Summary - -_Modus_: `primary` - -Versteckter Systemagent, der Sitzungszusammenfassungen erstellt. Es läuft automatisch und ist im UI nicht auswählbar. - ---- - -## Verwendung - -1. Verwenden Sie für primäre Agenten die **Tabulatortaste**, um während einer Sitzung durch sie zu blättern. Sie können auch Ihre konfigurierte `switch_agent`-Tastenkombination verwenden. - -2. Subagenten können aufgerufen werden: - - **Automatisch** durch primäre Agenten für spezielle Aufgaben basierend auf ihren Beschreibungen. - - Manuell durch **@ Erwähnung** eines Subagenten in Ihrer Nachricht. Zum Beispiel. - - ```txt frame="none" - @general help me search for this function - ``` - -3. **Navigation zwischen Sitzungen**: Wenn Subagenten ihre eigenen untergeordneten Sitzungen erstellen, können Sie zwischen der übergeordneten Sitzung und allen untergeordneten Sitzungen sorgfältig handeln, indem Sie Folgendes verwenden: - - **\+Rechts** (oder Ihre konfigurierte `session_child_cycle`-Tastenkombination), um vorwärts durch Parent → Child1 → Child2 → ... → Parent zu blättern - - **\+Links** (oder Ihre konfigurierte `session_child_cycle_reverse`-Tastenkombination), um rückwärts durch Parent ← Child1 ← Child2 ← ... ← Parent zu blättern - - Dadurch können Sie nahtlos zwischen der Hauptkonversation und der spezialisierten Subagentenarbeit wechseln. - ---- - -## Konfiguration - -Sie können die integrierten Agenten anpassen oder über die Konfiguration eigene erstellen. Agenten können auf zwei Arten konfiguriert werden: - ---- - -### JSON - -Konfigurieren Sie Agenten in Ihrer `opencode.json`-Konfigurationsdatei: - -```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 - -Sie können Agenten auch mithilfe von Markdown-Dateien definieren. Platzieren Sie sie in: - -- Global: `~/.config/opencode/agents/` -- Pro 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. -``` - -Der Name der Markdown-Datei wird zum Agentennamen. Beispielsweise erstellte `review.md` einen `review`-Agenten. - ---- - -## Optionen - -Schauen wir uns diese Konfigurationsmöglichkeiten im Detail an. - ---- - -### Beschreibung - -Verwenden Sie die Option `description`, um eine kurze Beschreibung darüber bereitzustellen, was der Agent tut und wann er verwendet werden soll. - -```json title="opencode.json" -{ - "agent": { - "review": { - "description": "Reviews code for best practices and potential issues" - } - } -} -``` - -Dies ist eine **erforderliche** Konfigurationsoption. - ---- - -### Temperatur - -Steuern Sie die Zufälligkeit und Kreativität der Antworten von LLM mit der `temperature`-Konfiguration. - -Höchste Werte machen die Antworten fokussierter und deterministischer, während höhere Werte die Kreativität und Variabilität steigern. - -```json title="opencode.json" -{ - "agent": { - "plan": { - "temperature": 0.1 - }, - "creative": { - "temperature": 0.8 - } - } -} -``` - -Temperaturwerte liegen typischerweise zwischen 0.0 und 1.0: - -- **0.0-0.2**: Sehr fokussierte und deterministische Antworten, ideal für Code-Analyse und Planung -- **0.3-0.5**: Ausgewogene Antworten mit etwas Kreativität, gut für allgemeine Entwicklungsaufgaben -- **0.6-1.0**: Kreativere und vielfältigere Antworten, nützlich für Brainstorming und Erkundung - -```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}" - } - } -} -``` - -Wenn keine Temperatur angegeben ist, verwendet OpenCode modellspezifische Standardwerte; typischerweise 0 für die meisten Modelle, 0.55 für Qwen-Modelle. - ---- - -### Schritte - -Steuern Sie die maximale Anzahl an Agenteniterationen, die ein Agent durchführen kann, bevor er gezwungen wird, nur mit Text zu antworten. Dadurch können Benutzer, die die Kosten kontrollieren möchten, ein Limit für Agentenaktionen festlegen. - -Wenn dies nicht festgelegt ist, iteriert der Agent weiter, bis das Modell den Stopp beschließt oder der Benutzer die Sitzung unterbricht. - -```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 - } - } -} -``` - -Wenn das Limit erreicht ist, erhält der Agent eine spezielle Systemaufforderung, die ihn anweist, mit einer Zusammenfassung seiner Arbeit und empfohlenen verbleibenden Aufgaben zu antworten. - -:::caution -Das alte Feld `maxSteps` ist veraltet. Verwenden Sie stattdessen `steps`. -::: - ---- - -### Deaktivieren - -Auf `true` setzen, um den Agenten zu deaktivieren. - -```json title="opencode.json" -{ - "agent": { - "review": { - "disable": true - } - } -} -``` - ---- - -### Prompt - -Geben Sie mit der `prompt`-Konfiguration eine benutzerdefinierte Systemaufforderungsdatei für diese Agenten an. Die Eingabeaufforderungsdatei sollte Anweisungen enthalten, die speziell auf den Zweck des Agenten zugeschnitten sind. - -```json title="opencode.json" -{ - "agent": { - "review": { - "prompt": "{file:./prompts/code-review.txt}" - } - } -} -``` - -Dieser Pfad ist relativ zum Speicherort der Konfigurationsdatei. Dies funktioniert sowohl für die globale OpenCode-Konfiguration als auch für die projektspezifische Konfiguration. - ---- - -### Modell - -Verwenden Sie die `model`-Konfiguration, um das Modell für diese Agenten zu überschreiben. Nützlich für die Verwendung verschiedener Modelle, die für verschiedene Aufgaben optimiert sind. Zum Beispiel ein schnelleres Modell für die Planung, ein leistungsfähigeres Modell für die Umsetzung. - -:::tip -Wenn Sie kein Modell angeben, verwenden Sie den primären Agenten [model globally configured](/docs/config#models), während die Subagenten das Modell des primären Agenten verwenden, der den Subagenten aufgerufen hat. -::: - -```json title="opencode.json" -{ - "agent": { - "plan": { - "model": "anthropic/claude-haiku-4-20250514" - } - } -} -``` - -Die Modell-ID in Ihrer OpenCode-Konfiguration verwendet das Format `provider/model-id`. Wenn Sie beispielsweise [OpenCode Zen](/docs/zen) verwenden, würden Sie `opencode/gpt-5.1-codex` für GPT 5.1 Codex verwenden. - ---- - -### Werkzeuge - -Steuern Sie mit der `tools`-Konfiguration, welche Tools in diesem Agent verfügbar sind. Sie können bestimmte Tools aktivieren oder deaktivieren, indem Sie sie auf `true` oder `false` setzen. - -```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 -Die agentenspezifische Konfiguration überschreibt die globale Konfiguration. -::: - -Sie können Platzhalter auch verwenden, um mehrere Werkzeuge gleichzeitig zu steuern. So deaktivieren Sie beispielsweise alle Tools von einem 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). - ---- - -### Berechtigungen - -Sie können Berechtigungen konfigurieren, um zu verwalten, welche Aktionen ein Agent ausführen kann. Derzeit können die Berechtigungen für die Tools `edit`, `bash` und `webfetch` wie folgt konfiguriert werden: - -- `"ask"` – Bitten Sie um Genehmigung, bevor Sie das Tool ausführen -- `"allow"` – Alle Vorgänge ohne Genehmigung zulassen -- `"deny"` – Deaktivieren Sie das Tool - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - } -} -``` - -Sie können diese Berechtigungen pro Agent überschreiben. - -```json title="opencode.json" {3-5,8-10} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - }, - "agent": { - "build": { - "permission": { - "edit": "ask" - } - } - } -} -``` - -Sie können Berechtigungen auch in Markdown-Agenten festlegen. - -```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. -``` - -Sie können Berechtigungen für bestimmte Bash-Befehle festlegen. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git push": "ask", - "grep *": "allow" - } - } - } - } -} -``` - -Dies kann ein Glob-Muster annehmen. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git *": "ask" - } - } - } - } -} -``` - -Und Sie können den Platzhalter `*` auch verwenden, um Berechtigungen für alle Befehle zu verwalten. -Da die letzte übereinstimmende Regel Vorrang hat, setzen Sie zuerst den Platzhalter `*` und danach bestimmte Regeln. - -```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). - ---- - -### Modus - -Steuern Sie den Modus des Agenten mit der `mode`-Konfiguration. Mit der Option `mode` wird festgelegt, wie der Agent verwendet werden kann. - -```json title="opencode.json" -{ - "agent": { - "review": { - "mode": "subagent" - } - } -} -``` - -Die Option `mode` kann auf `primary`, `subagent` oder `all` gesetzt werden. Wenn kein `mode` angegeben ist, wird standardmäßig `all` verwendet. - ---- - -### Versteckt - -Verstecken Sie einen Subagenten im Autovervollständigungsmenü `@` mit `hidden: true`. Nützlich für interne Subagenten, die nur programmgesteuert von anderen Agenten über das Task-Tool aufgerufen werden sollten. - -```json title="opencode.json" -{ - "agent": { - "internal-helper": { - "mode": "subagent", - "hidden": true - } - } -} -``` - -Dies wirkt sich nur auf die Benutzersichtbarkeit im Autovervollständigungsmenü aus. Versteckte Agenten können weiterhin vom Modell über das Aufgabentool aufgerufen werden, sofern die Berechtigungen dies zulassen. - -:::note -Gilt nur für `mode: subagent`-Agenten. -::: - ---- - -### Task-Berechtigungen - -Steuern Sie, welche Subagenten ein Agent über das Task-Tool mit `permission.task` aufrufen kann. Verwendet Glob-Muster für eine flexible Zuordnung. - -```json title="opencode.json" -{ - "agent": { - "orchestrator": { - "mode": "primary", - "permission": { - "task": { - "*": "deny", - "orchestrator-*": "allow", - "code-reviewer": "ask" - } - } - } - } -} -``` - -Bei der Einstellung `deny` wird der Subagent vollständig aus der Beschreibung des Aufgabentools entfernt, sodass das Modell nicht versucht, ihn aufzurufen. - -:::tip -Die Regeln werden der Reihe nach ausgewertet und die **letzte übereinstimmende Regel gewinnt**. Im obigen Beispiel entspricht `orchestrator-planner` sowohl `*` (verweigern) als auch `orchestrator-*` (zulassen), aber da `orchestrator-*` nach `*` kommt, ist das Ergebnis `allow`. -::: - -:::tip -Benutzer können jeden Subagenten immer direkt über das Autovervollständigungsmenü `@` aufrufen, auch wenn die Aufgabenberechtigungen des Agenten dies verweigern würden. -::: - ---- - -### Farbe - -Passen Sie das visuelle Erscheinungsbild des Agenten im UI mit der Option `color` an. Dies wirkt sich darauf aus, wie der Agent in der Benutzeroberfläche angezeigt wird. - -Verwenden Sie eine gültige Hex-Farbe (z. B. `#FF5733`) oder Themenfarbe: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`. - -```json title="opencode.json" -{ - "agent": { - "creative": { - "color": "#ff6b6b" - }, - "code-reviewer": { - "color": "accent" - } - } -} -``` - ---- - -### Top P - -Steuern Sie die Antwortvielfalt mit der Option `top_p`. Alternative zur Temperatur zur Kontrolle des Zufalls. - -```json title="opencode.json" -{ - "agent": { - "brainstorm": { - "top_p": 0.9 - } - } -} -``` - -Die Werte reichen von 0.0 bis 1.0. Niedrigere Werte sind fokussierter, höhere Werte vielfältiger. - ---- - -### Zusätzliche Optionen - -Alle anderen Optionen, die Sie in Ihrer Agentenkonfiguration angeben, werden als Modelloptionen **direkt** an den Anbieter weitergeleitet. Dadurch können Sie anbieterspezifische Funktionen und Parameter nutzen. - -Mit den Argumentationsmodellen von OpenAI können Sie beispielsweise den Argumentationsaufwand steuern: - -```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" - } - } -} -``` - -Diese zusätzlichen Optionen sind modell- und anbieterspezifisch. Überprüfen Sie die Dokumentation Ihres Anbieters auf verfügbare Parameter. - -:::tip -Führen Sie `opencode models` aus, um eine Liste der verfügbaren Modelle anzubieten. -::: - ---- - -## Agenten erstellen - -Mit dem folgenden Befehl können Sie neue Agenten erstellen: - -```bash -opencode agent create -``` - -Dieser interaktive Befehl führt zu Folgendem: - -1. Fragen Sie, wo der Agent gespeichert werden soll. global oder projektspezifisch. -2. Beschreibung dessen, was der Agent tun soll. -3. Generieren Sie eine entsprechende Systemaufforderung und -kennung. -4. Hier können Sie auswählen, auf welche Tools der Agent zugreifen kann. -5. Erstellen Sie abschließend eine Markdown-Datei mit der Agentenkonfiguration. - ---- - -## Anwendungsfälle - -Hier sind einige häufige Anwendungsfälle für verschiedene Agenten. - -- **Build-Agent**: Vollständige Entwicklungsarbeit mit allen aktivierten Tools -- **Planagent**: Analyse und Planung ohne Änderungen -- **Review-Agent**: Codeüberprüfung mit schreibgeschütztem Zugriff plus Dokumentationstools -- **Debug-Agent**: Konzentriert sich auf die Untersuchung mit aktivierten Bash- und Lesetools -- **Docs-Agent**: Schreiben von Dokumentationen mit Dateioperationen, aber ohne Systembefehle - ---- - -## Beispiele - -Hier sind einige Beispielagenten, die für Sie nützlich sein könnten. - -:::tip -Haben Sie einen Agenten, den Sie gerne teilen möchten? [Reichen Sie einen PR ein](https://github.com/anomalyco/opencode). -::: - ---- - -### Dokumentationsagent - -```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 -``` - ---- - -### Sicherheitsprüfer - -```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 -``` diff --git a/packages/web/src/content/docs/de/cli.mdx b/packages/web/src/content/docs/de/cli.mdx deleted file mode 100644 index 2c100e7c79..0000000000 --- a/packages/web/src/content/docs/de/cli.mdx +++ /dev/null @@ -1,616 +0,0 @@ ---- -title: CLI -description: OpenCode CLI Optionen und Befehle. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -Der OpenCode CLI startet standardmäßig das [TUI](/docs/tui), wenn er ohne Argumente ausgeführt wird. - -```bash -opencode -``` - -Es akzeptiert aber auch Befehle, wie auf dieser Seite dokumentiert. Dadurch können Sie programmgesteuert mit OpenCode interagieren. - -```bash -opencode run "Explain how closures work in JavaScript" -``` - ---- - -### tui - -Starten Sie die Terminalbenutzeroberfläche OpenCode. - -```bash -opencode [project] -``` - -#### Optionen - -| Flag | Kurz | Beschreibung | -| ---------------------------------------- | ---- | ---------------------------------------------------------------------- | -| {"--continue"} | `-c` | Setzen Sie die letzte Sitzung fort | -| {"--session"} | `-s` | Session-ID zum Fortfahren | -| {"--fork"} | | Sitzung beim Fortsetzen verzweigen (mit `--continue` oder `--session`) | -| {"--prompt"} | | Prompt zur Verwendung | -| {"--model"} | `-m` | Zu verwendendes Modell in der Form provider/model | -| {"--agent"} | | Zu verwendender Agent | -| {"--port"} | | Port zum Abhören | -| {"--hostname"} | | Hostname zum Abhören | - ---- - -## Befehle - -Der OpenCode CLI verfügt außerdem über die folgenden Befehle. - ---- - -### agent - -Agenten für OpenCode verwalten. - -```bash -opencode agent [command] -``` - ---- - -### attach - -Schließen Sie ein Terminal an einen bereits laufenden OpenCode-Backend-Server an, der über die Befehle `serve` oder `web` gestartet wurde. - -```bash -opencode attach [url] -``` - -Dies ermöglicht die Verwendung von TUI mit einem Remote-Backend OpenCode. Zum Beispiel: - -```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 -``` - -#### Optionen - -| Flag | Kurz | Beschreibung | -| ---------------------------------------- | ---- | ---------------------------------------------------------------------------------- | -| {"--dir"} | | Arbeitsverzeichnis zum Starten von TUI in | -| {"--continue"} | `-c` | Letzte Sitzung fortsetzen | -| {"--session"} | `-s` | Session-ID zum Fortfahren | -| {"--fork"} | | Sitzung beim Fortsetzen abzweigen (mit `--continue` oder `--session` verwenden) | -| {"--password"} | `-p` | Basic-Auth-Passwort (standardmäßig `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Basic-Auth-Benutzername (standardmäßig `OPENCODE_SERVER_USERNAME` oder `opencode`) | - ---- - -#### create - -Erstellen Sie einen neuen Agenten mit benutzerdefinierter Konfiguration. - -```bash -opencode agent create -``` - -Dieser Befehl führt Sie durch die Erstellung eines neuen Agenten mit einer benutzerdefinierten Systemeingabeaufforderung und Toolkonfiguration. - ---- - -#### list - -Listen Sie alle verfügbaren Agenten auf. - -```bash -opencode agent list -``` - ---- - -### auth - -Befehl zum Verwalten von Anmeldeinformationen und Anmelden für Anbieter. - -```bash -opencode auth [command] -``` - ---- - -#### login - -OpenCode wird von der Anbieterliste bei [Models.dev](https://models.dev) unterstützt, sodass Sie `opencode auth login` verwenden können, um API-Schlüssel für jeden Anbieter zu konfigurieren, den Sie verwenden möchten. Dies wird in `~/.local/share/opencode/auth.json` gespeichert. - -```bash -opencode auth login -``` - -Wenn OpenCode startet, lädt es den Anbieter aus der Anmeldeinformationsdatei. Und ob in Ihren Umgebungen Schlüssel sind oder in Ihrem Projekt eine `.env`-Datei vorhanden ist. - ---- - -#### list - -Listet alle authentifizierten Anbieter auf, wie in der Anmeldeinformationsdatei gespeichert. - -```bash -opencode auth list -``` - -Oder die Kurzversion. - -```bash -opencode auth ls -``` - ---- - -#### logout - -Melden Sie sich von einem Anbieter ab, indem Sie ihn aus der Anmeldeinformationsdatei löschen. - -```bash -opencode auth logout -``` - ---- - -### github - -Verwalten Sie den GitHub-Agenten für die Repository-Automatisierung. - -```bash -opencode github [command] -``` - ---- - -#### install - -Installieren Sie den GitHub-Agenten in Ihrem Repository. - -```bash -opencode github install -``` - -Dadurch wird der erforderliche GitHub-Aktionsworkflow eingerichtet und Sie durch den Konfigurationsprozess geführt. [Learn more](/docs/github). - ---- - -#### run - -Führen Sie den GitHub-Agenten aus. Dies wird normalerweise in GitHub-Aktionen verwendet. - -```bash -opencode github run -``` - -##### Optionen - -| Flag | Beschreibung | -| ------------------------------------- | --------------------------------------------------- | -| {"--event"} | GitHub Scheinereignis zum Ausführen des Agenten für | -| {"--token"} | GitHub persönliches Zugriffstoken | - ---- - -### mcp - -Verwalten Sie Model Context Protocol-Server. - -```bash -opencode mcp [command] -``` - ---- - -#### add - -Fügen Sie Ihrer Konfiguration einen MCP-Server hinzu. - -```bash -opencode mcp add -``` - -Dieser Befehl führt Sie durch das Hinzufügen eines lokalen oder Remote-MCP-Servers. - ---- - -#### list - -Listen Sie alle konfigurierten MCP-Server und deren Verbindungsstatus auf. - -```bash -opencode mcp list -``` - -Oder nutzen Sie die Kurzversion. - -```bash -opencode mcp ls -``` - ---- - -#### auth - -Authentifizieren Sie sich mit einem OAuth-fähigen MCP-Server. - -```bash -opencode mcp auth [name] -``` - -Wenn Sie keinen Servernamen angeben, werden Sie aufgefordert, einen der verfügbaren OAuth-fähigen Server auszuwählen. - -Sie können auch OAuth-fähige Server und deren Authentifizierungsstatus auflisten. - -```bash -opencode mcp auth list -``` - -Oder nutzen Sie die Kurzversion. - -```bash -opencode mcp auth ls -``` - ---- - -#### logout - -Entfernen Sie OAuth-Anmeldeinformationen für einen MCP-Server. - -```bash -opencode mcp logout [name] -``` - ---- - -#### debug - -Beheben Sie OAuth-Verbindungsprobleme für einen MCP-Server. - -```bash -opencode mcp debug -``` - ---- - -### models - -Listen Sie alle verfügbaren Modelle der konfigurierten Anbieter auf. - -```bash -opencode models [provider] -``` - -Dieser Befehl zeigt alle bei Ihren konfigurierten Anbietern verfügbaren Modelle im Format `provider/model` an. - -Dies ist nützlich, um die genauen Modellnamen herauszufinden, die in [Ihrer Konfiguration](/docs/config/) verwendet werden sollen. - -Sie können optional eine Anbieter-ID übergeben, um Modelle nach diesem Anbieter zu filtern. - -```bash -opencode models anthropic -``` - -#### Optionen - -| Flag | Beschreibung | -| --------------------------------------- | ------------------------------------------------------------------------------------- | -| {"--refresh"} | Aktualisieren Sie den Modellcache von models.dev | -| {"--verbose"} | Verwenden Sie eine ausführlichere Modellausgabe (einschließlich Metadaten wie Kosten) | - -Verwenden Sie das Flag `--refresh`, um die zwischengespeicherte Modellliste zu aktualisieren. Dies ist nützlich, wenn einem Anbieter neue Modelle hinzugefügt wurden und Sie diese in OpenCode sehen möchten. - -```bash -opencode models --refresh -``` - ---- - -### run - -Führen Sie OpenCode im nicht interaktiven Modus aus, indem Sie direkt eine Eingabeaufforderung übergeben. - -```bash -opencode run [message..] -``` - -Dies ist nützlich für die Skripterstellung, die Automatisierung oder wenn Sie eine schnelle Antwort wünschen, ohne das vollständige TUI zu starten. Zum Beispiel: - -```bash "opencode run" -opencode run Explain the use of context in Go -``` - -Sie können auch eine Verbindung zu einer laufenden `opencode serve`-Instanz herstellen, um bei jedem Lauf Kaltstartzeiten für den MCP-Server zu vermeiden: - -```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" -``` - -#### Optionen - -| Flag | Kurz | Beschreibung | -| ---------------------------------------- | ---- | --------------------------------------------------------------------------------------------------- | -| {"--command"} | | Der auszuführende Befehl, Argumente als Nachricht verwenden | -| {"--continue"} | `-c` | Setzen Sie die letzte Sitzung fort | -| {"--session"} | `-s` | Session-ID zum Fortfahren | -| {"--fork"} | | Sitzung beim Fortsetzen verzweigen (mit `--continue` oder `--session` verwenden) | -| {"--share"} | | Teilen Sie die Sitzung | -| {"--model"} | `-m` | Zu verwendendes Modell in der Form provider/model | -| {"--agent"} | | Zu verwendender Agent | -| {"--file"} | `-f` | Datei(en) zum Anhängen an die Nachricht | -| {"--format"} | | Format: default (formatiert) oder json (rohe JSON-Ereignisse) | -| {"--title"} | | Titel für die Sitzung (verwendet eine verkürzte Eingabeaufforderung, wenn kein Wert angegeben wird) | -| {"--attach"} | | An einen laufenden OpenCode-Server anschließen (z.B. http://localhost:4096) | -| {"--password"} | `-p` | Basic-Auth-Passwort (standardmäßig `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Basic-Auth-Benutzername (standardmäßig `OPENCODE_SERVER_USERNAME` oder `opencode`) | -| {"--dir"} | | Verzeichnis für die Ausführung, oder Pfad auf dem Remote-Server beim Anhängen | -| {"--variant"} | | Modellvariante (anbieterspezifischer Reasoning-Aufwand) | -| {"--thinking"} | | Denkblöcke anzeigen | -| {"--port"} | | Port für den lokalen Server (standardmäßig zufälliger Port) | - ---- - -### serve - -Starten Sie einen Headless-OpenCode-Server für den API-Zugriff. Sehen Sie sich die [Server-Dokumentation](/docs/server) für die vollständige HTTP-Schnittstelle an. - -```bash -opencode serve -``` - -Dadurch wird ein HTTP-Server gestartet, der API-Zugriff auf OpenCode-Funktionalität ohne die TUI-Schnittstelle bietet. Legen Sie `OPENCODE_SERVER_PASSWORD` fest, um die HTTP-Basisauthentifizierung zu aktivieren (Benutzername ist standardmäßig `opencode`). - -#### Optionen - -| Flag | Beschreibung | -| ---------------------------------------- | ----------------------------------------------- | -| {"--port"} | Port zum Abhören | -| {"--hostname"} | Hostname zum Abhören | -| {"--mdns"} | mDNS-Discovery aktivieren | -| {"--cors"} | Zusätzliche Browser-Ursprünge für CORS zulassen | - ---- - -### session - -OpenCode-Sitzungen verwalten. - -```bash -opencode session [command] -``` - ---- - -#### list - -Listen Sie alle OpenCode-Sitzungen auf. - -```bash -opencode session list -``` - -##### Optionen - -| Flag | Kurz | Beschreibung | -| ----------------------------------------- | ---- | ---------------------------------------- | -| {"--max-count"} | `-n` | Beschränken auf die N neuesten Sitzungen | -| {"--format"} | | Ausgabeformat: table oder json (table) | - ---- - -### stats - -Zeigen Sie Token-Nutzungs- und Kostenstatistiken für Ihre OpenCode-Sitzungen an. - -```bash -opencode stats -``` - -#### Optionen - -| Flag | Beschreibung | -| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -| {"--days"} | Statistiken für die letzten N Tage anzeigen (alle Zeiten) | -| {"--tools"} | Anzahl der angebotenen Werkzeuge (alle) | -| {"--models"} | Aufschlüsselung der Modellnutzung anzeigen (standardmäßig ausgeblendet). Übergeben Sie eine Zahl, um die obersten N anzuzeigen | -| {"--project"} | Nach Projekt filtern (alle Projekte, leere Zeichenfolge: aktuelles Projekt) | - ---- - -### export - -Sitzungsdaten als JSON exportieren. - -```bash -opencode export [sessionID] -``` - -Wenn Sie keine Sitzungs-ID angeben, werden Sie aufgefordert, eine der verfügbaren Sitzungen auszuwählen. - ---- - -### import - -Importieren Sie Sitzungsdaten aus einer JSON-Datei oder einer OpenCode-Freigabe-URL. - -```bash -opencode import -``` - -Sie können aus einer lokalen Datei oder einer OpenCode-Freigabe-URL importieren. - -```bash -opencode import session.json -opencode import https://opncd.ai/s/abc123 -``` - ---- - -### web - -Starten Sie einen Headless-OpenCode-Server mit einer Weboberfläche. - -```bash -opencode web -``` - -Dadurch wird ein HTTP-Server gestartet und ein Webbrowser geöffnet, um über eine Webschnittstelle auf OpenCode zuzugreifen. Legen Sie `OPENCODE_SERVER_PASSWORD` fest, um die HTTP-Basisauthentifizierung zu aktivieren (Benutzername ist standardmäßig `opencode`). - -#### Optionen - -| Flag | Beschreibung | -| ---------------------------------------- | ----------------------------------------------- | -| {"--port"} | Port zum Abhören | -| {"--hostname"} | Hostname zum Abhören | -| {"--mdns"} | mDNS-Discovery aktivieren | -| {"--cors"} | Zusätzliche Browser-Ursprünge für CORS zulassen | - ---- - -### acp - -Starten Sie einen ACP (Agent Client Protocol) Server. - -```bash -opencode acp -``` - -Dieser Befehl startet einen ACP-Server, der über stdin/stdout unter Verwendung von nd-JSON kommuniziert. - -#### Optionen - -| Flag | Beschreibung | -| ---------------------------------------- | -------------------- | -| {"--cwd"} | Arbeitsverzeichnis | -| {"--port"} | Port zum Abhören | -| {"--hostname"} | Hostname zum Abhören | - ---- - -### uninstall - -Deinstallieren Sie OpenCode und entfernen Sie alle zugehörigen Dateien. - -```bash -opencode uninstall -``` - -#### Optionen - -| Flag | Kurz | Beschreibung | -| ------------------------------------------- | ---- | --------------------------------------------------- | -| {"--keep-config"} | `-c` | Konfigurationsdateien behalten | -| {"--keep-data"} | `-d` | Sitzungsdaten und Snapshots aufbewahren | -| {"--dry-run"} | | Zeigt, was entfernt werden würde, ohne zu entfernen | -| {"--force"} | `-f` | Bestätigungsaufforderungen überspringen | - ---- - -### upgrade - -Aktualisiert OpenCode auf die neueste Version oder eine bestimmte Version. - -```bash -opencode upgrade [target] -``` - -Um auf die neueste Version zu aktualisieren: - -```bash -opencode upgrade -``` - -Um auf eine bestimmte Version zu aktualisieren. - -```bash -opencode upgrade v0.1.48 -``` - -#### Optionen - -| Flag | Kurz | Beschreibung | -| -------------------------------------- | ---- | ------------------------------------------------------------------- | -| {"--method"} | `-m` | Die zu verwendende Installationsmethode; curl, npm, pnpm, bun, brew | - ---- - -## Globale Flags - -Der OpenCode CLI akzeptiert die folgenden globalen Flags. - -| Flag | Kurz | Beschreibung | -| ------------------------------------------ | ---- | ----------------------------------------- | -| {"--help"} | `-h` | Hilfe anzeigen | -| {"--version"} | `-v` | Versionsnummer drucken | -| {"--print-logs"} | | Protokolle nach stderr drucken | -| {"--log-level"} | | Protokollebene (DEBUG, INFO, WARN, ERROR) | - ---- - -## Umgebungsvariablen - -OpenCode kann mithilfe von Umgebungsvariablen konfiguriert werden. - -| Variable | Typ | Beschreibung | -| ------------------------------------- | --------------- | -------------------------------------------------------------------------------- | -| `OPENCODE_AUTO_SHARE` | boolescher Wert | Sitzungen automatisch teilen | -| `OPENCODE_GIT_BASH_PATH` | Zeichenfolge | Pfad zur ausführbaren Git Bash-Datei unter Windows | -| `OPENCODE_CONFIG` | Zeichenfolge | Pfad zur Konfigurationsdatei | -| `OPENCODE_CONFIG_DIR` | Zeichenfolge | Pfad zum Konfigurationsverzeichnis | -| `OPENCODE_CONFIG_CONTENT` | Zeichenfolge | Inline-JSON-Konfigurationsinhalt | -| `OPENCODE_DISABLE_AUTOUPDATE` | boolescher Wert | Automatische Update-Prüfungen deaktivieren | -| `OPENCODE_DISABLE_PRUNE` | boolescher Wert | Bereinigung alter Daten deaktivieren | -| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolescher Wert | Deaktivieren Sie die automatische Aktualisierung von Terminaltiteln | -| `OPENCODE_PERMISSION` | Zeichenfolge | Inline-JSON-Berechtigungskonfiguration | -| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolescher Wert | Standard-Plugins deaktivieren | -| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolescher Wert | Automatische LSP-Server-Downloads deaktivieren | -| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolescher Wert | Experimentelle Modelle aktivieren | -| `OPENCODE_DISABLE_AUTOCOMPACT` | boolescher Wert | Automatische Kontextkomprimierung deaktivieren | -| `OPENCODE_DISABLE_CLAUDE_CODE` | boolescher Wert | Deaktivieren Sie das Lesen von `.claude` (Prompt + Skills) | -| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolescher Wert | Deaktivieren Sie das Lesen von `~/.claude/CLAUDE.md` | -| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolescher Wert | Deaktivieren Sie das Laden von `.claude/skills` | -| `OPENCODE_DISABLE_MODELS_FETCH` | boolescher Wert | Deaktivieren Sie das Abrufen von Modellen aus Remote-Quellen | -| `OPENCODE_FAKE_VCS` | Zeichenfolge | Gefälschter VCS-Anbieter zu Testzwecken | -| `OPENCODE_CLIENT` | Zeichenfolge | Client-ID (standardmäßig `cli`) | -| `OPENCODE_ENABLE_EXA` | boolescher Wert | Exa-Websuchtools aktivieren | -| `OPENCODE_SERVER_PASSWORD` | Zeichenfolge | Aktivieren Sie die Basisauthentifizierung für `serve`/`web` | -| `OPENCODE_SERVER_USERNAME` | Zeichenfolge | Benutzernamen für die Basisauthentifizierung überschreiben (Standard `opencode`) | -| `OPENCODE_MODELS_URL` | Zeichenfolge | Benutzerdefinierte URL zum Abrufen der Modellkonfiguration | - ---- - -### Experimentell - -Diese Umgebungsvariablen ermöglichen experimentelle Funktionen, die sich ändern oder entfernt werden können. - -| Variable | Typ | Beschreibung | -| ----------------------------------------------- | --------------- | --------------------------------------------------------- | -| `OPENCODE_EXPERIMENTAL` | boolescher Wert | Experimentelle Funktionen unter dem Sammelflag aktivieren | -| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolescher Wert | Symbolerkennung aktivieren | -| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolescher Wert | Kopieren bei Auswahl in TUI deaktivieren | -| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | Zahl | Standard-Timeout für Bash-Befehle in ms | -| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | Zahl | Maximale Ausgabetokens für LLM-Antworten | -| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolescher Wert | Dateiüberwachung für das gesamte Verzeichnis aktivieren | -| `OPENCODE_EXPERIMENTAL_OXFMT` | boolescher Wert | Oxfmt-Formatierer aktivieren | -| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolescher Wert | Experimentelles LSP-Tool aktivieren | -| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolescher Wert | Dateiüberwachung deaktivieren | -| `OPENCODE_EXPERIMENTAL_EXA` | boolescher Wert | Experimentelle Exa-Funktionen aktivieren | -| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolescher Wert | TY LSP für Python-Dateien aktivieren | -| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolescher Wert | Planmodus aktivieren | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | boolescher Wert | Hintergrundaufgaben für Subagenten aktivieren | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | boolescher Wert | Experimentelles Ereignissystem aktivieren | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | boolescher Wert | Nativen LLM-Anfragepfad aktivieren | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | boolescher Wert | Parallele Websuche aktivieren | -| `OPENCODE_EXPERIMENTAL_SCOUT` | boolescher Wert | Scout-Subagent aktivieren | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | boolescher Wert | Workspace-Unterstützung aktivieren | diff --git a/packages/web/src/content/docs/de/commands.mdx b/packages/web/src/content/docs/de/commands.mdx deleted file mode 100644 index 5c795fba0c..0000000000 --- a/packages/web/src/content/docs/de/commands.mdx +++ /dev/null @@ -1,323 +0,0 @@ ---- -title: Befehle -description: Erstellen Sie benutzerdefinierte Befehle für sich wiederholende Aufgaben. ---- - -Mit benutzerdefinierten Befehlen können Sie eine Eingabeaufforderung angeben, die ausgeführt werden soll, wenn dieser Befehl im TUI ausgeführt wird. - -```bash frame="none" -/my-command -``` - -Benutzerdefinierte Befehle gibt es zusätzlich zu den integrierten Befehlen wie `/init`, `/undo`, `/redo`, `/share`, `/help`. [Mehr erfahren](/docs/tui#commands). - ---- - -## Befehlsdateien erstellen - -Erstellen Sie Markdown-Dateien im Verzeichnis `commands/`, um benutzerdefinierte Befehle zu definieren. - -Erstellen Sie `.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. -``` - -Der Frontmatter definiert Befehlseigenschaften. Der Inhalt wird zur Vorlage. - -Verwenden Sie den Befehl, indem Sie `/` folgen vom Befehlsnamen eingeben. - -```bash frame="none" -"/test" -``` - ---- - -## Konfiguration - -Sie können benutzerdefinierte Befehle über die OpenCode-Konfiguration hinzufügen oder indem Sie Markdown-Dateien im Verzeichnis `commands/` erstellen. - ---- - -### JSON - -Verwenden Sie die Option `command` in Ihrem 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" - } - } -} -``` - -Jetzt können Sie diesen Befehl im TUI ausführen: - -```bash frame="none" -/test -``` - ---- - -### Markdown - -Sie können Befehle auch mithilfe von Markdown-Dateien definieren. Platzieren Sie sie in: - -- Global: `~/.config/opencode/commands/` -- Pro 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. -``` - -Der Name der Markdown-Datei wird zum Befehlsnamen. Zum Beispiel `test.md` lässt -Du läufst: - -```bash frame="none" -/test -``` - ---- - -## Prompt-Konfiguration - -Die Eingabeaufforderungen für die benutzerdefinierten Befehle unterstützen mehrere spezielle Platzhalter und Syntax. - ---- - -### Argumente - -Übergeben Sie Argumente an Befehle mithilfe des Platzhalters `$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. -``` - -Führen Sie den Befehl mit Argumenten aus: - -```bash frame="none" -/component Button -``` - -Und `$ARGUMENTS` wird durch `Button` ersetzt. - -Sie können auch über Positionsparameter auf einzelne Argumente zugreifen: - -- `$1` – Erstes Argument -- `$2` – Zweites Argument -- `$3` – Drittes Argument -- Und so weiter... - -Zum Beispiel: - -```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 -``` - -Führen Sie den Befehl aus: - -```bash frame="none" -/create-file config.json src "{ \"key\": \"value\" }" -``` - -Dies ersetzt: - -- `$1` mit `config.json` -- `$2` mit `src` -- `$3` mit `{ "key": "value" }` - ---- - -### Shell-Ausgabe - -Verwenden Sie _!`command`_, um die Ausgabe [bash command](/docs/tui#bash-commands) in Ihre Eingabeaufforderung einzufügen. - -So erstellen Sie beispielsweise einen benutzerdefinierten Befehl, der die Testabdeckung analysiert: - -```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. -``` - -Oder um die letzten Änderungen zu überprüfen: - -```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. -``` - -Befehle werden im Stammverzeichnis Ihres Projekts ausgeführt und ihre Ausgabe wird Teil der Eingabeaufforderung. - ---- - -### Dateiverweise - -Fügen Sie Dateien in Ihren Befehl ein, indem Sie `@` folgend vom Dateinamen verwenden. - -```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. -``` - -Der Dateiinhalt wird automatisch in die Eingabeaufforderung einbezogen. - ---- - -## Optionen - -Schauen wir uns die Konfigurationsmöglichkeiten im Detail an. - ---- - -### Template - -Die Option `template` die Eingabeaufforderung, die an LLM gesendet wird, wenn der Befehl ausgeführt wird. - -```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." - } - } -} -``` - -Dies ist eine **erforderliche** Konfigurationsoption. - ---- - -### Description - -Verwenden Sie die Option `description`, um eine kurze Beschreibung der Funktion des Befehls bereitzustellen. - -```json title="opencode.json" -{ - "command": { - "test": { - "description": "Run tests with coverage" - } - } -} -``` - -Dies wird als Beschreibung im TUI angezeigt, wenn Sie den Befehl eingeben. - ---- - -### Agent - -Verwenden Sie die `agent`-Konfiguration, um optional anzugeben, welche [agent](/docs/agents) diesen Befehl ausführen soll. -Wenn es sich um einen [subagent](/docs/agents/#subagents) handelt, löst der Befehl standardmäßig einen Subagentenaufruf aus. -Um dieses Verhalten zu deaktivieren, setzen Sie `subtask` auf `false`. - -```json title="opencode.json" -{ - "command": { - "review": { - "agent": "plan" - } - } -} -``` - -Dies ist eine **optionale** Konfigurationsoption. Wenn nicht angegeben, wird standardmäßig Ihr aktueller Agent verwendet. - ---- - -### Subtask - -Verwenden Sie den booleschen Wert `subtask`, um zu erzwingen, dass der Befehl einen [subagent](/docs/agents/#subagents)-Aufruf auslöst. -Dies ist nützlich, wenn Sie möchten, dass der Befehl Ihren primären Kontext nicht verunreinigt und den Agenten dazu zwingt, als Subagent zu fungieren. -auch wenn `mode` in der [agent](/docs/agents)-Konfiguration auf `primary` gesetzt ist. - -```json title="opencode.json" -{ - "command": { - "analyze": { - "subtask": true - } - } -} -``` - -Dies ist eine **optionale** Konfigurationsoption. - ---- - -### Model - -Verwenden Sie die `model`-Konfiguration, um das Standardmodell für diesen Befehl zu überschreiben. - -```json title="opencode.json" -{ - "command": { - "analyze": { - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -Dies ist eine **optionale** Konfigurationsoption. - ---- - -## Integriert - -OpenCode enthält mehrere integrierte Befehle wie `/init`, `/undo`, `/redo`, `/share`, `/help`; [mehr erfahren](/docs/tui#commands). - -:::note -Benutzerdefinierte Befehle können integrierte Befehle überschreiben. -::: - -Wenn Sie einen benutzerdefinierten Befehl mit demselben Namen definieren, überschreibt dieser den integrierten Befehl. diff --git a/packages/web/src/content/docs/de/config.mdx b/packages/web/src/content/docs/de/config.mdx deleted file mode 100644 index 15f1d6c6c0..0000000000 --- a/packages/web/src/content/docs/de/config.mdx +++ /dev/null @@ -1,684 +0,0 @@ ---- -title: Konfiguration -description: Verwenden Sie die Konfiguration OpenCode JSON. ---- - -Sie können OpenCode mithilfe einer JSON-Konfigurationsdatei konfigurieren. - ---- - -## Format - -OpenCode unterstützt die Formate **JSON** und **JSONC** (JSON mit Kommentaren). - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - // Theme configuration - "theme": "opencode", - "model": "anthropic/claude-sonnet-4-5", - "autoupdate": true, -} -``` - ---- - -## Speicherorte - -Sie können Ihre Konfiguration an verschiedenen Orten platzieren und sie haben eine -andere Rangfolge. - -:::note -Konfigurationsdateien werden **zusammengeführt**, nicht ersetzt. -::: - -Konfigurationsdateien werden zusammengeführt und nicht ersetzt. Einstellungen aus den folgenden Konfigurationsspeicherorten werden kombiniert. Spätere Konfigurationen überschreiben frühere nur bei Schlüsselkonflikten. Es bleiben keine widersprüchlichen Einstellungen aus allen Konfigurationen erhalten. - -Wenn Ihre globale Konfiguration beispielsweise `theme: "opencode"` und `autoupdate: true` und Ihre Projektkonfiguration `model: "anthropic/claude-sonnet-4-5"` festlegt, umfasst die endgültige Konfiguration alle drei Einstellungen. - ---- - -### Rangfolge - -Konfigurationsquellen werden in dieser Reihenfolge geladen (spätere Quellen überschreiben frühere): - -1. **Remote-Konfiguration** (von `.well-known/opencode`) – Organisationsstandards -2. **Globale Konfiguration** (`~/.config/opencode/opencode.json`) – Benutzereinstellungen -3. **Benutzerdefinierte Konfiguration** (`OPENCODE_CONFIG` env var) – benutzerdefinierte Überschreibungen -4. **Projektkonfiguration** (`opencode.json` im Projekt) – projektspezifische Einstellungen -5. **`.opencode` Verzeichnisse** – Agenten, Befehle, Plugins -6. **Inline-Konfiguration** (`OPENCODE_CONFIG_CONTENT` env var) – Laufzeitüberschreibungen - -Dies bedeutet, dass Projektkonfigurationen globale Standardeinstellungen überschreiben können und globale Konfigurationen Remote-Organisationsstandards überschreiben können. - -:::note -Die Verzeichnisse `.opencode` und `~/.config/opencode` verwenden **Pluralnamen** für Unterverzeichnisse: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` und `themes/`. Aus Gründen der Abwärtskompatibilität werden auch einzelne Namen (z. B. `agent/`) unterstützt. -::: - ---- - -### Remote - -Organisationen können die Standardkonfiguration über den Endpunkt `.well-known/opencode` bereitstellen. Dieser wird automatisch abgerufen, wenn Sie sich bei einem Anbieter authentifizieren, der dies unterstützt. - -Zuerst wird die Remote-Konfiguration geladen, die als Basisschicht dient. Alle anderen Konfigurationsquellen (global, Projekt) können diese Standardeinstellungen überschreiben. - -Wenn Ihre Organisation beispielsweise MCP-Server bereitstellt, sind die standardmäßig deaktiviert: - -```json title="Remote config from .well-known/opencode" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": false - } - } -} -``` - -Sie können bestimmte Server in Ihrer lokalen Konfiguration aktivieren: - -```json title="opencode.json" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - ---- - -### Global - -Platzieren Sie Ihre globale OpenCode-Konfiguration in `~/.config/opencode/opencode.json`. Verwenden Sie die globale Konfiguration für benutzerweite Einstellungen wie Themen, Anbieter oder Tastenkombinationen. - -Die globale Konfiguration überschreibt die Standardeinstellungen der Remote-Organisation. - ---- - -### Pro Projekt - -Fügen Sie `opencode.json` in Ihrem Projektstamm hinzu. Die Projektkonfiguration hat unter den Standardkonfigurationsdateien die höchste Priorität – sie überschreibt sowohl globale als auch Remote-Konfigurationen. - -:::tip -Platzieren Sie die projektspezifische Konfiguration im Stammverzeichnis Ihres Projekts. -::: - -Wenn OpenCode gestartet wird, sucht es im aktuellen Verzeichnis nach einer Konfigurationsdatei oder durchsucht das nächstgelegene Git-Verzeichnis. - -Dies kann auch sicher in Git eingecheckt werden und dasselbe Schema wie das globale verwenden. - ---- - -### Benutzerdefinierter Pfad - -Geben Sie mithilfe der Umgebungsvariablen `OPENCODE_CONFIG` einen benutzerdefinierten Konfigurationsdateipfad an. - -```bash -export OPENCODE_CONFIG=/path/to/my/custom-config.json -opencode run "Hello world" -``` - -Die benutzerdefinierte Konfiguration wird in der Rangfolge zwischen globalen und Projektkonfigurationen geladen. - ---- - -### Benutzerdefiniertes Verzeichnis - -Geben Sie mit `OPENCODE_CONFIG_DIR` ein benutzerdefiniertes Konfigurationsverzeichnis an. -Umgebungsvariable. Dieses Verzeichnis wird nach Agenten, Befehlen, -Modi und Plugins genau wie das Standardverzeichnis `.opencode` und sollten -folgen der gleichen Struktur. - -```bash -export OPENCODE_CONFIG_DIR=/path/to/my/config-directory -opencode run "Hello world" -``` - -Das benutzerdefinierte Verzeichnis wird nach den Verzeichnissen global config und `.opencode` geladen, sodass es deren Einstellungen **überschreiben** kann. - ---- - -## Schema - -Die Konfigurationsdatei verfügt über ein Schema, das in [**`opencode.ai/config.json`**](https://opencode.ai/config.json) definiert ist. - -Ihr Editor sollte in der Lage sein, basierend auf dem Schema zu validieren und automatisch zu vervollständigen. - ---- - -### TUI - -Sie können TUI-spezifische Einstellungen über die Option `tui` konfigurieren. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "tui": { - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": true - }, - "diff_style": "auto" - } -} -``` - -Verfügbare Optionen: - -- `scroll_acceleration.enabled` – Scrollbeschleunigung im macOS-Stil aktivieren. **Hat Vorrang vor `scroll_speed`.** -- `scroll_speed` – Benutzerdefinierter Scrollgeschwindigkeitsmultiplikator (Standard: `3`, Minimum: `1`). Wird ignoriert, wenn `scroll_acceleration.enabled` gleich `true` ist. -- `diff_style` – Steuern Sie das Diff-Rendering. `"auto"` passt sich der Terminalbreite an, `"stacked"` zeigt immer eine einzelne Spalte an. - -[Erfahren Sie hier mehr über die Verwendung der TUI](/docs/tui). - ---- - -### Server - -Sie können Servereinstellungen für die Befehle `opencode serve` und `opencode web` über die Option `server` konfigurieren. - -```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"] - } -} -``` - -Verfügbare Optionen: - -- `port` – Port zum Abhören. -- `hostname` – Hostname zum Abhören. Wenn `mdns` aktiviert ist und kein Hostname festgelegt ist, wird standardmäßig `0.0.0.0` verwendet. -- `mdns` – mDNS-Diensterkennung aktivieren. Dadurch können andere Geräte im Netzwerk Ihres OpenCode-Servers erkannt werden. -- `mdnsDomain` – Benutzerdefinierter Domänenname für den mDNS-Dienst. Standardmäßig ist `opencode.local`. Nützlich für die Ausführung mehrerer Instanzen im selben Netzwerk. -- `cors` – Zusätzliche Ursprünge, um CORS zu ermöglichen, wenn der HTTP-Server von einem browserbasierten Client aus verwendet wird. Die Werte müssen vollständige Ursprünge haben (Schema + Host + optionaler Port), z. B. `https://app.example.com`. - -[Erfahren Sie hier mehr über den Server](/docs/server). - ---- - -### Werkzeuge - -Sie können die Tools, die ein LLM verwenden kann, über die Option `tools` verwalten. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "tools": { - "write": false, - "bash": false - } -} -``` - -[Erfahren Sie hier mehr über Tools](/docs/tools). - ---- - -### Modelle - -Sie können die Anbieter und Modelle, die Sie in Ihrer OpenCode-Konfiguration verwenden möchten, über die Optionen `provider`, `model` und `small_model` konfigurieren. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": {}, - "model": "anthropic/claude-sonnet-4-5", - "small_model": "anthropic/claude-haiku-4-5" -} -``` - -Die Option `small_model` konfiguriert ein separates Modell für einfache Aufgaben wie die Titelgenerierung. Standardmäßig versucht OpenCode, ein günstigeres Modell zu verwenden, sofern eines bei Ihrem Anbieter verfügbar ist, andernfalls greift es auf Ihr Hauptmodell zurück. - -Zu den Anbieteroptionen können `timeout` und `setCacheKey` gehören: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "timeout": 600000, - "setCacheKey": true - } - } - } -} -``` - -- `timeout` – Anforderungszeitlimit in Millisekunden (Standard: 300000). Zum Deaktivieren auf `false` setzen. -- `setCacheKey` – Stellen Sie sicher, dass immer ein Cache-Schlüssel für den angegebenen Anbieter festgelegt ist. - -Sie können auch [lokale Modelle](/docs/models#local) konfigurieren. [Mehr erfahren](/docs/models). - ---- - -#### Anbieterspezifische Optionen - -Einige Anbieter unterstützen zusätzliche Konfigurationsoptionen über die allgemeinen Einstellungen `timeout` und `apiKey` hinaus. - -##### Amazon Bedrock - -Amazon Bedrock unterstützt AWS-spezifische Konfigurationen: - -```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 für Bedrock (standardmäßig `AWS_REGION` env var oder `us-east-1`) -- `profile` – AWS benanntes Profil von `~/.aws/credentials` (standardmäßig `AWS_PROFILE` Umgebungsvariable) -- `endpoint` – Benutzerdefinierter Endpunkt URL für VPC-Endpunkte. Dies ist ein Alias ​​​​für die generische Option `baseURL` unter Verwendung der AWS-spezifischen Terminologie. Wenn beide angegeben sind, hat `endpoint` Vorrang. - -:::note -Inhabertoken (`AWS_BEARER_TOKEN_BEDROCK` oder `/connect`) haben Vorrang vor der profilbasierten Authentifizierung. Weitere Informationen finden Sie unter [Authentifizierungs-Rangfolge](/docs/providers#authentication-precedence). -::: - -[Erfahren Sie mehr über die Amazon Bedrock-Konfiguration](/docs/providers#amazon-bedrock). - ---- - -### Themen - -Sie können das Thema, das Sie in Ihrer OpenCode-Konfiguration verwenden möchten, über die Option `theme` konfigurieren. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "theme": "" -} -``` - -[Mehr erfahren](/docs/themes). - ---- - -### Agenten - -Über die Option `agent` können Sie spezielle Agenten für bestimmte Aufgaben konfigurieren. - -```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, - }, - }, - }, -} -``` - -Sie können Agenten auch mithilfe von Markdown-Dateien in `~/.config/opencode/agents/` oder `.opencode/agents/` definieren. [Mehr erfahren](/docs/agents). - ---- - -### Standardagent - -Sie können den Standardagenten mit der Option `default_agent` festlegen. Dadurch wird bestimmt, welcher Agent verwendet wird, wenn keiner explizit angegeben wird. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "default_agent": "plan" -} -``` - -Der Standardagent muss ein Primäragent (kein Subagent) sein. Dies kann ein integrierter Agent wie `"build"` oder `"plan"` oder ein von Ihnen definierter [custom agent](/docs/agents) sein. Wenn der angegebene Agent nicht existiert oder ein Subagent ist, greift OpenCode mit einer Warnung auf `"build"` zurück. - -Diese Einstellung gilt für alle Schnittstellen: TUI, CLI (`opencode run`), Desktop-App und GitHub Aktion. - ---- - -### Teilen - -Sie können die Funktion [share](/docs/share) über die Option `share` konfigurieren. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - -Dazu braucht es: - -- `"manual"` – Manuelles Teilen über Befehle zulassen (Standard) -- `"auto"` – Neue Konversationen automatisch teilen -- `"disabled"` – Teile vollständig deaktivieren - -Standardmäßig ist die Freigabe auf den manuellen Modus eingestellt, in dem Sie Konversationen explizit mit dem Befehl `/share` teilen müssen. - ---- - -### Befehle - -Sie können benutzerdefinierte Befehle für sich wiederholende Aufgaben über die Option `command` konfigurieren. - -```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", - }, - }, -} -``` - -Sie können Befehle auch mithilfe von Markdown-Dateien in `~/.config/opencode/commands/` oder `.opencode/commands/` definieren. [Mehr erfahren](/docs/commands). - ---- - -### Tastenkombinationen - -Sie können Ihre Tastenkombinationen über die Option `keybinds` anpassen. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "keybinds": {} -} -``` - -[Mehr erfahren](/docs/keybinds). - ---- - -### Automatisches Update - -OpenCode lädt beim Start automatisch alle neuen Updates herunter. Sie können dies mit der Option `autoupdate` deaktivieren. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "autoupdate": false -} -``` - -Wenn Sie keine Updates wünschen, aber dringend möchten, wenn eine neue Version verfügbar ist, setzen Sie `autoupdate` auf `"notify"`. -Beachten Sie, dass dies nur funktioniert, wenn es nicht mit einem Paketmanager wie Homebrew installiert wurde. - ---- - -### Formatierer - -Sie können Codeformatierer über die Option `formatter` konfigurieren. - -```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"] - } - } -} -``` - -[Erfahren Sie hier mehr über Formatierer](/docs/formatters). - ---- - -### Berechtigungen - -OpenCode erlaubt standardmäßig alle Vorgänge, ohne dass eine ausdrückliche Genehmigung erforderlich ist. Sie können dies mit der Option `permission` ändern. - -Um beispielsweise sicherzustellen, dass die Tools `edit` und `bash` eine Benutzergenehmigung erfordern: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "ask", - "bash": "ask" - } -} -``` - -[Erfahren Sie hier mehr über Berechtigungen](/docs/permissions). - ---- - -### Komprimierung - -Sie können das Verhalten der Kontextkomprimierung über die Option `compaction` steuern. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "compaction": { - "auto": true, - "prune": false - } -} -``` - -- `auto` – Die Sitzung wird automatisch komprimieren, wenn der Kontext voll ist (Standard: `true`). -- `prune` – Alte Tool-Ausgaben entfernen, um Token zu sparen (Standard: `false`). - ---- - -### Dateiüberwachung - -Sie können Datei-Watcher-Ignoriermuster über die Option `watcher` konfigurieren. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "watcher": { - "ignore": ["node_modules/**", "dist/**", ".git/**"] - } -} -``` - -Muster folgen der Glob-Syntax. Verwenden Sie diese Option, um verrauschte Verzeichnisse von der Dateiüberwachung auszuschließen. - ---- - -### MCP - -Sie können den MCP-Server, den Sie verwenden möchten, über die Option `mcp` konfigurieren. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": {} -} -``` - -[Mehr erfahren](/docs/mcp-servers). - ---- - -### Plugins - -[Plugins](/docs/plugins) erweitert OpenCode mit benutzerdefinierten Tools, Hooks und Integrationen. - -Platzieren Sie Ihre Plugin-Dateien in `.opencode/plugins/` oder `~/.config/opencode/plugins/`. Sie können Plugins auch über die Option `plugin` von npm laden. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "@my-org/custom-plugin"] -} -``` - -[Mehr erfahren](/docs/plugins). - ---- - -### Anweisungen - -Sie können die Anweisungen für das von Ihnen verwendete Modell über die Option `instructions` konfigurieren. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -Dies erfordert eine Reihe von Pfaden und Glob-Mustern zu Anweisungsdateien. [Erfahren Sie hier mehr über Regeln](/docs/rules). - ---- - -### Deaktivierte Anbieter - -Sie können Anbieter, die automatisch geladen werden, über die Option `disabled_providers` deaktivieren. Dies ist nützlich, wenn Sie verhindern möchten, dass bestimmte Anbieter geladen werden, selbst wenn deren Anmeldeinformationen verfügbar sind. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "disabled_providers": ["openai", "gemini"] -} -``` - -:::note -Der `disabled_providers` hat Vorrang vor `enabled_providers`. -::: - -Die Option `disabled_providers` akzeptiert ein Array des Anbieters IDs. Wenn ein Anbieter deaktiviert ist: - -- Es wird nicht geladen, selbst wenn Umgebungsvariablen festgelegt sind. -- Es wird nicht geladen, selbst wenn API-Schlüssel über den Befehl `/connect` konfiguriert werden. -- Die Modelle des Anbieters erscheinen nicht in der Modellauswahlliste. - ---- - -### Aktivierte Anbieter - -Sie können über die Option `enabled_providers` eine Zulassungsliste für Anbieter angeben. Wenn diese Option festgelegt ist, werden nur die angegebenen Anbieter aktiviert und alle anderen werden ignoriert. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "enabled_providers": ["anthropic", "openai"] -} -``` - -Dies ist nützlich, wenn Sie OpenCode darauf beschränken möchten, nur bestimmte Anbieter zu verwenden, anstatt sie einzeln zu deaktivieren. - -:::note -Der `disabled_providers` hat Vorrang vor `enabled_providers`. -::: - -Wenn ein Anbieter sowohl in `enabled_providers` als auch in `disabled_providers` vorkommt, hat `disabled_providers` aus Gründen der Abwärtskompatibilität Vorrang. - ---- - -### Experimentell - -Der Schlüssel `experimental` enthält Optionen, die sich in der aktiven Entwicklung befinden. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "experimental": {} -} -``` - -:::caution -Experimentelle Optionen sind nicht stabil. Sie können ohne vorherige Ankündigung geändert oder entfernt werden. -::: - ---- - -## Variablen - -Sie können die Variablenersetzung in Ihren Konfigurationsdateien verwenden, um auf Umgebungsvariablen und Dateiinhalte zu verweisen. - ---- - -### Umgebungsvariablen - -Verwenden Sie `{env:VARIABLE_NAME}`, um Umgebungsvariablen zu ersetzen: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "model": "{env:OPENCODE_MODEL}", - "provider": { - "anthropic": { - "models": {}, - "options": { - "apiKey": "{env:ANTHROPIC_API_KEY}" - } - } - } -} -``` - -Wenn die Umgebungsvariable nicht gesetzt ist, wird sie durch eine leere Zeichenfolge ersetzt. - ---- - -### Dateien - -Verwenden Sie `{file:path/to/file}`, um den Inhalt einer Datei zu ersetzen: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["./custom-instructions.md"], - "provider": { - "openai": { - "options": { - "apiKey": "{file:~/.secrets/openai-key}" - } - } - } -} -``` - -Dateipfade können sein: - -- Relativ zum Konfigurationsdateiverzeichnis -- Oder absolute Pfade beginnend mit `/` oder `~` - -Diese sind nützlich für: - -- Bewahren Sie vertrauliche Daten wie API-Schlüssel in separaten Dateien auf. -- Einschließlich große Anweisungsdateien, ohne Ihre Konfiguration zu überladen. -- Gemeinsame Nutzung gemeinsamer Konfigurationsausschnitte über mehrere Konfigurationsdateien hinweg. diff --git a/packages/web/src/content/docs/de/custom-tools.mdx b/packages/web/src/content/docs/de/custom-tools.mdx deleted file mode 100644 index a6dfd64d5a..0000000000 --- a/packages/web/src/content/docs/de/custom-tools.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: Benutzerdefinierte Tools -description: Erstellen Sie Tools, die der LLM in OpenCode aufrufen kann. ---- - -Benutzerdefinierte Tools sind von Ihnen erstellte Funktionen, die der LLM während Gesprächen aufrufen kann. Sie arbeiten neben [built-in tools](/docs/tools) von OpenCode wie `read`, `write` und `bash`. - ---- - -## Ein Tool erstellen - -Tools werden als **TypeScript**- oder **JavaScript**-Dateien definiert. Die Tooldefinition kann jedoch Skripte aufrufen, die in **jeder Sprache** geschrieben sind – TypeScript oder JavaScript wird nur für die Tooldefinition selbst verwendet. - ---- - -### Speicherort - -Sie können wie folgt definiert werden: - -- Lokal, indem Sie sie im Verzeichnis `.opencode/tools/` Ihres Projekts platzieren. -- Oder global, indem Sie sie in `~/.config/opencode/tools/` platzieren. - ---- - -### Struktur - -Der einfachste Weg, Tools zu erstellen, ist die Verwendung des `tool()`-Helfers, der Typsicherheit und Validierung bietet. - -```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}` - }, -}) -``` - -Der **Dateiname** wird zum **Toolnamen**. Das Obige erstellt ein `database`-Tool. - ---- - -#### Mehrere Werkzeuge pro Datei - -Sie können auch mehrere Tools aus einer einzigen Datei exportieren. Jeder Export wird zu **einem separaten Tool** mit dem Namen **`_`**: - -```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 - }, -}) -``` - -Dadurch werden zwei Tools erstellt: `math_add` und `math_multiply`. - ---- - -### Argumente - -Sie können `tool.schema` verwenden, was nur [Zod](https://zod.dev) ist, um Argumenttypen zu definieren. - -```ts "tool.schema" -args: { - query: tool.schema.string().describe("SQL query to execute") -} -``` - -Sie können [Zod](https://zod.dev) auch direkt importieren und ein ähnliches Objekt zurückgeben: - -```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" - }, -} -``` - ---- - -### Kontext - -Tools erhalten Kontext zur aktuellen Sitzung: - -```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}` - }, -}) -``` - -Verwenden Sie `context.directory` für das Sitzungsarbeitsverzeichnis. -Verwenden Sie `context.worktree` für das Stammverzeichnis des Git-Arbeitsbaums. - ---- - -## Beispiele - -### Ein Tool in Python schreiben - -Sie können Ihre Tools in jeder gewünschten Sprache schreiben. Hier ist ein Beispiel, das mit Python zwei Zahlen addiert. - -Erstellen Sie zunächst das Tool als Python-Skript: - -```python title=".opencode/tools/add.py" -import sys - -a = int(sys.argv[1]) -b = int(sys.argv[2]) -print(a + b) -``` - -Erstellen Sie dann die Werkzeugdefinition, die es aufruft: - -```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() - }, -}) -``` - -Hier verwenden wir das Dienstprogramm [`Bun.$`](https://bun.com/docs/runtime/shell), um das Python-Skript auszuführen. diff --git a/packages/web/src/content/docs/de/ecosystem.mdx b/packages/web/src/content/docs/de/ecosystem.mdx deleted file mode 100644 index 802f83af55..0000000000 --- a/packages/web/src/content/docs/de/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Ökosystem -description: Mit OpenCode erstellte Projekte und Integrationen. ---- - -Eine Sammlung von Community-Projekten, die auf OpenCode basieren. - -:::note -Möchten Sie Ihr OpenCode-bezogenes Projekt zu dieser Liste hinzufügen? Senden Sie einen PR. -::: - -Sie können sich auch [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) und [opencode.cafe](https://opencode.cafe) ansehen, eine Community, die das Ökosystem und die Community zusammenfasst. - ---- - -## Plugins - -| Name | Beschreibung | -| -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| [opencode-daytona](https://github.com/daytonaio/daytona/tree/main/libs/opencode-plugin) | Führen Sie OpenCode-Sitzungen automatisch in isolierten Daytona-Sandboxes mit Git-Synchronisierung und Live-Vorschauen aus | -| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | Helicone-Sitzungsheader für die Anforderungsgruppierung automatisch einfügen | -| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | TypeScript/Svelte-Typen mit Suchtools automatisch in Dateilesevorgänge einfügen | -| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Verwenden Sie Ihr ChatGPT Plus/Pro-Abonnement anstelle von API Credits | -| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Verwenden Sie Ihren bestehenden Gemini-Plan anstelle der API-Abrechnung | -| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | Nutzen Sie die kostenlosen Modelle von Antigravity anstelle der API-Abrechnung | -| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Multi-Branch-Devcontainer-Isolierung mit flachen Klonen und automatisch zugewiesenen Ports | -| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Google Antigravity OAuth-Plugin mit Unterstützung für die Google-Suche und robustere API-Verarbeitung | -| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Optimieren Sie die Token-Nutzung, indem Sie veraltete Tool-Ausgaben bereinigen | -| [opencode-vibeguard](https://github.com/inkdust2021/opencode-vibeguard) | Schwärzen Sie Geheimnisse/PII in VibeGuard-ähnliche Platzhalter vor LLM-Aufrufen; lokal wiederherstellen | -| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Fügen Sie native Websuchunterstützung für unterstützte Anbieter mit Google Grounded Style hinzu | -| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Ermöglicht AI-Agenten, Hintergrundprozesse in einem PTY auszuführen und ihnen interaktive Eingaben zu senden. | -| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Anweisungen für nicht interaktive Shell-Befehle – verhindert Abstürze bei TTY-abhängigen Vorgängen | -| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Verfolgen Sie die Nutzung von OpenCode mit Wakatime | -| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Von LLMs erstellte Abschriftentabellen bereinigen | -| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | Fast Apply-Bearbeitung, WarpGrep-Codesuche und Kontextkomprimierung über Morph | -| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Hintergrundagenten, vorgefertigte LSP/AST/MCP-Tools, kuratierte Agenten, Claude Code-kompatibel | -| [opencode-notificator](https://github.com/panta82/opencode-notificator) | Desktop-Benachrichtigungen und akustische Warnungen für OpenCode-Sitzungen | -| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | Desktop-Benachrichtigungen und akustische Warnungen für Berechtigungs-, Abschluss- und Fehlerereignisse | -| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | AI-gestützte automatische Benennung von Zellij-Sitzungen basierend auf dem OpenCode-Kontext | -| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | Ermöglichen Sie OpenCode-Agenten das verzögerte Laden von Eingabeaufforderungen bei Bedarf mit Skill-Erkennung und -Injektion | -| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Persistenter Speicher über Sitzungen hinweg mit Supermemory | -| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Interaktive Planüberprüfung mit visueller Anmerkung und private/offline-Freigabe | -| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Erweitern Sie OpenCode /commands zu einem leistungsstarken Orchestrierungssystem mit granularer Flusskontrolle | -| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Planen Sie wiederkehrende Jobs mit launchd (Mac) oder systemd (Linux) mit Cron-Syntax | -| [micode](https://github.com/vtemian/micode) | Strukturiertes Brainstorming → Planen → Workflow mit Sitzungskontinuität Implementierung | -| [octto](https://github.com/vtemian/octto) | Interaktiver Browser UI für AI Brainstorming mit Formularen mit mehreren Fragen | -| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Hintergrundagenten im Claude Code-Stil mit asynchroner Delegation und Kontextpersistenz | -| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | Native OS-Benachrichtigungen für OpenCode – wissen, wann Aufgaben erledigt sind | -| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | Gebündelter Multi-Agent-Orchestrierungs-Harness – 16 Komponenten, eine Installation | -| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | Reibungslose Git-Arbeitsbäume für OpenCode | -| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | Tracen und debuggen Sie Ihre AI-Agenten mit Sentry AI Monitoring | - ---- - -## Projekte - -| Name | Beschreibung | -| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------- | -| [kimaki](https://github.com/remorses/kimaki) | Discord-Bot zur Steuerung von OpenCode-Sitzungen, basierend auf SDK | -| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Neovim-Plugin für editorfähige Eingabeaufforderungen, basierend auf API | -| [portal](https://github.com/hosenur/portal) | Mobile-First-Web UI für OpenCode über Tailscale/VPN | -| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | Vorlage zum Erstellen von OpenCode-Plugins | -| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Neovim-Frontend für OpenCode – ein terminalbasierter AI-Coding-Agent | -| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Vercel AI SDK Anbieter für die Verwendung von OpenCode über @opencode-ai/sdk | -| [OpenChamber](https://github.com/btriapitsyn/openchamber) | Web-/Desktop-App und VS Code-Erweiterung für OpenCode | -| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Obsidian-Plugin, das OpenCode in Obsidians UI einbettet | -| [OpenWork](https://github.com/different-ai/openwork) | Eine Open-Source-Alternative zu Claude Cowork, unterstützt von OpenCode | -| [ocx](https://github.com/kdcokenny/ocx) | OpenCode Erweiterungsmanager mit portablen, isolierten Profilen. | -| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | Desktop-, Web-, Mobil- und Remote-Client-App für OpenCode | - ---- - -## Agenten - -| Name | Beschreibung | -| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| [Agentic](https://github.com/Cluster444/agentic) | Modulare AI-Agenten und -Befehle für strukturierte Entwicklung | -| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Konfigurationen, Eingabeaufforderungen, Agenten und Plugins für verbesserte Arbeitsabläufe | diff --git a/packages/web/src/content/docs/de/enterprise.mdx b/packages/web/src/content/docs/de/enterprise.mdx deleted file mode 100644 index a01c71ae60..0000000000 --- a/packages/web/src/content/docs/de/enterprise.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: Unternehmen -description: Sichere Verwendung von OpenCode in Ihrem Unternehmen. ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -OpenCode Enterprise ist für Organisationen gedacht, die sicherstellen möchten, dass ihr Code und ihre Daten niemals ihre Infrastruktur verlassen. Dies kann durch die Verwendung einer zentralen Konfiguration erreicht werden, die in Ihr SSO- und internes AI-Gateway integriert ist. - -:::note -OpenCode speichert keine Ihrer Code- oder Kontextdaten. -::: - -So starten Sie mit OpenCode Enterprise: - -1. Führen Sie einen internen Test mit Ihrem Team durch. -2. **Kontaktieren Sie uns**, um Preise und Implementierungsoptionen zu besprechen. - ---- - -## Testphase - -OpenCode ist Open Source und speichert keine Ihrer Code- oder Kontextdaten, sodass Ihr Entwickler einfach [get started](/docs/) und eine Testversion durchführen kann. - ---- - -### Datenverarbeitung - -**OpenCode speichert Ihren Code oder Ihre Kontextdaten nicht.** Die gesamte Verarbeitung erfolgt lokal oder durch direkte API-Aufrufe an Ihren AI-Anbieter. - -Das heißt, solange Sie einen Anbieter Ihres Vertrauens oder einen internen nutzen -AI-Gateway können Sie OpenCode sicher verwenden. - -Die einzige Einschränkung hier ist die optionale Funktion `/share`. - ---- - -#### Gespräche teilen - -Wenn ein Benutzer die Funktion `/share` aktiviert, werden die Konversation und die damit verbundenen Daten an den Dienst gesendet, den wir zum Hosten dieser Freigabeseiten unter opencode.ai verwenden. - -Die Daten werden derzeit über das Edge-Netzwerk unseres CDN bereitgestellt und am Edge in der Nähe Ihres Benutzers zwischengespeichert. - -Wir empfehlen Ihnen, dies für Ihre Testversion zu deaktivieren. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -[Learn more about sharing](/docs/share). - ---- - -### Code-Besitz - -**Der gesamte von OpenCode erstellte Code gehört Ihnen.** Es bestehen keine Lizenzbeschränkungen oder Eigentumsansprüche. - ---- - -## Preise - -Für OpenCode Enterprise verwenden wir ein Pro-Sitz-Modell. Wenn Sie über ein eigenes LLM-Gateway verfügen, berechnen wir keine Gebühren für die verwendeten Token. Für weitere Informationen zu Preisen und Implementierungsoptionen **kontaktieren Sie uns**. - ---- - -## Bereitstellung - -Sobald Sie Ihre Testversion abgeschlossen haben und bereit sind, OpenCode unter zu verwenden -Für Ihre Organisation können Sie **uns kontaktieren**, um dies zu besprechen -Preisgestaltung und Umsetzungsmöglichkeiten. - ---- - -### Zentrale Konfiguration - -Wir können OpenCode so einrichten, dass eine einzige zentrale Konfiguration für Ihre gesamte Organisation verwendet wird. - -Diese zentralisierte Konfiguration kann in Ihren SSO-Anbieter integriert werden und stellt sicher, dass alle Benutzer nur auf Ihr internes AI-Gateway zugreifen. - ---- - -### SSO-Integration - -Über die zentrale Konfiguration kann OpenCode zur Authentifizierung in den SSO-Anbieter Ihrer Organisation integriert werden. - -Dadurch kann OpenCode Anmeldeinformationen für Ihr internes AI-Gateway über Ihr eigenes Identitätsverwaltungssystem abrufen. - ---- - -### Internes AI-Gateway - -Mit der zentralen Konfiguration kann OpenCode auch so konfiguriert werden, dass nur Ihr internes AI-Gateway verwendet wird. - -Sie können auch alle anderen AI-Anbieter deaktivieren und so sicherstellen, dass alle Anfragen über die genehmigte Infrastruktur Ihrer Organisation laufen. - ---- - -### Self-Hosting - -Wir empfehlen jedoch, die Freigabeseiten zu deaktivieren, um sicherzustellen, dass Ihre Daten niemals verloren gehen -In Ihrer Organisation können wir Ihnen auch dabei helfen, sie selbst in Ihrer Infrastruktur zu hosten. - -Dies steht derzeit auf unserer Roadmap. Wenn Sie Interesse haben, **lassen Sie es uns wissen**. - ---- - -## FAQ - -

-Was ist OpenCode Enterprise? - -OpenCode Enterprise ist für Organisationen gedacht, die sicherstellen möchten, dass ihr Code und ihre Daten niemals ihre Infrastruktur verlassen. Dies kann durch die Verwendung einer zentralen Konfiguration erreicht werden, die in Ihr SSO- und internes AI-Gateway integriert ist. - -
- -
-Wie fange ich mit OpenCode Enterprise an? - -Beginnen Sie einfach mit einem internen Test mit Ihrem Team. OpenCode speichert standardmäßig weder Ihren Code noch Ihre Kontextdaten, was den Einstieg erleichtert. - -Dann **kontaktieren Sie uns**, um Preise und Implementierungsoptionen zu besprechen. - -
- -
-Wie funktioniert die Preisgestaltung für Unternehmen? - -Wir bieten Enterprise-Preise pro Sitzplatz an. Wenn Sie über ein eigenes LLM-Gateway verfügen, berechnen wir keine Gebühren für die verwendeten Token. Für weitere Informationen **kontaktieren Sie uns** für ein individuelles Angebot, das auf die Bedürfnisse Ihrer Organisation zugeschnitten ist. - -
- -
-Sind meine Daten bei OpenCode Enterprise sicher? - -Ja. OpenCode speichert Ihren Code oder Ihre Kontextdaten nicht. Die gesamte Verarbeitung erfolgt lokal oder durch direkte API-Anrufe an Ihren AI-Anbieter. Dank zentraler Konfiguration und SSO-Integration bleiben Ihre Daten innerhalb der Infrastruktur Ihres Unternehmens sicher. - -
- -
-Können wir unsere eigene private NPM-Registry verwenden? - -OpenCode unterstützt private NPM-Registrierungen durch Buns native `.npmrc`-Dateiunterstützung. Wenn Ihre Organisation eine private Registrierung wie JFrog Artifactory, Nexus oder ähnliches verwendet, stellen Sie sicher, dass der Entwickler authentifiziert ist, bevor Sie OpenCode ausführen. - -So richten Sie die Authentifizierung mit Ihrer privaten Registrierung ein: - -```bash -npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/ -``` - -Dadurch wird `~/.npmrc` mit Authentifizierungsdetails erstellt. OpenCode wird automatisch -Hebe das auf. - -:::caution -Sie müssen bei der privaten Registrierung angemeldet sein, bevor Sie OpenCode ausführen. -::: - -Alternativ können Sie eine `.npmrc`-Datei manuell konfigurieren: - -```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} -``` - -Entwickler müssen vor der Ausführung von OpenCode bei der privaten Registrierung angemeldet sein, um sicherzustellen, dass Pakete aus Ihrer Unternehmensregistrierung installiert werden können. - -
diff --git a/packages/web/src/content/docs/de/formatters.mdx b/packages/web/src/content/docs/de/formatters.mdx deleted file mode 100644 index b50a91f743..0000000000 --- a/packages/web/src/content/docs/de/formatters.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: Formatierer -description: OpenCode verwendet sprachspezifische Formatierer. ---- - -OpenCode formatiert Dateien automatisch, nachdem sie mit sprachspezifischen Formatierern geschrieben oder bearbeitet wurden. Dadurch wird sichergestellt, dass der generierte Code dem Codestil Ihres Projekts entspricht. - ---- - -## Integriert - -OpenCode verfügt über mehrere integrierte Formatierer für gängige Sprachen und Frameworks. Nachfolgend finden Sie eine Liste der Formatierer, unterstützten Dateierweiterungen und benötigten Befehle oder Konfigurationsoptionen. - -| Formatierer | Erweiterungen | Anforderungen | -| -------------------- | -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| gofmt | .go | `gofmt`-Befehl verfügbar | -| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | `mix`-Befehl verfügbar | -| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, und [more](https://prettier.io/docs/en/index.html) | `prettier`-Abhängigkeit in `package.json` | -| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, und [more](https://biomejs.dev/) | `biome.json(c)` Konfigurationsdatei | -| zig | .zig, .zon | `zig`-Befehl verfügbar | -| clang-format | .c, .cpp, .h, .hpp, .ino und [more](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` Konfigurationsdatei | -| ktlint | .kt, .kts | `ktlint`-Befehl verfügbar | -| ruff | .py, .pyi | `ruff`-Befehl verfügbar mit config | -| rustfmt | .rs | `rustfmt`-Befehl verfügbar | -| cargofmt | .rs | `cargo fmt`-Befehl verfügbar | -| uv | .py, .pyi | `uv`-Befehl verfügbar | -| rubocop | .rb, .rake, .gemspec, .ru | `rubocop`-Befehl verfügbar | -| standardrb | .rb, .rake, .gemspec, .ru | `standardrb`-Befehl verfügbar | -| htmlbeautifier | .erb, .html.erb | `htmlbeautifier`-Befehl verfügbar | -| air | .R | `air`-Befehl verfügbar | -| dart | .dart | `dart`-Befehl verfügbar | -| dfmt | .d | `dfmt`-Befehl verfügbar | -| ocamlformat | .ml, .mli | `ocamlformat` Befehl verfügbar und `.ocamlformat` Konfigurationsdatei | -| terraform | .tf, .tfvars | `terraform`-Befehl verfügbar | -| gleam | .gleam | `gleam`-Befehl verfügbar | -| nixfmt | .nix | `nixfmt`-Befehl verfügbar | -| shfmt | .sh, .bash | `shfmt`-Befehl verfügbar | -| pint | .php | `laravel/pint`-Abhängigkeit in `composer.json` | -| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | `oxfmt`-Abhängigkeit in `package.json` und einer [experimental env variable flag](/docs/cli/#experimental) | -| Ormolu | .hs | `ormolu`-Befehl verfügbar | - -Wenn Ihr Projekt auch `prettier` in Ihrem `package.json` hat, wird OpenCode automatisch verwendet. - ---- - -## Funktionsweise - -Wenn OpenCode eine Datei schreibt oder bearbeitet, geschieht Folgendes: - -1. Überprüft die Dateierweiterung anhand aller aktivierten Formatierer. -2. Führt den entsprechenden Formatierungsbefehl für die Datei aus. -3. Wendet die Formatierungsänderungen automatisch an. - -Dieser Prozess findet im Hintergrund statt und stellt sicher, dass Ihr Codestile ohne manuelle Schritte beibehalten werden. - ---- - -## Konfiguration - -Sie können Formatierer über den Abschnitt `formatter` in Ihrer OpenCode-Konfiguration anpassen. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "formatter": {} -} -``` - -Jede Formatierungskonfiguration unterstützt Folgendes: - -| Eigenschaft | Typ | Beschreibung | -| ------------- | --------------- | -------------------------------------------------------------------------------- | -| `disabled` | boolescher Wert | Setzen Sie dies auf `true`, um den Formatierer zu deaktivieren | -| `command` | string[] | Der zum Formatieren auszuführende Befehl | -| `environment` | Objekt | Umgebungsvariablen, die beim Ausführen des Formatierers festgelegt werden sollen | -| `extensions` | string[] | Dateierweiterungen, die dieser Formatierer verarbeiten soll | - -Schauen wir uns einige Beispiele an. - ---- - -### Formatierer deaktivieren - -Um **alle** Formatierer global zu deaktivieren, setzen Sie `formatter` auf `false`: - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": false -} -``` - -Um einen **bestimmten** Formatierer zu deaktivieren, setzen Sie `disabled` auf `true`: - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": { - "prettier": { - "disabled": true - } - } -} -``` - ---- - -### Benutzerdefinierter Formatierer - -Sie können den integrierten Formatierer überschreiben oder neu hinzufügen, indem Sie den Befehl, Umgebungsvariablen und Dateierweiterungen angeben: - -```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"] - } - } -} -``` - -Der Platzhalter **`$FILE`** im Befehl wird durch den Pfad zur zu formatierenden Datei ersetzt. diff --git a/packages/web/src/content/docs/de/github.mdx b/packages/web/src/content/docs/de/github.mdx deleted file mode 100644 index 71881c333f..0000000000 --- a/packages/web/src/content/docs/de/github.mdx +++ /dev/null @@ -1,321 +0,0 @@ ---- -title: GitHub -description: Verwenden Sie OpenCode in GitHub-Problemen und Pull-Requests. ---- - -OpenCode lässt sich in Ihren GitHub-Workflow integrieren. Erwähnen Sie `/opencode` oder `/oc` in Ihrem Kommentar, und OpenCode führt Aufgaben in Ihrem GitHub Actions-Runner aus. - ---- - -## Funktionen - -- **Issue Triage**: Bitten Sie OpenCode, ein Problem zu untersuchen und es Ihnen zu erklären. -- **Reparieren und implementieren**: Bitten Sie OpenCode, ein Problem zu beheben oder eine Funktion zu implementieren. Und es funktioniert in einem neuen Branch und sendet ein PR mit allen Änderungen. -- **Sicher**: OpenCode läuft in den Runners Ihres GitHub. - ---- - -## Installation - -Führen Sie den folgenden Befehl in einem Projekt aus, das sich in einem GitHub-Repository befindet: - -```bash -opencode github install -``` - -Dies führt Sie durch die Installation der GitHub-App, das Erstellen des Workflows und das Einrichten von Secrets. - ---- - -### Manuelle Einrichtung - -Oder Sie können es manuell einrichten. - -1. **Installieren Sie die GitHub-App** - - Gehen Sie zu [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Stellen Sie sicher, dass es im Ziel-Repository installiert ist. - -2. **Den Workflow hinzufügen** - - Fügen Sie die folgende Workflowdatei zu `.github/workflows/opencode.yml` in Ihrem Repository hinzu. Stellen Sie sicher, dass Sie in `env` die passenden Werte für `model` und `api_key` setzen. - - ```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. **Speichern Sie die API-Schlüssel in Secrets** - - Erweitern Sie in den **Einstellungen** Ihrer Organisation oder Ihres Projekts links **Secrets und Variablen** und wählen Sie **Aktionen** aus. Und fügen Sie die erforderlichen API-Schlüssel hinzu. - ---- - -## Konfiguration - -- `model`: Das mit OpenCode zu verwendende Modell. Nimmt das Format `provider/model` an. Dies ist **erforderlich**. -- `agent`: Der zu verwendende Agent. Muss ein Hauptagent sein. Fällt aus der Konfiguration auf `default_agent` oder `"build"` zurück, wenn es nicht gefunden wird. -- `share`: Ob die OpenCode-Sitzung geteilt werden soll. Der Standardwert ist **true** für öffentliche Repositorys. -- `prompt`: Optionale benutzerdefinierte Eingabeaufforderung zum Überschreiben des Standardverhaltens. Verwenden Sie dies, um anzupassen, wie OpenCode Anfragen verarbeitet. -- `token`: Optionales GitHub-Zugriffstoken zum Ausführen von Vorgängen wie dem Erstellen von Kommentaren, dem Festschreiben von Änderungen und dem Öffnen von Pull Requests. Standardmäßig verwendet OpenCode das Installation Access Token der OpenCode GitHub-App, sodass Commits, Kommentare und Pull Requests so aussehen, als würden sie von der App kommen. - - Alternativ können Sie [built-in `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) des GitHub Action Runners verwenden, ohne die OpenCode GitHub App zu installieren. Stellen Sie einfach sicher, dass Sie in Ihrem Workflow die erforderlichen Berechtigungen erteilen: - - ```yaml - permissions: - id-token: write - contents: write - pull-requests: write - issues: write - ``` - - Sie können bei Bedarf auch einen [personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) verwenden. - ---- - -## Unterstützte Events - -OpenCode kann durch die folgenden GitHub-Events ausgelöst werden: - -| Ereignistyp | Ausgelöst durch | Einzelheiten | -| ----------------------------- | ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| `issue_comment` | Kommentieren Sie ein Problem oder PR | Erwähnen Sie `/opencode` oder `/oc` in Ihrem Kommentar. OpenCode liest den Kontext und kann Branches erstellen, PRs öffnen oder antworten. | -| `pull_request_review_comment` | Kommentieren Sie bestimmte Codezeilen in einem PR | Erwähnen Sie `/opencode` oder `/oc` beim Überprüfen des Codes. OpenCode empfängt Dateipfad, Zeilennummern und Diff Context. | -| `issues` | Problem geöffnet oder bearbeitet | Lösen Sie OpenCode automatisch aus, wenn Probleme erstellt oder geändert werden. Erfordert `prompt`-Eingabe. | -| `pull_request` | PR geöffnet oder aktualisiert | Lösen Sie OpenCode automatisch aus, wenn PRs geöffnet, synchronisiert oder erneut geöffnet werden. Nützlich für automatisierte Bewertungen. | -| `schedule` | Cron-basierter Zeitplan | Führen Sie OpenCode nach einem Zeitplan aus. Erfordert `prompt`-Eingabe. Die Ausgabe geht an Protokolle und PRs (kein Kommentar zu diesem Problem). | -| `workflow_dispatch` | Manueller Trigger von GitHub UI | Lösen Sie OpenCode bei Bedarf über die Actions Tab aus. Erfordert `prompt`-Eingabe. Die Ausgabe erfolgt an Protokolle und PRs. | - -### Beispiel für einen Zeitplan - -Führen Sie OpenCode nach einem Zeitplan aus, um automatisierte Aufgaben auszuführen: - -```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. -``` - -Für geplante Ereignisse ist die Eingabe `prompt` **erforderlich**, da es keinen Kommentar gibt, aus dem Anweisungen extrahiert werden können. Geplante Workflows werden ohne Benutzerkontext zur Berechtigungsprüfung ausgeführt. Daher muss der Workflow `contents: write` und `pull-requests: write` gewähren, wenn Sie erwarten, dass OpenCode Branches oder PRs erstellt. - ---- - -### Pull-Request-Beispiel - -Überprüfen Sie PRs automatisch, wenn sie geöffnet oder aktualisiert werden: - -```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 -``` - -Wenn für `pull_request`-Ereignisse kein `prompt` bereitgestellt wird, überprüft OpenCode standardmäßig die Pull-Anfrage. - ---- - -### Beispiel für eine Issue-Triage - -Neue Probleme automatisch selektieren. In diesem Beispiel wird nach Konten gefiltert, die älter als 30 Tage sind, um Spam zu reduzieren: - -```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. -``` - -Für `issues`-Ereignisse ist die Eingabe `prompt` **erforderlich**, da es keinen Kommentar gibt, aus dem Anweisungen extrahiert werden können. - ---- - -## Benutzerdefinierte Prompts - -Überschreiben Sie die Standardaufforderung, um das Verhalten von OpenCode für Ihren Workflow anzupassen. - -```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 -``` - -Dies ist nützlich, um bestimmte Prüfkriterien, Kodierungsstandards oder Schwerpunktbereiche durchzusetzen, die für Ihr Projekt relevant sind. - ---- - -## Beispiele - -Hier sind einige Beispiele, wie Sie OpenCode in GitHub verwenden können. - -- **Erklären Sie ein Problem** - - Fügen Sie diesen Kommentar in einer GitHub-Ausgabe hinzu. - - ``` - /opencode explain this issue - ``` - - OpenCode liest den gesamten Thread, einschließlich aller Kommentare, und antwortet mit einer klaren Erklärung. - -- **Ein Problem beheben** - - Sagen Sie in einer GitHub-Ausgabe: - - ``` - /opencode fix this - ``` - - Und OpenCode erstellt einen neuen Branch, implementiert die Änderungen und öffnet ein PR mit den Änderungen. - -- **PRs überprüfen und Änderungen vornehmen** - - Hinterlassen Sie den folgenden Kommentar auf einem GitHub PR. - - ``` - Delete the attachment from S3 when the note is removed /oc - ``` - - OpenCode implementiert die angeforderte Änderung und schreibt sie an denselben PR fest. - -- **Überprüfen Sie bestimmte Codezeilen** - - Hinterlassen Sie einen Kommentar direkt zu den Codezeilen auf der Files Tab von PR. OpenCode erkennt automatisch die Datei, Zeilennummern und den Diff Context, um präzise Antworten bereitzustellen. - - ``` - [Comment on specific lines in Files tab] - /oc add error handling here - ``` - - Beim Kommentieren bestimmter Zeilen erhält OpenCode: - - Die genaue Datei, die überprüft wird - - Die spezifischen Codezeilen - - Der umgebende Diff Context - - Informationen zur Zeilennummer - - Dies ermöglicht gezieltere Anfragen, ohne dass Dateipfade oder Zeilennummern manuell angegeben werden müssen. diff --git a/packages/web/src/content/docs/de/gitlab.mdx b/packages/web/src/content/docs/de/gitlab.mdx deleted file mode 100644 index 28289d4fbe..0000000000 --- a/packages/web/src/content/docs/de/gitlab.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: GitLab -description: Verwenden Sie OpenCode in GitLab-Issues und Merge Requests. ---- - -OpenCode lässt sich über Ihre GitLab CI/CD-Pipeline oder mit GitLab Duo in Ihren GitLab-Workflow integrieren. - -In beiden Fällen läuft OpenCode auf Ihren GitLab Runners. - ---- - -## GitLab CI - -OpenCode funktioniert in einer regulären GitLab-Pipeline. Sie können es als [CI component](https://docs.gitlab.com/ee/ci/components/) in eine Pipeline einbauen. - -Hier verwenden wir eine von der Community erstellte CI/CD-Komponente für OpenCode – [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode). - ---- - -### Funktionen - -- **Benutzerdefinierte Konfiguration pro Job verwenden**: Konfigurieren Sie OpenCode mit einem benutzerdefinierten Konfigurationsverzeichnis, zum Beispiel `./config/#custom-directory`, um die Funktionalität pro OpenCode-Aufruf zu aktivieren oder zu deaktivieren. -- **Minimale Einrichtung**: Die CI-Komponente richtet OpenCode im Hintergrund ein. Sie müssen lediglich die OpenCode-Konfiguration und die erste Eingabeaufforderung erstellen. -- **Flexibel**: Die CI-Komponente unterstützt mehrere Eingaben zum Anpassen ihres Verhaltens - ---- - -### Einrichtung - -1. Speichern Sie Ihre OpenCode-Authentifizierung JSON als Umgebungsvariablen vom Dateityp CI unter **Einstellungen** > **CI/CD** > **Variablen**. Stellen Sie sicher, dass Sie sie als „Maskiert und ausgeblendet“ markieren. -2. Fügen Sie Folgendes zu Ihrer `.gitlab-ci.yml`-Datei hinzu. - - ```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 # Die variable name für ihre OpenCode authentifizierung JSON - command: optional-custom-command - message: "Your prompt here" - ``` - -Weitere Eingaben und Anwendungsfälle finden Sie unter [check out the docs](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) für diese Komponente. - ---- - -## GitLab Duo - -OpenCode lässt sich in Ihren GitLab-Workflow integrieren. -Erwähnen Sie `@opencode` in einem Kommentar und OpenCode führt Aufgaben innerhalb Ihrer GitLab CI-Pipeline aus. - ---- - -### Funktionen - -- **Issue Triage**: Bitten Sie OpenCode, ein Problem zu untersuchen und es Ihnen zu erklären. -- **Reparieren und implementieren**: Bitten Sie OpenCode, ein Problem zu beheben oder eine Funktion zu implementieren. - Es wird ein neuer Branch erstellt und eine Merge Request mit den Änderungen ausgelöst. -- **Sicher**: OpenCode läuft auf Ihren GitLab Runners. - ---- - -### Einrichtung - -OpenCode wird in Ihrer GitLab CI/CD-Pipeline ausgeführt. Folgendes müssen Sie zum Einrichten benötigen: - -:::tip -Aktuelle Anweisungen finden Sie im [**GitLab docs**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/). -::: - -1. Konfigurieren Sie Ihre GitLab-Umgebung -2. CI/CD einrichten -3. Holen Sie sich einen AI-Modellanbieterschlüssel API -4. Erstellen Sie ein Dienstkonto -5. Konfigurieren Sie CI/CD-Variablen -6. Erstellen Sie eine Flow-Konfigurationsdatei, hier ist ein Beispiel: - -
- - Flow-Konfiguration - - ```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. - - - 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. - - " - - 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 - ``` - -
- -Ausführliche Anweisungen finden Sie unter [GitLab CLI agents docs](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/). - ---- - -### Beispiele - -Hier sind einige Beispiele, wie Sie OpenCode in GitLab verwenden können. - -:::tip -Sie können die Verwendung einer anderen Triggerphrase als `@opencode` konfigurieren. -::: - -- **Erklären Sie ein Problem** - - Fügen Sie diesen Kommentar in einer GitLab-Ausgabe hinzu. - - ``` - @opencode explain this issue - ``` - - OpenCode liest das Problem und antwortet mit einer klaren Erklärung. - -- **Ein Problem beheben** - - Sagen Sie in einer GitLab-Ausgabe: - - ``` - @opencode fix this - ``` - - OpenCode erstellt einen neuen Branch, implementiert die Änderungen und öffnet eine Merge Request mit den Änderungen. - -- **Merge Requests prüfen** - - Hinterlassen Sie den folgenden Kommentar zu einer GitLab Merge Request. - - ``` - @opencode review this merge request - ``` - - OpenCode prüft die Merge Request und gibt Feedback. diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx deleted file mode 100644 index ee06b727bc..0000000000 --- a/packages/web/src/content/docs/de/go.mdx +++ /dev/null @@ -1,199 +0,0 @@ ---- -title: Go -description: Kostengünstiges Abonnement für offene Coding-Modelle. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Go ist ein kostengünstiges Abonnement — **5 $ für deinen ersten Monat**, danach **10 $/Monat** —, das dir zuverlässigen Zugriff auf beliebte offene Coding-Modelle bietet. - -Go funktioniert wie jeder andere Provider in OpenCode. Du abonnierst OpenCode Go und -erhältst deinen API-Key. Es ist **völlig optional** und du musst es nicht nutzen, um -OpenCode zu verwenden. - -Es wurde primär für internationale Nutzer entwickelt, wobei die Modelle für einen stabilen weltweiten Zugriff in den USA, der EU und Singapur gehostet werden. - ---- - -## Hintergrund - -Offene Modelle sind richtig gut geworden. Sie erreichen bei Coding-Aufgaben mittlerweile eine Leistung, die nahe an proprietäre Modelle herankommt. Und da viele Provider sie wettbewerbsfähig anbieten können, sind sie in der Regel viel günstiger. - -Allerdings kann es schwierig sein, zuverlässigen Zugriff mit geringer Latenz auf sie zu erhalten. Provider variieren in Qualität und Verfügbarkeit. - -:::tip -Wir haben eine ausgewählte Gruppe von Modellen und Providern getestet, die gut mit OpenCode funktionieren. -::: - -Um dies zu beheben, haben wir einige Dinge getan: - -1. Wir haben eine ausgewählte Gruppe offener Modelle getestet und mit ihren Teams darüber gesprochen, wie man sie am besten ausführt. -2. Anschließend haben wir mit einigen Providern zusammengearbeitet, um sicherzustellen, dass diese korrekt bereitgestellt werden. -3. Zuletzt haben wir die Kombination aus Modell und Provider einem Benchmark unterzogen und eine Liste erstellt, die wir mit gutem Gewissen empfehlen können. - -OpenCode Go bietet dir Zugriff auf diese Modelle für **5 $ im ersten Monat**, danach **10 $/Monat**. - ---- - -## Wie es funktioniert - -OpenCode Go funktioniert wie jeder andere Provider in OpenCode. - -1. Du meldest dich bei **OpenCode Zen** an, abonnierst Go und kopierst deinen API-Key. -2. Du führst den Befehl `/connect` in der TUI aus, wählst `OpenCode Go` und fügst deinen API-Key ein. -3. Führe `/models` in der TUI aus, um die Liste der über Go verfügbaren Modelle zu sehen. - -:::note -Nur ein Mitglied pro Workspace kann OpenCode Go abonnieren. -::: - -Die aktuelle Liste der Modelle umfasst: - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -Die Liste der Modelle kann sich ändern, während wir neue testen und hinzufügen. - ---- - -## Nutzungslimits - -OpenCode Go beinhaltet die folgenden Limits: - -- **5-Stunden-Limit** — 12 $ Nutzung -- **Wöchentliches Limit** — 30 $ Nutzung -- **Monatliches Limit** — 60 $ Nutzung - -Limits sind in Dollarwerten definiert. Das bedeutet, dass die tatsächliche Anzahl deiner Anfragen von dem von dir genutzten Modell abhängt. Günstigere Modelle wie DeepSeek V4 Flash erlauben mehr Anfragen, während teurere Modelle wie GLM-5.2 weniger erlauben. - -Die folgende Tabelle zeigt eine geschätzte Anzahl von Anfragen basierend auf typischen Go-Nutzungsmustern: - -| Model | Anfragen pro 5 Stunden | Anfragen pro Woche | Anfragen pro Monat | -| ----------------- | ---------------------- | ------------------ | ------------------ | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -Die Schätzungen basieren auf beobachteten durchschnittlichen Anfragemustern: - -- GLM-5.2/5.1 — 700 Input-, 52.000 Cached-, 150 Output-Tokens pro Anfrage -- Kimi K2.7 Code/K2.6 — 870 Input-, 55.000 Cached-, 200 Output-Tokens pro Anfrage -- DeepSeek V4 Pro — 750 Input-, 82.000 Cached-, 290 Output-Tokens pro Anfrage -- DeepSeek V4 Flash — 790 Input-, 68.000 Cached-, 280 Output-Tokens pro Anfrage -- MiniMax M3 — 510 Input-, 56.000 Cached-, 190 Output-Tokens pro Anfrage -- MiniMax M2.7 — 300 Input-, 55.000 Cached-, 125 Output-Tokens pro Anfrage -- Qwen3.7 Max — 420 Input-, 66.000 Cached-, 200 Output-Tokens pro Anfrage -- Qwen3.7 Plus — 500 Input-, 57.000 Cached-, 190 Output-Tokens pro Anfrage -- Qwen3.6 Plus — 500 Input-, 57.000 Cached-, 190 Output-Tokens pro Anfrage -- MiMo-V2.5 — 830 Input-, 71.500 Cached-, 295 Output-Tokens pro Anfrage -- MiMo-V2.5-Pro — 790 Input-, 86.000 Cached-, 305 Output-Tokens pro Anfrage - -Die Schätzungen basieren außerdem auf den folgenden Preisen pro 1M Tokens: - -| Model | Input | Output | Cached Read | Cached Write | -| ---------------------------- | ----- | ------ | ----------- | ------------ | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -Du kannst deine aktuelle Nutzung in der **Console** verfolgen. - -:::tip -Wenn du das Nutzungslimit erreichst, kannst du weiterhin die kostenlosen Modelle verwenden. -::: - -Die Nutzungslimits können sich ändern, während wir aus der frühen Nutzung und dem Feedback lernen. - ---- - -### Nutzung über die Limits hinaus - -Wenn du auch Guthaben auf deinem Zen-Konto hast, kannst du in der Console die Option **Use balance** aktivieren. Wenn diese aktiviert ist, greift Go auf dein Zen-Guthaben zurück, nachdem du deine Nutzungslimits erreicht hast, anstatt Anfragen zu blockieren. - ---- - -## Endpunkte - -Du kannst auf die Go-Modelle auch über die folgenden API-Endpunkte zugreifen. - -| Modell | Modell-ID | Endpunkt | AI SDK Package | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -Die [Modell-ID](/docs/config/#models) in deiner OpenCode Config verwendet das Format `opencode-go/`. Für Kimi K2.7 Code würdest du beispielsweise `opencode-go/kimi-k2.7-code` in deiner Config verwenden. - ---- - -### Models - -Du kannst die vollständige Liste der verfügbaren Modelle und ihrer Metadaten hier abrufen: - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## Datenschutz - -Der Plan ist in erster Linie für internationale Nutzer konzipiert, mit in US, EU und Singapore gehosteten Modellen für einen stabilen weltweiten Zugriff. Unsere Anbieter befolgen eine Zero-Retention-Richtlinie und verwenden Ihre Daten nicht für das Modelltraining. - ---- - -## Ziele - -Wir haben OpenCode Go entwickelt, um: - -1. AI Coding durch ein kostengünstiges Abonnement für mehr Menschen **zugänglich** zu machen. -2. **Zuverlässigen** Zugriff auf die besten offenen Coding-Modelle zu bieten. -3. Modelle zu kuratieren, die für den Einsatz als Coding Agent **getestet und einem Benchmark unterzogen** wurden. -4. **Keinen Lock-in-Effekt** zu haben, indem wir dir ermöglichen, auch jeden anderen Provider mit OpenCode zu nutzen. diff --git a/packages/web/src/content/docs/de/ide.mdx b/packages/web/src/content/docs/de/ide.mdx deleted file mode 100644 index dcc2823957..0000000000 --- a/packages/web/src/content/docs/de/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: IDE -description: Die OpenCode-Erweiterung für VS Code, Cursor und andere IDEs ---- - -OpenCode lässt sich in VS Code, Cursor oder jede IDE integrieren, die ein Terminal unterstützt. Führen Sie einfach `opencode` im Terminal aus, um zu beginnen. - ---- - -## Verwendung - -- **Schnellstart**: Verwenden Sie `Cmd+Esc` (Mac) oder `Ctrl+Esc` (Windows/Linux), um OpenCode in einer geteilten Terminalansicht zu öffnen, oder fokussieren Sie eine dieser Terminalsitzung, falls bereits eine ausgeführt wird. -- **Neue Sitzung**: Verwenden Sie `Cmd+Shift+Esc` (Mac) oder `Ctrl+Shift+Esc` (Windows/Linux), um eine neue OpenCode-Terminalsitzung zu starten, auch wenn eine bereits geöffnet ist. Sie können auch auf die OpenCode-Schaltfläche im UI klicken. -- **Kontextbewusstsein**: Teilen Sie Ihre aktuelle Auswahl oder Registerkarte automatisch mit OpenCode. -- **Verknüpfungen zu Dateiverweisen**: Verwenden Sie `Cmd+Option+K` (Mac) oder `Alt+Ctrl+K` (Linux/Windows), um Dateiverweisen einzufügen. Beispiel: `@File#L37-42`. - ---- - -## Installation - -So installieren Sie OpenCode in VS Code und beliebten Forks wie Cursor, Windsurf, VSCodium: - -1. Öffnen Sie VS Code -2. Öffnen Sie das integrierte Terminal -3. Führen Sie `opencode` aus – die Erweiterung wird automatisch installiert - -Wenn Sie andererseits Ihre eigene IDE verwenden möchten, wenn Sie `/editor` oder `/export` von TUI ausführen, müssen Sie `export EDITOR="code --wait"` festlegen. [Learn more](/docs/tui/#editor-setup). - ---- - -### Manuelle Installation - -Suchen Sie im Extension Marketplace nach **OpenCode** und klicken Sie auf **Installieren**. - ---- - -### Fehlerbehebung - -Wenn die Erweiterung nicht automatisch installiert werden kann: - -- Stellen Sie sicher, dass Sie `opencode` im integrierten Terminal ausführen. -- Bestätigen Sie, dass CLI für Ihre IDE installiert ist: - - Für VS Code: `code` Befehl - - Für Cursor: Befehl `cursor` - - Für Windsurf: Befehl `windsurf` - - Für VSCodium: Befehl `codium` - - Wenn nicht, führen Sie `Cmd+Shift+P` (Mac) oder `Ctrl+Shift+P` (Windows/Linux) aus und suchen Sie nach „Shell Command: Install 'code' command in PATH“ (oder dem Äquivalent für Ihre IDE). -- Stellen Sie sicher, dass VS Code über die Berechtigung zum Installieren von Erweiterungen verfügt diff --git a/packages/web/src/content/docs/de/index.mdx b/packages/web/src/content/docs/de/index.mdx deleted file mode 100644 index 1d7e1f4f96..0000000000 --- a/packages/web/src/content/docs/de/index.mdx +++ /dev/null @@ -1,356 +0,0 @@ ---- -title: Einführung -description: Beginnen Sie mit OpenCode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" -import config from "../../../../config.mjs" -export const console = config.console - -[**OpenCode**](/) ist ein Open-Source-Coding-Agent für AI. Es ist als terminalbasierte Schnittstelle, Desktop-App oder IDE-Erweiterung verfügbar. - -![OpenCode TUI with the opencode theme](../../../assets/lander/screenshot.png) - -Fangen wir an. - ---- - -#### Voraussetzungen - -Um OpenCode in Ihrem Terminal verwenden zu können, benötigen Sie: - -1. Ein moderner Terminal-Emulator, zum Beispiel: - - [WezTerm](https://wezterm.org), cross-platform - - [Alacritty](https://alacritty.org), plattformübergreifend - - [Ghostty](https://ghostty.org), Linux und macOS - - [Kitty](https://sw.kovidgoyal.net/kitty/), Linux und macOS - -2. API-Schlüssel für die LLM-Anbieter, die Sie verwenden möchten. - ---- - -## Installation - -Der einfachste Weg, OpenCode zu installieren, ist über das Installationsskript. - -```bash -curl -fsSL https://opencode.ai/install | bash -``` - -Sie können es auch mit den folgenden Befehlen installieren: - -- **Mit Node.js** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **Homebrew unter macOS und Linux verwenden** - - ```bash - brew install anomalyco/tap/opencode - ``` - - > Wir empfehlen die Verwendung des OpenCode-Taps für die aktuellsten Versionen. Die offizielle `brew install opencode`-Formel wird vom Homebrew-Team gepflegt und seltener aktualisiert. - -- **Verwendung von Paru unter Arch Linux** - - ```bash - sudo pacman -S opencode # Arch Linux (Stable) - paru -S opencode-bin # Arch Linux (Latest from AUR) - ``` - -#### Windows - -:::tip[Empfohlen: Verwenden Sie WSL] -Für das beste Erlebnis unter Windows empfehlen wir die Verwendung von [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). Es bietet eine bessere Leistung und vollständige Kompatibilität mit den Funktionen von OpenCode. -::: - -- **Verwendung von Chocolatey** - - ```bash - choco install opencode - ``` - -- **Scoop verwenden** - - ```bash - scoop install opencode - ``` - -- **Mit NPM** - - ```bash - npm install -g opencode-ai - ``` - -- **Mit Mise** - - ```bash - mise use -g github:anomalyco/opencode - ``` - -- **Verwendung von Docker** - - ```bash - docker run -it --rm ghcr.io/anomalyco/opencode - ``` - -Die Unterstützung für die Installation von OpenCode unter Windows mit Bun ist derzeit in Arbeit. - -Sie können die Binärdatei auch aus [Releases](https://github.com/anomalyco/opencode/releases) abrufen. - ---- - -## Konfiguration - -Mit OpenCode können Sie jeden LLM-Anbieter verwenden, indem Sie dessen API-Schlüssel konfigurieren. - -Wenn Sie mit der Verwendung von LLM-Anbietern noch nicht vertraut sind, empfehlen wir die Verwendung von [OpenCode Zen](/docs/zen). -Es handelt sich um eine kuratierte Liste von Modellen, die vom OpenCode Team getestet und verifiziert wurden. - -1. Führen Sie den Befehl `/connect` in TUI aus, wählen Sie OpenCode aus und gehen Sie zu [opencode.ai/auth](https://opencode.ai/auth). - - ```txt - /connect - ``` - -2. Melden Sie sich an, geben Sie Ihre Rechnungsdaten ein und kopieren Sie Ihren API-Schlüssel. - -3. Fügen Sie Ihren API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -Alternativ können Sie auch einen der anderen Anbieter auswählen. [Mehr erfahren](/docs/providers#directory). - ---- - -## Initialisierung - -Nachdem Sie nun einen Anbieter konfiguriert haben, können Sie zu einem Projekt navigieren -an dem Sie arbeiten möchten. - -```bash -cd /path/to/project -``` - -Und führen Sie OpenCode aus. - -```bash -opencode -``` - -Als nächstes initialisieren Sie OpenCode für das Projekt, indem Sie den folgenden Befehl ausführen. - -```bash frame="none" -/init -``` - -Dadurch wird OpenCode dazu veranlasst, Ihr Projekt zu analysieren und eine `AGENTS.md`-Datei im Projektstammverzeichnis zu erstellen. - -:::tip -Sie sollten die `AGENTS.md`-Datei Ihres Projekts an Git übergeben. -::: - -Dies hilft OpenCode, die Projektstruktur und die Codierungsmuster zu verstehen -die verwendet werden. - ---- - -## Verwendung - -Sie können nun OpenCode verwenden, um an Ihrem Projekt zu arbeiten. Fragen Sie ruhig nach -allem! - -Wenn Sie mit der Verwendung eines AI-Codierungsagenten noch nicht vertraut sind, finden Sie hier einige Beispiele, die hilfreich sein könnten. - ---- - -### Fragen stellen - -Sie können OpenCode bitten, Ihnen die Codebasis zu erklären. - -:::tip -Verwenden Sie die Taste `@`, um eine Fuzzy-Suche nach Dateien im Projekt durchzuführen. -::: - -```txt frame="none" "@packages/functions/src/api/index.ts" -How is authentication handled in @packages/functions/src/api/index.ts -``` - -Dies ist hilfreich, wenn es einen Teil der Codebasis gibt, an dem Sie nicht gearbeitet haben. - ---- - -### Funktionen hinzufügen - -Sie können OpenCode bitten, Ihrem Projekt neue Funktionen hinzuzufügen. Wir empfehlen jedoch, es zunächst um die Erstellung eines Plans zu bitten. - -1. **Erstellen Sie einen Plan** - - OpenCode verfügt über einen _Plan Mode_, der seine Fähigkeit, Änderungen vorzunehmen, deaktiviert - Schlagen Sie stattdessen vor, wie die Funktion implementiert wird. - - Wechseln Sie mit der **Tabulatortaste** dorthin. In der unteren rechten Ecke sehen Sie einen Indikator dafür. - - ```bash frame="none" title="In den Plan-Modus wechseln" - - ``` - - Beschreiben wir nun, was es tun soll. - - ```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. - ``` - - Sie möchten OpenCode genügend Details geben, um zu verstehen, was Sie wollen. Es hilft - mit ihm zu sprechen, als ob Sie mit einem Junior-Entwickler in Ihrem Team sprechen würden. - - :::tip - Geben Sie OpenCode reichlich Kontext und Beispiele, damit es versteht, was Sie - wollen. - ::: - -2. **Den Plan überarbeiten** - - Sobald Sie einen Plan erhalten, können Sie ihm Feedback geben oder weitere Details hinzufügen. - - ```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 - Ziehen Sie Bilder per Drag-and-Drop in das Terminal, um sie zur Eingabeaufforderung hinzuzufügen. - ::: - - OpenCode kann alle von Ihnen bereitgestellten Bilder scannen und zur Eingabeaufforderung hinzufügen. Du kannst - Ziehen Sie dazu ein Bild per Drag & Drop in das Terminal. - -3. **Funktion erstellen** - - Wenn Sie mit dem Plan zufrieden sind, wechseln Sie zurück in den _Build Mode_ - indem Sie erneut die **Tabulatortaste** drücken. - - ```bash frame="none" - - ``` - - Und es bitten, die Änderungen vorzunehmen. - - ```bash frame="none" - Sounds good! Go ahead and make the changes. - ``` - ---- - -### Änderungen vornehmen - -Für einfachere Änderungen können Sie OpenCode bitten, es direkt zu erstellen -ohne den Plan vorher überprüfen zu müssen. - -```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 -``` - -Sie möchten sicherstellen, dass Sie viele Details bereitstellen, damit OpenCode die richtigen -Änderungen vornimmt. - ---- - -### Änderungen rückgängig machen - -Nehmen wir an, Sie bitten OpenCode, einige Änderungen vorzunehmen. - -```txt frame="none" "@packages/functions/src/api/index.ts" -Can you refactor the function in @packages/functions/src/api/index.ts? -``` - -Aber Sie erkennen, dass es nicht das ist, was Sie wollten. Sie können die Änderungen **rückgängig machen** -mit dem Befehl `/undo`. - -```bash frame="none" -/undo -``` - -OpenCode macht nun die von Ihnen vorgenommenen Änderungen rückgängig und zeigt Ihre ursprüngliche Nachricht -wieder an. - -```txt frame="none" "@packages/functions/src/api/index.ts" -Can you refactor the function in @packages/functions/src/api/index.ts? -``` - -Von hier aus können Sie die Eingabeaufforderung anpassen und OpenCode bitten, es erneut zu versuchen. - -:::tip -Sie können `/undo` mehrmals ausführen, um mehrere Änderungen rückgängig zu machen. -::: - -Oder Sie **können** die Änderungen mit dem Befehl `/redo` wiederholen. - -```bash frame="none" -/redo -``` - ---- - -## Teilen - -Die Gespräche, die Sie mit OpenCode führen, können [mit Ihrem Team](/docs/share) geteilt werden. - -```bash frame="none" -/share -``` - -Dadurch wird ein Link zur aktuellen Konversation erstellt und in Ihre Zwischenablage kopiert. - -:::note -Gespräche werden standardmäßig nicht geteilt. -::: - -Hier ist ein [Beispielgespräch](https://opencode.ai/s/4XP1fce5) mit OpenCode. - ---- - -## Anpassung - -Und das ist es! Sie sind jetzt ein Profi im Umgang mit OpenCode. - -Um es zu Ihrem eigenen zu machen, empfehlen wir [ein Theme auszuwählen](/docs/themes), [Keybinds anzupassen](/docs/keybinds), [Code-Formatter zu konfigurieren](/docs/formatters), [eigene Commands zu erstellen](/docs/commands) oder mit der [OpenCode-Konfiguration](/docs/config) zu experimentieren. diff --git a/packages/web/src/content/docs/de/keybinds.mdx b/packages/web/src/content/docs/de/keybinds.mdx deleted file mode 100644 index 26edf9bdbb..0000000000 --- a/packages/web/src/content/docs/de/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Tastenkombinationen -description: Passen Sie Ihre Tastenkombinationen an. ---- - -OpenCode verfügt über eine Liste von Tastenkombinationen, die Sie über `tui.json` anpassen können. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "h", - "display_thinking": "none" - } -} -``` - ---- - -## Leader Key - -OpenCode verwendet für die meisten Keybinds einen `leader`-Schlüssel. Dies vermeidet Konflikte in Ihrem Terminal. - -Standardmäßig ist `ctrl+x` der Leader Key und bei den meisten Aktionen müssen Sie zuerst den Leader Key und dann die Tastenkombination drücken. Um beispielsweise eine neue Sitzung zu starten, drücken Sie zuerst `ctrl+x` und dann `n`. - -Sie müssen für Ihre Keybinds keinen Leader Key verwenden, wir empfehlen jedoch, dies zu tun. - ---- - -## Keybind deaktivieren - -Sie können eine Keybind deaktivieren, indem Sie den Schlüssel mit dem Wert „none“ zu `tui.json` hinzufügen. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "session_compact": "none" - } -} -``` - ---- - -## Desktop-Prompt-Shortcuts - -Die Eingabeaufforderungseingabe der OpenCode-Desktop-App unterstützt gängige Readline/Emacs-style-Verknüpfungen zum Bearbeiten von Text. Diese sind integriert und derzeit nicht über `opencode.json` konfigurierbar. - -| Keybind | Aktion | -| -------- | ----------------------------------------------------- | -| `ctrl+a` | Zum Anfang der aktuellen Zeile gehen | -| `ctrl+e` | Zum Ende der aktuellen Zeile gehen | -| `ctrl+b` | Cursor um ein Zeichen zurückbewegen | -| `ctrl+f` | Cursor um ein Zeichen vorwärts bewegen | -| `alt+b` | Cursor um ein Wort zurückbewegen | -| `alt+f` | Bewegen Sie den Cursor ein Wort vorwärts | -| `ctrl+d` | Zeichen unter dem Cursor löschen | -| `ctrl+k` | Bis zum Zeilenende löschen (Kill) | -| `ctrl+u` | Bis zum Zeilenanfang löschen (Kill) | -| `ctrl+w` | Vorheriges Wort löschen (Kill) | -| `alt+d` | Nächstes Wort löschen (Kill) | -| `ctrl+t` | Zeichen transponieren | -| `ctrl+g` | Popovers abbrechen / Ausführung der Antwort abbrechen | - ---- - -## Shift+Enter - -Einige Terminals senden standardmäßig keine Zusatztasten mit der Eingabetaste. Möglicherweise müssen Sie Ihr Terminal so konfigurieren, dass es `Shift+Enter` als Escape-Sequenz sendet. - -### Windows Terminal - -Öffnen Sie Ihr `settings.json` unter: - -``` -%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json -``` - -Fügen Sie dies dem `actions`-Array auf Stammebene hinzu: - -```json -"actions": [ - { - "command": { - "action": "sendInput", - "input": "\u001b[13;2u" - }, - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Fügen Sie dies dem `keybindings`-Array auf Stammebene hinzu: - -```json -"keybindings": [ - { - "keys": "shift+enter", - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Speichern Sie die Datei und starten Sie das Windows-Terminal neu oder öffnen Sie einen neuen Tab. diff --git a/packages/web/src/content/docs/de/lsp.mdx b/packages/web/src/content/docs/de/lsp.mdx deleted file mode 100644 index 7ecd16d90f..0000000000 --- a/packages/web/src/content/docs/de/lsp.mdx +++ /dev/null @@ -1,207 +0,0 @@ ---- -title: LSP Server -description: OpenCode lässt sich in Ihren LSP-Server integrieren. ---- - -OpenCode kann sich in Language Server Protocol (LSP)-Server integrieren, um Diagnosen als Feedback für den Agenten zu verwenden. - ---- - -## Integriert - -OpenCode verfügt über mehrere integrierte LSP-Server für gängige Sprachen: - -| LSP Server | Erweiterungen | Anforderungen | -| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------- | -| astro | .astro | Automatische Installation für Astro-Projekte | -| bash | .sh, .bash, .zsh, .ksh | Installiert den bash-language-server automatisch | -| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Automatische Installation für C/C++-Projekte | -| csharp | .cs | `.NET SDK` installed | -| clojure-lsp | .clj, .cljs, .cljc, .edn | `clojure-lsp`-Befehl verfügbar | -| dart | .dart | `dart`-Befehl verfügbar | -| deno | .ts, .tsx, .js, .jsx, .mjs | `deno`-Befehl verfügbar (automatische Erkennung von deno.json/deno.jsonc) | -| elixir-ls | .ex, .exs | `elixir`-Befehl verfügbar | -| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | `eslint` dependency in project | -| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` installed | -| gleam | .gleam | `gleam`-Befehl verfügbar | -| gopls | .go | `go`-Befehl verfügbar | -| hls | .hs, .lhs | `haskell-language-server-wrapper`-Befehl verfügbar | -| jdtls | .java | `Java SDK (version 21+)` installiert | -| kotlin-ls | .kt, .kts | Automatische Installation für Kotlin-Projekte | -| lua-ls | .lua | Automatische Installation für Lua-Projekte | -| nixd | .nix | `nixd`-Befehl verfügbar | -| ocaml-lsp | .ml, .mli | `ocamllsp`-Befehl verfügbar | -| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | `oxlint` dependency in project | -| php intelephense | .php | Automatische Installation für PHP-Projekte | -| prisma | .prisma | `prisma`-Befehl verfügbar | -| pyright | .py, .pyi | `pyright` dependency installed | -| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | Befehle `ruby` und `gem` verfügbar | -| rust | .rs | `rust-analyzer`-Befehl verfügbar | -| sourcekit-lsp | .swift, .objc, .objcpp | `swift` installed (`xcode` on macOS) | -| svelte | .svelte | Automatische Installation für Svelte-Projekte | -| terraform | .tf, .tfvars | Automatische Installation von GitHub-Releases | -| tinymist | .typ, .typc | Automatische Installation von GitHub-Releases | -| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | `typescript` dependency in project | -| vue | .vue | Automatische Installation für Vue-Projekte | -| yaml-ls | .yaml, .yml | Installiert den Red Hat yaml-language-server automatisch | -| zls | .zig, .zon | `zig`-Befehl verfügbar | - -LSP ist standardmäßig deaktiviert. Wenn es aktiviert ist, starten Server, sobald eine der oben genannten Dateierweiterungen erkannt wird und die Anforderungen erfüllt sind. - -:::note -Sie können LSP-Server-Downloads automatisch deaktivieren, indem Sie die Umgebungsvariable `OPENCODE_DISABLE_LSP_DOWNLOAD` auf `true` setzen. -::: - ---- - -## Funktionsweise - -Wenn LSP aktiviert ist und OpenCode eine Datei öffnet, geschieht Folgendes: - -1. Überprüft die Dateierweiterung anhand aller aktivierten LSP-Server. -2. Startet den entsprechenden LSP-Server, falls er noch nicht ausgeführt wird. - ---- - -## Bewährte Praktiken - -LSP kann dem Agenten helfen, Probleme zu finden und zu beheben, indem es Diagnosen von Sprachservern bereitstellt. Das ist in einigen Projekten nützlich, aber nicht immer ein klarer Vorteil. - -Sprachserver können aus dem Sync geraten, viel Speicher verwenden, je nach Version oder Projekt unterschiedlich arbeiten und Agent-Workflows verlangsamen. In vielen Projekten ist es besser, wenn der Agent lint, typecheck oder andere diagnostische CLI-Tools direkt ausführt, damit Fehler in die Agent-Schleife zurückfließen, ohne diese Kompromisse einzugehen. Dokumentieren Sie diese Befehle in Instruktionsdateien wie `AGENTS.md` oder Skills, damit der Agent weiß, was er ausführen soll. Aktivieren Sie LSP, wenn Ihr Projekt von zusätzlichem Sprachserver-Feedback profitiert. - ---- - -## Konfiguration - -Sie können LSP-Server über den Abschnitt `lsp` in Ihrer OpenCode-Konfiguration aktivieren und anpassen. - -Um alle integrierten LSP-Server zu aktivieren, setzen Sie `lsp` auf `true`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -Verwenden Sie ein Objekt, um integrierte Server aktiviert zu lassen und gleichzeitig Überschreibungen oder benutzerdefinierte Server zu konfigurieren. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": {} -} -``` - -Jeder LSP-Server unterstützt Folgendes: - -| Eigentum | Geben Sie | ein Beschreibung | -| ---------------- | --------------- | ------------------------------------------------------------------ | -| `disabled` | boolescher Wert | Setzen Sie dies auf `true`, um den LSP-Server zu deaktivieren | -| `command` | string[] | Der Befehl zum Starten des LSP-Servers | -| `extensions` | string[] | Dateierweiterungen, die dieser LSP-Server verarbeiten soll | -| `env` | Objekt | Umgebungsvariablen, die beim Starten des Servers festgelegt werden | -| `initialization` | Objekt | Initialisierungsoptionen zum Senden an den LSP-Server | - -Schauen wir uns einige Beispiele an. - ---- - -### Umgebungsvariablen - -Verwenden Sie die Eigenschaft `env`, um Umgebungsvariablen festzulegen, wenn Sie den Server LSP starten: - -```json title="opencode.json" {5-7} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "rust": { - "env": { - "RUST_LOG": "debug" - } - } - } -} -``` - ---- - -### Initialisierungsoptionen - -Verwenden Sie die Eigenschaft `initialization`, um Initialisierungsoptionen an den Server LSP zu übergeben. Dies sind serverspezifische Einstellungen, die während der LSP `initialize`-Anfrage gesendet werden: - -```json title="opencode.json" {5-9} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "initialization": { - "preferences": { - "importModuleSpecifierPreference": "relative" - } - } - } - } -} -``` - -:::note -Die Initialisierungsoptionen variieren je nach LSP-Server. Überprüfen Sie die Dokumentation Ihres LSP-Servers auf verfügbare Optionen. -::: - ---- - -### Deaktivieren von LSP-Servern - -Wenn `lsp` ausgelassen wird, sind alle LSP-Server deaktiviert. Um alle LSP-Server zu deaktivieren, nachdem sie durch eine andere Konfiguration aktiviert wurden, setzen Sie `lsp` auf `false`: - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": false -} -``` - -Um einen **bestimmten** LSP-Server zu deaktivieren, setzen Sie `disabled` auf `true`: - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "disabled": true - } - } -} -``` - ---- - -### Benutzerdefinierter LSP-Server - -Sie können einen benutzerdefinierten LSP-Server hinzufügen, indem Sie den Befehl und die Dateierweiterungen angeben: - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "custom-lsp": { - "command": ["custom-lsp-server", "--stdio"], - "extensions": [".custom"] - } - } -} -``` - ---- - -## Weitere Informationen - -### PHP Intelephense - -PHP Intelepense bietet Premium-Funktionen über einen Lizenzschlüssel. Sie können einen Lizenzschlüssel bereitstellen, indem Sie (nur) den Schlüssel in eine Textdatei einfügen unter: - -- Auf macOS/Linux: `$HOME/intelephense/license.txt` -- Unter Windows: `%USERPROFILE%/intelephense/license.txt` - -Die Datei sollte nur den Lizenzschlüssel ohne zusätzlichen Inhalt enthalten. diff --git a/packages/web/src/content/docs/de/mcp-servers.mdx b/packages/web/src/content/docs/de/mcp-servers.mdx deleted file mode 100644 index d53ae00f70..0000000000 --- a/packages/web/src/content/docs/de/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -title: MCP Server -description: Fügen Sie lokale und Remote-MCP-Tools hinzu. ---- - -Sie können externe Tools zu OpenCode hinzufügen, indem Sie das _Model Context Protocol_ oder MCP verwenden. OpenCode unterstützt sowohl lokale als auch Remote-Server. - -Nach dem Hinzufügen stehen MCP-Tools automatisch neben den integrierten Tools für LLM zur Verfügung. - ---- - -#### Hinweise - -Wenn Sie einen MCP-Server verwenden, wird dieser zum Kontext hinzugefügt. Wenn Sie viele Werkzeuge haben, können Sie das schnell zusammenfassen. Wir empfehlen daher, vorsichtig zu sein, welchen MCP-Server Sie verwenden. - -:::tip -MCP-Server ergänzen Ihren Kontext, daher sollten Sie vorsichtig sein, welchen Server Sie aktivieren. -::: - -Bestimmte MCP-Server, wie der GitHub-Server MCP, neigen dazu, viele Token hinzuzufügen und können leicht das Kontextlimit überschreiten. - ---- - -## Aktivierung - -Sie können den MCP-Server in Ihrem [OpenCode Config](https://opencode.ai/docs/config/) unter `mcp` definieren. Fügen Sie jedem MCP einen eindeutigen Namen hinzu. Sie können bei der Eingabe von LLM namentlich auf diesen MCP verweisen. - -```jsonc title="opencode.jsonc" {6} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "name-of-mcp-server": { - // ... - "enabled": true, - }, - "name-of-other-mcp-server": { - // ... - }, - }, -} -``` - -Sie können einen Server auch deaktivieren, indem Sie `enabled` auf `false` setzen. Dies ist nützlich, wenn Sie einen Server vorübergehend deaktivieren möchten, ohne ihn aus Ihrer Konfiguration zu entfernen. - ---- - -### Überschreiben von Remote-Standardwerten - -Organisationen können über ihren `.well-known/opencode`-Endpunkt Standard-MCP-Server bereitstellen. Diese Server sind möglicherweise standardmäßig deaktiviert, sodass Benutzer sich für den Server entscheiden können, die sie benötigen. - -Um einen bestimmten Server aus der Remote-Konfiguration Ihrer Organisation zu aktivieren, fügen Sie ihn mit `enabled: true` zu Ihrer lokalen Konfiguration hinzu: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - -Ihre lokalen Konfigurationswerte überschreiben die Remote-Standardwerte. Weitere Einzelheiten finden Sie unter [config precedence](/docs/config#precedence-order). - ---- - -## Lokal - -Fügen Sie lokale MCP-Server mit `type` bis `"local"` innerhalb des MCP-Objekts hinzu. - -```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", - }, - }, - }, -} -``` - -Mit dem Befehl wird der lokale MCP-Server gestartet. Sie können auch eine Liste von Umgebungsvariablen übergeben. - -So können Sie beispielsweise den Testserver [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP hinzufügen. - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "mcp_everything": { - "type": "local", - "command": ["npx", "-y", "@modelcontextprotocol/server-everything"], - }, - }, -} -``` - -Und um es zu verwenden, kann ich `use the mcp_everything tool` zu meinen Eingabeaufforderungen hinzufügen. - -```txt "mcp_everything" -use the mcp_everything tool to add the number 3 and 4 -``` - ---- - -#### Optionen - -Hier finden Sie alle Optionen zum Konfigurieren eines lokalen MCP-Servers. - -| Option | Geben Sie | ein Erforderlich | Beschreibung | -| ------------- | --------------- | ---------------- | -------------------------------------------------------------------------------------------- | -| `type` | Zeichenfolge | Y | Typ der MCP-Serververbindung, muss `"local"` sein. | -| `command` | Array | Y | Befehl und Argumente zum Ausführen des MCP-Servers. | -| `environment` | Objekt | | Umgebungsvariablen, die beim Ausführen des Servers festgelegt werden sollen. | -| `enabled` | Boolescher Wert | | Aktivieren oder deaktivieren Sie den MCP-Server beim Start. | -| `timeout` | Nummer | | Timeout in ms für das Abrufen von Tools vom MCP-Server. Standardmäßig ist 5000 (5 Sekunden). | - ---- - -## Remote - -Fügen Sie den Remote-MCP-Server hinzu, indem Sie `type` auf `"remote"` setzen. - -```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" - } - } - } -} -``` - -Der `url` ist der URL des Remote-Servers MCP und mit der Option `headers` können Sie eine Liste von Headern übergeben. - ---- - -#### Optionen - -| Option | Geben Sie | ein Erforderlich | Beschreibung | -| --------- | --------------- | ---------------- | -------------------------------------------------------------------------------------------- | -| `type` | Zeichenfolge | Y | Typ der MCP-Serververbindung, muss `"remote"` sein. | -| `url` | Zeichenfolge | Y | URL des Remote-Servers MCP. | -| `enabled` | Boolescher Wert | | Aktivieren oder deaktivieren Sie den MCP-Server beim Start. | -| `headers` | Objekt | | Header, die mit der Anfrage gesendet werden sollen. | -| `oauth` | Objekt | | OAuth-Authentifizierungskonfiguration. Siehe Abschnitt [OAuth](#oauth) unten. | -| `timeout` | Nummer | | Timeout in ms für das Abrufen von Tools vom MCP-Server. Standardmäßig ist 5000 (5 Sekunden). | - ---- - -## OAuth - -OpenCode übernimmt automatisch die OAuth-Authentifizierung für Remote-MCP-Server. Wenn ein Server eine Authentifizierung erfordert, wird OpenCode Folgendes tun: - -1. Erkennen Sie die 401-Antwort und initiieren Sie den OAuth-Fluss -2. Verwenden Sie **Dynamische Client-Registrierung (RFC 7591)**, sofern vom Server unterstützt -3. Bewahren Sie Token sicher für zukünftige Anfragen auf - ---- - -### Automatisch - -Für die meisten OAuth-fähigen MCP-Server ist keine spezielle Konfiguration erforderlich. Konfigurieren Sie einfach den Remote-Server: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "my-oauth-server": { - "type": "remote", - "url": "https://mcp.example.com/mcp" - } - } -} -``` - -Wenn der Server eine Authentifizierung erfordert, werden Sie von OpenCode beim ersten Versuch, ihn zu verwenden, zur Authentifizierung autorisiert. Wenn nicht, können Sie [manually trigger the flow](#authenticating) mit `opencode mcp auth ` verwenden. - ---- - -### Vorregistriert - -Wenn Sie über Client-Anmeldeinformationen vom Serveranbieter MCP verfügen, können Sie diese konfigurieren: - -```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" - } - } - } -} -``` - ---- - -### Authentifizieren - -Sie können die Authentifizierung manuell auslösen oder Anmeldeinformationen verwalten. - -Authentifizieren Sie sich bei einem bestimmten MCP-Server: - -```bash -opencode mcp auth my-oauth-server -``` - -Hören Sie alle MCP-Server und ihren Authentifizierungsstatus auf: - -```bash -opencode mcp list -``` - -Gespeicherte Zugangsdaten entfernen: - -```bash -opencode mcp logout my-oauth-server -``` - -Der Befehl `mcp auth` öffnet Ihren Browser zur Autorisierung. Nach der Autorisierung speichert OpenCode die Token sicher in `~/.local/share/opencode/mcp-auth.json`. - ---- - -#### OAuth deaktivieren - -Wenn Sie automatisches OAuth für einen Server deaktivieren möchten (e.g., für Server, die stattdessen API-Schlüssel verwenden), setzen Sie `oauth` auf `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-Optionen - -| Option | Geben Sie | ein Beschreibung | -| -------------- | --------------- | --------------------------------------------------------------------------------------------- | -| `oauth` | Object \| false | OAuth-Konfigurationsobjekt oder `false`, um die automatische OAuth-Erkennung zu deaktivieren. | -| `clientId` | Zeichenfolge | OAuth-Client ID. Wenn nicht angegeben, wird eine dynamische Client-Registrierung versucht. | -| `clientSecret` | Zeichenfolge | OAuth-Client-Geheimnis, falls vom Autorisierungsserver erforderlich. | -| `scope` | Zeichenfolge | OAuth-Bereiche, die während der Autorisierung angefordert werden sollen. | - -#### Debugging - -Wenn die Authentifizierung eines Remote-Servers MCP fehlschlägt, können Sie Probleme diagnostizieren mit: - -```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 -``` - -Der Befehl `mcp debug` zeigt den aktuellen Authentifizierungsstatus an, testet die HTTP-Konnektivität und versucht den OAuth-Erkennungsfluss. - ---- - -## Verwaltung - -Ihre MCPs sind neben integrierten Tools auch als Tools in OpenCode verfügbar. Sie können sie also wie jedes andere Tool über die OpenCode-Konfiguration verwalten. - ---- - -### Global - -Das bedeutet, dass Sie sie global aktivieren oder deaktivieren können. - -```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 - } -} -``` - -Wir können auch ein Glob-Muster verwenden, um alle passenden MCPs zu deaktivieren. - -```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 - } -} -``` - -Hier verwenden wir das Glob-Muster `my-mcp*`, um alle MCPs zu deaktivieren. - ---- - -### Pro Agent - -Wenn Sie über eine große Anzahl von MCP-Servern verfügen, möchten Sie diese möglicherweise nur pro Agent aktivieren und global deaktivieren. Gehen Sie dazu wie folgt vor: - -1. Deaktivieren Sie es global als Tool. -2. Aktivieren Sie in Ihrem [agent config](/docs/agents#tools) den MCP-Server als Tool. - -```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-Muster - -Das Glob-Muster verwendet einfache Regex-Globbing-Muster: - -- `*` entspricht null oder mehr Zeichen (e.g., `"my-mcp*"` entspricht `my-mcp_search`, `my-mcp_list` usw.) -- `?` matches exactly one character -- Alle anderen Zeichen stimmen wörtlich überein - -:::note -MCP-Servertools werden mit dem Servernamen als Präfix registriert. Um alle Tools für einen Server zu deaktivieren, verwenden Sie einfach Folgendes: - -``` -"mymcpservername_*": false -``` - -::: - ---- - -## Beispiele - -Nachfolgend finden Sie Beispiele einiger gängiger MCP-Server. Sie können ein PR einreichen, wenn Sie einen anderen Server dokumentieren möchten. - ---- - -### Sentry - -Fügen Sie [Sentry MCP server](https://mcp.sentry.dev) hinzu, um mit Ihren Sentry-Projekten und -Problemen zu interagieren. - -```json title="opencode.json" {4-8} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "sentry": { - "type": "remote", - "url": "https://mcp.sentry.dev/mcp", - "oauth": {} - } - } -} -``` - -Authentifizieren Sie sich nach dem Hinzufügen der Konfiguration mit Sentry: - -```bash -opencode mcp auth sentry -``` - -Dadurch wird ein Browserfenster geöffnet, um den OAuth-Ablauf abzuschließen und OpenCode mit Ihrem Sentry-Konto zu verbinden. - -Nach der Authentifizierung können Sie Sentry-Tools in Ihren Eingabeaufforderungen verwenden, um Probleme, Projekte und Fehlerdaten abzufragen. - -```txt "use sentry" -Show me the latest unresolved issues in my project. use sentry -``` - ---- - -### Context7 - -Fügen Sie [Context7 MCP server](https://github.com/upstash/context7) hinzu, um Dokumente zu durchsuchen. - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "context7": { - "type": "remote", - "url": "https://mcp.context7.com/mcp" - } - } -} -``` - -Wenn Sie sich für ein kostenloses Konto angemeldet haben, können Sie Ihren API-Schlüssel verwenden und höhere Ratenlimits erhalten. - -```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}" - } - } - } -} -``` - -Hier gehen wir davon aus, dass Sie die Umgebungsvariable `CONTEXT7_API_KEY` festgelegt haben. - -Fügen Sie `use context7` zu Ihren Eingabeaufforderungen hinzu, um den Context7 MCP-Server zu verwenden. - -```txt "use context7" -Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7 -``` - -Alternativ können Sie so etwas zu Ihrem [AGENTS.md](/docs/rules/) hinzufügen. - -```md title="AGENTS.md" -When you need to search docs, use `context7` tools. -``` - ---- - -### Grep by Vercel - -Fügen Sie den Server [Grep by Vercel](https://grep.app) MCP hinzu, um Codefragmente auf GitHub zu durchsuchen. - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "gh_grep": { - "type": "remote", - "url": "https://mcp.grep.app" - } - } -} -``` - -Da wir unseren MCP-Server `gh_grep` genannt haben, können Sie `use the gh_grep tool` zu Ihren Eingabeaufforderungen hinzufügen, um den Agenten dazu zu bringen, ihn zu verwenden. - -```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 -``` - -Alternativ können Sie so etwas zu Ihrem [AGENTS.md](/docs/rules/) hinzufügen. - -```md title="AGENTS.md" -If you are unsure how to do something, use `gh_grep` to search code examples from GitHub. -``` diff --git a/packages/web/src/content/docs/de/models.mdx b/packages/web/src/content/docs/de/models.mdx deleted file mode 100644 index 075296c487..0000000000 --- a/packages/web/src/content/docs/de/models.mdx +++ /dev/null @@ -1,223 +0,0 @@ ---- -title: Modelle -description: Konfigurieren eines LLM-Anbieters und -Modells. ---- - -OpenCode verwendet [AI SDK](https://ai-sdk.dev/) und [Models.dev](https://models.dev) zur Unterstützung von **75+ LLM-Anbietern** und unterstützt die Ausführung lokaler Modelle. - ---- - -## Anbieter - -Die meisten gängigen Anbieter sind standardmäßig vorinstalliert. Wenn Sie die Anmeldeinformationen für einen Anbieter über den Befehl `/connect` hinzugefügt haben, sind diese verfügbar, wenn Sie OpenCode starten. - -Erfahren Sie mehr über [providers](/docs/providers). - ---- - -## Modell auswählen - -Sobald Sie Ihren Anbieter konfiguriert haben, können Sie das gewünschte Modell auswählen, indem Sie Folgendes eingeben: - -```bash frame="none" -/models -``` - ---- - -## Empfohlene Modelle - -Es gibt viele Modelle da draußen und jede Woche kommen neue Modelle heraus. - -:::tip -Erwägen Sie die Verwendung eines der von uns empfohlenen Modelle. -::: - -Allerdings gibt es nur wenige von ihnen, die sowohl gut darin sind, Code zu generieren als auch Tools aufzurufen. - -Hier sind mehrere Modelle, die gut mit OpenCode funktionieren, in keiner bestimmten Reihenfolge. (Dies ist weder eine vollständige noch eine unbedingt aktuelle Liste): - -- GPT 5.2 -- GPT 5.1 Kodex -- Claude Opus 4.5 -- Claude Sonett 4.5 -- Minimax M2.1 -- Gemini 3 Pro - ---- - -## Standard festlegen - -Um eines davon als Standardmodell festzulegen, können Sie den Schlüssel `model` in Ihrem festlegen -OpenCode config. - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "model": "lmstudio/google/gemma-3n-e4b" -} -``` - -Hier ist der vollständige ID `provider_id/model_id`. Wenn Sie beispielsweise [OpenCode Zen](/docs/zen) verwenden, würden Sie `opencode/gpt-5.1-codex` für GPT 5.1 Codex verwenden. - -Wenn Sie einen [custom provider](/docs/providers#custom) konfiguriert haben, ist `provider_id` der Schlüssel aus dem `provider`-Teil Ihrer Konfiguration und `model_id` der Schlüssel aus `provider.models`. - ---- - -## Modelle konfigurieren - -Sie können die Optionen eines Modells global über die Konfiguration konfigurieren. - -```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, - }, - }, - }, - }, - }, - }, -} -``` - -Hier konfigurieren wir globale Einstellungen für zwei integrierte Modelle: `gpt-5` bei Zugriff über den `openai`-Anbieter und `claude-sonnet-4-20250514` bei Zugriff über den `anthropic`-Anbieter. -Die integrierten Anbieter- und Modellnamen finden Sie unter [Models.dev](https://models.dev). - -Sie können diese Optionen auch für alle von Ihnen verwendeten Agenten konfigurieren. Die Agentenkonfiguration beschreibt hier alle globalen Optionen. [Learn more](/docs/agents/#additional). - -Sie können auch benutzerdefinierte Varianten definieren, die integrierte Varianten erweitern. Mit Varianten können Sie unterschiedliche Einstellungen für dasselbe Modell konfigurieren, ohne doppelte Einträge zu erstellen: - -```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", - }, - }, - }, - }, - }, - }, -} -``` - ---- - -## Varianten - -Viele Modelle unterstützen mehrere Varianten mit unterschiedlichen Konfigurationen. OpenCode wird mit integrierten Standardvarianten für beliebte Anbieter ausgeliefert. - -### Integrierte Varianten - -OpenCode wird für viele Anbieter mit Standardvarianten ausgeliefert: - -**Anthropic**: - -- `high` – Budget für hohes Denken (Standard) -- `max` – Maximales Denkbudget - -**OpenAI**: - -Variiert je nach Modell, aber ungefähr: - -- `none` – Keine Begründung -- `minimal` – Minimaler Argumentationsaufwand -- `low` – Geringer Denkaufwand -- `medium` – Mittlerer Denkaufwand -- `high` – Hoher Denkaufwand -- `xhigh` – Extra hoher Argumentationsaufwand - -**Google**: - -- `low` – Beliebtestes effort/token-Budget -- `high` – Höheres effort/token-Budget - -:::tip -Diese Liste ist nicht vollständig. Viele andere Anbieter verfügen ebenfalls über integrierte Standardeinstellungen. -::: - -### Benutzerdefinierte Varianten - -Sie können vorhandene Varianten überschreiben oder eigene hinzufügen: - -```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, - }, - }, - }, - }, - }, - }, -} -``` - -### Varianten durchwechseln - -Verwenden Sie die Tastenkombination `variant_cycle`, um schnell zwischen Varianten zu wechseln. [Learn more](/docs/keybinds). - ---- - -## Laden von Modellen - -Wenn OpenCode startet, sucht es nach Modellen in der folgenden Prioritätsreihenfolge: - -1. Das Befehlszeilenflag `--model` oder `-m`. Das Format ist das gleiche wie in der Konfigurationsdatei: `provider_id/model_id`. - -2. Die Modellliste in der OpenCode-Konfiguration. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-20250514" - } - ``` - - Das Format hier ist `provider/model`. - -3. Das zuletzt verwendete Modell. - -4. Das erste Modell, das eine interne Priorität verwendet. diff --git a/packages/web/src/content/docs/de/network.mdx b/packages/web/src/content/docs/de/network.mdx deleted file mode 100644 index 34d2e5bd07..0000000000 --- a/packages/web/src/content/docs/de/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Netzwerk -description: Konfigurieren Sie Proxys und benutzerdefinierte Zertifikate. ---- - -OpenCode unterstützt Standard-Proxy-Umgebungsvariablen und benutzerdefinierte Zertifikate für Unternehmensnetzwerkumgebungen. - ---- - -## Proxy - -OpenCode respektiert Standard-Proxy-Umgebungsvariablen. - -```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 -Der TUI kommuniziert mit einem lokalen HTTP-Server. Sie müssen den Proxy für diese Verbindung umgehen, um Routing-Schleifen zu verhindern. -::: - -Sie können den Port und den Hostnamen des Servers mit [CLI flags](/docs/cli#run) konfigurieren. - ---- - -### Authentifizierung - -Wenn Ihr Proxy eine Basisauthentifizierung erfordert, geben Sie Anmeldeinformationen in URL ein. - -```bash -export HTTPS_PROXY=http://username:password@proxy.example.com:8080 -``` - -:::caution -Vermeiden Sie hartkodierte Passwörter. Verwenden Sie Umgebungsvariablen oder einen sicheren Speicher für Anmeldeinformationen. -::: - -Für Proxys, die eine erweiterte Authentifizierung wie NTLM oder Kerberos erfordern, sollten Sie die Verwendung eines LLM-Gateways in Betracht ziehen, das Ihre Authentifizierungsmethode unterstützt. - ---- - -## Benutzerdefinierte Zertifikate - -Wenn Ihr Unternehmen benutzerdefinierte Zertifizierungsstellen für HTTPS-Verbindungen verwendet, konfigurieren Sie OpenCode so, dass es ihnen vertraut. - -```bash -export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem -``` - -Dies funktioniert sowohl für Proxy-Verbindungen als auch für den direkten API-Zugriff. diff --git a/packages/web/src/content/docs/de/permissions.mdx b/packages/web/src/content/docs/de/permissions.mdx deleted file mode 100644 index de51c20c09..0000000000 --- a/packages/web/src/content/docs/de/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -title: Berechtigungen -description: Steuern Sie, für welche Aktionen eine Genehmigung erforderlich ist. ---- - -OpenCode verwendet die `permission`-Konfiguration, um zu entscheiden, ob eine bestimmte Aktion automatisch ausgeführt werden soll, Sie dazu auffordern oder blockiert werden soll. - -Ab `v1.1.1` ist die alte boolesche Konfiguration `tools` veraltet und wurde in `permission` zusammengeführt. Die alte `tools`-Konfiguration wird aus Gründen der Abwärtskompatibilität weiterhin unterstützt. - ---- - -## Aktionen - -Jede Berechtigungsregel wird zu einem der folgenden aufgelöst: - -- `"allow"` – ohne Genehmigung ausführen -- `"ask"` — um Genehmigung bitten -- `"deny"` – Aktion blockieren - ---- - -## Konfiguration - -Sie können Berechtigungen global festlegen (mit `*`) und bestimmte Tools überschreiben. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "*": "ask", - "bash": "allow", - "edit": "deny" - } -} -``` - -Sie können auch alle Berechtigungen auf einmal festlegen: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": "allow" -} -``` - ---- - -## Granulare Regeln (Objektsyntax) - -Bei den meisten Berechtigungen können Sie ein Objekt verwenden, um basierend auf der Werkzeugeingabe verschiedene Aktionen anzuwenden. - -```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" - } - } -} -``` - -Regeln werden nach Musterübereinstimmung ausgewertet, wobei die **letzte übereinstimmende Regel gewinnt**. Ein gängiges Muster besteht darin, zuerst die Catch-All-Regel `"*"` und danach spezifischere Regeln zu platzieren. - -### Platzhalter - -Berechtigungsmuster verwenden einen einfachen Platzhalterabgleich: - -- `*` matches zero or more of any character -- `?` matches exactly one character -- Alle anderen Zeichen stimmen wörtlich überein - -### Erweiterung des Home-Verzeichnisses - -Sie können `~` oder `$HOME` am Anfang eines Musters verwenden, um auf Ihr Home-Verzeichnis zu verweisen. Dies ist besonders nützlich für [`external_directory`](#external-directories)-Regeln. - -- `~/projects/*` -> `/Users/username/projects/*` -- `$HOME/projects/*` -> `/Users/username/projects/*` -- `~` -> `/Users/username` - -### Externe Verzeichnisse - -Verwenden Sie `external_directory`, um Toolaufrufe zuzulassen, die Pfade außerhalb des Arbeitsverzeichnisses berühren, in dem OpenCode gestartet wurde. Dies gilt für jedes Werkzeug, das einen Pfad als Eingabe verwendet (z. B. `read`, `edit`, `glob`, `grep` und viele `bash`-Befehle). - -Die Home-Erweiterung (wie `~/...`) wirkt sich nur darauf aus, wie ein Muster geschrieben wird. Dadurch wird ein externer Pfad nicht zum Teil des aktuellen Arbeitsbereichs, daher müssen Pfade außerhalb des Arbeitsverzeichnisses weiterhin über `external_directory` zulässig sein. - -Dies ermöglicht beispielsweise den Zugriff auf alles unter `~/projects/personal/`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - } - } -} -``` - -Jedes hier zulässige Verzeichnis erbt dieselben Standardeinstellungen wie der aktuelle Arbeitsbereich. Seit [`read` defaults to `allow`](#defaults) sind Lesevorgänge auch für Einträge unter `external_directory` zulässig, sofern sie nicht überschrieben werden. Fügen Sie explizite Regeln hinzu, wenn ein Tool in diesen Pfaden eingeschränkt werden soll, z. B. das Blockieren von Bearbeitungen, während Lesevorgänge beibehalten werden: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - }, - "edit": { - "~/projects/personal/**": "deny" - } - } -} -``` - -Konzentrieren Sie sich in der Liste auf vertrauenswürdige Pfade und fügen Sie bei Bedarf zusätzliche Zulassungs- oder Ablehnungsregeln für andere Tools hinzu (z. B. `bash`). - ---- - -## Verfügbare Berechtigungen - -OpenCode-Berechtigungen basieren auf Tool-Namen sowie einigen Sicherheitsvorkehrungen: - -- `read` – eine Datei lesen (entspricht dem Dateipfad) -- `edit` – alle Dateiänderungen (umfasst `edit`, `write`, `patch`) -- `glob` – Datei-Globbing (entspricht dem Glob-Muster) -- `grep` – Inhaltssuche (entspricht dem Regex-Muster) -- `bash` – Ausführen von Shell-Befehlen (entspricht analysierten Befehlen wie `git status --porcelain`) -- `task` – Subagenten starten (entspricht dem Subagententyp) -- `skill` – Laden einer Fertigkeit (entspricht dem Fertigkeitsnamen) -- `lsp` – Ausführen von LSP-Abfragen (derzeit nicht granular) -- `webfetch` – Abrufen eines URL (entspricht dem URL) -- `websearch` – Websuche (entspricht der Abfrage) -- `external_directory` – wird ausgelöst, wenn ein Tool Pfade außerhalb des Projektarbeitsverzeichnisses berührt -- `doom_loop` – wird ausgelöst, wenn derselbe Werkzeugaufruf dreimal mit identischer Eingabe wiederholt wird - ---- - -## Standardwerte - -Wenn Sie nichts angeben, beginnt OpenCode mit zulässigen Standardeinstellungen: - -- Die meisten Berechtigungen sind standardmäßig auf `"allow"` eingestellt. -- `doom_loop` und `external_directory` sind standardmäßig `"ask"`. -- `read` ist `"allow"`, aber `.env`-Dateien werden standardmäßig verweigert: - -```json title="opencode.json" -{ - "permission": { - "read": { - "*": "allow", - "*.env": "deny", - "*.env.*": "deny", - "*.env.example": "allow" - } - } -} -``` - ---- - -## Was „Fragen“ bewirkt - -Wenn OpenCode zur Genehmigung auffordert, bietet UI drei Ergebnisse: - -- `once` – nur diese Anfrage genehmigen -- `always` – zukünftige Anfragen genehmigen, die den vorgeschlagenen Mustern entsprechen (für den Rest der aktuellen OpenCode-Sitzung) -- `reject` – die Anfrage ablehnen - -Der Satz von Mustern, die `always` genehmigen würde, wird vom Tool bereitgestellt (Beispiel: Bash-Genehmigungen setzen normalerweise ein sicheres Befehlspräfix wie `git status*` auf die Whitelist). - ---- - -## Agenten - -Sie können Berechtigungen pro Agent überschreiben. Agentenberechtigungen werden mit der globalen Konfiguration zusammengeführt und Agentenregeln haben Vorrang. [Learn more](/docs/agents#permissions) über Agentenberechtigungen. - -:::note -Ausführlichere Mustervergleichsbeispiele finden Sie oben im Abschnitt [Granular Rules (Object Syntax)](#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" - } - } - } - } -} -``` - -Sie können Agentenberechtigungen auch in Markdown konfigurieren: - -```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 -Verwenden Sie den Mustervergleich für Befehle mit Argumenten. `"grep *"` erlaubt `grep pattern file.txt`, während `"grep"` allein es blockieren würde. Befehle wie `git status` funktionieren für das Standardverhalten, erfordern jedoch eine explizite Erlaubnis (wie `"git status *"`), wenn Argumente übergeben werden. -::: diff --git a/packages/web/src/content/docs/de/plugins.mdx b/packages/web/src/content/docs/de/plugins.mdx deleted file mode 100644 index 57fcdbba6e..0000000000 --- a/packages/web/src/content/docs/de/plugins.mdx +++ /dev/null @@ -1,384 +0,0 @@ ---- -title: Plugins -description: Schreiben Sie Ihre eigenen Plugins, um OpenCode zu erweitern. ---- - -Mit Plugins können Sie OpenCode erweitern, indem Sie verschiedene Ereignisse einbinden und das Verhalten anpassen. Sie können Plugins erstellen, um neue Funktionen hinzuzufügen, externe Dienste zu integrieren oder das Standardverhalten von OpenCode zu ändern. - -Beispiele finden Sie im von der Community erstellten [plugins](/docs/ecosystem#plugins). - ---- - -## Plugins verwenden - -Es gibt zwei Möglichkeiten, Plugins zu laden. - ---- - -### Aus lokalen Dateien - -Platzieren Sie JavaScript- oder TypeScript-Dateien im Plugin-Verzeichnis. - -- `.opencode/plugins/` – Plugins auf Projektebene -- `~/.config/opencode/plugins/` – Globale Plugins - -Dateien in diesen Verzeichnissen werden beim Start automatisch geladen. - ---- - -### Von npm - -Geben Sie npm-Pakete in Ihrer Konfigurationsdatei an. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"] -} -``` - -Es werden sowohl reguläre als auch bereichsbezogene NPM-Pakete unterstützt. - -Durchsuchen Sie die verfügbaren Plugins im [ecosystem](/docs/ecosystem#plugins). - ---- - -### Plugin-Installation - -**NPM-Plugins** werden beim Start automatisch mit Bun installiert. Pakete und ihre Abhängigkeiten werden in `~/.cache/opencode/node_modules/` zwischengespeichert. - -**Lokale Plugins** werden direkt aus dem Plugin-Verzeichnis geladen. Um externe Pakete zu verwenden, müssen Sie ein `package.json` in Ihrem Konfigurationsverzeichnis erstellen (siehe [Dependencies](#dependencies)) oder das Plugin auf npm und [add it to your config](/docs/config#plugins) veröffentlichen. - ---- - -### Ladereihenfolge - -Plugins werden aus allen Quellen geladen und alle Hooks werden nacheinander ausgeführt. Die Ladereihenfolge lautet: - -1. Globale Konfiguration (`~/.config/opencode/opencode.json`) -2. Projektkonfiguration (`opencode.json`) -3. Globales Plugin-Verzeichnis (`~/.config/opencode/plugins/`) -4. Projekt-Plugin-Verzeichnis (`.opencode/plugins/`) - -Doppelte npm-Pakete mit demselben Namen und derselben Version werden einmal geladen. Allerdings werden ein lokales Plugin und ein NPM-Plugin mit ähnlichen Namen beide separat geladen. - ---- - -## Plugins erstellen - -Ein Plugin ist ein **JavaScript/TypeScript-Modul**, das eine oder mehrere Plugin-Funktionen exportiert. Jede Funktion empfängt ein Kontextobjekt und gibt ein Hooks-Objekt zurück. - ---- - -### Abhängigkeiten - -Lokale Plugins und benutzerdefinierte Tools können externe npm-Pakete verwenden. Fügen Sie Ihrem Konfigurationsverzeichnis ein `package.json` mit den benötigten Abhängigkeiten hinzu. - -```json title=".opencode/package.json" -{ - "dependencies": { - "shescape": "^2.1.0" - } -} -``` - -OpenCode führt beim Start `bun install` aus, um diese zu installieren. Ihre Plugins und Tools können sie dann importieren. - -```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) - } - }, - } -} -``` - ---- - -### Grundstruktur - -```js title=".opencode/plugins/example.js" -export const MyPlugin = async ({ project, client, $, directory, worktree }) => { - console.log("Plugin initialized!") - - return { - // Hook implementations go here - } -} -``` - -Die Plugin-Funktion erhält: - -- `project`: Die aktuellen Projektinformationen. -- `directory`: Das aktuelle Arbeitsverzeichnis. -- `worktree`: Der Git-Worktree-Pfad. -- `client`: Ein OpenCode-SDK-Client für die Interaktion mit AI. -- `$`: Buns [shell API](https://bun.com/docs/runtime/shell) zum Ausführen von Befehlen. - ---- - -### TypeScript-Unterstützung - -Für TypeScript-Plugins können Sie Typen aus dem Plugin-Paket importieren: - -```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 - } -} -``` - ---- - -### Ereignisse - -Plugins können Ereignisse abonnieren, wie unten im Abschnitt „Beispiele“ gezeigt. Hier finden Sie eine Liste der verschiedenen verfügbaren Veranstaltungen. - -#### Befehlsereignisse - -- `command.executed` - -#### Dateiereignisse - -- `file.edited` -- `file.watcher.updated` - -#### Installationsereignisse - -- `installation.updated` - -#### LSP-Ereignisse - -- `lsp.client.diagnostics` -- `lsp.updated` - -#### Nachrichtenereignisse - -- `message.part.removed` -- `message.part.updated` -- `message.removed` -- `message.updated` - -#### Berechtigungsereignisse - -- `permission.asked` -- `permission.replied` - -#### Serverereignisse - -- `server.connected` - -#### Sitzungsereignisse - -- `session.created` -- `session.compacted` -- `session.deleted` -- `session.diff` -- `session.error` -- `session.idle` -- `session.status` -- `session.updated` - -#### Todo-Ereignisse - -- `todo.updated` - -#### Shell-Ereignisse - -- `shell.env` - -#### Tool-Ereignisse - -- `tool.execute.after` -- `tool.execute.before` - -#### TUI-Ereignisse - -- `tui.prompt.append` -- `tui.command.execute` -- `tui.toast.show` - ---- - -## Beispiele - -Hier sind einige Beispiele für Plugins, mit denen Sie OpenCode erweitern können. - ---- - -### Benachrichtigungen senden - -Senden Sie Benachrichtigungen, wenn bestimmte Ereignisse eintreten: - -```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"'` - } - }, - } -} -``` - -Wir verwenden `osascript`, um AppleScript unter macOS auszuführen. Hier verwenden wir es zum Versenden von Benachrichtigungen. - -:::note -Wenn Sie die OpenCode-Desktop-App verwenden, kann diese automatisch Systembenachrichtigungen senden, wenn eine Antwort bereit ist oder wenn in einer Sitzung ein Fehler auftritt. -::: - ---- - -### .env-Schutz - -Verhindern Sie, dass OpenCode `.env`-Dateien liest: - -```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") - } - }, - } -} -``` - ---- - -### Umgebungsvariablen einfügen - -Fügen Sie Umgebungsvariablen in alle Shell-Ausführungen ein (AI-Tools und Benutzerterminals): - -```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 - }, - } -} -``` - ---- - -### Benutzerdefinierte Tools - -Plugins können OpenCode auch benutzerdefinierte Tools hinzufügen: - -```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})` - }, - }), - }, - } -} -``` - -Der `tool`-Helfer erstellt ein benutzerdefiniertes Tool, das OpenCode aufrufen kann. Es verwendet eine Zod-Schemafunktion und gibt eine Tooldefinition zurück mit: - -- `description`: Was das Tool macht -- `args`: Zod-Schema für die Argumente des Tools -- `execute`: Funktion, die ausgeführt wird, wenn das Tool aufgerufen wird - -Ihre benutzerdefinierten Tools stehen neben den integrierten Tools für OpenCode zur Verfügung. - ---- - -### Protokollierung - -Verwenden Sie `client.app.log()` anstelle von `console.log` für die strukturierte Protokollierung: - -```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" }, - }, - }) -} -``` - -Ebenen: `debug`, `info`, `warn`, `error`. Weitere Informationen finden Sie unter [SDK documentation](https://opencode.ai/docs/sdk). - ---- - -### Compaction-Hooks - -Passen Sie den Kontext an, der beim Komprimieren einer Sitzung einbezogen wird: - -```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 -`) - }, - } -} -``` - -Der Hook `experimental.session.compacting` wird ausgelöst, bevor der Hook LLM eine Fortsetzungszusammenfassung generiert. Verwenden Sie es, um domänenspezifischen Kontext einzufügen, der der standardmäßigen Komprimierungsaufforderung entgehen würde. - -Sie können die Komprimierungsaufforderung auch vollständig ersetzen, indem Sie `output.prompt` festlegen: - -```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. -` - }, - } -} -``` - -Wenn `output.prompt` festgelegt ist, ersetzt es die standardmäßige Komprimierungsaufforderung vollständig. Das Array `output.context` wird in diesem Fall ignoriert. diff --git a/packages/web/src/content/docs/de/providers.mdx b/packages/web/src/content/docs/de/providers.mdx deleted file mode 100644 index 9298146930..0000000000 --- a/packages/web/src/content/docs/de/providers.mdx +++ /dev/null @@ -1,1987 +0,0 @@ ---- -title: Anbieter -description: Verwendung eines beliebigen LLM-Anbieters in OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console - -OpenCode verwendet [AI SDK](https://ai-sdk.dev/) und [Models.dev](https://models.dev) zur Unterstützung von **75+ LLM-Anbietern** und unterstützt die Ausführung lokaler Modelle. - -Um einen Anbieter hinzuzufügen, müssen Sie: - -1. Fügen Sie die API-Schlüssel für den Anbieter mit dem Befehl `/connect` hinzu. -2. Konfigurieren Sie den Anbieter in Ihrer OpenCode-Konfiguration. - ---- - -### Anmeldeinformationen - -Wenn Sie die API-Schlüssel eines Anbieters mit dem Befehl `/connect` hinzufügen, werden diese gespeichert -in `~/.local/share/opencode/auth.json`. - ---- - -### Konfiguration - -Sie können die Anbieter über den Abschnitt `provider` in Ihrem OpenCode anpassen -config. - ---- - -#### Base URL - -Sie können die Base URL für jeden Anbieter anpassen, indem Sie die Option `baseURL` festlegen. Das ist nuetzlich, wenn Sie Proxy-Dienste oder benutzerdefinierte Endpunkte verwenden. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen ist eine Liste von Modellen, die vom OpenCode-Team bereitgestellt wurden -Getestet und verifiziert, dass es gut mit OpenCode funktioniert. [Learn more](/docs/zen). - -:::tip -Wenn Sie neu sind, empfehlen wir Ihnen, mit OpenCode Zen zu beginnen. -::: - -1. Führen Sie den Befehl `/connect` in TUI aus, wählen Sie OpenCode aus und gehen Sie zu [opencode.ai/auth](https://opencode.ai/auth). - - ```txt - /connect - ``` - -2. Melden Sie sich an, geben Sie Ihre Rechnungsdaten ein und kopieren Sie Ihren API-Schlüssel. - -3. Fügen Sie Ihren API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie `/models` in TUI aus, um die Liste der von uns empfohlenen Modelle anzuzeigen. - - ```txt - /models - ``` - -Es funktioniert wie jeder andere Anbieter in OpenCode und ist völlig optional. - ---- - -## OpenCode Go - -OpenCode Go ist ein kostenguenstiges Abonnement, das zuverlaessigen Zugriff auf beliebte Open-Coding-Modelle bietet, die vom OpenCode-Team getestet und verifiziert wurden, dass sie gut mit OpenCode funktionieren. - -1. Führen Sie den Befehl `/connect` in der TUI aus, waehlen Sie `OpenCode Go` und gehen Sie zu [opencode.ai/auth](https://opencode.ai/zen). - - ```txt - /connect - ``` - -2. Melden Sie sich an, geben Sie Ihre Rechnungsdaten ein und kopieren Sie Ihren API-Schlüssel. - -3. Fügen Sie Ihren API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie `/models` in der TUI aus, um die Liste der empfohlenen Modelle zu sehen. - - ```txt - /models - ``` - -Es funktioniert wie jeder andere Anbieter in OpenCode und ist völlig optional. - ---- - -## Verzeichnis - -Schauen wir uns einige der Anbieter im Detail an. Wenn Sie einen Anbieter hinzufügen möchten -Liste, zögern Sie nicht, ein PR zu öffnen. - -:::note -Sehen Sie hier keinen Anbieter? Senden Sie einen PR. -::: - ---- - -### 302.AI - -1. Gehen Sie zu [302.AI console](https://302.ai/), erstellen Sie ein Konto und generieren Sie einen API-Schlüssel. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **302.AI**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren 302.AI API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell auszuwählen. - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -So verwenden Sie Amazon Bedrock mit OpenCode: - -1. Gehen Sie zum **Modellkatalog** in der Amazon Bedrock-Konsole und fordern Sie an - Zugriff auf die gewünschten Modelle. - - :::tip - Sie müssen Zugriff auf das gewünschte Modell in Amazon Bedrock haben. - ::: - -2. **Konfigurieren Sie die Authentifizierung** mit einer der folgenden Methoden: - - #### Umgebungsvariablen (Schnellstart) - - Legen Sie eine dieser Umgebungsvariablen fest, während Sie OpenCode ausführen: - - ```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - Oder fügen Sie sie Ihrem Bash-Profil hinzu: - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - #### Konfigurationsdatei (empfohlen) - - Für eine projektspezifische oder dauerhafte Konfiguration verwenden Sie `opencode.json`: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **Verfügbare Optionen:** - - `region` - AWS region (e.g., `us-east-1`, `eu-west-1`) - - `profile` - AWS named profile from `~/.aws/credentials` - - `endpoint` – Benutzerdefinierter Endpunkt URL für VPC-Endpunkte (Alias ​​für generische `baseURL`-Option) - - :::tip - Konfigurationsdateioptionen haben Vorrang vor Umgebungsvariablen. - ::: - - #### Erweitert: VPC Endpunkte - - Wenn Sie VPC-Endpunkte für Bedrock verwenden: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } - } - ``` - - :::note - Die Option `endpoint` ist ein Alias ​​für die generische Option `baseURL` und verwendet AWS-spezifische Terminologie. Wenn sowohl `endpoint` als auch `baseURL` angegeben sind, hat `endpoint` Vorrang. - ::: - - #### Authentifizierungsmethoden - - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: Erstellen Sie einen IAM-Benutzer und generieren Sie Zugriffsschlüssel in der AWS-Konsole - - **`AWS_PROFILE`**: Benannte Profile von `~/.aws/credentials` verwenden. Zuerst mit `aws configure --profile my-profile` oder `aws sso login` konfigurieren - - **`AWS_BEARER_TOKEN_BEDROCK`**: Generieren Sie langfristige API-Schlüssel aus der Amazon Bedrock-Konsole - - **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**: Für EKS IRSA (IAM Rollen für Dienstkonten) oder andere Kubernetes-Umgebungen mit OIDC-Verbund. Diese Umgebungsvariablen werden von Kubernetes automatisch eingefügt, wenn Dienstkontoanmerkungen verwendet werden. - - #### Authentifizierungspriorität - - Amazon Bedrock verwendet die folgende Authentifizierungspriorität: - 1. **Bearer-Token** – `AWS_BEARER_TOKEN_BEDROCK`-Umgebungsvariable oder Token aus dem `/connect`-Befehl - 2. **AWS Anmeldeinformationskette** – Profil, Zugriffsschlüssel, gemeinsame Anmeldeinformationen, IAM Rollen, Web-Identitätstoken (EKS IRSA), Instanzmetadaten - - :::note - Wenn ein Inhabertoken festgelegt ist (über `/connect` oder `AWS_BEARER_TOKEN_BEDROCK`), hat es Vorrang vor allen AWS-Anmeldeinformationsmethoden, einschließlich konfigurierter Profile. - ::: - -3. Führen Sie den Befehl `/models` aus, um das gewünschte Modell auszuwählen. - - ```txt - /models - ``` - -:::note -Verwenden Sie für benutzerdefinierte Inferenzprofile den Modell- und Anbieternamen im Schlüssel und legen Sie die Eigenschaft `id` auf den Arn fest. Dadurch wird ein korrektes Caching sichergestellt: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - -::: - ---- - -### Anthropic - -1. Sobald Sie sich angemeldet haben, führen Sie den Befehl `/connect` aus und wählen Sie Anthropic aus. - - ```txt - /connect - ``` - -2. Hier können Sie die Option **Claude Pro/Max** auswählen und Ihr Browser wird geöffnet - und bitten Sie, sich zu authentifizieren. - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. Jetzt sollten alle Anthropic-Modelle verfügbar sein, wenn Sie den Befehl `/models` verwenden. - - ```txt - /models - ``` - -:::info -Die Verwendung Ihres Claude Pro/Max-Abonnements in OpenCode wird von [Anthropic](https://anthropic.com) nicht offiziell unterstützt. -::: - -##### Verwendung von API-Keys - -Sie können auch **Erstellen eines API-Schlüssels** auswählen, wenn Sie kein Pro/Max-Abonnement haben. Außerdem wird Ihr Browser geöffnet, Sie werden aufgefordert, sich bei Anthropic anzumelden, und Sie erhalten einen Code, den Sie in Ihr Terminal einfügen können. - -Wenn Sie bereits über einen API-Schlüssel verfügen, können Sie **API-Schlüssel manuell eingeben** auswählen und ihn in Ihr Terminal einfügen. - ---- - -### Atomic Chat - -Sie können opencode so konfigurieren, dass es lokale Modelle über [Atomic Chat](https://atomic.chat) verwendet — eine Desktop-Anwendung, die lokale LLMs hinter einem OpenAI-kompatiblen API-Server bereitstellt (Standard-Endpunkt `http://127.0.0.1:1337/v1`). - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -In diesem Beispiel: - -- `atomic-chat` ist die benutzerdefinierte Provider-ID. Dies kann eine beliebige Zeichenkette sein. -- `npm` gibt das für diesen Provider zu verwendende Paket an. Hier wird `@ai-sdk/openai-compatible` für jede OpenAI-kompatible API verwendet. -- `name` ist der in der UI angezeigte Name des Providers. -- `options.baseURL` ist der Endpunkt des lokalen Servers. Passen Sie Host und Port an Ihre Atomic-Chat-Konfiguration an. -- `models` ist eine Zuordnung von Modell-IDs zu ihren Anzeigenamen. Jede ID muss dem `id`-Wert entsprechen, den `GET /v1/models` zurückgibt — führen Sie `curl http://127.0.0.1:1337/v1/models` aus, um die aktuell in Atomic Chat geladenen IDs aufzulisten. - -:::tip -Wenn Tool-Aufrufe nicht zuverlässig funktionieren, wählen Sie ein geladenes Modell mit starker Tool-Calling-Unterstützung (zum Beispiel eine Qwen-Coder- oder DeepSeek-Coder-Variante). -::: - ---- - -### Azure OpenAI - -:::note -Wenn Sie auf die Fehlermeldung „Es tut mir leid, aber ich kann Ihnen bei dieser Anfrage nicht weiterhelfen“ stoßen, versuchen Sie, den Inhaltsfilter in Ihrer Azure-Ressource von **DefaultV2** in **Default** zu ändern. -::: - -1. Gehen Sie zu [Azure portal](https://portal.azure.com/) und erstellen Sie eine **Azure OpenAI**-Ressource. Sie benötigen: - - **Ressourcenname**: Dies wird Teil Ihres API-Endpunkts (`https://RESOURCE_NAME.openai.azure.com/`) - - **API-Schlüssel**: Entweder `KEY 1` oder `KEY 2` aus Ihrer Ressource - -2. Gehen Sie zu [Azure AI Foundry](https://ai.azure.com/) und stellen Sie ein Modell bereit. - - :::note - Der Bereitstellungsname muss mit dem Modellnamen übereinstimmen, damit OpenCode ordnungsgemäß funktioniert. - ::: - -3. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Azure**. - - ```txt - /connect - ``` - -4. Geben Sie Ihren API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Legen Sie Ihren Ressourcennamen als Umgebungsvariable fest: - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - - Oder fügen Sie es Ihrem Bash-Profil hinzu: - - ```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX - ``` - -6. Führen Sie den Befehl `/models` aus, um Ihr bereitgestelltes Modell auszuwählen. - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. Gehen Sie zu [Azure portal](https://portal.azure.com/) und erstellen Sie eine **Azure OpenAI**-Ressource. Sie benötigen: - - **Ressourcenname**: Dies wird Teil Ihres API-Endpunkts (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) - - **API-Schlüssel**: Entweder `KEY 1` oder `KEY 2` aus Ihrer Ressource - -2. Gehen Sie zu [Azure AI Foundry](https://ai.azure.com/) und stellen Sie ein Modell bereit. - - :::note - Der Bereitstellungsname muss mit dem Modellnamen übereinstimmen, damit OpenCode ordnungsgemäß funktioniert. - ::: - -3. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Azure Cognitive Services**. - - ```txt - /connect - ``` - -4. Geben Sie Ihren API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Legen Sie Ihren Ressourcennamen als Umgebungsvariable fest: - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - - Oder fügen Sie es Ihrem Bash-Profil hinzu: - - ```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX - ``` - -6. Führen Sie den Befehl `/models` aus, um Ihr bereitgestelltes Modell auszuwählen. - - ```txt - /models - ``` - ---- - -### Baseten - -1. Gehen Sie zu [Baseten](https://app.baseten.co/), erstellen Sie ein Konto und generieren Sie einen API-Schlüssel. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Baseten**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren Baseten API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell auszuwählen. - - ```txt - /models - ``` - ---- - -### Cerebras - -1. Gehen Sie zu [Cerebras console](https://inference.cerebras.ai/), erstellen Sie ein Konto und generieren Sie einen API-Schlüssel. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Cerebras**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren Cerebras-API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell wie _Qwen 3 Coder 480B_ auszuwählen. - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -Mit dem Cloudflare AI Gateway können Sie über einen einheitlichen Endpunkt auf Modelle von OpenAI, Anthropic, Workers AI und mehr zugreifen. Mit [Unified Billing](https://developers.cloudflare.com/ai-gateway/features/unified-billing/) benötigen Sie nicht für jeden Anbieter separate API-Schlüssel. - -1. Gehen Sie zu [Cloudflare dashboard](https://dash.cloudflare.com/), navigieren Sie zu **AI** > **AI Gateway** und erstellen Sie ein neues Gateway. - -2. Legen Sie Ihr Konto ID und Ihr Gateway ID als Umgebungsvariablen fest. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Cloudflare AI Gateway**. - - ```txt - /connect - ``` - -4. Geben Sie Ihr Cloudflare-API-Token ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - - Oder legen Sie es als Umgebungsvariable fest. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token - ``` - -5. Führen Sie den Befehl `/models` aus, um ein Modell auszuwählen. - - ```txt - /models - ``` - - Sie können Modelle auch über Ihre OpenCode-Konfiguration hinzufügen. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } - } - ``` - ---- - -### Cortecs - -1. Gehen Sie zu [Cortecs console](https://cortecs.ai/), erstellen Sie ein Konto und generieren Sie einen API-Schlüssel. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Cortecs**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren Cortecs-API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell wie _Kimi K2 Instruct_ auszuwählen. - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. Gehen Sie zu [DeepSeek console](https://platform.deepseek.com/), erstellen Sie ein Konto und klicken Sie auf **Neuen API-Schlüssel erstellen**. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **DeepSeek**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren DeepSeek API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein DeepSeek-Modell wie _DeepSeek V4 Pro_ auszuwählen. - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. Gehen Sie zu [Deep Infra dashboard](https://deepinfra.com/dash), erstellen Sie ein Konto und generieren Sie einen API-Schlüssel. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Deep Infra**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren Deep Infra API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell auszuwählen. - - ```txt - /models - ``` - ---- - -### FrogBot - -1. Gehen Sie zu [FrogBot dashboard](https://app.frogbot.ai/signup), erstellen Sie ein Konto und generieren Sie einen API-Schlüssel. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **FrogBot**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren FrogBot API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell auszuwählen. - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. Gehen Sie zu [Fireworks AI console](https://app.fireworks.ai/), erstellen Sie ein Konto und klicken Sie auf **API-Schlüssel erstellen**. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Fireworks AI**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren Fireworks AI API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell wie _Kimi K2 Instruct_ auszuwählen. - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo bietet AI-gestützten Agenten-Chat mit nativen Tool-Aufruffunktionen über den Anthropic-Proxy von GitLab. - -1. Führen Sie den Befehl `/connect` aus und wählen Sie GitLab aus. - - ```txt - /connect - ``` - -2. Wählen Sie Ihre Authentifizierungsmethode: - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### Verwendung von OAuth (empfohlen) - - Wählen Sie **OAuth** und Ihr Browser wird zur Autorisierung geöffnet. - - #### Verwendung eines persönlichen Zugriffstokens - 1. Gehe zu [GitLab User Settings > Access Tokens](https://gitlab.com/-/user_settings/personal_access_tokens) - 2. Klicken Sie auf **Neues Token hinzufügen** - 3. Name: `OpenCode`, Bereiche: `api` - 4. Kopieren Sie das Token (beginnt mit `glpat-`) - 5. Geben Sie es im Terminal ein - -3. Führen Sie den Befehl `/models` aus, um verfügbare Modelle anzuzeigen. - - ```txt - /models - ``` - - Es stehen drei Claude-basierte Modelle zur Verfügung: - - **duo-chat-haiku-4-5** (Standard) – Schnelle Antworten für schnelle Aufgaben - - **duo-chat-sonnet-4-5** – Ausgewogene Leistung für die meisten Arbeitsabläufe - - **duo-chat-opus-4-5** – Am besten geeignet für komplexe Analysen - -:::note -Sie können auch die Umgebungsvariable „GITLAB_TOKEN“ angeben, wenn Sie dies nicht möchten -um das Token im OpenCode-Authentifizierungsspeicher zu speichern. -::: - -##### Selbstgehostetes GitLab - -:::note[Compliance-Hinweis] -OpenCode verwendet ein kleines Modell für einige AI-Aufgaben wie das Generieren des Sitzungstitels. -Es ist standardmäßig für die Verwendung von gpt-5-nano konfiguriert und wird von Zen gehostet. Zum Sperren von OpenCode -Um nur Ihre eigene von GitLab gehostete Instanz zu verwenden, fügen Sie Folgendes zu Ihrer hinzu -`opencode.json`-Datei. Es wird außerdem empfohlen, die Sitzungsfreigabe zu deaktivieren. - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -Für selbstgehostete GitLab-Instanzen: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -Wenn Ihre Instanz ein benutzerdefiniertes AI-Gateway ausführt: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -Oder fügen Sie zu Ihrem Bash-Profil hinzu: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -Ihr GitLab-Administrator muss Folgendes aktivieren: - -1. [Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) für den Benutzer, die Gruppe oder die Instanz -2. Feature-Flags (über die Rails-Konsole): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### OAuth für selbstgehostete Instanzen - -Damit OAuth für Ihre selbst gehostete Instanz funktioniert, müssen Sie eine erstellen -eine neue Anwendung (Einstellungen → Anwendungen) mit dem -Rückruf URL `http://127.0.0.1:8080/callback` und folgende Bereiche: - -- API (Greifen Sie in Ihrem Namen auf API zu) -- read_user (Lesen Sie Ihre persönlichen Daten) -- read_repository (Ermöglicht schreibgeschützten Zugriff auf das Repository) - -Stellen Sie dann die Anwendung ID als Umgebungsvariable bereit: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -Weitere Dokumentation auf der [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth)-Homepage. - -##### Konfiguration - -Anpassen über `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### GitLab API Tools (Optional, aber dringend empfohlen) - -So greifen Sie auf GitLab-Tools zu (Zusammenführungsanfragen, Probleme, Pipelines, CI/CD usw.): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -Dieses Plugin bietet umfassende GitLab-Repository-Verwaltungsfunktionen, einschließlich MR-Überprüfungen, Problemverfolgung, Pipeline-Überwachung und mehr. - ---- - -### GitHub Copilot - -So verwenden Sie Ihr GitHub Copilot-Abonnement mit OpenCode: - -:::note -Einige Modelle benötigen möglicherweise ein [Pro+ -Abonnement](https://github.com/features/copilot/plans) zur Verwendung. - -Einige Modelle müssen in Ihrem [GitHub Copilot settings](https://docs.github.com/en/copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use) manuell aktiviert werden. -::: - -1. Führen Sie den Befehl `/connect` aus und suchen Sie nach GitHub Copilot. - - ```txt - /connect - ``` - -2. Navigieren Sie zu [github.com/login/device](https://github.com/login/device) und geben Sie den Code ein. - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - └ Waiting for authorization... - ``` - -3. Führen Sie nun den Befehl `/models` aus, um das gewünschte Modell auszuwählen. - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -So verwenden Sie Google Vertex AI mit OpenCode: - -1. Gehen Sie zum **Model Garden** in der Google Cloud Console und überprüfen Sie die - Modelle, die in Ihrer Region verfügbar sind. - - :::note - Sie benötigen ein Google Cloud-Projekt mit aktiviertem Vertex AI API. - ::: - -2. Legen Sie die erforderlichen Umgebungsvariablen fest: - - `GOOGLE_CLOUD_PROJECT`: Ihr Google Cloud-Projekt ID - - `VERTEX_LOCATION` (optional): Die Region für Vertex AI (standardmäßig `global`) - - Authentifizierung (wählen Sie eine aus): - - `GOOGLE_APPLICATION_CREDENTIALS`: Pfad zur Schlüsseldatei Ihres Dienstkontos JSON - - Authentifizieren Sie sich mit gcloud CLI: `gcloud auth application-default login` - - Legen Sie sie fest, während Sie OpenCode ausführen. - - ```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode - ``` - - Oder fügen Sie sie Ihrem Bash-Profil hinzu. - - ```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global - ``` - -:::tip -Die Region `global` verbessert die Verfügbarkeit und reduziert Fehler ohne zusätzliche Kosten. Verwenden Sie regionale Endpunkte (e.g., `us-central1`) für Datenresidenzanforderungen. [Learn more](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. Führen Sie den Befehl `/models` aus, um das gewünschte Modell auszuwählen. - - ```txt - /models - ``` - ---- - -### Groq - -1. Gehen Sie zu [Groq console](https://console.groq.com/), klicken Sie auf **Create API Key** und kopieren Sie den Schlüssel. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach Groq. - - ```txt - /connect - ``` - -3. Geben Sie den Schlüssel API für den Anbieter ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um das gewünschte auszuwählen. - - ```txt - /models - ``` - ---- - -### Hugging Face - -[Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers) bietet Zugriff auf offene Modelle, die von 17+-Anbietern unterstützt werden. - -1. Gehen Sie zu [Hugging Face settings](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained), um ein Token mit der Berechtigung zum Aufrufen von Inferenzanbietern zu erstellen. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Hugging Face**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren Hugging Face-Token ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell wie _Kimi-K2-Instruct_ oder _GLM-4.6_ auszuwählen. - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) ist eine LLM-Beobachtbarkeitsplattform, die Protokollierung, Überwachung und Analyse für Ihre AI-Anwendungen bietet. Das Helicone AI Gateway leitet Ihre Anfragen basierend auf dem Modell automatisch an den entsprechenden Anbieter weiter. - -1. Gehen Sie zu [Helicone](https://helicone.ai), erstellen Sie ein Konto und generieren Sie einen API-Schlüssel über Ihr Dashboard. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Helicone**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren Helicone-API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell auszuwählen. - - ```txt - /models - ``` - -Weitere Anbieter und erweiterte Funktionen wie Caching und Ratenbegrenzung finden Sie unter [Helicone documentation](https://docs.helicone.ai). - -#### Optionale Konfigurationen - -Falls Sie eine Funktion oder ein Modell von Helicone sehen, das nicht automatisch über OpenCode konfiguriert wird, können Sie es jederzeit selbst konfigurieren. - -Hier ist [Helicone's Model Directory](https://helicone.ai/models). Sie benötigen dies, um die IDs der Modelle abzurufen, die Sie hinzufügen möchten. - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### Benutzerdefinierte Header - -Helicone unterstützt benutzerdefinierte Header für Funktionen wie Caching, Benutzerverfolgung und Sitzungsverwaltung. Fügen Sie sie mit `options.headers` zu Ihrer Anbieterkonfiguration hinzu: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### Sitzungsverfolgung - -Mit der [Sessions](https://docs.helicone.ai/features/sessions)-Funktion von Helicone können Sie zusammengehörige LLM-Anfragen gruppieren. Verwenden Sie das [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session)-Plugin, um jede OpenCode-Konversation automatisch als Sitzung in Helicone zu protokollieren. - -```bash -npm install -g opencode-helicone-session -``` - -Fügen Sie es Ihrer Konfiguration hinzu. - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -Das Plugin fügt `Helicone-Session-Id`- und `Helicone-Session-Name`-Header in Ihre Anfragen ein. Auf der Seite „Sitzungen“ von Helicone wird jede OpenCode-Konversation als separate Sitzung aufgeführt. - -##### Gängige Helicone-Header - -| Kopfzeile | Beschreibung | -| -------------------------- | ----------------------------------------------------------------------------------- | -| `Helicone-Cache-Enabled` | Antwort-Caching aktivieren (`true`/`false`) | -| `Helicone-User-Id` | Verfolgen Sie Metriken nach Benutzer | -| `Helicone-Property-[Name]` | Benutzerdefinierte Eigenschaften hinzufügen (e.g., `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | Anfragen mit Eingabeaufforderungsversionen verknüpfen | - -Alle verfügbaren Header finden Sie unter [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory). - ---- - -### llama.cpp - -Sie können OpenCode für die Verwendung lokaler Modelle über das Dienstprogramm [llama.cpp's](https://github.com/ggml-org/llama.cpp) llama-server konfigurieren - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -In diesem Beispiel: - -- `llama.cpp` ist der benutzerdefinierte Anbieter ID. Dies kann eine beliebige Zeichenfolge sein. -- `npm` gibt das Paket an, das für diesen Anbieter verwendet werden soll. Hier wird `@ai-sdk/openai-compatible` für jeden OpenAI-kompatiblen API verwendet. -- `name` ist der Anzeigename für den Anbieter im UI. -- `options.baseURL` ist der Endpunkt für den lokalen Server. -- `models` ist eine Zuordnung von Modell-IDs zu ihren Konfigurationen. Der Modellname wird in der Modellauswahlliste angezeigt. - ---- - -### IO.NET - -IO.NET bietet 17-Modelle, die für verschiedene Anwendungsfälle optimiert sind: - -1. Gehen Sie zu [IO.NET console](https://ai.io.net/), erstellen Sie ein Konto und generieren Sie einen API-Schlüssel. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **IO.NET**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren IO.NET API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell auszuwählen. - - ```txt - /models - ``` - ---- - -### LM Studio - -Sie können OpenCode über LM Studio für die Verwendung lokaler Modelle konfigurieren. - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -In diesem Beispiel: - -- `lmstudio` ist der benutzerdefinierte Anbieter ID. Dies kann eine beliebige Zeichenfolge sein. -- `npm` gibt das Paket an, das für diesen Anbieter verwendet werden soll. Hier wird `@ai-sdk/openai-compatible` für jeden OpenAI-kompatiblen API verwendet. -- `name` ist der Anzeigename für den Anbieter im UI. -- `options.baseURL` ist der Endpunkt für den lokalen Server. -- `models` ist eine Zuordnung von Modell-IDs zu ihren Konfigurationen. Der Modellname wird in der Modellauswahlliste angezeigt. - ---- - -### Moonshot AI - -So verwenden Sie Kimi K2 von Moonshot AI: - -1. Gehen Sie zu [Moonshot AI console](https://platform.moonshot.ai/console), erstellen Sie ein Konto und klicken Sie auf **Schlüssel API erstellen**. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Moonshot AI**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren Moonshot API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um _Kimi K2_ auszuwählen. - - ```txt - /models - ``` - ---- - -### MiniMax - -1. Gehen Sie zu [MiniMax API Console](https://platform.minimax.io/login), erstellen Sie ein Konto und generieren Sie einen API-Schlüssel. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **MiniMax**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren MiniMax API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell wie _M2.1_ auszuwählen. - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. Gehen Sie zu [Nebius Token Factory console](https://tokenfactory.nebius.com/), erstellen Sie ein Konto und klicken Sie auf **Schlüssel hinzufügen**. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Nebius Token Factory**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren Nebius Token Factory API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell wie _Kimi K2 Instruct_ auszuwählen. - - ```txt - /models - ``` - ---- - -### Ollama - -Sie können OpenCode über Ollama für die Verwendung lokaler Modelle konfigurieren. - -:::tip -Ollama kann sich automatisch für OpenCode konfigurieren. Weitere Informationen finden Sie unter [Ollama integration docs](https://docs.ollama.com/integrations/opencode). -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -In diesem Beispiel: - -- `ollama` ist der benutzerdefinierte Anbieter ID. Dies kann eine beliebige Zeichenfolge sein. -- `npm` gibt das Paket an, das für diesen Anbieter verwendet werden soll. Hier wird `@ai-sdk/openai-compatible` für jeden OpenAI-kompatiblen API verwendet. -- `name` ist der Anzeigename für den Anbieter im UI. -- `options.baseURL` ist der Endpunkt für den lokalen Server. -- `models` ist eine Zuordnung von Modell-IDs zu ihren Konfigurationen. Der Modellname wird in der Modellauswahlliste angezeigt. - -:::tip -Wenn Toolaufrufe nicht funktionieren, versuchen Sie, `num_ctx` in Ollama zu erhöhen. Beginnen Sie bei ca. 16.000 – 32.000 km. -::: - ---- - -### Ollama Cloud - -So verwenden Sie Ollama Cloud mit OpenCode: - -1. Gehen Sie zu [https://ollama.com/](https://ollama.com/) und melden Sie sich an oder erstellen Sie ein Konto. - -2. Navigieren Sie zu **Einstellungen** > **Schlüssel** und klicken Sie auf **Add API Key**, um einen neuen API-Schlüssel zu generieren. - -3. Kopieren Sie den API-Schlüssel zur Verwendung in OpenCode. - -4. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Ollama Cloud**. - - ```txt - /connect - ``` - -5. Geben Sie Ihren Ollama Cloud API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **Wichtig**: Bevor Sie Cloud-Modelle in OpenCode verwenden, müssen Sie die Modellinformationen lokal abrufen: - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. Führen Sie den Befehl `/models` aus, um Ihr Ollama Cloud-Modell auszuwählen. - - ```txt - /models - ``` - ---- - -### OpenAI - -Wir empfehlen, sich für [ChatGPT Plus or Pro](https://chatgpt.com/pricing) anzumelden. - -1. Führen Sie nach der Anmeldung den Befehl `/connect` aus und wählen Sie OpenAI aus. - - ```txt - /connect - ``` - -2. Hier können Sie die Option **ChatGPT Plus/Pro** auswählen und Ihr Browser wird geöffnet - und bitten Sie, sich zu authentifizieren. - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. Jetzt sollten alle OpenAI-Modelle verfügbar sein, wenn Sie den Befehl `/models` verwenden. - - ```txt - /models - ``` - -##### Verwendung von API-Keys - -Wenn Sie bereits über einen API-Schlüssel verfügen, können Sie **API-Schlüssel manuell eingeben** auswählen und ihn in Ihr Terminal einfügen. - ---- - -### OpenCode Zen - -OpenCode Zen ist eine Liste getesteter und verifizierter Modelle, die vom OpenCode-Team bereitgestellt werden. [Learn more](/docs/zen). - -1. Melden Sie sich bei **OpenCode Zen** an und klicken Sie auf **Create API Key**. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **OpenCode Zen**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren OpenCode API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell wie _Qwen 3 Coder 480B_ auszuwählen. - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. Gehen Sie zu [OpenRouter dashboard](https://openrouter.ai/settings/keys), klicken Sie auf **Create API Key** und kopieren Sie den Schlüssel. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach OpenRouter. - - ```txt - /connect - ``` - -3. Geben Sie den Schlüssel API für den Anbieter ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Viele OpenRouter-Modelle sind standardmäßig vorinstalliert. Führen Sie den Befehl `/models` aus, um das gewünschte Modell auszuwählen. - - ```txt - /models - ``` - - Sie können auch zusätzliche Modelle über Ihre OpenCode-Konfiguration hinzufügen. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. Sie können sie auch über Ihre OpenCode-Konfiguration anpassen. Hier ist ein Beispiel für die Angabe eines Anbieters - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI Core bietet Zugriff auf 40+ Modelle von OpenAI, Anthropic, Google, Amazon, Meta, Mistral und AI21 über eine einheitliche Plattform. - -1. Gehen Sie zu Ihrem [SAP BTP Cockpit](https://account.hana.ondemand.com/), navigieren Sie zu Ihrer SAP AI Core-Dienstinstanz und erstellen Sie einen Dienstschlüssel. - - :::tip - Der Dienstschlüssel ist ein JSON-Objekt, das `clientid`, `clientsecret`, `url` und `serviceurls.AI_API_URL` enthält. Sie finden Ihre AI Core-Instanz unter **Dienste** > **Instanzen und Abonnements** im BTP Cockpit. - ::: - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **SAP AI Core**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren JSON-Service-Account-Key ein. - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - Oder legen Sie die Umgebungsvariable `AICORE_SERVICE_KEY` fest: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - Oder fügen Sie es Ihrem Bash-Profil hinzu: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. Legen Sie optional die Bereitstellung ID und die Ressourcengruppe fest: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - Diese Einstellungen sind optional und sollten entsprechend Ihrem SAP AI Core-Setup konfiguriert werden. - ::: - -5. Führen Sie den Befehl `/models` aus, um aus 40+ verfügbaren Modellen auszuwählen. - - ```txt - /models - ``` - ---- - -### STACKIT - -STACKIT AI Model Serving bietet eine voll verwaltete, souveraene Hosting-Umgebung fuer AI-Modelle, mit Fokus auf LLMs wie Llama, Mistral und Qwen, mit maximaler Datensouveraenitaet auf europaeischer Infrastruktur. - -1. Gehen Sie zum [STACKIT Portal](https://portal.stackit.cloud), navigieren Sie zu **AI Model Serving** und erstellen Sie ein Auth-Token fuer Ihr Projekt. - - :::tip - Sie benoetigen ein STACKIT-Kundenkonto, Benutzerkonto und Projekt, bevor Sie Auth-Tokens erstellen koennen. - ::: - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **STACKIT**. - - ```txt - /connect - ``` - -3. Geben Sie Ihr STACKIT AI Model Serving Auth-Token ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um aus verfügbaren Modellen wie _Qwen3-VL 235B_ oder _Llama 3.3 70B_ auszuwählen. - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. Gehen Sie zum [OVHcloud panel](https://ovh.com/manager). Navigieren Sie zum Abschnitt `Public Cloud`, `AI & Machine Learning` > `AI Endpoints` und klicken Sie auf der Registerkarte `API Keys` auf **Neuen API-Schlüssel erstellen**. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **OVHcloud AI Endpoints**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren OVHcloud AI Endpoints API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell wie _gpt-oss-120b_ auszuwählen. - - ```txt - /models - ``` - ---- - -### Scaleway - -So verwenden Sie [Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/) mit OpenCode: - -1. Gehen Sie zu [Scaleway Console IAM settings](https://console.scaleway.com/iam/api-keys), um einen neuen API-Schlüssel zu generieren. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Scaleway**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren Scaleway-API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell wie _devstral-2-123b-instruct-2512_ oder _gpt-oss-120b_ auszuwählen. - - ```txt - /models - ``` - ---- - -### Together AI - -1. Gehen Sie zu [Together AI console](https://api.together.ai), erstellen Sie ein Konto und klicken Sie auf **Schlüssel hinzufügen**. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Together AI**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren Together AI API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell wie _Kimi K2 Instruct_ auszuwählen. - - ```txt - /models - ``` - ---- - -### Venice AI - -1. Gehen Sie zu [Venice AI console](https://venice.ai), erstellen Sie ein Konto und generieren Sie einen API-Schlüssel. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Venice AI**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren Venice AI API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell wie _Llama 3.3 70B_ auszuwählen. - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -Mit dem Vercel AI Gateway können Sie über einen einheitlichen Endpunkt auf Modelle von OpenAI, Anthropic, Google, xAI und mehr zugreifen. Die Modelle werden zum Listenpreis ohne Aufschlag angeboten. - -1. Gehen Sie zum [Vercel dashboard](https://vercel.com/), navigieren Sie zur Registerkarte **AI Gateway** und klicken Sie auf **API-Schlüssel**, um einen neuen API-Schlüssel zu erstellen. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Vercel AI Gateway**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren Vercel AI Gateway API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell auszuwählen. - - ```txt - /models - ``` - -Sie können Modelle auch über Ihre OpenCode-Konfiguration anpassen. Hier ist ein Beispiel für die Angabe der Provider-Routing-Reihenfolge. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -Einige nützliche Routing-Optionen: - -| Option | Beschreibung | -| ------------------- | ----------------------------------------------------------------- | -| `order` | Anbietersequenz zum Ausprobieren | -| `only` | Auf bestimmte Anbieter beschränken | -| `zeroDataRetention` | Verwenden Sie nur Anbieter mit Null-Datenaufbewahrungsrichtlinien | - ---- - -### xAI - -1. Gehen Sie zu [xAI console](https://console.x.ai/), erstellen Sie ein Konto und generieren Sie einen API-Schlüssel. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **xAI**. - - ```txt - /connect - ``` - -3. Geben Sie Ihren xAI API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell wie _Grok Beta_ auszuwählen. - - ```txt - /models - ``` - ---- - -### Z.AI - -1. Gehen Sie zu [Z.AI API console](https://z.ai/manage-apikey/apikey-list), erstellen Sie ein Konto und klicken Sie auf **Neuen API-Schlüssel erstellen**. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach **Z.AI**. - - ```txt - /connect - ``` - - Wenn Sie den **GLM Coding Plan** abonniert haben, wählen Sie **Z.AI Coding Plan**. - -3. Geben Sie Ihren Z.AI API-Schlüssel ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Führen Sie den Befehl `/models` aus, um ein Modell wie _GLM-4.7_ auszuwählen. - - ```txt - /models - ``` - ---- - -### ZenMux - -1. Gehen Sie zu [ZenMux dashboard](https://zenmux.ai/settings/keys), klicken Sie auf **Create API Key** und kopieren Sie den Schlüssel. - -2. Führen Sie den Befehl `/connect` aus und suchen Sie nach ZenMux. - - ```txt - /connect - ``` - -3. Geben Sie den Schlüssel API für den Anbieter ein. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Viele ZenMux-Modelle sind standardmäßig vorinstalliert. Führen Sie den Befehl `/models` aus, um das gewünschte Modell auszuwählen. - - ```txt - /models - ``` - - Sie können auch zusätzliche Modelle über Ihre OpenCode-Konfiguration hinzufügen. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## Benutzerdefinierter Anbieter - -So fügen Sie einen **OpenAI-kompatiblen** Anbieter hinzu, der nicht im Befehl `/connect` aufgeführt ist: - -:::tip -Sie können jeden OpenAI-kompatiblen Anbieter mit OpenCode verwenden. Die meisten modernen AI-Anbieter bieten OpenAI-kompatible APIs an. -::: - -1. Führen Sie den Befehl `/connect` aus und scrollen Sie nach unten zu **Andere**. - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. Geben Sie einen eindeutigen ID für den Anbieter ein. - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - Wählen Sie einen einprägsamen ID, den Sie in Ihrer Konfigurationsdatei verwenden. - ::: - -3. Geben Sie Ihren API-Schlüssel für den Anbieter ein. - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. Erstellen oder aktualisieren Sie Ihre `opencode.json`-Datei in Ihrem Projektverzeichnis: - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - - Hier sind die Konfigurationsmöglichkeiten: - - **npm**: AI SDK zu verwendendes Paket, `@ai-sdk/openai-compatible` für OpenAI-kompatible Anbieter - - **Name**: Anzeigename in UI. - - **Modelle**: Verfügbare Modelle. - - **options.baseURL**: API endpoint URL. - - **Optionen.apiKey**: Legen Sie optional den Schlüssel API fest, wenn Sie keine Authentifizierung verwenden. - - **options.headers**: Optional benutzerdefinierte Header festlegen. - - Mehr zu den erweiterten Optionen im Beispiel unten. - -5. Führen Sie den Befehl `/models` aus und Ihr benutzerdefinierter Anbieter und Ihre Modelle werden in der Auswahlliste angezeigt. - ---- - -##### Beispiel - -Hier ist ein Beispiel für die Einstellung der Optionen `apiKey`, `headers` und Modell `limit`. - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -Konfigurationsdetails: - -- **apiKey**: Wird mit der Variablensyntax `env`, [learn more](/docs/config#env-vars), festgelegt. -- **Header**: Benutzerdefinierte Header, die mit jeder Anfrage gesendet werden. -- **limit.context**: Maximale Eingabetokens, die das Modell akzeptiert. -- **limit.output**: Maximale Token, die das Modell generieren kann. - -Mithilfe der `limit`-Felder kann OpenCode erkennen, wie viel Kontext Sie noch haben. Standardanbieter beziehen diese automatisch von models.dev. - ---- - -## Fehlerbehebung - -Wenn Sie Probleme beim Konfigurieren eines Anbieters haben, überprüfen Sie Folgendes: - -1. **Überprüfen Sie die Authentifizierungseinrichtung**: Führen Sie `opencode auth list` aus, um zu sehen, ob die Anmeldeinformationen vorhanden sind - für den Anbieter werden Ihrer Konfiguration hinzugefügt. - - Dies gilt nicht für Anbieter wie Amazon Bedrock, die für ihre Authentifizierung auf Umgebungsvariablen angewiesen sind. - -2. Überprüfen Sie bei benutzerdefinierten Anbietern die OpenCode-Konfiguration und: - - Stellen Sie sicher, dass der im Befehl `/connect` verwendete Anbieter ID mit dem ID in Ihrer OpenCode-Konfiguration übereinstimmt. - - Für den Anbieter wird das richtige npm-Paket verwendet. Verwenden Sie beispielsweise `@ai-sdk/cerebras` für Cerebras. Und für alle anderen OpenAI-kompatiblen Anbieter verwenden Sie `@ai-sdk/openai-compatible`. - - Überprüfen Sie, ob im Feld `options.baseURL` der richtige Endpunkt API verwendet wird. diff --git a/packages/web/src/content/docs/de/rules.mdx b/packages/web/src/content/docs/de/rules.mdx deleted file mode 100644 index ef446d09bd..0000000000 --- a/packages/web/src/content/docs/de/rules.mdx +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Regeln -description: Lege eigene Anweisungen fuer opencode fest. ---- - -Du kannst opencode ueber eine `AGENTS.md`-Datei mit eigenen Anweisungen steuern. -Das ist aehnlich zu den Regeln in Cursor und wird direkt in den LLM-Kontext geladen. - ---- - -## Initialisierung - -Um eine neue `AGENTS.md` zu erstellen, fuehre in opencode den Befehl `/init` aus. - -:::tip -Du solltest die `AGENTS.md` deines Projekts in Git committen. -::: - -Der Befehl scannt dein Projekt und erzeugt daraus eine passende `AGENTS.md`. -So kann opencode sich in deinem Code besser orientieren. - -Wenn bereits eine `AGENTS.md` existiert, versucht opencode sie zu erweitern. - ---- - -## Beispiel - -Du kannst die Datei auch manuell anlegen. -Hier ist ein Beispiel, was in einer `AGENTS.md` stehen kann. - -```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` -``` - -Hier hinterlegst du projektspezifische Regeln, die dein Team gemeinsam nutzt. - ---- - -## Typen - -opencode kann `AGENTS.md` aus mehreren Orten lesen. -Die Orte haben unterschiedliche Zwecke. - -### Projekt - -Lege eine `AGENTS.md` im Projekt-Root ab, um projektspezifische Regeln zu definieren. -Diese gelten nur in diesem Verzeichnis und seinen Unterordnern. - -### Global - -Du kannst auch globale Regeln in `~/.config/opencode/AGENTS.md` speichern. -Diese gelten in allen opencode-Sitzungen. - -Da diese Datei nicht in Git landet und nicht mit dem Team geteilt wird, eignet sie sich fuer persoenliche Regeln. - -### Claude Code-Kompatibilität - -Wenn du von Claude Code kommst, unterstuetzt OpenCode dessen Dateikonventionen als Fallback: - -- **Projektregeln**: `CLAUDE.md` im Projekt (wenn keine `AGENTS.md` existiert) -- **Globale Regeln**: `~/.claude/CLAUDE.md` (wenn keine `~/.config/opencode/AGENTS.md` existiert) -- **Skills**: `~/.claude/skills/` - siehe [Agent Skills](/docs/skills/) fuer Details - -Um die Claude-Code-Kompatibilitaet zu deaktivieren, setze eine dieser Umgebungsvariablen: - -```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 -``` - ---- - -## Rangfolge - -Beim Start sucht opencode in dieser Reihenfolge nach Regeldateien: - -1. **Lokale Dateien** beim Hochlaufen ab dem aktuellen Verzeichnis (`AGENTS.md`, `CLAUDE.md`) -2. **Globale Datei** unter `~/.config/opencode/AGENTS.md` -3. **Claude-Code-Datei** unter `~/.claude/CLAUDE.md` (falls nicht deaktiviert) - -Pro Kategorie gewinnt die zuerst passende Datei. -Wenn sowohl `AGENTS.md` als auch `CLAUDE.md` existieren, wird nur `AGENTS.md` verwendet. - ---- - -## Eigene Anweisungen - -Du kannst zusaetzliche Anweisungsdateien in deiner `opencode.json` oder in `~/.config/opencode/opencode.json` angeben. -So kann dein Team bestehende Regeln wiederverwenden, statt Inhalte in `AGENTS.md` zu duplizieren. - -Beispiel: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -Du kannst auch Remote-URLs nutzen, um Regeln aus dem Web zu laden. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"] -} -``` - -Remote-Anweisungen werden mit 5 Sekunden Timeout geladen. - -Alle Anweisungsdateien werden mit deinen `AGENTS.md`-Dateien kombiniert. - ---- - -## Externe Dateien referenzieren - -opencode parst Datei-Referenzen in `AGENTS.md` nicht automatisch. -Du erreichst aehnliches Verhalten auf zwei Wegen. - -### Mit opencode.json - -Empfohlen ist das `instructions`-Feld in der `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 Anweisungen in AGENTS.md - -Du kannst opencode explizit anweisen, externe Dateien zu lesen. -Hier ein praxisnahes Beispiel: - -```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. -``` - -Damit kannst du: - -- Modulare, wiederverwendbare Regeldateien erstellen -- Regeln projektuebergreifend per Symlink oder Git-Submodule teilen -- `AGENTS.md` kurz halten und auf Detailregeln verweisen -- Sicherstellen, dass Dateien nur bei Bedarf geladen werden - -:::tip -Fuer Monorepos oder gemeinsame Standards ist `opencode.json` mit Glob-Mustern (z. B. `packages/*/AGENTS.md`) oft wartbarer als manuelle Anweisungen. -::: diff --git a/packages/web/src/content/docs/de/sdk.mdx b/packages/web/src/content/docs/de/sdk.mdx deleted file mode 100644 index 22e70071d6..0000000000 --- a/packages/web/src/content/docs/de/sdk.mdx +++ /dev/null @@ -1,465 +0,0 @@ ---- -title: SDK -description: Typsicherer JS-Client fuer den opencode-Server. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -Das opencode JS/TS SDK bietet einen typsicheren Client fuer die Server-API. -Damit kannst du Integrationen bauen und opencode programmatisch steuern. - -[Mehr zum Server](/docs/server). Beispiele findest du in den [Community-Projekten](/docs/ecosystem#projects). - ---- - -## Installation - -Installiere das SDK ueber npm: - -```bash -npm install @opencode-ai/sdk -``` - ---- - -## Client erstellen - -Erstelle eine opencode-Instanz: - -```javascript -import { createOpencode } from "@opencode-ai/sdk" - -const { client } = await createOpencode() -``` - -Das startet Server und Client. - -#### Optionen - -| Option | Type | Description | Default | -| ---------- | ------------- | ------------------------------ | ----------- | -| `hostname` | `string` | Server hostname | `127.0.0.1` | -| `port` | `number` | Server port | `4096` | -| `signal` | `AbortSignal` | Abort signal for cancellation | `undefined` | -| `timeout` | `number` | Timeout in ms for server start | `5000` | -| `config` | `Config` | Configuration object | `{}` | - ---- - -## Config - -Du kannst ein Konfigurationsobjekt uebergeben, um das Verhalten anzupassen. -`opencode.json` wird weiterhin geladen, kann aber inline ueberschrieben oder erweitert werden: - -```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() -``` - -## Nur Client - -Wenn opencode bereits laeuft, kannst du nur einen Client erstellen und verbinden: - -```javascript -import { createOpencodeClient } from "@opencode-ai/sdk" - -const client = createOpencodeClient({ - baseUrl: "http://localhost:4096", -}) -``` - -#### Optionen - -| Option | Type | Description | Default | -| --------------- | ---------- | -------------------------------- | ----------------------- | -| `baseUrl` | `string` | URL of the server | `http://localhost:4096` | -| `fetch` | `function` | Custom fetch implementation | `globalThis.fetch` | -| `parseAs` | `string` | Response parsing method | `auto` | -| `responseStyle` | `string` | Return style: `data` or `fields` | `fields` | -| `throwOnError` | `boolean` | Throw errors instead of return | `false` | - ---- - -## Typen - -Das SDK bringt TypeScript-Definitionen fuer alle API-Typen mit. -Du kannst sie direkt importieren: - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -Alle Typen werden aus der OpenAPI-Spezifikation des Servers generiert und sind in der Typdatei verfuegbar. - ---- - -## Fehler - -Das SDK kann Fehler werfen, die du abfangen und behandeln kannst: - -```typescript -try { - await client.session.get({ path: { id: "invalid-id" } }) -} catch (error) { - console.error("Failed to get session:", (error as Error).message) -} -``` - ---- - -## Structured Output - -Du kannst eine strukturierte JSON-Ausgabe vom Modell anfordern, indem du ein `format` mit einem JSON-Schema angibst. Das Modell verwendet dann ein `StructuredOutput`-Tool, um validiertes JSON zurueckzugeben, das deinem Schema entspricht. - -### Grundlegende Verwendung - -```typescript -const result = await client.session.prompt({ - path: { id: sessionId }, - body: { - parts: [{ type: "text", text: "Recherchiere Anthropic und gib Firmeninfos zurueck" }], - format: { - type: "json_schema", - schema: { - type: "object", - properties: { - company: { type: "string", description: "Firmenname" }, - founded: { type: "number", description: "Gruendungsjahr" }, - products: { - type: "array", - items: { type: "string" }, - description: "Hauptprodukte", - }, - }, - required: ["company", "founded"], - }, - }, - }, -}) - -// Zugriff auf die strukturierte Ausgabe -console.log(result.data.info.structured_output) -// { company: "Anthropic", founded: 2021, products: ["Claude", "Claude API"] } -``` - -### Ausgabeformate - -| Type | Description | -| ------------- | ----------------------------------------------------------- | -| `text` | Standard. Normale Textantwort (keine strukturierte Ausgabe) | -| `json_schema` | Gibt validiertes JSON zurueck, das dem Schema entspricht | - -### JSON-Schema-Format - -Bei Verwendung von `type: 'json_schema'` musst du Folgendes angeben: - -| Field | Type | Description | -| ------------ | --------------- | ------------------------------------------------------------- | -| `type` | `'json_schema'` | Erforderlich. Gibt den JSON-Schema-Modus an | -| `schema` | `object` | Erforderlich. JSON-Schema-Objekt, das die Struktur definiert | -| `retryCount` | `number` | Optional. Anzahl der Validierungswiederholungen (Standard: 2) | - -### Fehlerbehandlung - -Wenn das Modell nach allen Wiederholungen keine valide strukturierte Ausgabe liefert, enthaelt die Antwort einen `StructuredOutputError`: - -```typescript -if (result.data.info.error?.name === "StructuredOutputError") { - console.error("Strukturierte Ausgabe fehlgeschlagen:", result.data.info.error.message) - console.error("Versuche:", result.data.info.error.retries) -} -``` - -### Best Practices - -1. **Klare Beschreibungen**: Gib in deinen Schema-Properties klare Beschreibungen an, damit das Modell versteht, welche Daten extrahiert werden sollen. -2. **`required` nutzen**: Definiere, welche Felder zwingend vorhanden sein muessen. -3. **Schemas einfach halten**: Komplexe verschachtelte Schemas sind fuer das Modell schwerer korrekt auszufuellen. -4. **`retryCount` anpassen**: Erhoehe den Wert bei komplexen Schemas, verringere ihn bei einfachen. - ---- - -## APIs - -Das SDK stellt alle Server-APIs ueber einen typsicheren Client bereit. - ---- - -### Global - -| Method | Description | Response | -| ----------------- | -------------------------------- | ------------------------------------ | -| `global.health()` | Prueft Server-Status und Version | `{ healthy: true, version: string }` | - ---- - -#### Beispiele - -```javascript -const health = await client.global.health() -console.log(health.data.version) -``` - ---- - -### App - -| Method | Description | Response | -| -------------- | -------------------------------- | ------------------------------------------- | -| `app.log()` | Schreibt einen Log-Eintrag | `boolean` | -| `app.agents()` | Listet alle verfuegbaren Agenten | Agent[] | - ---- - -#### Beispiele - -```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 - -| Method | Description | Response | -| ------------------- | ---------------------------- | --------------------------------------------- | -| `project.list()` | Listet alle Projekte | Project[] | -| `project.current()` | Ruft das aktuelle Projekt ab | Project | - ---- - -#### Beispiele - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### Path - -| Method | Description | Response | -| ------------ | -------------------------- | ---------------------------------------- | -| `path.get()` | Ruft den aktuellen Pfad ab | Path | - ---- - -#### Beispiele - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### Config - -| Method | Description | Response | -| -------------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | Ruft Konfigurationsinfos ab | Config | -| `config.providers()` | Listet Provider und Standard-Modelle | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### Beispiele - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### Sessions - -| Method | Description | Notes | -| ---------------------------------------------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `session.list()` | Listet Sessions | Gibt Session[] zurueck | -| `session.get({ path })` | Ruft Session ab | Gibt Session zurueck | -| `session.children({ path })` | Listet Kind-Sessions | Gibt Session[] zurueck | -| `session.create({ body })` | Erstellt Session | Gibt Session zurueck | -| `session.delete({ path })` | Loescht Session | Gibt `boolean` zurueck | -| `session.update({ path, body })` | Aktualisiert Session-Eigenschaften | Gibt Session zurueck | -| `session.init({ path, body })` | Analysiert App und erstellt `AGENTS.md` | Gibt `boolean` zurueck | -| `session.abort({ path })` | Bricht eine laufende Session ab | Gibt `boolean` zurueck | -| `session.share({ path })` | Teilt Session | Gibt Session zurueck | -| `session.unshare({ path })` | Hebt Teilen der Session auf | Gibt Session zurueck | -| `session.summarize({ path, body })` | Fasst Session zusammen | Gibt `boolean` zurueck | -| `session.messages({ path })` | Listet Nachrichten einer Session | Gibt `{ info: `Message`, parts: `Part[]`}[]` zurueck | -| `session.message({ path })` | Ruft Nachrichtendetails ab | Gibt `{ info: `Message`, parts: `Part[]`}` zurueck | -| `session.prompt({ path, body })` | Sendet Prompt-Nachricht | `body.noReply: true` gibt UserMessage (nur Kontext) zurueck. Standard gibt AssistantMessage mit AI-Antwort zurueck. Unterstuetzt `body.outputFormat` fuer [strukturierte Ausgabe](#structured-output) | -| `session.command({ path, body })` | Sendet Befehl an Session | Gibt `{ info: `AssistantMessage`, parts: `Part[]`}` zurueck | -| `session.shell({ path, body })` | Fuehrt Shell-Befehl aus | Gibt AssistantMessage zurueck | -| `session.revert({ path, body })` | Setzt Nachricht zurueck | Gibt Session zurueck | -| `session.unrevert({ path })` | Stellt zurueckgesetzte Nachrichten wieder her | Gibt Session zurueck | -| `postSessionByIdPermissionsByPermissionId({ path, body })` | Antwortet auf eine Berechtigungsanfrage | Gibt `boolean` zurueck | - ---- - -#### Beispiele - -```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." }], - }, -}) -``` - ---- - -### Files - -| Method | Description | Response | -| ------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------- | -| `find.text({ query })` | Sucht Text in Dateien | Array of match objects with `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `find.files({ query })` | Findet Dateien und Verzeichnisse nach Namen | `string[]` (paths) | -| `find.symbols({ query })` | Findet Workspace-Symbole | Symbol[] | -| `file.read({ query })` | Liest eine Datei | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | Ruft Status fuer getrackte Dateien ab | File[] | - -`find.files` unterstuetzt einige optionale Query-Felder: - -- `type`: `"file"` oder `"directory"` -- `directory`: Ueberschreibt das Projekt-Root fuer die Suche -- `limit`: Maximale Ergebnisse (1–200) - ---- - -#### Beispiele - -```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 - -| Method | Description | Response | -| ------------------------------ | ------------------------------ | --------- | -| `tui.appendPrompt({ body })` | Haengt Text an den Prompt an | `boolean` | -| `tui.openHelp()` | Oeffnet den Hilfedialog | `boolean` | -| `tui.openSessions()` | Oeffnet die Session-Auswahl | `boolean` | -| `tui.openThemes()` | Oeffnet die Theme-Auswahl | `boolean` | -| `tui.openModels()` | Oeffnet die Modell-Auswahl | `boolean` | -| `tui.submitPrompt()` | Sendet den aktuellen Prompt ab | `boolean` | -| `tui.clearPrompt()` | Leert den Prompt | `boolean` | -| `tui.executeCommand({ body })` | Fuehrt einen Befehl aus | `boolean` | -| `tui.showToast({ body })` | Zeigt Toast-Benachrichtigung | `boolean` | - ---- - -#### Beispiele - -```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 - -| Method | Description | Response | -| ------------------- | ----------------------------- | --------- | -| `auth.set({ ... })` | Setzt Authentifizierungsdaten | `boolean` | - ---- - -#### Beispiele - -```javascript -await client.auth.set({ - path: { id: "anthropic" }, - body: { type: "api", key: "your-api-key" }, -}) -``` - ---- - -### Events - -| Method | Description | Response | -| ------------------- | ------------------------- | ------------------------- | -| `event.subscribe()` | Server-Sent Events Stream | Server-sent events stream | - ---- - -#### Beispiele - -```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) -} -``` diff --git a/packages/web/src/content/docs/de/server.mdx b/packages/web/src/content/docs/de/server.mdx deleted file mode 100644 index 64322bda85..0000000000 --- a/packages/web/src/content/docs/de/server.mdx +++ /dev/null @@ -1,291 +0,0 @@ ---- -title: Server -description: Nutze den opencode-Server ueber HTTP. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -Der Befehl `opencode serve` startet einen headless HTTP-Server. -Er stellt einen OpenAPI-Endpunkt bereit, den ein opencode-Client nutzen kann. - ---- - -### Nutzung - -```bash -opencode serve [--port ] [--hostname ] [--cors ] -``` - -#### Optionen - -| Flag | Description | Default | -| --------------- | ----------------------------------- | ---------------- | -| `--port` | Port to listen on | `4096` | -| `--hostname` | Hostname to listen on | `127.0.0.1` | -| `--mdns` | Enable mDNS discovery | `false` | -| `--mdns-domain` | Custom domain name for mDNS service | `opencode.local` | -| `--cors` | Additional browser origins to allow | `[]` | - -`--cors` kann mehrfach angegeben werden: - -```bash -opencode serve --cors http://localhost:5173 --cors https://app.example.com -``` - ---- - -### Authentifizierung - -Setze `OPENCODE_SERVER_PASSWORD`, um den Server mit HTTP Basic Auth zu schuetzen. -Der Benutzername ist standardmaessig `opencode`, kann aber mit `OPENCODE_SERVER_USERNAME` ueberschrieben werden. Das gilt fuer `opencode serve` und `opencode web`. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve -``` - ---- - -### Funktionsweise - -Wenn du `opencode` startest, werden TUI und Server gestartet. -Die TUI ist dabei der Client, der mit dem Server spricht; dessen OpenAPI-3.1-Endpunkt dient auch zur Generierung des [SDK](/docs/sdk). - -:::tip -Nutze den opencode-Server, um opencode programmatisch anzusteuern. -::: - -Diese Architektur erlaubt mehrere Clients und programmatische Nutzung. - -Mit `opencode serve` startest du einen eigenstaendigen Server. -Laeuft bereits eine TUI, startet `opencode serve` trotzdem eine neue Serverinstanz. - ---- - -#### Mit bestehendem Server verbinden - -Beim TUI-Start werden Port und Hostname zufaellig gewaehlt. -Alternativ gibst du `--hostname` und `--port` als [Flags](/docs/cli) vor und verbindest dich dann gezielt damit. - -Der Endpunkt [`/tui`](#tui) kann die TUI ueber den Server steuern, etwa zum Vorbelegen oder Abschicken von Prompts. -Dieses Muster nutzen auch die OpenCode-[IDE](/docs/ide)-Plugins. - ---- - -## Spec - -Der Server veroeffentlicht eine OpenAPI-3.1-Spezifikation unter: - -``` -http://:/doc -``` - -Zum Beispiel `http://localhost:4096/doc`. -Nutze die Spec zum Generieren von Clients, zum Pruefen von Request/Response-Typen oder in einem Swagger-Explorer. - ---- - -## APIs - -Der opencode-Server stellt folgende APIs bereit. - ---- - -### Global - -| Method | Path | Description | Response | -| ------ | ---------------- | ----------------------------------- | ------------------------------------ | -| `GET` | `/global/health` | Ruft Server-Status und Version ab | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | Ruft globale Events ab (SSE-Stream) | Event stream | - ---- - -### Project - -| Method | Path | Description | Response | -| ------ | ------------------ | ---------------------------- | --------------------------------------------- | -| `GET` | `/project` | Listet alle Projekte | Project[] | -| `GET` | `/project/current` | Ruft das aktuelle Projekt ab | Project | - ---- - -### Path & VCS - -| Method | Path | Description | Response | -| ------ | ------- | ------------------------------------------- | ------------------------------------------- | -| `GET` | `/path` | Ruft den aktuellen Pfad ab | Path | -| `GET` | `/vcs` | Ruft VCS-Infos fuer das aktuelle Projekt ab | VcsInfo | - ---- - -### Instanz - -| Method | Path | Description | Response | -| ------ | ------------------- | ---------------------------- | --------- | -| `POST` | `/instance/dispose` | Beendet die aktuelle Instanz | `boolean` | - ---- - -### Konfiguration - -| Method | Path | Description | Response | -| ------- | ------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | Ruft Konfigurationsinfos ab | Config | -| `PATCH` | `/config` | Aktualisiert Konfiguration | Config | -| `GET` | `/config/providers` | Listet Provider und Standard-Modelle | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -### Anbieter - -| Method | Path | Description | Response | -| ------ | -------------------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | Listet alle Provider | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | Ruft Authentifizierungsmethoden der Provider ab | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | Autorisiert einen Provider per OAuth | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | Behandelt OAuth-Callback fuer einen Provider | `boolean` | - ---- - -### Sitzungen - -| Method | Path | Description | Notes | -| -------- | ---------------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `GET` | `/session` | Listet alle Sitzungen | Gibt Session[] zurueck | -| `POST` | `/session` | Erstellt eine neue Sitzung | body: `{ parentID?, title? }`, returns Session | -| `GET` | `/session/status` | Ruft Status aller Sitzungen ab | Gibt `{ [sessionID: string]: `SessionStatus` }` zurueck | -| `GET` | `/session/:id` | Ruft Sitzungsdetails ab | Gibt Session zurueck | -| `DELETE` | `/session/:id` | Loescht eine Sitzung und alle Daten | Gibt `boolean` zurueck | -| `PATCH` | `/session/:id` | Aktualisiert Sitzungseigenschaften | body: `{ title? }`, returns Session | -| `GET` | `/session/:id/children` | Ruft Kind-Sitzungen einer Sitzung ab | Gibt Session[] zurueck | -| `GET` | `/session/:id/todo` | Ruft die Todo-Liste einer Sitzung ab | Gibt Todo[] zurueck | -| `POST` | `/session/:id/init` | Analysiert App und erstellt `AGENTS.md` | body: `{ messageID, providerID, modelID }`, returns `boolean` | -| `POST` | `/session/:id/fork` | Forkt eine bestehende Sitzung an einer Nachricht | body: `{ messageID? }`, returns Session | -| `POST` | `/session/:id/abort` | Bricht eine laufende Sitzung ab | Gibt `boolean` zurueck | -| `POST` | `/session/:id/share` | Teilt eine Sitzung | Gibt Session zurueck | -| `DELETE` | `/session/:id/share` | Hebt Teilen einer Sitzung auf | Gibt Session zurueck | -| `GET` | `/session/:id/diff` | Ruft den Diff fuer diese Sitzung ab | query: `messageID?`, returns FileDiff[] | -| `POST` | `/session/:id/summarize` | Fasst die Sitzung zusammen | body: `{ providerID, modelID }`, returns `boolean` | -| `POST` | `/session/:id/revert` | Setzt eine Nachricht zurueck | body: `{ messageID, partID? }`, returns `boolean` | -| `POST` | `/session/:id/unrevert` | Stellt alle zurueckgesetzten Nachrichten wieder her | Gibt `boolean` zurueck | -| `POST` | `/session/:id/permissions/:permissionID` | Antwortet auf eine Berechtigungsanfrage | body: `{ response, remember? }`, returns `boolean` | - ---- - -### Nachrichten - -| Method | Path | Description | Notes | -| ------ | --------------------------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `GET` | `/session/:id/message` | Listet Nachrichten in einer Sitzung | query: `limit?`, returns `{ info: `Message`, parts: `Part[]`}[]` | -| `POST` | `/session/:id/message` | Sendet eine Nachricht und wartet auf Antwort | body: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, returns `{ info: `Message`, parts: `Part[]`}` | -| `GET` | `/session/:id/message/:messageID` | Ruft Nachrichtendetails ab | Returns `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/prompt_async` | Sendet eine Nachricht asynchron (ohne Warten) | body: same as `/session/:id/message`, returns `204 No Content` | -| `POST` | `/session/:id/command` | Fuehrt einen Slash-Befehl aus | body: `{ messageID?, agent?, model?, command, arguments }`, returns `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/shell` | Fuehrt einen Shell-Befehl aus | body: `{ agent, model?, command }`, returns `{ info: `Message`, parts: `Part[]`}` | - ---- - -### Befehle - -| Method | Path | Description | Response | -| ------ | ---------- | ------------------- | --------------------------------------------- | -| `GET` | `/command` | Listet alle Befehle | Command[] | - ---- - -### Dateien - -| Method | Path | Description | Response | -| ------ | ------------------------ | ------------------------------------------- | ------------------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | Sucht Text in Dateien | Array of match objects with `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `GET` | `/find/file?query=` | Findet Dateien und Verzeichnisse nach Namen | `string[]` (paths) | -| `GET` | `/find/symbol?query=` | Findet Workspace-Symbole | Symbol[] | -| `GET` | `/file?path=` | Listet Dateien und Verzeichnisse | FileNode[] | -| `GET` | `/file/content?path=

` | Liest eine Datei | FileContent | -| `GET` | `/file/status` | Ruft Status fuer getrackte Dateien ab | File[] | - -#### `/find/file` Abfrageparameter - -- `query` (erforderlich) — Suchbegriff (Fuzzy-Suche) -- `type` (optional) — Ergebnisse auf `"file"` oder `"directory"` beschränken -- `directory` (optional) — Projektstammverzeichnis für die Suche überschreiben -- `limit` (optional) — Maximale Ergebnisse (1–200) -- `dirs` (optional) — Legacy-Flag (`"false"` gibt nur Dateien zurück) - ---- - -### Werkzeuge (Experimentell) - -| Method | Path | Description | Response | -| ------ | ------------------------------------------- | --------------------------------------------- | -------------------------------------------- | -| `GET` | `/experimental/tool/ids` | Listet alle Tool-IDs | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | Listet Tools mit JSON-Schemas fuer ein Modell | ToolList | - ---- - -### LSP, Formatierer & MCP - -| Method | Path | Description | Response | -| ------ | ------------ | -------------------------------- | -------------------------------------------------------- | -| `GET` | `/lsp` | Ruft LSP-Server-Status ab | LSPStatus[] | -| `GET` | `/formatter` | Ruft Formatter-Status ab | FormatterStatus[] | -| `GET` | `/mcp` | Ruft MCP-Server-Status ab | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | Fuegt MCP-Server dynamisch hinzu | body: `{ name, config }`, returns MCP status object | - ---- - -### Agenten - -| Method | Path | Description | Response | -| ------ | -------- | -------------------------------- | ------------------------------------------- | -| `GET` | `/agent` | Listet alle verfuegbaren Agenten | Agent[] | - ---- - -### Logging - -| Method | Path | Description | Response | -| ------ | ------ | ----------------------------------------------------------------- | --------- | -| `POST` | `/log` | Schreibt Log-Eintrag. Body: `{ service, level, message, extra? }` | `boolean` | - ---- - -### TUI - -| Method | Path | Description | Response | -| ------ | ----------------------- | ----------------------------------------------- | ---------------------- | -| `POST` | `/tui/append-prompt` | Haengt Text an den Prompt an | `boolean` | -| `POST` | `/tui/open-help` | Oeffnet den Hilfedialog | `boolean` | -| `POST` | `/tui/open-sessions` | Oeffnet die Session-Auswahl | `boolean` | -| `POST` | `/tui/open-themes` | Oeffnet die Theme-Auswahl | `boolean` | -| `POST` | `/tui/open-models` | Oeffnet die Modell-Auswahl | `boolean` | -| `POST` | `/tui/submit-prompt` | Sendet den aktuellen Prompt ab | `boolean` | -| `POST` | `/tui/clear-prompt` | Leert den Prompt | `boolean` | -| `POST` | `/tui/execute-command` | Fuehrt einen Befehl aus (`{ command }`) | `boolean` | -| `POST` | `/tui/show-toast` | Zeigt Toast (`{ title?, message, variant }`) | `boolean` | -| `GET` | `/tui/control/next` | Wartet auf die naechste Kontrollanfrage | Control request object | -| `POST` | `/tui/control/response` | Antwortet auf eine Kontrollanfrage (`{ body }`) | `boolean` | - ---- - -### Authentifizierung - -| Method | Path | Description | Response | -| ------ | ----------- | ------------------------------------------------------------------------ | --------- | -| `PUT` | `/auth/:id` | Setzt Authentifizierungsdaten. Body muss dem Provider-Schema entsprechen | `boolean` | - ---- - -### Events - -| Method | Path | Description | Response | -| ------ | -------- | ------------------------------------------------------------------------------- | ------------------------- | -| `GET` | `/event` | Server-Sent Events Stream. Erstes Event ist `server.connected`, dann Bus-Events | Server-sent events stream | - ---- - -### Dokumentation - -| Method | Path | Description | Response | -| ------ | ------ | ------------------------- | --------------------------- | -| `GET` | `/doc` | OpenAPI 3.1 Spezifikation | HTML page with OpenAPI spec | diff --git a/packages/web/src/content/docs/de/share.mdx b/packages/web/src/content/docs/de/share.mdx deleted file mode 100644 index 9b7e9284c7..0000000000 --- a/packages/web/src/content/docs/de/share.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Teilen -description: Teile OpenCode-Unterhaltungen per oeffentlichem Link. ---- - -Mit der Share-Funktion erstellst du oeffentliche Links zu OpenCode-Unterhaltungen. -So kannst du einfacher mit dem Team zusammenarbeiten oder Hilfe einholen. - -:::note -Geteilte Unterhaltungen sind fuer alle mit dem Link oeffentlich zugaenglich. -::: - ---- - -## Funktionsweise - -Wenn du eine Unterhaltung teilst, macht OpenCode Folgendes: - -1. Erstellt eine eindeutige oeffentliche URL fuer deine Sitzung -2. Synchronisiert den Verlauf auf unsere Server -3. Stellt die Unterhaltung unter `opncd.ai/s/` bereit - ---- - -## Teilen - -OpenCode hat drei Modi, die das Teilen steuern: - ---- - -### Manuell (Standard) - -Standardmaessig nutzt OpenCode den manuellen Modus. -Sitzungen werden nicht automatisch geteilt, du kannst sie aber mit `/share` veroeffentlichen: - -``` -/share -``` - -Dabei wird eine eindeutige URL erzeugt und in die Zwischenablage kopiert. - -Um den manuellen Modus explizit in der [Konfiguration](/docs/config) zu setzen: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - ---- - -### Auto-Share - -Du kannst automatisches Teilen fuer neue Unterhaltungen aktivieren, indem du in der [Konfiguration](/docs/config) `share` auf `"auto"` setzt: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "auto" -} -``` - -Mit aktiviertem Auto-Share wird jede neue Unterhaltung automatisch geteilt und ein Link erstellt. - ---- - -### Deaktiviert - -Du kannst Teilen komplett deaktivieren, indem du in der [Konfiguration](/docs/config) `share` auf `"disabled"` setzt: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -Wenn das fuer ein Projekt teamweit gelten soll, lege es in der Projekt-`opencode.json` fest und committe die Datei. - ---- - -## Teilen aufheben - -Um das Teilen zu beenden und den oeffentlichen Zugriff zu entfernen: - -``` -/unshare -``` - -Dadurch wird der Share-Link entfernt und die zugehoerigen Daten werden geloescht. - ---- - -## Datenschutz - -Beim Teilen solltest du ein paar Punkte beachten. - ---- - -### Datenaufbewahrung - -Geteilte Unterhaltungen bleiben veroeffentlicht, bis du sie explizit aufhebst. -Das umfasst: - -- Vollstaendigen Unterhaltungsverlauf -- Alle Nachrichten und Antworten -- Sitzungsmetadaten - ---- - -### Empfehlungen - -- Teile nur Unterhaltungen ohne sensible Informationen. -- Pruefe Inhalte vor dem Teilen. -- Hebe das Teilen wieder auf, wenn die Zusammenarbeit beendet ist. -- Teile keine proprietaeren Codes oder vertraulichen Daten. -- Deaktiviere Teilen komplett bei sensiblen Projekten. - ---- - -## Für Unternehmen - -In Enterprise-Umgebungen kann die Share-Funktion: - -- **Deaktiviert** werden, um Compliance-Vorgaben einzuhalten -- Auf **SSO-authentifizierte** Nutzer eingeschraenkt werden -- **Self-hosted** auf eigener Infrastruktur betrieben werden - -[Mehr dazu](/docs/enterprise), wie du opencode in deiner Organisation einsetzt. diff --git a/packages/web/src/content/docs/de/skills.mdx b/packages/web/src/content/docs/de/skills.mdx deleted file mode 100644 index 72fba3eb09..0000000000 --- a/packages/web/src/content/docs/de/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: Agenten-Skills -description: "Definiere wiederverwendbares Verhalten ueber SKILL.md" ---- - -Agent Skills erlauben OpenCode, wiederverwendbare Anweisungen aus deinem Repo oder Home-Verzeichnis zu finden. -Sie werden bei Bedarf ueber das native `skill`-Tool geladen, wenn ein Agent sie wirklich braucht. - ---- - -## Dateien platzieren - -Erstelle pro Skill-Namen einen Ordner und lege dort eine `SKILL.md` ab. -OpenCode sucht in folgenden Pfaden: - -- Project config: `.opencode/skills//SKILL.md` -- Global config: `~/.config/opencode/skills//SKILL.md` -- Project Claude-compatible: `.claude/skills//SKILL.md` -- Global Claude-compatible: `~/.claude/skills//SKILL.md` -- Project agent-compatible: `.agents/skills//SKILL.md` -- Global agent-compatible: `~/.agents/skills//SKILL.md` - ---- - -## Discovery verstehen - -Bei projektlokalen Pfaden laeuft OpenCode vom aktuellen Verzeichnis nach oben bis zum Git-Worktree. -Dabei werden passende `skills/*/SKILL.md` in `.opencode/` sowie passende Dateien unter `.claude/skills/*/SKILL.md` und `.agents/skills/*/SKILL.md` geladen. - -Globale Definitionen kommen zusaetzlich aus `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` und `~/.agents/skills/*/SKILL.md`. - ---- - -## Frontmatter schreiben - -Jede `SKILL.md` muss mit YAML-Frontmatter beginnen. -Nur diese Felder werden ausgewertet: - -- `name` (erforderlich) -- `description` (erforderlich) -- `license` (optional) -- `compatibility` (optional) -- `metadata` (optional, String-zu-String-Map) - -Unbekannte Frontmatter-Felder werden ignoriert. - ---- - -## Namen validieren - -`name` muss: - -- 1-64 Zeichen lang sein -- nur Kleinbuchstaben und Ziffern mit einzelnen Bindestrichen enthalten -- nicht mit `-` beginnen oder enden -- kein `--` enthalten -- zum Verzeichnisnamen passen, in dem `SKILL.md` liegt - -Entsprechender Regex: - -```text -^[a-z0-9]+(-[a-z0-9]+)*$ -``` - ---- - -## Längenregeln beachten - -`description` muss 1-1024 Zeichen lang sein. -Formuliere sie so konkret, dass Agenten den Skill eindeutig auswaehlen koennen. - ---- - -## Beispiel verwenden - -Erstelle `.opencode/skills/git-release/SKILL.md` zum Beispiel so: - -```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. -``` - ---- - -## Tool-Beschreibung erkennen - -OpenCode listet verfuegbare Skills in der Beschreibung des `skill`-Tools. -Jeder Eintrag enthaelt Namen und Beschreibung: - -```xml - - - git-release - Create consistent releases and changelogs - - -``` - -Der Agent laedt einen Skill per Tool-Aufruf: - -``` -skill({ name: "git-release" }) -``` - ---- - -## Berechtigungen konfigurieren - -Steuere in `opencode.json` per Muster, auf welche Skills Agenten zugreifen duerfen: - -```json -{ - "permission": { - "skill": { - "*": "allow", - "pr-review": "allow", - "internal-*": "deny", - "experimental-*": "ask" - } - } -} -``` - -| Berechtigung | Verhalten | -| ------------ | ---------------------------------------- | -| `allow` | Skill wird sofort geladen | -| `deny` | Skill ist fuer Agenten versteckt | -| `ask` | Vor dem Laden wird nach Freigabe gefragt | - -Muster unterstuetzen Wildcards: `internal-*` passt z. B. auf `internal-docs` oder `internal-tools`. - ---- - -## Pro Agent überschreiben - -Du kannst einzelnen Agenten andere Berechtigungen als die globalen Defaults geben. - -**Fuer benutzerdefinierte Agenten** (im Frontmatter): - -```yaml ---- -permission: - skill: - "documents-*": "allow" ---- -``` - -**Fuer eingebaute Agenten** (in `opencode.json`): - -```json -{ - "agent": { - "plan": { - "permission": { - "skill": { - "internal-*": "allow" - } - } - } - } -} -``` - ---- - -## Skill-Tool deaktivieren - -Deaktiviere Skills komplett fuer Agenten, die sie nicht nutzen sollen: - -**Fuer benutzerdefinierte Agenten**: - -```yaml ---- -tools: - skill: false ---- -``` - -**Fuer eingebaute Agenten**: - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -Wenn deaktiviert, wird der Abschnitt `` komplett weggelassen. - ---- - -## Fehlerbehebung beim Laden - -Wenn ein Skill nicht auftaucht: - -1. Pruefe, ob `SKILL.md` exakt in Grossbuchstaben geschrieben ist -2. Pruefe, ob Frontmatter `name` und `description` enthaelt -3. Stelle sicher, dass Skill-Namen ueber alle Orte hinweg eindeutig sind -4. Pruefe Berechtigungen - Skills mit `deny` sind fuer Agenten unsichtbar diff --git a/packages/web/src/content/docs/de/themes.mdx b/packages/web/src/content/docs/de/themes.mdx deleted file mode 100644 index f3671220f9..0000000000 --- a/packages/web/src/content/docs/de/themes.mdx +++ /dev/null @@ -1,372 +0,0 @@ ---- -title: Themes -description: Waehle ein eingebautes Theme oder erstelle eins. ---- - -Mit OpenCode kannst du ein eingebautes Theme waehlen, ein an dein Terminal angepasstes Theme nutzen oder ein eigenes Theme definieren. - -Standardmaessig verwendet OpenCode das `opencode`-Theme. - ---- - -## Terminal-Anforderungen - -Damit Themes mit voller Farbpalette korrekt angezeigt werden, muss dein Terminal **truecolor** (24-Bit-Farben) unterstuetzen. -Die meisten modernen Terminals koennen das bereits, eventuell musst du es aber aktivieren: - -- **Support pruefen**: Fuehre `echo $COLORTERM` aus - erwartet ist `truecolor` oder `24bit` -- **Truecolor aktivieren**: Setze in deinem Shell-Profil `COLORTERM=truecolor` -- **Terminal-Kompatibilitaet**: Stelle sicher, dass dein Terminal-Emulator 24-Bit-Farben unterstuetzt - -Ohne truecolor werden Farben weniger exakt dargestellt oder auf eine 256-Farben-Naeherung reduziert. - ---- - -## Eingebaute Themes - -OpenCode liefert mehrere eingebaute Themes mit. - -| Name | Description | -| ---------------------- | ---------------------------------------------------------------------------- | -| `system` | Adapts to your terminal’s background color | -| `tokyonight` | Based on the [Tokyonight](https://github.com/folke/tokyonight.nvim) theme | -| `everforest` | Based on the [Everforest](https://github.com/sainnhe/everforest) theme | -| `ayu` | Based on the [Ayu](https://github.com/ayu-theme) dark theme | -| `catppuccin` | Based on the [Catppuccin](https://github.com/catppuccin) theme | -| `catppuccin-macchiato` | Based on the [Catppuccin](https://github.com/catppuccin) theme | -| `gruvbox` | Based on the [Gruvbox](https://github.com/morhetz/gruvbox) theme | -| `kanagawa` | Based on the [Kanagawa](https://github.com/rebelot/kanagawa.nvim) theme | -| `nord` | Based on the [Nord](https://github.com/nordtheme/nord) theme | -| `matrix` | Hacker-style green on black theme | -| `one-dark` | Based on the [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) Dark theme | - -Und es kommen laufend weitere dazu. - ---- - -## System-Theme - -Das `system`-Theme passt sich automatisch an das Farbschema deines Terminals an. -Im Gegensatz zu Themes mit festen Farben gilt beim _system_-Theme: - -- **Generiert Graustufen**: Basierend auf deiner Terminal-Hintergrundfarbe fuer guten Kontrast -- **Nutzt ANSI-Farben**: Verwendet Standardfarben (0-15), die dein Terminalschema respektieren -- **Behaelt Terminal-Defaults**: Verwendet `none` fuer Text und Hintergruende - -Das System-Theme ist ideal fuer Nutzer, die: - -- OpenCode optisch ans Terminal anpassen wollen -- eigene Terminal-Farbschemata nutzen -- ein konsistentes Erscheinungsbild in Terminal-Apps bevorzugen - ---- - -## Theme verwenden - -Du kannst ein Theme ueber `/theme` auswaehlen oder direkt in der [Konfiguration](/docs/config) setzen. - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "theme": "tokyonight" -} -``` - ---- - -## Eigene Themes - -OpenCode unterstuetzt ein flexibles JSON-basiertes Theme-System. -Damit lassen sich Themes einfach erstellen und anpassen. - ---- - -### Hierarchie - -Themes werden aus mehreren Verzeichnissen in folgender Reihenfolge geladen, wobei spaetere Verzeichnisse fruehere ueberschreiben: - -1. **Eingebaute Themes** - Diese sind im Binary eingebettet -2. **Benutzer-Config-Verzeichnis** - Definiert in `~/.config/opencode/themes/*.json` oder `$XDG_CONFIG_HOME/opencode/themes/*.json` -3. **Projekt-Root-Verzeichnis** - Definiert in `/.opencode/themes/*.json` -4. **Aktuelles Arbeitsverzeichnis** - Definiert in `./.opencode/themes/*.json` - -Wenn mehrere Verzeichnisse ein Theme mit demselben Namen enthalten, wird das Theme aus dem Verzeichnis mit der hoeheren Prioritaet verwendet. - ---- - -### Theme erstellen - -Um ein eigenes Theme zu erstellen, lege eine JSON-Datei in einem der Theme-Verzeichnisse an. - -Fuer benutzerweite Themes: - -```bash no-frame -mkdir -p ~/.config/opencode/themes -vim ~/.config/opencode/themes/my-theme.json -``` - -Und fuer projektspezifische Themes: - -```bash no-frame -mkdir -p .opencode/themes -vim .opencode/themes/my-theme.json -``` - ---- - -### JSON-Format - -Themes nutzen ein flexibles JSON-Format mit Unterstuetzung fuer: - -- **Hex-Farben**: `"#ffffff"` -- **ANSI-Farben**: `3` (0-255) -- **Farbreferenzen**: `"primary"` oder eigene Definitionen -- **Dunkel/Hell-Varianten**: `{"dark": "#000", "light": "#fff"}` -- **Keine Farbe**: `"none"` - Nutzt die Standardfarbe des Terminals oder transparent - ---- - -### Farbdefinitionen - -Der `defs`-Abschnitt ist optional und erlaubt es dir, wiederverwendbare Farben zu definieren, die im Theme referenziert werden koennen. - ---- - -### Terminal-Standardwerte - -Der spezielle Wert `"none"` kann fuer jede Farbe verwendet werden, um die Standardfarbe des Terminals zu erben. Das ist besonders nuetzlich, um Themes zu erstellen, die nahtlos mit deinem Terminal-Farbschema verschmelzen: - -- `"text": "none"` - Nutzt die Standard-Vordergrundfarbe des Terminals -- `"background": "none"` - Nutzt die Standard-Hintergrundfarbe des Terminals - ---- - -### Beispiel - -Hier ist ein Beispiel fuer ein eigenes Theme: - -```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" - } - } -} -``` diff --git a/packages/web/src/content/docs/de/tools.mdx b/packages/web/src/content/docs/de/tools.mdx deleted file mode 100644 index 8f5e7c0715..0000000000 --- a/packages/web/src/content/docs/de/tools.mdx +++ /dev/null @@ -1,352 +0,0 @@ ---- -title: Tools -description: Verwalte, welche Tools ein LLM nutzen darf. ---- - -Tools erlauben dem LLM Aktionen in deiner Codebasis. -OpenCode bringt eingebaute Tools mit und laesst sich ueber [Custom Tools](/docs/custom-tools) oder [MCP-Server](/docs/mcp-servers) erweitern. - -Standardmaessig sind alle Tools **aktiviert** und brauchen keine Freigabe. -Das Verhalten steuerst du ueber [Berechtigungen](/docs/permissions). - ---- - -## Konfiguration - -Nutze das Feld `permission`, um Tool-Verhalten zu steuern. -Pro Tool kannst du erlauben, verbieten oder eine Rueckfrage verlangen. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny", - "bash": "ask", - "webfetch": "allow" - } -} -``` - -Mit Wildcards kannst du mehrere Tools auf einmal steuern. -Zum Beispiel, um fuer alle Tools eines MCP-Servers eine Freigabe zu verlangen: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "mymcp_*": "ask" - } -} -``` - -[Mehr dazu](/docs/permissions), wie du Berechtigungen konfigurierst. - ---- - -## Eingebaut - -Hier sind alle in OpenCode verfuegbaren eingebauten Tools. - ---- - -### bash - -Fuehrt Shell-Befehle in deiner Projektumgebung aus. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "bash": "allow" - } -} -``` - -Damit kann das LLM Terminal-Befehle wie `npm install`, `git status` oder andere Shell-Kommandos ausfuehren. - ---- - -### edit - -Bearbeitet bestehende Dateien ueber exakte String-Ersetzungen. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Dieses Tool fuehrt praezise Aenderungen per exakter Textsuche aus. -Es ist der zentrale Weg, wie das LLM Code aendert. - ---- - -### write - -Erstellt neue Dateien oder ueberschreibt bestehende Dateien. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Damit erlaubst du dem LLM, neue Dateien anzulegen. -Bestehende Dateien werden dabei ueberschrieben. - -:::note -Das Tool `write` wird ueber die Berechtigung `edit` gesteuert. -`edit` gilt fuer alle Datei-Aenderungen (`edit`, `write`, `patch`). -::: - ---- - -### read - -Liest Dateiinhalte aus deiner Codebasis. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "read": "allow" - } -} -``` - -Dieses Tool liest Dateien und gibt deren Inhalt zurueck. Es unterstuetzt das Lesen spezifischer Zeilenbereiche bei grossen Dateien. - ---- - -### grep - -Durchsucht Dateiinhalte mit regulaeren Ausdruecken. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "grep": "allow" - } -} -``` - -Schnelle Inhaltssuche in deiner Codebasis. Unterstuetzt volle Regex-Syntax und Filterung nach Dateimustern. - ---- - -### glob - -Findet Dateien per Musterabgleich. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "glob": "allow" - } -} -``` - -Sucht nach Dateien mit Glob-Mustern wie `**/*.js` oder `src/**/*.ts`. Gibt passende Dateipfade sortiert nach Aenderungsdatum zurueck. - ---- - -### lsp (experimentell) - -Interagiere mit deinen konfigurierten LSP-Servern fuer Code-Intelligence-Features wie Definitionen, Referenzen, Hover-Infos und Call-Hierarchien. - -:::note -Dieses Tool ist nur verfuegbar, wenn `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (oder `OPENCODE_EXPERIMENTAL=true`) gesetzt ist. -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "lsp": "allow" - } -} -``` - -Unterstuetzte Operationen sind `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` und `outgoingCalls`. - -Um verfuegbare LSP-Server fuer dein Projekt zu konfigurieren, siehe [LSP-Server](/docs/lsp). - ---- - -### patch - -Wendet Patches auf Dateien an. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Dieses Tool wendet Patch-Dateien auf deine Codebasis an. Nuetzlich fuer Diffs und Patches aus verschiedenen Quellen. - -:::note -Das Tool `patch` wird ueber die Berechtigung `edit` gesteuert, welche alle Datei-Aenderungen abdeckt (`edit`, `write`, `patch`). -::: - ---- - -### skill - -Laedt einen [Skill](/docs/skills) (eine `SKILL.md`-Datei) und gibt dessen Inhalt in der Unterhaltung zurueck. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "skill": "allow" - } -} -``` - ---- - -### todowrite - -Verwaltet Todo-Listen waehrend Coding-Sessions. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "todowrite": "allow" - } -} -``` - -Erstellt und aktualisiert Aufgabenlisten, um den Fortschritt bei komplexen Operationen zu verfolgen. Das LLM nutzt dies, um mehrstufige Aufgaben zu organisieren. - -:::note -Dieses Tool ist fuer Sub-Agenten standardmaessig deaktiviert, kann aber manuell aktiviert werden. [Mehr dazu](/docs/agents/#permissions) -::: - ---- - -### webfetch - -Ruft Webinhalte ab. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "webfetch": "allow" - } -} -``` - -Erlaubt dem LLM, Webseiten abzurufen und zu lesen. Nuetzlich zum Nachschlagen von Dokumentation oder fuer Online-Recherche. - ---- - -### websearch - -Durchsucht das Web nach Informationen. - -:::note -Dieses Tool ist nur verfuegbar, wenn der OpenCode-Provider genutzt wird oder die Umgebungsvariable `OPENCODE_ENABLE_EXA` auf einen 'truthy' Wert (z. B. `true` oder `1`) gesetzt ist. - -Zum Aktivieren beim Start von OpenCode: - -```bash -OPENCODE_ENABLE_EXA=1 opencode -``` - -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "websearch": "allow" - } -} -``` - -Fuehrt Websuchen mit Exa AI durch, um relevante Informationen online zu finden. Nuetzlich fuer Recherche, aktuelle Ereignisse oder Informationen jenseits des Trainingsdatums. - -Kein API-Key erforderlich — das Tool verbindet sich direkt mit dem gehosteten MCP-Service von Exa AI ohne Authentifizierung. - -:::tip -Nutze `websearch` zum Finden von Informationen (Discovery) und `webfetch` zum Abrufen von Inhalten einer spezifischen URL (Retrieval). -::: - ---- - -### question - -Stellt dem Benutzer waehrend der Ausfuehrung Fragen. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "question": "allow" - } -} -``` - -Dieses Tool erlaubt dem LLM, dem Benutzer waehrend einer Aufgabe Fragen zu stellen. Nuetzlich fuer: - -- Sammeln von Benutzerpraeferenzen oder Anforderungen -- Klaerung mehrdeutiger Anweisungen -- Entscheidungen bei Implementierungsoptionen einholen -- Auswahlmoeglichkeiten fuer das weitere Vorgehen anbieten - -Jede Frage enthaelt eine Ueberschrift, den Fragetext und eine Liste von Optionen. Benutzer koennen aus den Optionen waehlen oder eine eigene Antwort eingeben. Bei mehreren Fragen koennen Benutzer zwischen ihnen navigieren, bevor sie alle Antworten absenden. - ---- - -## Benutzerdefinierte Tools - -Mit Custom Tools definierst du eigene Funktionen, die das LLM aufrufen kann. -Sie werden in der Konfigurationsdatei definiert und koennen beliebigen Code ausfuehren. - -[Mehr dazu](/docs/custom-tools), wie du Custom Tools erstellst. - ---- - -## MCP-Server - -MCP-Server (Model Context Protocol) binden externe Tools und Dienste ein. -Dazu gehoeren Datenbanken, API-Integrationen und Drittanbieter-Services. - -[Mehr dazu](/docs/mcp-servers), wie du MCP-Server konfigurierst. - ---- - -## Interna - -Intern verwenden Tools wie `grep` und `glob` [ripgrep](https://github.com/BurntSushi/ripgrep). -Standardmaessig beachtet ripgrep `.gitignore`, daher werden dort aufgefuehrte Dateien und Ordner nicht durchsucht. - ---- - -### Ignorier-Muster - -Wenn du normalerweise ignorierte Dateien einschliessen willst, lege im Projekt-Root eine `.ignore`-Datei an. -Dort kannst du Pfade explizit erlauben. - -```text title=".ignore" -!node_modules/ -!dist/ -!build/ -``` - -Dieses Beispiel erlaubt ripgrep, in `node_modules/`, `dist/` und `build/` zu suchen, auch wenn sie in `.gitignore` stehen. diff --git a/packages/web/src/content/docs/de/troubleshooting.mdx b/packages/web/src/content/docs/de/troubleshooting.mdx deleted file mode 100644 index e8286faca0..0000000000 --- a/packages/web/src/content/docs/de/troubleshooting.mdx +++ /dev/null @@ -1,300 +0,0 @@ ---- -title: Fehlerbehebung -description: Haeufige Probleme und schnelle Loesungen. ---- - -Wenn OpenCode Probleme macht, starte mit Logs und lokal gespeicherten Daten auf der Festplatte. - ---- - -## Logs - -Logdateien werden hier gespeichert: - -- **macOS/Linux**: `~/.local/share/opencode/log/` -- **Windows**: Druecke `WIN+R` und fuege ein: `%USERPROFILE%\.local\share\opencode\log` - -Dateinamen enthalten Zeitstempel (z. B. `2025-01-09T123456.log`) und es bleiben die letzten 10 Logs erhalten. - -Mit `--log-level` bekommst du detailliertere Diagnoseinfos, z. B. `opencode --log-level DEBUG`. - ---- - -## Speicher - -opencode speichert Sitzungs- und App-Daten auf der Festplatte unter: - -- **macOS/Linux**: `~/.local/share/opencode/` -- **Windows**: Druecke `WIN+R` und fuege ein: `%USERPROFILE%\.local\share\opencode` - -Dieses Verzeichnis enthaelt: - -- `auth.json` - Authentifizierungsdaten wie API-Keys und OAuth-Tokens -- `log/` - Anwendungslogs -- `project/` - Projektspezifische Daten wie Sitzungen und Nachrichten - - In Git-Repositories unter `.//storage/` - - Ohne Git unter `./global/storage/` - ---- - -## Desktop-App - -OpenCode Desktop startet im Hintergrund einen lokalen OpenCode-Server (`opencode-cli`-Sidecar). -Viele Probleme kommen von fehlerhaften Plugins, kaputtem Cache oder falschen Server-Einstellungen. - -### Schnellchecks - -- App komplett beenden und neu starten -- Bei Fehlerbildschirm **Restart** klicken und Details kopieren -- Nur macOS: `OpenCode`-Menue -> **Reload Webview** (hilft bei leerer/eingefrorener UI) - ---- - -### Plugins deaktivieren - -Wenn die Desktop-App beim Start abstuerzt, haengt oder sich seltsam verhaelt, deaktiviere zunaechst Plugins. - -#### Globale Konfiguration prüfen - -Oeffne deine globale Konfigurationsdatei und suche nach dem `plugin`-Schluessel. - -- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (oder `~/.config/opencode/opencode.json`) -- **macOS/Linux** (aeltere Installationen): `~/.local/share/opencode/opencode.jsonc` -- **Windows**: Druecke `WIN+R` und fuege ein: `%USERPROFILE%\.config\opencode\opencode.jsonc` - -Wenn du Plugins konfiguriert hast, deaktiviere sie voruebergehend, indem du den Schluessel entfernst oder auf ein leeres Array setzt: - -```jsonc -{ - "$schema": "https://opencode.ai/config.json", - "plugin": [], -} -``` - -#### Plugin-Verzeichnisse prüfen - -OpenCode kann auch lokale Plugins von der Festplatte laden. Verschiebe diese voruebergehend (oder benenne den Ordner um) und starte die Desktop-App neu: - -- **Globale Plugins** - - **macOS/Linux**: `~/.config/opencode/plugins/` - - **Windows**: Druecke `WIN+R` und fuege ein: `%USERPROFILE%\.config\opencode\plugins` -- **Projekt-Plugins** (nur bei projektspezifischer Konfig) - - `/.opencode/plugins/` - -Wenn die App wieder funktioniert, aktiviere Plugins nacheinander, um den Verursacher zu finden. - ---- - -### Cache leeren - -Wenn das Deaktivieren von Plugins nicht hilft (oder eine Plugin-Installation haengt), leere den Cache, damit OpenCode ihn neu aufbauen kann. - -1. Beende OpenCode Desktop komplett. -2. Loesche das Cache-Verzeichnis: - -- **macOS**: Finder -> `Cmd+Shift+G` -> einfuegen: `~/.cache/opencode` -- **Linux**: loesche `~/.cache/opencode` (oder fuehre aus: `rm -rf ~/.cache/opencode`) -- **Windows**: Druecke `WIN+R` und fuege ein: `%USERPROFILE%\.cache\opencode` - -3. Starte OpenCode Desktop neu. - ---- - -### Server-Verbindungsprobleme beheben - -OpenCode Desktop kann entweder einen eigenen lokalen Server starten (Standard) oder sich mit einer konfigurierten Server-URL verbinden. - -Wenn du einen **"Connection Failed"**-Dialog siehst (oder die App beim Splash-Screen haengen bleibt), pruefe auf eine benutzerdefinierte Server-URL. - -#### Desktop-Standard-Server-URL löschen - -Klicke im Startbildschirm auf den Servernamen (mit dem Statuspunkt), um die Serverauswahl zu oeffnen. Klicke im Bereich **Default server** auf **Clear**. - -#### `server.port` / `server.hostname` aus Konfiguration entfernen - -Wenn deine `opencode.json(c)` einen `server`-Abschnitt enthaelt, entferne ihn voruebergehend und starte die Desktop-App neu. - -#### Umgebungsvariablen prüfen - -Wenn du `OPENCODE_PORT` in deiner Umgebung gesetzt hast, versucht die Desktop-App diesen Port fuer den lokalen Server zu nutzen. - -- Setze `OPENCODE_PORT` zurueck (oder waehle einen freien Port) und starte neu. - ---- - -### Linux: Wayland / X11-Probleme - -Unter Linux koennen manche Wayland-Setups leere Fenster oder Compositor-Fehler verursachen. - -- Wenn du Wayland nutzt und die App leer ist/abstuerzt, versuche den Start mit `OC_ALLOW_WAYLAND=1`. -- Wenn das es verschlimmert, entferne es und versuche den Start in einer X11-Session. - ---- - -### Windows: WebView2-Laufzeit - -Unter Windows benoetigt OpenCode Desktop die Microsoft Edge **WebView2 Runtime**. Wenn die App ein leeres Fenster zeigt oder nicht startet, installiere/aktualisiere WebView2 und versuche es erneut. - ---- - -### Windows: Allgemeine Performance-Probleme - -Wenn du langsame Performance, Dateizugriffsprobleme oder Terminal-Probleme unter Windows hast, versuche [WSL (Windows Subsystem for Linux)](/docs/windows-wsl). WSL bietet eine Linux-Umgebung, die nahtloser mit OpenCode-Features funktioniert. - ---- - -### Benachrichtigungen werden nicht angezeigt - -OpenCode Desktop zeigt Systembenachrichtigungen nur wenn: - -- Benachrichtigungen fuer OpenCode in den OS-Einstellungen aktiviert sind, und -- das App-Fenster nicht fokussiert ist. - ---- - -### Desktop-App-Speicher zurücksetzen (letzter Ausweg) - -Wenn die App nicht startet und du Einstellungen nicht in der UI loeschen kannst, setze den gespeicherten Zustand der Desktop-App zurueck. - -1. Beende OpenCode Desktop. -2. Finde und loesche diese Dateien (im App-Data-Verzeichnis von OpenCode Desktop): - -- `opencode.settings.dat` (desktop default server URL) -- `opencode.global.dat` und `opencode.workspace.*.dat` (UI state like recent servers/projects) - -So findest du das Verzeichnis schnell: - -- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (dann suche nach den Dateinamen oben) -- **Linux**: suche unter `~/.local/share` nach den Dateinamen oben -- **Windows**: Druecke `WIN+R` -> `%APPDATA%` (dann suche nach den Dateinamen oben) - ---- - -## Hilfe bekommen - -Wenn du Probleme mit OpenCode hast: - -1. **Probleme auf GitHub melden** - - Bugs und Feature-Wuensche meldest du am besten im GitHub-Repository: - - [**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues) - - Suche vor dem Erstellen nach bestehenden Issues, damit Duplikate vermieden werden. - -2. **Unserem Discord beitreten** - - Fuer schnelle Hilfe und Austausch in der Community: - - [**opencode.ai/discord**](https://opencode.ai/discord) - ---- - -## Haeufige Probleme - -Hier sind typische Fehlerbilder und wie du sie loest. - ---- - -### OpenCode startet nicht - -1. Pruefe die Logs auf Fehlermeldungen -2. Versuche den Start mit `--print-logs`, um Ausgaben im Terminal zu sehen -3. Stelle sicher, dass du die neueste Version hast: `opencode upgrade` - ---- - -### Authentifizierungsprobleme - -1. Versuche erneute Authentifizierung mit `/connect` in der TUI -2. Pruefe, ob deine API-Keys gueltig sind -3. Stelle sicher, dass dein Netzwerk Verbindungen zur Provider-API erlaubt - ---- - -### Modell nicht verfügbar - -1. Pruefe, ob du dich beim Provider authentifiziert hast -2. Verifiziere, dass der Modellname in deiner Config korrekt ist -3. Manche Modelle erfordern speziellen Zugriff oder Abonnements - -Wenn du `ProviderModelNotFoundError` erhaeltst, referenzierst du ein Modell wahrscheinlich falsch. -Modelle sollten so referenziert werden: `/` - -Beispiele: - -- `openai/gpt-4.1` -- `openrouter/google/gemini-2.5-flash` -- `opencode/kimi-k2` - -Um zu sehen, auf welche Modelle du Zugriff hast, fuehre `opencode models` aus. - ---- - -### ProviderInitError - -Wenn du einen ProviderInitError erhaeltst, hast du wahrscheinlich eine ungueltige oder korrupte Konfiguration. - -Zur Loesung: - -1. Pruefe zuerst, ob dein Provider korrekt eingerichtet ist, gemaess dem [Provider-Guide](/docs/providers) -2. Wenn das Problem besteht, versuche deine gespeicherte Konfiguration zu loeschen: - - ```bash - rm -rf ~/.local/share/opencode - ``` - - Unter Windows druecke `WIN+R` und loesche: `%USERPROFILE%\.local\share\opencode` - -3. Authentifiziere dich erneut beim Provider mit dem `/connect`-Befehl in der TUI. - ---- - -### AI_APICallError und Provider-Paket-Probleme - -Wenn du API-Call-Fehler erhaeltst, kann das an veralteten Provider-Paketen liegen. opencode installiert Provider-Pakete (OpenAI, Anthropic, Google, etc.) dynamisch bei Bedarf und cached sie lokal. - -Um Provider-Paket-Probleme zu loesen: - -1. Leere den Provider-Paket-Cache: - - ```bash - rm -rf ~/.cache/opencode - ``` - - Unter Windows druecke `WIN+R` und loesche: `%USERPROFILE%\.cache\opencode` - -2. Starte opencode neu, um die neuesten Provider-Pakete zu installieren - -Dies zwingt opencode, die neuesten Versionen der Provider-Pakete herunterzuladen, was oft Kompatibilitaetsprobleme mit Modellparametern und API-Aenderungen loest. - ---- - -### Copy/Paste funktioniert nicht unter Linux - -Linux-Nutzer muessen eines der folgenden Clipboard-Utilities installiert haben, damit Copy/Paste funktioniert: - -**Fuer X11-Systeme:** - -```bash -apt install -y xclip -# or -apt install -y xsel -``` - -**Fuer Wayland-Systeme:** - -```bash -apt install -y wl-clipboard -``` - -**Fuer Headless-Umgebungen:** - -```bash -apt install -y xvfb -# and run: -Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & -export DISPLAY=:99.0 -``` - -opencode erkennt, ob du Wayland nutzt und bevorzugt `wl-clipboard`, sonst versucht es `xclip` und `xsel` (in dieser Reihenfolge). diff --git a/packages/web/src/content/docs/de/tui.mdx b/packages/web/src/content/docs/de/tui.mdx deleted file mode 100644 index 5f9e9e23e9..0000000000 --- a/packages/web/src/content/docs/de/tui.mdx +++ /dev/null @@ -1,429 +0,0 @@ ---- -title: TUI -description: Arbeite mit OpenCode in der Terminal-Oberflaeche. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode bietet eine interaktive Terminaloberflaeche (TUI), um mit einem LLM an deinen Projekten zu arbeiten. - -Ohne weitere Argumente startet OpenCode die TUI im aktuellen Verzeichnis. - -```bash -opencode -``` - -Oder du startest sie fuer ein bestimmtes Arbeitsverzeichnis. - -```bash -opencode /path/to/project -``` - -In der TUI kannst du direkt mit einer Nachricht prompten. - -```text -Give me a quick summary of the codebase. -``` - ---- - -## Datei-Referenzen - -Mit `@` kannst du Dateien in Nachrichten referenzieren. -Dabei wird im aktuellen Verzeichnis eine unscharfe Dateisuche genutzt. - -:::tip -Du kannst `@` in Nachrichten fuer Datei-Referenzen verwenden. -::: - -```text "@packages/functions/src/api/index.ts" -How is auth handled in @packages/functions/src/api/index.ts? -``` - -Der Dateiinhalt wird automatisch zur Unterhaltung hinzugefuegt. - ---- - -## Bash-Befehle - -Beginne eine Nachricht mit `!`, um einen Shell-Befehl auszufuehren. - -```bash frame="none" -!ls -la -``` - -Die Ausgabe landet als Tool-Ergebnis in der Unterhaltung. - ---- - -## Befehle - -In der OpenCode-TUI kannst du `/` plus Befehlsnamen eingeben, um Aktionen schnell auszufuehren. -Zum Beispiel: - -```bash frame="none" -/help -``` - -Viele Befehle haben auch Tastenkombinationen mit `ctrl+x` als Leader-Key. -[Mehr dazu](/docs/keybinds). - -Hier sind alle verfuegbaren Slash-Commands: - ---- - -### connect - -Fuegt einen Provider zu OpenCode hinzu. Erlaubt die Auswahl aus verfuegbaren Providern und das Hinzufuegen ihrer API-Keys. - -```bash frame="none" -/connect -``` - ---- - -### compact - -Kompaktiert die aktuelle Session. _Alias_: `/summarize` - -```bash frame="none" -/compact -``` - -**Keybind:** `ctrl+x c` - ---- - -### details - -Schaltet Tool-Ausfuehrungsdetails um. - -```bash frame="none" -/details -``` - -**Keybind:** `ctrl+x d` - ---- - -### editor - -Oeffnet externen Editor zum Verfassen von Nachrichten. Nutzt den in der `EDITOR`-Umgebungsvariable gesetzten Editor. [Mehr dazu](#editor-setup). - -```bash frame="none" -/editor -``` - -**Keybind:** `ctrl+x e` - ---- - -### exit - -Beendet OpenCode. _Aliase_: `/quit`, `/q` - -```bash frame="none" -/exit -``` - -**Keybind:** `ctrl+x q` - ---- - -### export - -Exportiert die aktuelle Unterhaltung als Markdown und oeffnet sie in deinem Standard-Editor. Nutzt den in der `EDITOR`-Umgebungsvariable gesetzten Editor. [Mehr dazu](#editor-setup). - -```bash frame="none" -/export -``` - -**Keybind:** `ctrl+x x` - ---- - -### help - -Zeigt den Hilfedialog. - -```bash frame="none" -/help -``` - -**Keybind:** `ctrl+x h` - ---- - -### init - -Erstellt oder aktualisiert die `AGENTS.md`-Datei. [Mehr dazu](/docs/rules). - -```bash frame="none" -/init -``` - -**Keybind:** `ctrl+x i` - ---- - -### models - -Listet verfuegbare Modelle. - -```bash frame="none" -/models -``` - -**Keybind:** `ctrl+x m` - ---- - -### new - -Startet eine neue Session. _Alias_: `/clear` - -```bash frame="none" -/new -``` - -**Keybind:** `ctrl+x n` - ---- - -### redo - -Wiederholt eine zuvor rueckgaengig gemachte Nachricht. Nur verfuegbar nach Verwendung von `/undo`. - -:::tip -Auch Dateiaenderungen werden wiederhergestellt. -::: - -Intern nutzt dies Git, um die Dateiaenderungen zu verwalten. Dein Projekt muss also **ein Git-Repository sein**. - -```bash frame="none" -/redo -``` - -**Keybind:** `ctrl+x r` - ---- - -### sessions - -Listet Sessions und wechselt zwischen ihnen. _Aliase_: `/resume`, `/continue` - -```bash frame="none" -/sessions -``` - -**Keybind:** `ctrl+x l` - ---- - -### share - -Teilt die aktuelle Session. [Mehr dazu](/docs/share). - -```bash frame="none" -/share -``` - -**Keybind:** `ctrl+x s` - ---- - -### themes - -Listet verfuegbare Themes. - -```bash frame="none" -/theme -``` - -**Keybind:** `ctrl+x t` - ---- - -### thinking - -Schaltet die Sichtbarkeit von Thinking/Reasoning-Bloecken in der Unterhaltung um. Wenn aktiviert, kannst du den Denkprozess des Modells sehen (bei Modellen, die das unterstuetzen). - -:::note -Dieser Befehl steuert nur, ob Thinking-Bloecke **angezeigt** werden - er aktiviert oder deaktiviert nicht die Reasoning-Faehigkeiten des Modells. Um die Reasoning-Faehigkeiten umzuschalten, nutze `ctrl+t`, um durch die Modell-Varianten zu wechseln. -::: - -```bash frame="none" -/thinking -``` - ---- - -### undo - -Macht die letzte Nachricht in der Unterhaltung rueckgaengig. Entfernt die letzte Benutzernachricht, alle folgenden Antworten und alle Dateiaenderungen. - -:::tip -Auch durchgefuehrte Dateiaenderungen werden rueckgaengig gemacht. -::: - -Intern nutzt dies Git, um die Dateiaenderungen zu verwalten. Dein Projekt muss also **ein Git-Repository sein**. - -```bash frame="none" -/undo -``` - -**Keybind:** `ctrl+x u` - ---- - -### unshare - -Hebt das Teilen der aktuellen Session auf. [Mehr dazu](/docs/share#un-sharing). - -```bash frame="none" -/unshare -``` - ---- - -## Editor-Einrichtung - -Sowohl `/editor` als auch `/export` nutzen den in deiner `EDITOR`-Umgebungsvariable spezifizierten Editor. - - - - ```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" - ``` - - Um es dauerhaft zu machen, fuege dies zu deinem Shell-Profil hinzu; - `~/.bashrc`, `~/.zshrc`, etc. - - - - - ```bash - set EDITOR=notepad - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - set EDITOR=code --wait - ``` - - Um es dauerhaft zu machen, nutze **Systemeigenschaften** > **Umgebungsvariablen**. - - - - - ```powershell - $env:EDITOR = "notepad" - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - $env:EDITOR = "code --wait" - ``` - - Um es dauerhaft zu machen, fuege dies zu deinem PowerShell-Profil hinzu. - - - - -Beliebte Editoren sind: - -- `code` - Visual Studio Code -- `cursor` - Cursor -- `windsurf` - Windsurf -- `nvim` - Neovim -- `vim` - Vim -- `nano` - Nano -- `notepad` - Windows Notepad -- `subl` - Sublime Text - -:::note -Einige Editoren wie VS Code muessen mit dem `--wait`-Flag gestartet werden. -::: - -Einige Editoren benoetigen Befehlszeilenargumente, um im blockierenden Modus zu laufen. Das `--wait`-Flag sorgt dafuer, dass der Editor-Prozess blockiert, bis er geschlossen wird. - ---- - -## Konfiguration - -Du kannst das Verhalten der TUI ueber die Datei `tui.json` (oder `tui.jsonc`) anpassen. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -Dies ist getrennt von `opencode.json`, welche das Server-/Runtime-Verhalten konfiguriert. - -`keybinds` wird mit den integrierten Standardwerten zusammengeführt, daher musst du nur die Tastenkombinationen konfigurieren, die du ändern möchtest. - -### Optionen - -- `theme` - Setzt dein UI-Theme. [Mehr dazu](/docs/themes). -- `keybinds` - Passt Tastenkombinationen an. [Mehr dazu](/docs/keybinds). -- `leader_timeout` - Steuert, wie lange OpenCode nach der leader key wartet. Standard ist `2000`. -- `scroll_acceleration.enabled` - Aktiviert Scroll-Beschleunigung im macOS-Stil fuer weiches, natuerliches Scrollen. Wenn aktiviert, erhoeht sich die Scroll-Geschwindigkeit bei schnellen Gesten und bleibt praezise bei langsamen Bewegungen. **Diese Einstellung hat Vorrang vor `scroll_speed` und ueberschreibt es, wenn aktiviert.** -- `scroll_speed` - Steuert, wie schnell die TUI scrollt (Minimum: `0.001`, unterstuetzt Dezimalwerte). Standard ist `3`. **Hinweis: Wird ignoriert, wenn `scroll_acceleration.enabled` auf `true` gesetzt ist.** -- `diff_style` - Steuert die Diff-Darstellung. `"auto"` passt sich der Terminalbreite an, `"stacked"` zeigt immer ein einspaltiges Layout. -- `mouse` - Aktiviert oder deaktiviert die Mauserfassung im TUI (Standard: `true`). Wenn deaktiviert, bleibt das native Mausauswahl- und Scrollverhalten des Terminals erhalten. -- `attention` - Konfiguriert Desktop-Benachrichtigungen und Sounds des TUI. Standardmäßig deaktiviert. - -Verwende `OPENCODE_TUI_CONFIG`, um einen benutzerdefinierten TUI-Konfigurationspfad zu laden. - -### Attention - -Attention lässt das TUI dich benachrichtigen, wenn OpenCode auf eine Antwort wartet, eine Berechtigung bestätigt werden muss, ein Sitzungsfehler aufgetreten ist oder eine Sitzung abgeschlossen wurde. Aktiviere es mit `attention.enabled`; integrierte Ereignisse spielen beim Auftreten einen Sound ab. Desktop-Benachrichtigungen werden nur gesendet, wenn das Terminalfenster nicht fokussiert ist, und nicht für subagent-Ereignisse verwendet. - -- `enabled` - Aktiviert alle Benachrichtigungen und Sounds von Attention. Standard ist `false`. -- `notifications` - Erlaubt dem TUI bei aktiviertem Attention, Desktop-Benachrichtigungen über das Terminal zu senden. Standard ist `true`. -- `sound` - Erlaubt bei aktiviertem Attention das Abspielen von Hinweistönen. Standard ist `true`. -- `volume` - Standardlautstärke der Hinweistöne von `0` bis `1`. Standard ist `0.4`. -- `sound_pack` - Zu verwendende sound pack ID. Standard ist `opencode.default`. -- `sounds` - Legt eigene Sounddateien für `default`, `question`, `permission`, `error`, `done` oder `subagent_done` fest. Pfade können absolut, `file://` URLs oder relativ zu `tui.json` sein. - ---- - -## Anpassung - -Du kannst verschiedene Aspekte der TUI-Ansicht ueber die Befehlspalette (`ctrl+x h` oder `/help`) anpassen. Diese Einstellungen bleiben ueber Neustarts hinweg erhalten. - ---- - -#### Benutzername-Anzeige - -Schaltet um, ob dein Benutzername in Chat-Nachrichten erscheint. Zugriff hierueber: - -- Befehlspalette: Suche nach "username" oder "hide username" -- Die Einstellung wird automatisch gespeichert und bleibt ueber TUI-Sessions hinweg erhalten. diff --git a/packages/web/src/content/docs/de/web.mdx b/packages/web/src/content/docs/de/web.mdx deleted file mode 100644 index f334e7c436..0000000000 --- a/packages/web/src/content/docs/de/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Web -description: Verwenden Sie OpenCode in Ihrem Browser. ---- - -OpenCode kann als Webanwendung in Ihrem Browser ausgeführt werden und bietet das gleiche leistungsstarke KI-Codierungserlebnis, ohne dass ein Terminal erforderlich ist. - -![OpenCode Web – Neue Sitzung](../../../assets/web/web-homepage-new-session.png) - -## Erste Schritte - -Starten Sie die Weboberfläche, indem Sie Folgendes ausführen: - -```bash -opencode web -``` - -Dadurch wird ein lokaler Server auf `127.0.0.1` mit einem zufällig verfügbaren Port gestartet und OpenCode automatisch in Ihrem Standardbrowser geöffnet. - -:::caution -Wenn `OPENCODE_SERVER_PASSWORD` nicht gesetzt ist, ist der Server ungesichert. Dies ist für den lokalen Gebrauch in Ordnung, sollte aber für den Netzwerkzugriff eingestellt werden. -::: - -:::tip[Windows-Nutzer] -Um die beste Erfahrung zu erzielen, führen Sie `opencode web` über [WSL](/docs/windows-wsl) und nicht über PowerShell aus. Dies gewährleistet den ordnungsgemäßen Zugriff auf das Dateisystem und die Terminalintegration. -::: - ---- - -## Konfiguration - -Sie können den Webserver mithilfe von Befehlszeilen-Flags oder in Ihrer [Konfigurationsdatei](/docs/config) konfigurieren. - -### Port - -Standardmäßig wählt OpenCode einen verfügbaren Port aus. Sie können einen Port angeben: - -```bash -opencode web --port 4096 -``` - -### Hostname - -Standardmäßig bindet der Server an `127.0.0.1` (nur localhost). So machen Sie OpenCode in Ihrem Netzwerk zugänglich: - -```bash -opencode web --hostname 0.0.0.0 -``` - -Bei Verwendung von `0.0.0.0` zeigt OpenCode sowohl lokale als auch Netzwerkadressen an: - -``` - Local access: http://localhost:4096 - Network access: http://192.168.1.100:4096 -``` - -### mDNS-Erkennung - -Aktivieren Sie mDNS, um Ihren Server im lokalen Netzwerk erkennbar zu machen: - -```bash -opencode web --mdns -``` - -Dadurch wird der Hostname automatisch auf `0.0.0.0` gesetzt und der Server als `opencode.local` angekündigt. - -Sie können den mDNS-Domänennamen anpassen, um mehrere Instanzen im selben Netzwerk auszuführen: - -```bash -opencode web --mdns --mdns-domain myproject.local -``` - -### CORS - -So erlauben Sie zusätzliche Domänen für CORS (nützlich für benutzerdefinierte Frontends): - -```bash -opencode web --cors https://example.com -``` - -### Authentifizierung - -Um den Zugriff zu schützen, legen Sie mithilfe der Umgebungsvariablen `OPENCODE_SERVER_PASSWORD` ein Passwort fest: - -```bash -OPENCODE_SERVER_PASSWORD=secret opencode web -``` - -Der Benutzername ist standardmäßig `opencode`, kann aber mit `OPENCODE_SERVER_USERNAME` geändert werden. - ---- - -## Verwenden der Weboberfläche - -Nach dem Start bietet die Weboberfläche Zugriff auf Ihre OpenCode-Sitzungen. - -### Sitzungen - -Zeigen Sie Ihre Sitzungen auf der Startseite an und verwalten Sie sie. Sie können aktive Sitzungen sehen und neue starten. - -![OpenCode Web – Aktive Sitzung](../../../assets/web/web-homepage-active-session.png) - -### Serverstatus - -Klicken Sie auf „Server anzeigen“, um verbundene Server und deren Status anzuzeigen. - -![OpenCode Web – Siehe Server](../../../assets/web/web-homepage-see-servers.png) - ---- - -## Anschließen eines Terminals - -Sie können eine Terminal-TUI an einen laufenden Webserver anschließen: - -```bash -# Start the web server -opencode web --port 4096 - -# In another terminal, attach the TUI -opencode attach http://localhost:4096 -``` - -Dadurch können Sie sowohl die Weboberfläche als auch das Terminal gleichzeitig verwenden und dieselben Sitzungen und denselben Status teilen. - ---- - -## Konfigurationsdatei - -Sie können Servereinstellungen auch in Ihrer `opencode.json`-Konfigurationsdatei konfigurieren: - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -Befehlszeilenflags haben Vorrang vor Konfigurationsdateieinstellungen. diff --git a/packages/web/src/content/docs/de/windows-wsl.mdx b/packages/web/src/content/docs/de/windows-wsl.mdx deleted file mode 100644 index 29c4d1f737..0000000000 --- a/packages/web/src/content/docs/de/windows-wsl.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Windows (WSL) -description: Nutze OpenCode unter Windows am besten mit WSL. ---- - -import { Steps } from "@astrojs/starlight/components" - -OpenCode laeuft zwar direkt unter Windows, die beste Erfahrung bekommst du aber mit [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install). -WSL bietet eine Linux-Umgebung, die mit den OpenCode-Features nahtlos funktioniert. - -:::tip[Warum WSL?] -WSL bietet bessere Dateisystem-Performance, vollstaendige Terminal-Unterstuetzung und hohe Kompatibilitaet mit den Entwicklungswerkzeugen, die OpenCode nutzt. -::: - ---- - -## Einrichtung - - - -1. **Install WSL** - - Falls noch nicht geschehen, installiere [WSL](https://learn.microsoft.com/en-us/windows/wsl/install) mit der offiziellen Microsoft-Anleitung. - -2. **Install OpenCode in WSL** - - Wenn WSL eingerichtet ist, oeffne dein WSL-Terminal und installiere OpenCode mit einer der [Installationsmethoden](/docs/). - - ```bash - curl -fsSL https://opencode.ai/install | bash - ``` - -3. **OpenCode über WSL verwenden** - - Wechsle in dein Projektverzeichnis (Windows-Dateien erreichst du ueber `/mnt/c/`, `/mnt/d/` usw.) und starte OpenCode. - - ```bash - cd /mnt/c/Users/YourName/project - opencode - ``` - - - ---- - -## Desktop-App + WSL-Server - -Wenn du die OpenCode-Desktop-App nutzen willst, den Server aber in WSL betreiben moechtest: - -1. **Starte den Server in WSL** mit `--hostname 0.0.0.0`, damit externe Verbindungen moeglich sind: - - ```bash - opencode serve --hostname 0.0.0.0 --port 4096 - ``` - -2. **Verbinde die Desktop-App** mit `http://localhost:4096` - -:::note -Wenn `localhost` in deiner Umgebung nicht funktioniert, nutze stattdessen die WSL-IP-Adresse (in WSL: `hostname -I`) und verbinde dich mit `http://:4096`. -::: - -:::caution -Wenn du `--hostname 0.0.0.0` verwendest, setze `OPENCODE_SERVER_PASSWORD`, um den Server zu schuetzen. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0 -``` - -::: - ---- - -## Web-Client + WSL - -Fuer die beste Web-Erfahrung unter Windows: - -1. **Fuehre `opencode web` im WSL-Terminal aus**, nicht in PowerShell: - - ```bash - opencode web --hostname 0.0.0.0 - ``` - -2. **Rufe die URL im Windows-Browser auf** unter `http://localhost:` (OpenCode zeigt die URL an) - -Wenn du `opencode web` aus WSL startest, bleiben Dateizugriff und Terminal-Integration sauber. -Gleichzeitig ist die Weboberflaeche weiterhin im Windows-Browser erreichbar. - ---- - -## Zugriff auf Windows-Dateien - -WSL kann ueber das Verzeichnis `/mnt/` auf alle Windows-Dateien zugreifen: - -- Laufwerk `C:` -> `/mnt/c/` -- Laufwerk `D:` -> `/mnt/d/` -- usw. - -Beispiel: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -Fuer die beste Performance kannst du dein Repo direkt in das WSL-Dateisystem klonen/kopieren (z. B. nach `~/code/`) und OpenCode dort starten. -::: - ---- - -## Tipps - -- Lass OpenCode in WSL laufen, auch wenn das Projekt auf einem Windows-Laufwerk liegt -- Nutze die [WSL-Extension](https://code.visualstudio.com/docs/remote/wsl) von VS Code fuer einen integrierten Workflow -- OpenCode-Konfiguration und Sitzungen liegen in WSL unter `~/.local/share/opencode/` diff --git a/packages/web/src/content/docs/de/zen.mdx b/packages/web/src/content/docs/de/zen.mdx deleted file mode 100644 index 7a2fa0bfc1..0000000000 --- a/packages/web/src/content/docs/de/zen.mdx +++ /dev/null @@ -1,301 +0,0 @@ ---- -title: Zen -description: Kuratierte Modellliste direkt von OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen ist eine Liste von getesteten und verifizierten Modellen, die vom OpenCode-Team bereitgestellt wird. - -Zen funktioniert wie jeder andere Provider in OpenCode. Du meldest dich bei OpenCode Zen an und erhältst deinen API-Key. Es ist **vollständig optional** und du musst es nicht verwenden, um OpenCode zu nutzen. - ---- - -## Hintergrund - -Es gibt eine große Anzahl an Modellen, aber nur wenige davon eignen sich gut als Coding-Agenten. Außerdem sind die meisten Provider sehr unterschiedlich konfiguriert, sodass du sehr unterschiedliche Leistung und Qualität erhältst. - -:::tip -Wir haben eine ausgewählte Gruppe von Modellen und Providern getestet, die gut mit OpenCode funktionieren. -::: - -Wenn du also ein Modell über etwas wie OpenRouter nutzt, kannst du nie sicher sein, ob du die beste Version des gewünschten Modells bekommst. - -Um das zu beheben, haben wir ein paar Dinge getan: - -1. Wir haben eine ausgewählte Gruppe von Modellen getestet und mit ihren Teams darüber gesprochen, wie man sie am besten betreibt. -2. Anschließend haben wir mit einigen Providern zusammengearbeitet, um sicherzustellen, dass diese korrekt ausgeliefert werden. -3. Schließlich haben wir die Kombination aus Modell und Provider benchmarked und eine Liste erstellt, die wir guten Gewissens empfehlen können. - -OpenCode Zen ist ein AI-Gateway, das dir Zugriff auf diese Modelle gibt. - ---- - -## So funktioniert es - -OpenCode Zen funktioniert wie jeder andere Provider in OpenCode. - -1. Du meldest dich bei **OpenCode Zen** an, hinterlegst deine Zahlungsdaten und kopierst deinen API-Key. -2. Du führst den Befehl `/connect` in der TUI aus, wählst OpenCode Zen aus und fügst deinen API-Key ein. -3. Führe `/models` in der TUI aus, um die Liste der Modelle zu sehen, die wir empfehlen. - -Dir wird pro Anfrage berechnet, und du kannst deinem Konto Guthaben hinzufügen. - ---- - -## Endpunkte - -Du kannst auch über die folgenden API-Endpunkte auf unsere Modelle zugreifen. - -| 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -Die [Model-ID](/docs/config/#models) in deiner OpenCode-Konfiguration verwendet das Format `opencode/`. Für GPT 5.5 würdest du zum Beispiel `opencode/gpt-5.5` in deiner Konfiguration verwenden. - ---- - -### Models - -Du kannst die vollständige Liste der verfügbaren Modelle und ihrer Metadaten hier abrufen: - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## Preise - -Wir unterstützen ein Pay-as-you-go-Modell. Unten findest du die Preise **pro 1M Tokens**. - -| Model | Input | Output | Cached Read | Cached Write | -| --------------------------------- | ------ | ------- | ----------- | ------------ | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -Möglicherweise siehst du _Claude Haiku 3.5_ in deinem Nutzungsverlauf. Das ist ein [kostengünstiges Modell](/docs/config/#models), das verwendet wird, um die Titel deiner Sessions zu generieren. - -:::note -Kreditkartengebühren werden zum Selbstkostenpreis weitergegeben (4.4% + $0.30 pro Transaktion); wir berechnen darüber hinaus nichts. -::: - -Die kostenlosen Modelle: - -- DeepSeek V4 Flash Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. -- MiMo-V2.5 Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. -- North Mini Code Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. -- Nemotron 3 Ultra Free ist für begrenzte Zeit auf OpenCode verfügbar. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. -- Big Pickle ist ein Stealth-Modell, das für begrenzte Zeit kostenlos auf OpenCode verfügbar ist. Das Team nutzt diese Zeit, um Feedback zu sammeln und das Modell zu verbessern. - -Kontaktiere uns, wenn du Fragen hast. - ---- - -### Auto-reload - -Wenn dein Guthaben unter $5 fällt, lädt Zen automatisch $20 nach. - -Du kannst den Auto-reload-Betrag ändern. Du kannst Auto-reload auch vollständig deaktivieren. - ---- - -### Monatliche Limits - -Du kannst auch ein monatliches Nutzungslimit für den gesamten Workspace und für jedes Mitglied deines Teams festlegen. - -Angenommen, du setzt ein monatliches Nutzungslimit von $20, dann wird Zen in einem Monat nicht mehr als $20 verwenden. Wenn du jedoch Auto-reload aktiviert hast, kann es sein, dass Zen dir mehr als $20 berechnet, wenn dein Guthaben unter $5 fällt. - ---- - -### Veraltete Modelle - -| Model | Deprecation date | -| ------------------ | ----------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## Datenschutz - -Alle unsere Modelle werden in den USA gehostet. Unsere Provider folgen einer Zero-Retention-Richtlinie und verwenden deine Daten nicht zum Trainieren von Modellen, mit den folgenden Ausnahmen: - -- Big Pickle: Während des kostenlosen Zeitraums können gesammelte Daten zur Verbesserung des Modells verwendet werden. -- DeepSeek V4 Flash Free: Während des kostenlosen Zeitraums können gesammelte Daten zur Verbesserung des Modells verwendet werden. -- MiMo-V2.5 Free: Während des kostenlosen Zeitraums können gesammelte Daten zur Verbesserung des Modells verwendet werden. -- North Mini Code Free: Während des kostenlosen Zeitraums können erhobene Daten gespeichert und zur Verbesserung des Modells verwendet werden. Übermitteln Sie keine personenbezogenen oder vertraulichen Daten. Weitere Informationen finden Sie in unseren [Nutzungsbedingungen](https://cohere.com/terms-of-use) und unserer [Datenschutzerklärung](https://cohere.com/privacy). -- Nemotron 3 Ultra Free (kostenlose NVIDIA-Endpunkte): Nur für Testzwecke — übermitteln Sie keine personenbezogenen oder vertraulichen Daten. Ihre Nutzung wird zu Sicherheitszwecken und zur Verbesserung der Produkte und Dienste von NVIDIA protokolliert. Die zu Verbesserungszwecken protokollierten Sitzungsdaten sind nicht mit Ihrer Identität oder einem dauerhaften Identifikator verknüpft. Weitere Informationen zu unseren Datenverarbeitungspraktiken finden Sie in unserer [Datenschutzrichtlinie](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Durch die Interaktion mit diesem Endpunkt stimmen Sie unserer Erhebung, Aufzeichnung und Nutzung solcher Informationen sowie den [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) zu. -- OpenAI APIs: Anfragen werden in Übereinstimmung mit [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) 30 Tage lang gespeichert. -- Anthropic APIs: Anfragen werden in Übereinstimmung mit [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage) 30 Tage lang gespeichert. - ---- - -## Für Teams - -Zen funktioniert auch hervorragend für Teams. Du kannst Teammitglieder einladen, Rollen zuweisen, die Modelle kuratieren, die dein Team verwendet, und mehr. - -:::note -Workspaces sind für Teams derzeit als Teil der Beta kostenlos. -::: - -Die Verwaltung deines Workspace ist für Teams derzeit als Teil der Beta kostenlos. Wir werden bald mehr Details zur Preisgestaltung teilen. - ---- - -### Rollen - -Du kannst Teammitglieder in deinen Workspace einladen und Rollen zuweisen: - -- **Admin**: Verwaltet Modelle, Mitglieder, API-Keys und Abrechnung -- **Member**: Verwaltet nur die eigenen API-Keys - -Admins können außerdem monatliche Ausgabenlimits für jedes Mitglied festlegen, um die Kosten unter Kontrolle zu halten. - ---- - -### Modellzugriff - -Admins können bestimmte Modelle für den Workspace aktivieren oder deaktivieren. Anfragen an ein deaktiviertes Modell geben einen Fehler zurück. - -Das ist nützlich, wenn du die Verwendung eines Modells deaktivieren möchtest, das Daten sammelt. - ---- - -### Eigenen Key mitbringen - -Du kannst deine eigenen OpenAI- oder Anthropic-API-Keys verwenden und trotzdem auf andere Modelle in Zen zugreifen. - -Wenn du deine eigenen Keys verwendest, werden Tokens direkt vom Provider abgerechnet, nicht von Zen. - -Zum Beispiel hat deine Organisation möglicherweise bereits einen Key für OpenAI oder Anthropic und du möchtest diesen anstelle des von Zen bereitgestellten verwenden. - ---- - -## Ziele - -Wir haben OpenCode Zen geschaffen, um: - -1. die besten Modelle/Provider für Coding-Agenten zu **benchmarken**. -2. Zugriff auf die **höchste Qualität** zu haben und die Leistung nicht zu verschlechtern oder an günstigere Provider weiterzuleiten. -3. **Preissenkungen** weiterzugeben, indem wir zum Selbstkostenpreis verkaufen; der einzige Aufschlag dient also dazu, unsere Bearbeitungsgebühren abzudecken. -4. **keinen Lock-in** zu haben, indem du es mit jedem anderen Coding-Agenten verwenden kannst. Und dir außerdem immer zu erlauben, mit OpenCode auch jeden anderen Provider zu verwenden. diff --git a/packages/web/src/content/docs/fr/acp.mdx b/packages/web/src/content/docs/fr/acp.mdx deleted file mode 100644 index 81254d4792..0000000000 --- a/packages/web/src/content/docs/fr/acp.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: Support ACP -description: Utilisez OpenCode dans n’importe quel éditeur compatible ACP. ---- - -OpenCode prend en charge le [Agent Client Protocol](https://agentclientprotocol.com) (ACP), vous permettant de l'utiliser directement dans les éditeurs et IDE compatibles. - -:::tip -Pour obtenir une liste des éditeurs et des outils prenant en charge ACP, consultez le [ACP progress report](https://zed.dev/blog/acp-progress-report#available-now). -::: - -ACP est un protocole ouvert qui standardise la communication entre les éditeurs de code et les agents de codage AI. - ---- - -## Configuration - -Pour utiliser OpenCode via ACP, configurez votre éditeur pour exécuter la commande `opencode acp`. - -La commande démarre OpenCode en tant que sous-processus compatible ACP qui communique avec votre éditeur via JSON-RPC sur stdio. - -Vous trouverez ci-dessous des exemples d'éditeurs populaires prenant en charge ACP. - ---- - -### Zed - -Ajoutez à votre configuration [Zed](https://zed.dev) (`~/.config/zed/settings.json`) : - -```json title="~/.config/zed/settings.json" -{ - "agent_servers": { - "OpenCode": { - "command": "opencode", - "args": ["acp"] - } - } -} -``` - -Pour l'ouvrir, utilisez l'action `agent: new thread` dans la **Palette de commandes**. - -Vous pouvez également associer un raccourci clavier en modifiant votre `keymap.json` : - -```json title="keymap.json" -[ - { - "bindings": { - "cmd-alt-o": [ - "agent::NewExternalAgentThread", - { - "agent": { - "custom": { - "name": "OpenCode", - "command": { - "command": "opencode", - "args": ["acp"] - } - } - } - } - ] - } - } -] -``` - ---- - -### IDE JetBrains - -Ajoutez `acp.json` à votre [IDE JetBrains](https://www.jetbrains.com/) conformément à la [documentation](https://www.jetbrains.com/help/ai-assistant/acp.html) : - -```json title="acp.json" -{ - "agent_servers": { - "OpenCode": { - "command": "/absolute/path/bin/opencode", - "args": ["acp"] - } - } -} -``` - -Pour l'ouvrir, utilisez le nouvel agent « OpenCode » dans le sélecteur d'agent AI Chat. - ---- - -### Avante.nvim - -Ajoutez à votre configuration [Avante.nvim](https://github.com/yetone/avante.nvim) : - -```lua -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" } - } - } -} -``` - -Si vous devez transmettre des variables d'environnement : - -```lua {6-8} -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" }, - env = { - OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY") - } - } - } -} -``` - ---- - -### CodeCompanion.nvim - -Pour utiliser OpenCode comme agent ACP dans [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), ajoutez ce qui suit à votre configuration Neovim : - -```lua -require("codecompanion").setup({ - interactions = { - chat = { - adapter = { - name = "opencode", - model = "claude-sonnet-4", - }, - }, - }, -}) -``` - -Cette configuration configure CodeCompanion pour utiliser OpenCode comme agent ACP pour le chat. - -Si vous devez transmettre des variables d'environnement (comme `OPENCODE_API_KEY`), reportez-vous à [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) dans la documentation CodeCompanion.nvim pour plus de détails. - -## Prise en charge - -OpenCode fonctionne de la même manière via ACP que dans le terminal. Toutes les fonctionnalités sont prises en charge : - -:::note -Certaines commandes slash intégrées telles que `/undo` et `/redo` ne sont actuellement pas prises en charge. -::: - -- Outils intégrés (opérations sur les fichiers, commandes de terminal, etc.) -- Outils personnalisés et commandes slash -- Serveurs MCP configurés dans votre configuration OpenCode -- Règles spécifiques au projet à partir de `AGENTS.md` -- Formateurs et linters personnalisés -- Système d'agents et d'autorisations diff --git a/packages/web/src/content/docs/fr/agents.mdx b/packages/web/src/content/docs/fr/agents.mdx deleted file mode 100644 index a6b323dfc8..0000000000 --- a/packages/web/src/content/docs/fr/agents.mdx +++ /dev/null @@ -1,755 +0,0 @@ ---- -title: Agents -description: Configurez et utilisez des agents spécialisés. ---- - -Les agents sont des assistants IA spécialisés qui peuvent être configurés pour des tâches et des flux de travail spécifiques. Ils vous permettent de créer des outils ciblés avec des prompts, des modèles et un accès aux outils personnalisés. - -:::tip -Utilisez l'agent de plan pour analyser le code et examiner les suggestions sans apporter de modifications au code. -::: - -Vous pouvez basculer entre les agents au cours d'une session ou les appeler avec la mention `@`. - ---- - -## Types - -Il existe deux types d'agents dans OpenCode ; agents primaires et sous-agents. - ---- - -### Agents primaires - -Les agents primaires sont les principaux assistants avec lesquels vous interagissez directement. Vous pouvez les parcourir à l'aide de la touche **Tab** ou de votre combinaison de touches `switch_agent` configurée. Ces agents gèrent votre conversation principale. L'accès aux outils est configuré via les autorisations : par exemple, Build a tous les outils activés tandis que Plan est restreint. - -:::tip -Vous pouvez utiliser la touche **Tab** pour basculer entre les agents primaires au cours d'une session. -::: - -OpenCode est livré avec deux agents primaires intégrés, **Build** et **Plan**. -Nous les verrons ci-dessous. - ---- - -### Sous-agents - -Les sous-agents sont des assistants spécialisés que les agents primaires peuvent appeler pour des tâches spécifiques. Vous pouvez également les invoquer manuellement en **@ les mentionnant** dans vos messages. - -OpenCode est livré avec trois sous-agents intégrés, **General**, **Explore** et **Scout**. Nous les verrons ci-dessous. - ---- - -## Agents intégrés - -OpenCode est livré avec deux agents primaires intégrés et trois sous-agents intégrés. - ---- - -### Agent Build - -_Mode_ : `primary` - -Build est l'agent primaire **par défaut** avec tous les outils activés. Il s'agit de l'agent standard pour les travaux de développement où vous avez besoin d'un accès complet aux opérations sur les fichiers et aux commandes système. - ---- - -### Agent Plan - -_Mode_ : `primary` - -Un agent restreint conçu pour la planification et l'analyse. Nous utilisons un système d'autorisation pour vous donner plus de contrôle et empêcher toute modification involontaire. -Par défaut, tous les éléments suivants sont définis sur `ask` : - -- `file edits` : toutes les écritures, correctifs et modifications -- `bash` : toutes les commandes bash - -Cet agent est utile lorsque vous souhaitez que le LLM analyse le code, suggère des modifications ou crée des plans sans apporter de modifications réelles à votre base de code. - ---- - -### Agent General - -_Mode_ : `subagent` - -Un agent polyvalent pour traiter des questions complexes et exécuter des tâches en plusieurs étapes. Dispose d'un accès complet aux outils (sauf todo), il peut donc apporter des modifications aux fichiers en cas de besoin. Utilisez-le pour exécuter plusieurs unités de travail en parallèle. - ---- - -### Agent Explore - -_Mode_ : `subagent` - -Un agent rapide en lecture seule pour explorer les bases de code. Impossible de modifier les fichiers. Utilisez-le lorsque vous avez besoin de rechercher rapidement des fichiers par modèles, de rechercher du code par mots-clés ou de répondre à des questions sur la base de code. - ---- - -### Agent Scout - -_Mode_ : `subagent` - -Un agent en lecture seule pour la recherche sur la documentation externe et les dépendances. Utilisez-le lorsque vous devez cloner le dépôt d'une dépendance dans le cache géré d'OpenCode, inspecter le code source d'une bibliothèque ou recouper le code local avec les implémentations upstream sans modifier votre espace de travail. - ---- - -### Agent Compaction - -_Mode_ : `primary` - -Agent système caché qui compacte un contexte long en un résumé plus petit. Il s'exécute automatiquement en cas de besoin et n'est pas sélectionnable dans l'interface utilisateur. - ---- - -### Agent Title - -_Mode_ : `primary` - -Agent système caché qui génère des titres de session courts. Il s'exécute automatiquement et n'est pas sélectionnable dans l'interface utilisateur. - ---- - -### Agent Summary - -_Mode_ : `primary` - -Agent système caché qui crée des résumés de session. Il s'exécute automatiquement et n'est pas sélectionnable dans l'interface utilisateur. - ---- - -## Utilisation - -1. Pour les agents primaires, utilisez la touche **Tab** pour les parcourir au cours d'une session. Vous pouvez également utiliser votre raccourci clavier `switch_agent` configuré. - -2. Les sous-agents peuvent être invoqués : - - **Automatiquement** par les agents primaires pour des tâches spécialisées en fonction de leurs descriptions. - - Manuellement en **@ mentionnant** un sous-agent dans votre message. Par exemple : - - ```txt frame="none" - @general help me search for this function - ``` - -3. **Navigation entre les sessions** : lorsque les sous-agents créent leurs propres sessions enfants, vous pouvez naviguer entre la session parent et toutes les sessions enfants en utilisant : - - **\+Right** (ou votre combinaison de touches `session_child_cycle` configurée) pour avancer via parent → enfant1 → enfant2 → ... → parent - - **\+Left** (ou votre combinaison de touches `session_child_cycle_reverse` configurée) pour revenir en arrière dans parent ← enfant1 ← enfant2 ← ... ← parent - -Cela vous permet de basculer en toute transparence entre la conversation principale et le travail spécialisé des sous-agents. - ---- - -## Configuration - -Vous pouvez personnaliser les agents intégrés ou créer les vôtres via la configuration. Les agents peuvent être configurés de deux manières : - ---- - -### JSON - -Configurez les agents dans votre fichier de configuration `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 - -Vous pouvez également définir des agents à l'aide de fichiers markdown. Placez-les dans : - -- Global : `~/.config/opencode/agents/` -- Par projet : `.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. -``` - -Le nom du fichier Markdown devient le nom de l'agent. Par exemple, `review.md` crée un agent `review`. - ---- - -## Options - -Examinons ces options de configuration en détail. - ---- - -### Description - -Utilisez l'option `description` pour fournir une brève description de ce que fait l'agent et quand l'utiliser. - -```json title="opencode.json" -{ - "agent": { - "review": { - "description": "Reviews code for best practices and potential issues" - } - } -} -``` - -Il s'agit d'une option de configuration **obligatoire**. - ---- - -### Température - -Contrôlez le caractère aléatoire et la créativité des réponses du LLM avec la configuration `temperature`. - -Des valeurs faibles rendent les réponses plus ciblées et déterministes, tandis que des valeurs plus élevées augmentent la créativité et la variabilité. - -```json title="opencode.json" -{ - "agent": { - "plan": { - "temperature": 0.1 - }, - "creative": { - "temperature": 0.8 - } - } -} -``` - -Les valeurs de température varient généralement de 0,0 à 1,0 : - -- **0,0-0,2** : réponses très ciblées et déterministes, idéales pour l'analyse et la planification du code -- **0,3-0,5** : réponses équilibrées avec une certaine créativité, idéales pour les tâches de développement générales -- **0,6-1,0** : réponses plus créatives et variées, utiles pour le brainstorming et l'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}" - } - } -} -``` - -Si aucune température n'est spécifiée, OpenCode utilise les valeurs par défaut spécifiques au modèle ; généralement 0 pour la plupart des modèles, 0,55 pour les modèles Qwen. - ---- - -### Étapes maximum - -Contrôlez le nombre maximum d'itérations que l'agent peut effectuer avant d'être obligé de répondre avec du texte uniquement. Cela permet aux utilisateurs qui souhaitent contrôler les coûts de fixer une limite aux actions agents. - -Si cela n'est pas défini, l'agent continuera à itérer jusqu'à ce que le modèle choisisse de s'arrêter ou que l'utilisateur interrompe la 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 - } - } -} -``` - -Lorsque la limite est atteinte, l'agent reçoit un prompt système spécial lui demandant de répondre avec un résumé de son travail et des tâches restantes recommandées. - -:::caution -L’ancien champ `maxSteps` est obsolète. Utilisez plutôt `steps`. -::: - ---- - -### Désactiver - -Définissez sur `true` pour désactiver l'agent. - -```json title="opencode.json" -{ - "agent": { - "review": { - "disable": true - } - } -} -``` - ---- - -### Invite - -Spécifiez un fichier de prompt système personnalisé pour cet agent avec la configuration `prompt`. Le fichier de prompt doit contenir des instructions spécifiques à l'objectif de l'agent. - -```json title="opencode.json" -{ - "agent": { - "review": { - "prompt": "{file:./prompts/code-review.txt}" - } - } -} -``` - -Ce chemin est relatif à l'emplacement du fichier de configuration. Cela fonctionne donc à la fois pour la configuration globale OpenCode et pour la configuration spécifique au projet. - ---- - -### Modèle - -Utilisez la configuration `model` pour remplacer le modèle de cet agent. Utile pour utiliser différents modèles optimisés pour différentes tâches. Par exemple, un modèle de planification plus rapide, un modèle de mise en œuvre plus performant. - -:::tip -Si vous ne spécifiez pas de modèle, les agents primaires utilisent le [modèle globalement configuré](/docs/config#models) tandis que les sous-agents utiliseront le modèle de l'agent primaire qui a appelé le sous-agent. -::: - -```json title="opencode.json" -{ - "agent": { - "plan": { - "model": "anthropic/claude-haiku-4-20250514" - } - } -} -``` - -L'ID de modèle dans votre configuration OpenCode utilise le format `provider/model-id`. Par exemple, si vous utilisez [OpenCode Zen](/docs/zen), vous utiliserez `opencode/gpt-5.1-codex` pour GPT 5.1 Codex. - ---- - -### Outils - -Contrôlez quels outils sont disponibles dans cet agent avec la configuration `tools`. Vous pouvez activer ou désactiver des outils spécifiques en les définissant sur `true` ou `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 -La configuration spécifique à l'agent remplace la configuration globale. -::: - -Vous pouvez également utiliser des caractères génériques pour contrôler plusieurs outils à la fois. Par exemple, pour désactiver tous les outils d'un serveur MCP : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "readonly": { - "tools": { - "mymcp_*": false, - "write": false, - "edit": false - } - } - } -} -``` - -[En savoir plus sur les outils](/docs/tools). - ---- - -### Autorisations - -Vous pouvez configurer des autorisations pour gérer les actions qu'un agent peut effectuer. Actuellement, les autorisations pour les outils `edit`, `bash` et `webfetch` peuvent être configurées pour : - -- `"ask"` — Demander l'approbation avant d'exécuter l'outil -- `"allow"` — Autoriser toutes les opérations sans approbation -- `"deny"` – Désactiver l'outil - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - } -} -``` - -Vous pouvez remplacer ces autorisations par agent. - -```json title="opencode.json" {3-5,8-10} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - }, - "agent": { - "build": { - "permission": { - "edit": "ask" - } - } - } -} -``` - -Vous pouvez également définir des autorisations dans les agents 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. -``` - -Vous pouvez définir des autorisations pour des commandes bash spécifiques. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git push": "ask", - "grep *": "allow" - } - } - } - } -} -``` - -Cela peut prendre un pattern glob. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git *": "ask" - } - } - } - } -} -``` - -Et vous pouvez également utiliser le caractère générique `*` pour gérer les autorisations pour toutes les commandes. -Puisque la dernière règle correspondante est prioritaire, placez le caractère générique `*` en premier et les règles spécifiques après. - -```json title="opencode.json" {8} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "*": "ask", - "git status *": "allow" - } - } - } - } -} -``` - -[En savoir plus sur les autorisations](/docs/permissions). - ---- - -### Mode - -Contrôlez le mode de l'agent avec la configuration `mode`. L'option `mode` est utilisée pour déterminer comment l'agent peut être utilisé. - -```json title="opencode.json" -{ - "agent": { - "review": { - "mode": "subagent" - } - } -} -``` - -L'option `mode` peut être définie sur `primary`, `subagent` ou `all`. Si aucun `mode` n’est spécifié, la valeur par défaut est `all`. - ---- - -### Masqué - -Masquez un sous-agent du menu de saisie semi-automatique `@` avec `hidden: true`. Utile pour les sous-agents internes qui ne doivent être invoqués que par programme par d'autres agents via l'outil Tâche. - -```json title="opencode.json" -{ - "agent": { - "internal-helper": { - "mode": "subagent", - "hidden": true - } - } -} -``` - -Cela affecte uniquement la visibilité de l'utilisateur dans le menu de saisie semi-automatique. Les agents masqués peuvent toujours être invoqués par le modèle via l'outil Tâche si les autorisations le permettent. - -:::note -S'applique uniquement aux agents `mode: subagent`. -::: - ---- - -### Autorisations de tâches - -Contrôlez quels sous-agents un agent peut appeler via l'outil Tâche avec `permission.task`. Utilise des patterns glob pour une correspondance flexible. - -```json title="opencode.json" -{ - "agent": { - "orchestrator": { - "mode": "primary", - "permission": { - "task": { - "*": "deny", - "orchestrator-*": "allow", - "code-reviewer": "ask" - } - } - } - } -} -``` - -Lorsqu'il est défini sur `deny`, le sous-agent est entièrement supprimé de la description de l'outil Tâche, de sorte que le modèle ne tentera pas de l'invoquer. - -:::tip -Les règles sont évaluées dans l'ordre et la **dernière règle correspondante l'emporte**. Dans l'exemple ci-dessus, `orchestrator-planner` correspond à la fois à `*` (refuser) et à `orchestrator-*` (autoriser), mais comme `orchestrator-*` vient après `*`, le résultat est `allow`. -::: - -:::tip -Les utilisateurs peuvent toujours appeler n'importe quel sous-agent directement via le menu de saisie semi-automatique `@`, même si les autorisations de tâche de l'agent le refuseraient. -::: - ---- - -### Couleur - -Personnalisez l'apparence visuelle de l'agent dans l'interface utilisateur avec l'option `color`. Cela affecte la façon dont l'agent apparaît dans l'interface. - -Utilisez une couleur hexadécimale valide (par exemple, `#FF5733`) ou une couleur de thème : `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`. - -```json title="opencode.json" -{ - "agent": { - "creative": { - "color": "#ff6b6b" - }, - "code-reviewer": { - "color": "accent" - } - } -} -``` - ---- - -### Top P - -Contrôlez la diversité des réponses avec l’option `top_p`. Alternative à la température pour contrôler le caractère aléatoire. - -```json title="opencode.json" -{ - "agent": { - "brainstorm": { - "top_p": 0.9 - } - } -} -``` - -Les valeurs vont de 0,0 à 1,0. Les valeurs inférieures sont plus ciblées, les valeurs élevées plus diversifiées. - ---- - -### Options supplémentaires - -Toutes les autres options que vous spécifiez dans la configuration de votre agent seront **transmises directement** au fournisseur en tant qu'options de modèle. Cela vous permet d'utiliser des fonctionnalités et des paramètres spécifiques au fournisseur. - -Par exemple, avec les modèles de raisonnement d'OpenAI, vous pouvez contrôler l'effort de raisonnement : - -```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" - } - } -} -``` - -Ces options supplémentaires sont spécifiques au modèle et au fournisseur. Consultez la documentation de votre fournisseur pour connaître les paramètres disponibles. - -:::tip -Exécutez `opencode models` pour voir une liste des modèles disponibles. -::: - ---- - -## Création d'agents - -Vous pouvez créer de nouveaux agents à l'aide de la commande suivante : - -```bash -opencode agent create -``` - -Cette commande interactive va : - -1. Demander où enregistrer l'agent ; global ou spécifique à un projet. -2. Demander une description de ce que l'agent doit faire. -3. Générer un prompt système et un identifiant appropriés. -4. Vous permettre de sélectionner les outils auxquels l'agent peut accéder. -5. Enfin, créer un fichier markdown avec la configuration de l'agent. - ---- - -## Cas d'utilisation - -Voici quelques cas d’utilisation courants pour différents agents. - -- **Agent de build** : travail de développement complet avec tous les outils activés -- **Agent de plan** : analyse et planification sans apporter de modifications -- **Agent de révision** : révision de code avec accès en lecture seule et outils de documentation -- **Agent de débogage** : axé sur l'investigation avec les outils bash et read activés -- **Agent Docs** : écriture de documentation avec des opérations sur les fichiers mais pas de commandes système - ---- - -## Exemples - -Voici quelques exemples d’agents qui pourraient vous être utiles. - -:::tip -Avez-vous un agent que vous aimeriez partager ? [Soumettez un PR](https://github.com/anomalyco/opencode). -::: - ---- - -### Agent de documentation - -```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 -``` - ---- - -### Auditeur de sécurité - -```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 -``` diff --git a/packages/web/src/content/docs/fr/cli.mdx b/packages/web/src/content/docs/fr/cli.mdx deleted file mode 100644 index bc8b550cc0..0000000000 --- a/packages/web/src/content/docs/fr/cli.mdx +++ /dev/null @@ -1,617 +0,0 @@ ---- -title: CLI -description: Options et commandes de la CLI OpenCode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -La CLI OpenCode démarre par défaut le [TUI](/docs/tui) lorsqu'il est exécuté sans aucun argument. - -```bash -opencode -``` - -Mais elle accepte également les commandes documentées sur cette page. Cela vous permet d'interagir avec OpenCode par programme. - -```bash -opencode run "Explain how closures work in JavaScript" -``` - ---- - -### tui - -Démarrez l’interface utilisateur du terminal OpenCode. - -```bash -opencode [project] -``` - -#### Options - -| Option | Court | Description | -| ---------------------------------------- | ----- | ----------------------------------------------------------------------------- | -| {"--continue"} | `-c` | Continuer la dernière session | -| {"--session"} | `-s` | ID de session pour continuer | -| {"--fork"} | | Forker la session en continuant (à utiliser avec `--continue` ou `--session`) | -| {"--prompt"} | | Prompt à utiliser | -| {"--model"} | `-m` | Modèle à utiliser sous forme de fournisseur/modèle | -| {"--agent"} | | Agent à utiliser | -| {"--port"} | | Port d'écoute | -| {"--hostname"} | | Nom d'hôte d'écoute | - ---- - -## Commandes - -La CLI OpenCode dispose également des commandes suivantes. - ---- - -### agent - -Gérer les agents pour OpenCode. - -```bash -opencode agent [command] -``` - ---- - -### attach - -Attachez un terminal à un serveur backend OpenCode déjà en cours d'exécution démarré via les commandes `serve` ou `web`. - -```bash -opencode attach [url] -``` - -Cela permet d'utiliser le TUI avec un backend OpenCode distant. Par exemple : - -```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 -``` - -#### Options - -| Option | Court | Description | -| ---------------------------------------- | ----- | -------------------------------------------------------------------------------------------------- | -| {"--dir"} | | Répertoire de travail dans lequel démarrer TUI | -| {"--continue"} | `-c` | Continuer la dernière session | -| {"--session"} | `-s` | ID de session pour continuer | -| {"--fork"} | | Dupliquer la session lors de la reprise (à utiliser avec `--continue` ou `--session`) | -| {"--password"} | `-p` | Mot de passe d'authentification de base (par défaut `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Nom d'utilisateur d'authentification de base (par défaut `OPENCODE_SERVER_USERNAME` ou `opencode`) | - ---- - -#### create - -Créez un nouvel agent avec une configuration personnalisée. - -```bash -opencode agent create -``` - -Cette commande vous guidera dans la création d'un nouvel agent avec un prompt système personnalisé et une configuration d'outils. - ---- - -#### list - -Liste tous les agents disponibles. - -```bash -opencode agent list -``` - ---- - -### auth - -Commande pour gérer les informations d’identification et la connexion des fournisseurs. - -```bash -opencode auth [command] -``` - ---- - -#### login - -OpenCode est alimenté par la liste des fournisseurs sur [Models.dev](https://models.dev), vous pouvez donc utiliser `opencode auth login` pour configurer les clés API pour tout fournisseur que vous souhaitez utiliser. Ceci est stocké dans `~/.local/share/opencode/auth.json`. - -```bash -opencode auth login -``` - -Lorsque OpenCode démarre, il charge les fournisseurs à partir du fichier d'informations d'identification, ainsi que les clés définies dans vos environnements ou un fichier `.env` dans votre projet. - ---- - -#### list - -Liste tous les fournisseurs authentifiés tels qu'ils sont stockés dans le fichier d'informations d'identification. - -```bash -opencode auth list -``` - -Ou la version courte. - -```bash -opencode auth ls -``` - ---- - -#### logout - -Vous déconnecte d'un fournisseur en l'effaçant du fichier d'informations d'identification. - -```bash -opencode auth logout -``` - ---- - -### github - -Gérez l'agent GitHub pour l'automatisation du dépôt. - -```bash -opencode github [command] -``` - ---- - -#### install - -Installez l'agent GitHub dans votre dépôt. - -```bash -opencode github install -``` - -Cela configure le flux de travail GitHub Actions nécessaire et vous guide tout au long du processus de configuration. [En savoir plus](/docs/github). - ---- - -#### run - -Exécutez l'agent GitHub. Ceci est généralement utilisé dans les GitHub Actions. - -```bash -opencode github run -``` - -##### Options - -| Option | Description | -| ------------------------------------- | ---------------------------------------------------- | -| {"--event"} | Événement simulé GitHub pour lequel exécuter l'agent | -| {"--token"} | Jeton d'accès personnel GitHub | - ---- - -### MCP - -Gérer les serveurs Model Context Protocol. - -```bash -opencode mcp [command] -``` - ---- - -#### add - -Ajoutez un serveur MCP à votre configuration. - -```bash -opencode mcp add -``` - -Cette commande vous guidera dans l’ajout d’un serveur MCP local ou distant. - ---- - -#### list - -Liste tous les serveurs MCP configurés et leur état de connexion. - -```bash -opencode mcp list -``` - -Ou utilisez la version courte. - -```bash -opencode mcp ls -``` - ---- - -#### auth - -Authentifiez-vous auprès d'un serveur MCP compatible OAuth. - -```bash -opencode mcp auth [name] -``` - -Si vous ne fournissez pas de nom de serveur, vous serez invité à sélectionner parmi les serveurs compatibles OAuth disponibles. - -Vous pouvez également répertorier les serveurs compatibles OAuth et leur statut d'authentification. - -```bash -opencode mcp auth list -``` - -Ou utilisez la version courte. - -```bash -opencode mcp auth ls -``` - ---- - -#### logout - -Supprimez les informations d'identification OAuth pour un serveur MCP. - -```bash -opencode mcp logout [name] -``` - ---- - -#### debug - -Déboguer les problèmes de connexion OAuth pour un serveur MCP. - -```bash -opencode mcp debug -``` - ---- - -### models - -Liste tous les modèles disponibles auprès des fournisseurs configurés. - -```bash -opencode models [provider] -``` - -Cette commande affiche tous les modèles disponibles parmi vos fournisseurs configurés au format `provider/model`. - -Ceci est utile pour déterminer le nom exact du modèle à utiliser dans [votre config](/docs/config/). - -Vous pouvez éventuellement transmettre un ID de fournisseur pour filtrer les modèles en fonction de ce fournisseur. - -```bash -opencode models anthropic -``` - -#### Options - -| Option | Description | -| --------------------------------------- | ------------------------------------------------------------------------------------------ | -| {"--refresh"} | Actualisez le cache des modèles à partir de models.dev | -| {"--verbose"} | Utiliser une sortie de modèle plus détaillée (inclut des métadonnées telles que les coûts) | - -Utilisez l'option `--refresh` pour mettre à jour la liste des modèles mis en cache. Ceci est utile lorsque de nouveaux modèles ont été ajoutés à un fournisseur et que vous souhaitez les voir dans OpenCode. - -```bash -opencode models --refresh -``` - ---- - -### run - -Exécutez opencode en mode non interactif en transmettant directement un prompt. - -```bash -opencode run [message..] -``` - -Ceci est utile pour les scripts, l'automatisation ou lorsque vous souhaitez une réponse rapide sans lancer le TUI complet. Par exemple : - -```bash "opencode run" -opencode run Explain the use of context in Go -``` - -Vous pouvez également vous connecter à une instance `opencode serve` en cours d'exécution pour éviter les temps de démarrage à froid du serveur MCP à chaque exécution : - -```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" -``` - -#### Options - -| Option | Court | Description | -| ---------------------------------------- | ----- | -------------------------------------------------------------------------------------------------- | -| {"--command"} | | La commande à exécuter, utilisez le message pour les arguments | -| {"--continue"} | `-c` | Continuer la dernière session | -| {"--session"} | `-s` | ID de session pour continuer | -| {"--fork"} | | Forker la session en continuant (à utiliser avec `--continue` ou `--session`) | -| {"--share"} | | Partager la session | -| {"--model"} | `-m` | Modèle à utiliser sous forme de fournisseur/modèle | -| {"--agent"} | | Agent à utiliser | -| {"--file"} | `-f` | Fichier(s) à joindre au message | -| {"--format"} | | Format : par défaut (formaté) ou json (événements JSON bruts) | -| {"--title"} | | Titre de la session (utilise un prompt tronqué si aucune valeur n'est fournie) | -| {"--attach"} | | Connectez-vous à un serveur opencode en cours d'exécution (par exemple, http://localhost:4096) | -| {"--password"} | `-p` | Mot de passe d'authentification de base (par défaut `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Nom d'utilisateur d'authentification de base (par défaut `OPENCODE_SERVER_USERNAME` ou `opencode`) | -| {"--dir"} | | Répertoire d'exécution, ou chemin sur le serveur distant lors de l'attachement | -| {"--variant"} | | Variante du modèle (effort de raisonnement spécifique au fournisseur) | -| {"--thinking"} | | Afficher les blocs de réflexion | -| {"--port"} | | Port du serveur local (port aléatoire par défaut) | - ---- - -### serve - -Démarrez un serveur OpenCode sans interface graphique pour un accès API. Consultez le [serveur docs](/docs/server) pour l'interface complète HTTP. - -```bash -opencode serve -``` - -Cela démarre un serveur HTTP qui fournit un accès API aux fonctionnalités d'OpenCode sans l'interface TUI. Définissez `OPENCODE_SERVER_PASSWORD` pour activer l'authentification de base HTTP (le nom d'utilisateur par défaut est `opencode`). - -#### Options - -| Option | Description | -| ---------------------------------------- | ---------------------------------------------------------- | -| {"--port"} | Port d'écoute | -| {"--hostname"} | Nom d'hôte d'écoute | -| {"--mdns"} | Activer la découverte mDNS | -| {"--cors"} | Origines de navigateur supplémentaires pour autoriser CORS | - ---- - -### session - -Gérer les sessions OpenCode. - -```bash -opencode session [command] -``` - ---- - -#### list - -Liste toutes les sessions OpenCode. - -```bash -opencode session list -``` - -##### Options - -| Option | Court | Description | -| ----------------------------------------- | ----- | -------------------------------------------- | -| {"--max-count"} | `-n` | Limiter aux N sessions les plus récentes | -| {"--format"} | | Format de sortie : tableau ou json (tableau) | - ---- - -### stats - -Affichez les statistiques d'utilisation et de coût des jetons pour vos sessions OpenCode. - -```bash -opencode stats -``` - -#### Options - -| Option | Description | -| --------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | -| {"--days"} | Afficher les statistiques des N derniers jours (depuis le début) | -| {"--tools"} | Nombre d'outils à afficher (tous) | -| {"--models"} | Afficher la répartition de l'utilisation du modèle (masqué par défaut). Passez un numéro pour afficher les N premiers | -| {"--project"} | Filtrer par projet (tous les projets, chaîne vide : projet actuel) | - ---- - -### export - -Exportez les données de session au format JSON. - -```bash -opencode export [sessionID] -``` - -Si vous ne fournissez pas d'ID de session, vous serez invité à sélectionner parmi les sessions disponibles. - ---- - -### import - -Importez les données de session à partir d'un fichier JSON ou d'une URL de partage OpenCode. - -```bash -opencode import -``` - -Vous pouvez importer à partir d'un fichier local ou d'une URL de partage OpenCode. - -```bash -opencode import session.json -opencode import https://opncd.ai/s/abc123 -``` - ---- - -### web - -Démarrez un serveur OpenCode sans interface graphique avec une interface Web. - -```bash -opencode web -``` - -Cela démarre un serveur HTTP et ouvre un navigateur Web pour accéder à OpenCode via une interface Web. Définissez `OPENCODE_SERVER_PASSWORD` pour activer l'authentification de base HTTP (le nom d'utilisateur par défaut est `opencode`). - -#### Options - -| Option | Description | -| ---------------------------------------- | ---------------------------------------------------------- | -| {"--port"} | Port d'écoute | -| {"--hostname"} | Nom d'hôte d'écoute | -| {"--mdns"} | Activer la découverte mDNS | -| {"--cors"} | Origines de navigateur supplémentaires pour autoriser CORS | - ---- - -### acp - -Démarrez un serveur ACP (Agent Client Protocol). - -```bash -opencode acp -``` - -Cette commande démarre un serveur ACP qui communique via stdin/stdout en utilisant nd-JSON. - -#### Options - -| Option | Description | -| ---------------------------------------- | --------------------- | -| {"--cwd"} | Répertoire de travail | -| {"--port"} | Port d'écoute | -| {"--hostname"} | Nom d'hôte d'écoute | - ---- - -### uninstall - -Désinstallez OpenCode et supprimez tous les fichiers associés. - -```bash -opencode uninstall -``` - -#### Options - -| Option | Court | Description | -| ------------------------------------------- | ----- | --------------------------------------------------- | -| {"--keep-config"} | `-c` | Conserver les fichiers de configuration | -| {"--keep-data"} | `-d` | Conserver les données de session et les instantanés | -| {"--dry-run"} | | Afficher ce qui serait supprimé sans supprimer | -| {"--force"} | `-f` | Ignorer les invites de confirmation | - ---- - -### upgrade - -Met à jour opencode vers la dernière version ou une version spécifique. - -```bash -opencode upgrade [target] -``` - -Pour mettre à niveau vers la dernière version. - -```bash -opencode upgrade -``` - -Pour passer à une version spécifique. - -```bash -opencode upgrade v0.1.48 -``` - -#### Options - -| Option | Court | Description | -| -------------------------------------- | ----- | --------------------------------------------------------------- | -| {"--method"} | `-m` | La méthode d'installation utilisée ; curl, npm, pnpm, bun, brew | - ---- - -## Options globales - -La CLI opencode prend les flags globaux suivants. - -| Option | Court | Description | -| ------------------------------------------ | ----- | ---------------------------------------- | -| {"--help"} | `-h` | Afficher l'aide | -| {"--version"} | `-v` | Afficher le numéro de version | -| {"--print-logs"} | | Afficher les logs sur stderr | -| {"--log-level"} | | Niveau de log (DEBUG, INFO, WARN, ERROR) | - ---- - -## Variables d'environnement - -OpenCode peut être configuré à l'aide de variables d'environnement. - -| Variables | Type | Description | -| ------------------------------------- | ------- | --------------------------------------------------------------------------------- | -| `OPENCODE_AUTO_SHARE` | booléen | Partager automatiquement des sessions | -| `OPENCODE_GIT_BASH_PATH` | chaîne | Chemin vers l'exécutable Git Bash sur Windows | -| `OPENCODE_CONFIG` | chaîne | Chemin d'accès au fichier de configuration | -| `OPENCODE_TUI_CONFIG` | chaîne | Chemin d'accès au fichier de configuration TUI | -| `OPENCODE_CONFIG_DIR` | chaîne | Chemin d'accès au répertoire de configuration | -| `OPENCODE_CONFIG_CONTENT` | chaîne | Contenu de configuration JSON en ligne | -| `OPENCODE_DISABLE_AUTOUPDATE` | booléen | Désactiver les vérifications automatiques des mises à jour | -| `OPENCODE_DISABLE_PRUNE` | booléen | Désactiver le nettoyage des anciennes données | -| `OPENCODE_DISABLE_TERMINAL_TITLE` | booléen | Désactiver les mises à jour automatiques des titres du terminal | -| `OPENCODE_PERMISSION` | chaîne | Configuration des autorisations JSON intégrées | -| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | booléen | Désactiver les plugins par défaut | -| `OPENCODE_DISABLE_LSP_DOWNLOAD` | booléen | Désactiver les téléchargements automatiques du serveur LSP | -| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | booléen | Activer les modèles expérimentaux | -| `OPENCODE_DISABLE_AUTOCOMPACT` | booléen | Désactiver le compactage automatique du contexte | -| `OPENCODE_DISABLE_CLAUDE_CODE` | booléen | Désactiver la lecture de `.claude` (prompt + compétences) | -| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | booléen | Désactiver la lecture `~/.claude/CLAUDE.md` | -| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | booléen | Désactiver le chargement de `.claude/skills` | -| `OPENCODE_DISABLE_MODELS_FETCH` | booléen | Désactiver la récupération de modèles à partir de sources distantes | -| `OPENCODE_FAKE_VCS` | chaîne | Faux fournisseur VCS à des fins de test | -| `OPENCODE_CLIENT` | chaîne | Identifiant du client (par défaut `cli`) | -| `OPENCODE_ENABLE_EXA` | booléen | Activer les outils de recherche Web Exa | -| `OPENCODE_SERVER_PASSWORD` | chaîne | Activer l'authentification de base pour `serve`/`web` | -| `OPENCODE_SERVER_USERNAME` | chaîne | Remplacer le nom d'utilisateur d'authentification de base (par défaut `opencode`) | -| `OPENCODE_MODELS_URL` | chaîne | URL personnalisé pour récupérer la configuration des modèles | - ---- - -### Expérimental - -Ces variables d'environnement activent des fonctionnalités expérimentales qui peuvent être modifiées ou supprimées. - -| Variables | Type | Description | -| ----------------------------------------------- | ------- | --------------------------------------------------------------- | -| `OPENCODE_EXPERIMENTAL` | booléen | Activer les fonctionnalités expérimentales du drapeau global | -| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | booléen | Activer la découverte d'icônes | -| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | booléen | Désactiver la copie lors de la sélection dans TUI | -| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | numéro | Délai d'expiration par défaut pour les commandes bash en ms | -| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | numéro | Nombre maximum de jetons de sortie pour les réponses LLM | -| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | booléen | Activer l'observateur de fichiers pour l'ensemble du répertoire | -| `OPENCODE_EXPERIMENTAL_OXFMT` | booléen | Activer le formateur oxfmt | -| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | booléen | Activer l'outil expérimental LSP | -| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | booléen | Désactiver l'observateur de fichiers | -| `OPENCODE_EXPERIMENTAL_EXA` | booléen | Activer les fonctionnalités Exa expérimentales | -| `OPENCODE_EXPERIMENTAL_LSP_TY` | booléen | Activer TY LSP pour les fichiers python | -| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | booléen | Activer le mode plan | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | booléen | Activer les tâches de sous-agents en arrière-plan | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | booléen | Activer le système d'événements expérimental | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | booléen | Activer le chemin de requête LLM natif | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | booléen | Activer l'exécution parallèle de la recherche web | -| `OPENCODE_EXPERIMENTAL_SCOUT` | booléen | Activer le sous-agent Scout | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | booléen | Activer la prise en charge des espaces de travail | diff --git a/packages/web/src/content/docs/fr/commands.mdx b/packages/web/src/content/docs/fr/commands.mdx deleted file mode 100644 index 71e03342e1..0000000000 --- a/packages/web/src/content/docs/fr/commands.mdx +++ /dev/null @@ -1,322 +0,0 @@ ---- -title: Commandes -description: Créez des commandes personnalisées pour les tâches répétitives. ---- - -Les commandes personnalisées vous permettent de spécifier un prompt que vous souhaitez exécuter lorsque cette commande est exécutée dans le TUI. - -```bash frame="none" -/my-command -``` - -Les commandes personnalisées s'ajoutent aux commandes intégrées telles que `/init`, `/undo`, `/redo`, `/share`, `/help`. [En savoir plus](/docs/tui#commands). - ---- - -## Créer des fichiers de commandes - -Créez des fichiers markdown dans le répertoire `commands/` pour définir des commandes personnalisées. - -Créez `.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. -``` - -Le frontmatter définit les propriétés de la commande. Le contenu devient le modèle (template). - -Utilisez la commande en tapant `/` suivi du nom de la commande. - -```bash frame="none" -"/test" -``` - ---- - -## Configuration - -Vous pouvez ajouter des commandes personnalisées via la configuration OpenCode ou en créant des fichiers markdown dans le répertoire `commands/`. - ---- - -### JSON - -Utilisez l'option `command` dans votre 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" - } - } -} -``` - -Vous pouvez maintenant exécuter cette commande dans le TUI : - -```bash frame="none" -/test -``` - ---- - -### Markdown - -Vous pouvez également définir des commandes à l'aide de fichiers markdown. Placez-les dans : - -- Global : `~/.config/opencode/commands/` -- Par projet : `.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. -``` - -Le nom du fichier markdown devient le nom de la commande. Par exemple, `test.md` permet d'exécuter : - -```bash frame="none" -/test -``` - ---- - -## Configuration rapide - -Les prompts pour les commandes personnalisées prennent en charge plusieurs espaces réservés et syntaxes spéciaux. - ---- - -### Arguments - -Transmettez les arguments aux commandes à l’aide de l’espace réservé `$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. -``` - -Exécutez la commande avec des arguments : - -```bash frame="none" -/component Button -``` - -Et `$ARGUMENTS` sera remplacé par `Button`. - -Vous pouvez également accéder à des arguments individuels à l'aide de paramètres de position : - -- `$1` - Premier argument -- `$2` - Deuxième argument -- `$3` - Troisième argument -- Et ainsi de suite... - -Par exemple: - -```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 -``` - -Exécutez la commande : - -```bash frame="none" -/create-file config.json src "{ \"key\": \"value\" }" -``` - -Celui-ci remplace : - -- `$1` avec `config.json` -- `$2` avec `src` -- `$3` avec `{ "key": "value" }` - ---- - -### Sortie du shell - -Utilisez _!`command`_ pour injecter la sortie [bash command](/docs/tui#bash-commands) dans votre prompt. - -Par exemple, pour créer une commande personnalisée qui analyse la couverture des tests : - -```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. -``` - -Ou pour consulter les modifications récentes : - -```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. -``` - -Les commandes s'exécutent dans le répertoire racine de votre projet et leur sortie fait partie du prompt. - ---- - -### Références de fichiers - -Incluez les fichiers dans votre commande en utilisant `@` suivi du nom du fichier. - -```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. -``` - -Le contenu du fichier est automatiquement inclus dans le prompt. - ---- - -## Options - -Examinons les options de configuration en détail. - ---- - -### Template - -L'option `template` définit le prompt qui sera envoyé au LLM lors de l'exécution de la commande. - -```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." - } - } -} -``` - -Il s'agit d'une option de configuration **obligatoire**. - ---- - -### Description - -Utilisez l'option `description` pour fournir une brève description de ce que fait la commande. - -```json title="opencode.json" -{ - "command": { - "test": { - "description": "Run tests with coverage" - } - } -} -``` - -Ceci est affiché comme description dans le TUI lorsque vous tapez la commande. - ---- - -### Agent - -Utilisez la configuration `agent` pour spécifier éventuellement quel [agent](/docs/agents) doit exécuter cette commande. -S'il s'agit d'un [subagent](/docs/agents/#subagents), la commande déclenchera un appel de sous-agent par défaut. -Pour désactiver ce comportement, définissez `subtask` sur `false`. - -```json title="opencode.json" -{ - "command": { - "review": { - "agent": "plan" - } - } -} -``` - -Il s'agit d'une option de configuration **facultative**. S’il n’est pas spécifié, la valeur par défaut est votre agent actuel. - ---- - -### Sous-tâche - -Utilisez le booléen `subtask` pour forcer la commande à déclencher une invocation de [subagent](/docs/agents/#subagents). -Ceci est utile si vous souhaitez que la commande ne pollue pas votre contexte principal et **force** l'agent à agir en tant que sous-agent, -même si `mode` est défini sur `primary` dans la configuration [agent](/docs/agents). - -```json title="opencode.json" -{ - "command": { - "analyze": { - "subtask": true - } - } -} -``` - -Il s'agit d'une option de configuration **facultative**. - ---- - -### Modèle - -Utilisez la configuration `model` pour remplacer le modèle par défaut pour cette commande. - -```json title="opencode.json" -{ - "command": { - "analyze": { - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -Il s'agit d'une option de configuration **facultative**. - ---- - -## Commandes intégrées - -opencode comprend plusieurs commandes intégrées comme `/init`, `/undo`, `/redo`, `/share`, `/help` ; [en savoir plus](/docs/tui#commands). - -:::note -Les commandes personnalisées peuvent remplacer les commandes intégrées. -::: - -Si vous définissez une commande personnalisée portant le même nom, elle remplacera la commande intégrée. diff --git a/packages/web/src/content/docs/fr/config.mdx b/packages/web/src/content/docs/fr/config.mdx deleted file mode 100644 index f58b97aa5a..0000000000 --- a/packages/web/src/content/docs/fr/config.mdx +++ /dev/null @@ -1,686 +0,0 @@ ---- -title: Configuration -description: Utilisation de la configuration JSON OpenCode. ---- - -Vous pouvez configurer OpenCode à l'aide d'un fichier de configuration JSON. - ---- - -## Format - -OpenCode prend en charge les formats **JSON** et **JSONC** (JSON avec commentaires). - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-5", - "autoupdate": true, - "server": { - "port": 4096, - }, -} -``` - ---- - -## Emplacements - -Vous pouvez placer votre configuration à plusieurs emplacements différents et ils ont un -ordre de priorité différent. - -:::note -Les fichiers de configuration sont **fusionnés**, pas remplacés. -::: - -Les fichiers de configuration sont fusionnés et non remplacés. Les paramètres des emplacements de configuration suivants sont combinés. Les configurations ultérieures remplacent les précédentes uniquement en cas de clés en conflit. Les paramètres non conflictuels de toutes les configurations sont conservés. - -Par exemple, si votre configuration globale définit `autoupdate: true` et que la configuration de votre projet définit `model: "anthropic/claude-sonnet-4-5"`, la configuration finale inclura les deux paramètres. - ---- - -### Ordre de priorité - -Les sources de configuration sont chargées dans cet ordre (les sources ultérieures remplacent les précédentes) : - -1. **Configuration distante** (à partir de `.well-known/opencode`) - paramètres par défaut de l'organisation -2. **Configuration globale** (`~/.config/opencode/opencode.json`) - préférences utilisateur -3. **Configuration personnalisée** (`OPENCODE_CONFIG` env var) - remplacements personnalisés -4. **Configuration du projet** (`opencode.json` dans le projet) - paramètres spécifiques au projet -5. **Répertoires `.opencode`** - agents, commandes, plugins -6. **Configuration en ligne** (`OPENCODE_CONFIG_CONTENT` env var) - remplacements d'exécution - -Cela signifie que les configurations de projet peuvent remplacer les valeurs par défaut globales, et que les configurations globales peuvent remplacer les valeurs par défaut de l'organisation distante. - -:::note -Les répertoires `.opencode` et `~/.config/opencode` utilisent des **noms au pluriel** pour les sous-répertoires : `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` et `themes/`. Les noms singuliers (par exemple, `agent/`) sont également pris en charge pour une compatibilité ascendante. -::: - ---- - -### Configuration distante - -Les organisations peuvent fournir une configuration par défaut via le point de terminaison `.well-known/opencode`. Ceci est récupéré automatiquement lorsque vous vous authentifiez auprès d’un fournisseur qui le prend en charge. - -La configuration distante est chargée en premier, servant de couche de base. Toutes les autres sources de configuration (globales, projet) peuvent remplacer ces valeurs par défaut. - -Par exemple, si votre organisation fournit des serveurs MCP qui sont désactivés par défaut : - -```json title="Remote config from .well-known/opencode" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": false - } - } -} -``` - -Vous pouvez activer des serveurs spécifiques dans votre configuration locale : - -```json title="opencode.json" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - ---- - -### Globale - -Placez votre configuration globale OpenCode dans `~/.config/opencode/opencode.json`. Utilisez la configuration globale pour les préférences de l'utilisateur telles que les fournisseurs, les modèles et les autorisations. - -Pour les paramètres spécifiques à TUI, utilisez `~/.config/opencode/tui.json`. - -La configuration globale remplace les paramètres par défaut de l'organisation distante. - ---- - -### Par projet - -Ajoutez `opencode.json` à la racine de votre projet. La configuration du projet a la priorité la plus élevée parmi les fichiers de configuration standard : elle remplace les configurations globales et distantes. - -Pour les paramètres TUI spécifiques au projet, ajoutez `tui.json` à côté. - -:::tip -Placez la configuration spécifique au projet à la racine de votre projet. -::: - -Lorsque OpenCode démarre, il recherche un fichier de configuration dans le répertoire actuel ou remonte jusqu'au répertoire Git le plus proche. - -Il peut également être archivé en toute sécurité dans Git et utilise le même schéma que le schéma global. - ---- - -### Chemin personnalisé - -Spécifiez un chemin de fichier de configuration personnalisé à l'aide de la variable d'environnement `OPENCODE_CONFIG`. - -```bash -export OPENCODE_CONFIG=/path/to/my/custom-config.json -opencode run "Hello world" -``` - -La configuration personnalisée est chargée entre les configurations globales et celles du projet dans l'ordre de priorité. - ---- - -### Répertoire personnalisé - -Spécifiez un répertoire de configuration personnalisé à l'aide de `OPENCODE_CONFIG_DIR` variable d'environnement. Ce répertoire sera recherché pour les agents, les commandes, modes et plugins tout comme le répertoire standard `.opencode`, et devrait suivre la même structure. - -```bash -export OPENCODE_CONFIG_DIR=/path/to/my/config-directory -opencode run "Hello world" -``` - -Le répertoire personnalisé est chargé après les répertoires de configuration globale et `.opencode`, il **peut donc remplacer** leurs paramètres. - ---- - -## Schéma - -Le fichier de configuration a un schéma défini dans [**`opencode.ai/config.json`**](https://opencode.ai/config.json). - -La configuration TUI utilise [**`opencode.ai/tui.json`**](https://opencode.ai/tui.json). - -Votre éditeur doit être capable de valider et de compléter automatiquement en fonction du schéma. - ---- - -### TUI - -Utilisez un fichier dédié `tui.json` (ou `tui.jsonc`) pour les paramètres spécifiques à TUI. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": true - }, - "diff_style": "auto" -} -``` - -Utilisez `OPENCODE_TUI_CONFIG` pour pointer vers un fichier de configuration TUI personnalisé. - -Les anciennes clés `theme`, `keybinds` et `tui` dans `opencode.json` sont obsolètes et migrées automatiquement lorsque cela est possible. - -[En savoir plus sur l'utilisation du TUI ici](/docs/tui#configure). - ---- - -### Serveur - -Vous pouvez configurer les paramètres du serveur pour les commandes `opencode serve` et `opencode web` via l'option `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"] - } -} -``` - -Options disponibles : - -- `port` - Port d'écoute. -- `hostname` - Nom d'hôte d'écoute. Lorsque `mdns` est activé et qu'aucun nom d'hôte n'est défini, la valeur par défaut est `0.0.0.0`. -- `mdns` - Activer la découverte du service mDNS. Cela permet à d'autres appareils du réseau de découvrir votre serveur OpenCode. -- `mdnsDomain` - Nom de domaine personnalisé pour le service mDNS. La valeur par défaut est `opencode.local`. Utile pour exécuter plusieurs instances sur le même réseau. -- `cors` - Origines supplémentaires pour autoriser CORS lors de l'utilisation du serveur HTTP à partir d'un client basé sur un navigateur. Les valeurs doivent être des origines complètes (schéma + hôte + port facultatif), par exemple `https://app.example.com`. - -[En savoir plus sur le serveur ici](/docs/server). - ---- - -### Outils - -Vous pouvez gérer les outils qu'un LLM peut utiliser via l'option `tools`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "tools": { - "write": false, - "bash": false - } -} -``` - -[En savoir plus sur les outils ici](/docs/tools). - ---- - -### Modèles - -Vous pouvez configurer les fournisseurs et les modèles que vous souhaitez utiliser dans votre configuration OpenCode via les options `provider`, `model` et `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" -} -``` - -L'option `small_model` configure un modèle distinct pour les tâches légères comme la génération de titres. Par défaut, OpenCode essaie d'utiliser un modèle moins cher s'il est disponible auprès de votre fournisseur, sinon il revient à votre modèle principal. - -Les options du fournisseur peuvent inclure `timeout` et `setCacheKey` : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "timeout": 600000, - "setCacheKey": true - } - } - } -} -``` - -- `timeout` - Délai d'expiration de la demande en millisecondes (par défaut : 300 000). Réglez sur `false` pour désactiver. -- `setCacheKey` - Assurez-vous qu'une clé de cache est toujours définie pour le fournisseur désigné. - -Vous pouvez également configurer [modèles locaux](/docs/models#local). [En savoir plus](/docs/models). - ---- - -#### Options spécifiques au fournisseur - -Certains fournisseurs prennent en charge des options de configuration supplémentaires au-delà des paramètres génériques `timeout` et `apiKey`. - -##### Amazon Bedrock - -Amazon Bedrock prend en charge la configuration spécifique à 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` - Région AWS pour Bedrock (par défaut : `AWS_REGION` env var ou `us-east-1`) -- `profile` - Profil nommé AWS de `~/.aws/credentials` (par défaut : `AWS_PROFILE` env var) -- `endpoint` - Point de terminaison personnalisé URL pour les points de terminaison d'un VPC. Il s'agit d'un alias pour l'option générique `baseURL` utilisant la terminologie spécifique à AWS. Si les deux sont spécifiés, `endpoint` est prioritaire. - -:::note -Les jetons du porteur (`AWS_BEARER_TOKEN_BEDROCK` ou `/connect`) ont priorité sur l'authentification basée sur le profil. Voir [précédence d'authentification](/docs/providers#authentication-precedence) pour plus de détails. -::: - -[En savoir plus sur la configuration d'Amazon Bedrock](/docs/providers#amazon-bedrock). - ---- - -### Thèmes - -Définissez votre thème d'interface utilisateur dans `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - -[En savoir plus ici](/docs/themes). - ---- - -### Agents - -Vous pouvez configurer des agents spécialisés pour des tâches spécifiques via l'option `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, - }, - }, - }, -} -``` - -Vous pouvez également définir des agents à l'aide de fichiers markdown dans `~/.config/opencode/agents/` ou `.opencode/agents/`. [En savoir plus ici](/docs/agents). - ---- - -### Agent par défaut - -Vous pouvez définir l'agent par défaut à l'aide de l'option `default_agent`. Ceci détermine quel agent est utilisé lorsqu'aucun n'est explicitement spécifié. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "default_agent": "plan" -} -``` - -L'agent par défaut doit être un agent principal (et non un sous-agent). Il peut s'agir d'un agent intégré tel que `"build"` ou `"plan"`, ou d'un [agent personnalisé](/docs/agents) que vous avez défini. Si l'agent spécifié n'existe pas ou est un sous-agent, OpenCode reviendra à `"build"` avec un avertissement. - -Ce paramètre s'applique à toutes les interfaces : TUI, CLI (`opencode run`), application de bureau et GitHub Action. - ---- - -### Partage - -Vous pouvez configurer la fonctionnalité [share](/docs/share) via l'option `share`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - -Elle accepte : - -- `"manual"` – Autoriser le partage manuel via des commandes (par défaut) -- `"auto"` – Partager automatiquement de nouvelles conversations -- `"disabled"` – Désactiver complètement le partage - -Par défaut, le partage est défini en mode manuel où vous devez partager explicitement les conversations à l'aide de la commande `/share`. - ---- - -### Commandes - -Vous pouvez configurer des commandes personnalisées pour les tâches répétitives via l'option `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", - }, - }, -} -``` - -Vous pouvez également définir des commandes à l'aide de fichiers markdown dans `~/.config/opencode/commands/` ou `.opencode/commands/`. [En savoir plus ici](/docs/commands). - ---- - -### Raccourcis clavier - -Personnalisez les raccourcis clavier dans `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": {} -} -``` - -[En savoir plus ici](/docs/keybinds). - ---- - -### Mise à jour automatique - -OpenCode téléchargera automatiquement toutes les nouvelles mises à jour au démarrage. Vous pouvez désactiver cela avec l'option `autoupdate`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "autoupdate": false -} -``` - -Si vous ne souhaitez pas de mises à jour mais souhaitez être averti lorsqu'une nouvelle version est disponible, définissez `autoupdate` sur `"notify"`. -Notez que cela ne fonctionne que s'il n'a pas été installé à l'aide d'un gestionnaire de packages tel que Homebrew. - ---- - -### Formateurs - -Vous pouvez configurer les formateurs de code via l'option `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"] - } - } -} -``` - -[En savoir plus sur les formateurs ici](/docs/formatters). - ---- - -### Autorisations - -Par défaut, opencode **autorise toutes les opérations** sans nécessiter d'approbation explicite. Vous pouvez modifier cela en utilisant l'option `permission`. - -Par exemple, pour garantir que les outils `edit` et `bash` nécessitent l'approbation de l'utilisateur : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "ask", - "bash": "ask" - } -} -``` - -[En savoir plus sur les autorisations ici](/docs/permissions). - ---- - -### Compactage - -Vous pouvez contrôler le comportement de compactage du contexte via l'option `compaction`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "compaction": { - "auto": true, - "prune": false, - "reserved": 10000 - } -} -``` - -- `auto` - Compacte automatiquement la session lorsque le contexte est plein (par défaut : `true`). -- `prune` - Supprimez les anciennes sorties de l'outil pour économiser des tokens (par défaut : `false`). -- `reserved` - Tampon de jetons pour le compactage. Laisse suffisamment de marge pour éviter le débordement lors du compactage. - ---- - -### Observateur - -Vous pouvez configurer les modèles d'ignorance de l'observateur de fichiers via l'option `watcher`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "watcher": { - "ignore": ["node_modules/**", "dist/**", ".git/**"] - } -} -``` - -Les modèles suivent la syntaxe glob. Utilisez ceci pour exclure les répertoires bruyants de la surveillance des fichiers. - ---- - -### Serveurs MCP - -Vous pouvez configurer les serveurs MCP que vous souhaitez utiliser via l'option `mcp`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": {} -} -``` - -[En savoir plus ici](/docs/mcp-servers). - ---- - -### Extensions - -[Plugins](/docs/plugins) étendent OpenCode avec des outils, des hooks et des intégrations personnalisés. - -Placez les fichiers du plugin dans `.opencode/plugins/` ou `~/.config/opencode/plugins/`. Vous pouvez également charger des plugins depuis npm via l'option `plugin`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "@my-org/custom-plugin"] -} -``` - -[En savoir plus ici](/docs/plugins). - ---- - -### Instructions - -Vous pouvez configurer les instructions pour le modèle que vous utilisez via l'option `instructions`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -Cela prend un tableau de chemins et de modèles globaux vers les fichiers d'instructions. [En savoir plus sur les règles ici](/docs/rules). - ---- - -### Fournisseurs désactivés - -Vous pouvez désactiver les fournisseurs chargés automatiquement via l'option `disabled_providers`. Ceci est utile lorsque vous souhaitez empêcher le chargement de certains fournisseurs même si leurs informations d'identification sont disponibles. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "disabled_providers": ["openai", "gemini"] -} -``` - -:::note -Le `disabled_providers` est prioritaire sur `enabled_providers`. -::: - -L'option `disabled_providers` accepte un tableau d'ID de fournisseur. Lorsqu'un fournisseur est désactivé : - -- Il ne sera pas chargé même si des variables d'environnement sont définies. -- Il ne sera pas chargé même si les clés API sont configurées via la commande `/connect`. -- Les modèles du fournisseur n'apparaîtront pas dans la liste de sélection des modèles. - ---- - -### Fournisseurs activés - -Vous pouvez spécifier une liste autorisée de fournisseurs via l'option `enabled_providers`. Une fois défini, seuls les fournisseurs spécifiés seront activés et tous les autres seront ignorés. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "enabled_providers": ["anthropic", "openai"] -} -``` - -Ceci est utile lorsque vous souhaitez restreindre OpenCode à l'utilisation de fournisseurs spécifiques plutôt que de les désactiver un par un. - -:::note -Le `disabled_providers` est prioritaire sur `enabled_providers`. -::: - -Si un fournisseur apparaît à la fois dans `enabled_providers` et `disabled_providers`, le `disabled_providers` est prioritaire pour la compatibilité ascendante. - ---- - -### Expérimental - -La clé `experimental` contient des options en cours de développement actif. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "experimental": {} -} -``` - -:::caution -Les options expérimentales ne sont pas stables. Elles peuvent changer ou être supprimées sans préavis. -::: - ---- - -## Variables - -Vous pouvez utiliser la substitution de variables dans vos fichiers de configuration pour référencer les variables d'environnement et le contenu des fichiers. - ---- - -### Variables d'environnement - -Utilisez `{env:VARIABLE_NAME}` pour remplacer les variables d'environnement : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "model": "{env:OPENCODE_MODEL}", - "provider": { - "anthropic": { - "models": {}, - "options": { - "apiKey": "{env:ANTHROPIC_API_KEY}" - } - } - } -} -``` - -Si la variable d'environnement n'est pas définie, elle sera remplacée par une chaîne vide. - ---- - -### Fichiers - -Utilisez `{file:path/to/file}` pour remplacer le contenu d'un fichier : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["./custom-instructions.md"], - "provider": { - "openai": { - "options": { - "apiKey": "{file:~/.secrets/openai-key}" - } - } - } -} -``` - -Les chemins de fichiers peuvent être : - -- Relatifs au répertoire du fichier de configuration -- Ou des chemins absolus commençant par `/` ou `~` - -Elles sont utiles pour : - -- Conserver les données sensibles telles que les clés API dans des fichiers séparés. -- Inclure de gros fichiers d'instructions sans encombrer votre configuration. -- Partager des extraits de configuration communs sur plusieurs fichiers de configuration. diff --git a/packages/web/src/content/docs/fr/custom-tools.mdx b/packages/web/src/content/docs/fr/custom-tools.mdx deleted file mode 100644 index 2753f0e322..0000000000 --- a/packages/web/src/content/docs/fr/custom-tools.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: Outils personnalisés -description: Créez des outils que le LLM peut appeler dans opencode. ---- - -Les outils personnalisés sont des fonctions que vous créez et que le LLM peut appeler pendant les conversations. Ils fonctionnent avec les [outils intégrés](/docs/tools) de opencode comme `read`, `write` et `bash`. - ---- - -## Création d'un outil - -Les outils sont définis sous forme de fichiers **TypeScript** ou **JavaScript**. Cependant, la définition de l'outil peut appeler des scripts écrits dans **n'importe quel langage** : TypeScript ou JavaScript n'est utilisé que pour la définition de l'outil elle-même. - ---- - -### Emplacement - -Ils peuvent être définis : - -- Localement en les plaçant dans le répertoire `.opencode/tools/` de votre projet. -- Ou globalement, en les plaçant dans `~/.config/opencode/tools/`. - ---- - -### Structure - -Le moyen le plus simple de créer des outils est d'utiliser l'assistant `tool()` qui fournit la sécurité et la validation de type. - -```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}` - }, -}) -``` - -Le **nom de fichier** devient le **nom de l'outil**. Ce qui précède crée un outil `database`. - ---- - -#### Plusieurs outils par fichier - -Vous pouvez également exporter plusieurs outils à partir d'un seul fichier. Chaque exportation devient **un outil distinct** portant le nom **`_`** : - -```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 - }, -}) -``` - -Cela crée deux outils : `math_add` et `math_multiply`. - ---- - -### Arguments - -Vous pouvez utiliser `tool.schema`, qui est simplement [Zod](https://zod.dev), pour définir les types d'arguments. - -```ts "tool.schema" -args: { - query: tool.schema.string().describe("SQL query to execute") -} -``` - -Vous pouvez également importer [Zod](https://zod.dev) directement et renvoyer un objet simple : - -```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" - }, -} -``` - ---- - -### Contexte - -Les outils reçoivent le contexte de la session en cours : - -```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}` - }, -}) -``` - -Utilisez `context.directory` pour le répertoire de travail de la session. -Utilisez `context.worktree` pour la racine du worktree git. - ---- - -## Exemples - -### Écrire un outil en Python - -Vous pouvez écrire vos outils dans le langage de votre choix. Voici un exemple qui ajoute deux nombres à l'aide de Python. - -Tout d'abord, créez l'outil en tant que script Python : - -```python title=".opencode/tools/add.py" -import sys - -a = int(sys.argv[1]) -b = int(sys.argv[2]) -print(a + b) -``` - -Créez ensuite la définition d'outil qui l'invoque : - -```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() - }, -}) -``` - -Ici, nous utilisons l'utilitaire [`Bun.$`](https://bun.com/docs/runtime/shell) pour exécuter le script Python. diff --git a/packages/web/src/content/docs/fr/ecosystem.mdx b/packages/web/src/content/docs/fr/ecosystem.mdx deleted file mode 100644 index d578017bf9..0000000000 --- a/packages/web/src/content/docs/fr/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Écosystème -description: Projets et intégrations construits avec OpenCode. ---- - -Une collection de projets communautaires construits sur OpenCode. - -:::note -Vous souhaitez ajouter votre projet lié à OpenCode à cette liste ? Soumettez une PR. -::: - -Vous pouvez également consulter [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) et [opencode.cafe](https://opencode.cafe), une communauté qui regroupe l'écosystème et la communauté. - ---- - -## Extensions - -| Nom | Description | -| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -| [opencode-daytona](https://github.com/daytonaio/daytona/tree/main/libs/opencode-plugin) | Exécute automatiquement des sessions OpenCode dans des sandbox Daytona isolées avec synchronisation git et prévisualisations en direct | -| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | Injecte automatiquement les en-têtes de session Helicone pour le regroupement des requêtes | -| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | Injecte automatiquement les types TypeScript/Svelte dans les lectures de fichiers avec des outils de recherche | -| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Utilise votre abonnement ChatGPT Plus/Pro au lieu de crédits API | -| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Utilise votre forfait Gemini existant au lieu de la facturation API | -| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | Utilise les modèles gratuits d'Antigravity au lieu de la facturation API | -| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Isolation de conteneur de développement multi-branches avec clones superficiels et ports attribués automatiquement | -| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Plugin OAuth Google Antigravity, avec prise en charge de la recherche Google et une gestion d'API plus robuste | -| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Optimise l'utilisation des jetons en élaguant les sorties d'outils obsolètes | -| [opencode-vibeguard](https://github.com/inkdust2021/opencode-vibeguard) | Masque les secrets/PII par des espaces réservés de style VibeGuard avant les appels LLM ; restaure localement | -| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Ajoute le support natif de la recherche web pour les fournisseurs pris en charge avec le style Google Grounding | -| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Permet aux agents IA d'exécuter des processus en arrière-plan dans un PTY et de leur envoyer des entrées interactives. | -| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Instructions pour les commandes shell non interactives - empêche les blocages dus aux opérations dépendantes du TTY | -| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Suit l'utilisation d'OpenCode avec Wakatime | -| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Nettoie les tableaux Markdown produits par les LLM | -| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | Édition Fast Apply, recherche de code WarpGrep et compaction de contexte via Morph | -| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Agents d'arrière-plan, outils LSP/AST/MCP pré-construits, agents sélectionnés, compatible Claude Code | -| [opencode-notificator](https://github.com/panta82/opencode-notificator) | Notifications de bureau et alertes sonores pour les sessions OpenCode | -| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | Notifications de bureau et alertes sonores pour les événements de permission, d'achèvement et d'erreur | -| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | Nommage automatique de session Zellij alimenté par l'IA basé sur le contexte OpenCode | -| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | Permet aux agents OpenCode le chargement différé de prompts à la demande avec découverte et injection de compétences | -| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Mémoire persistante entre les sessions utilisant Supermemory | -| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Révision de plan interactive avec annotation visuelle et partage privé/hors ligne | -| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Étend opencode /commands en un système d'orchestration puissant avec contrôle de flux granulaire | -| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Planifie des tâches récurrentes en utilisant launchd (Mac) ou systemd (Linux) avec la syntaxe cron | -| [micode](https://github.com/vtemian/micode) | Flux de travail structuré Brainstorming → Planification → Implémentation avec continuité de session | -| [octto](https://github.com/vtemian/octto) | Interface utilisateur de navigateur interactive pour le brainstorming IA avec des formulaires multi-questions | -| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Agents d'arrière-plan de style Claude Code avec délégation asynchrone et persistance du contexte | -| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | Notifications natives de l'OS pour OpenCode – sachez quand les tâches sont terminées | -| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | Harnais d'orchestration multi-agents groupé – 16 composants, une installation | -| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | Worktrees git sans friction pour OpenCode | -| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | Tracez et déboguez vos agents IA avec Sentry AI Monitoring | - ---- - -## Projets - -| Nom | Description | -| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | -| [kimaki](https://github.com/remorses/kimaki) | Bot Discord pour contrôler les sessions OpenCode, construit sur le SDK | -| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Plugin Neovim pour des prompts conscients de l'éditeur, construit sur l'API | -| [portal](https://github.com/hosenur/portal) | Interface Web mobile-first pour OpenCode via Tailscale/VPN | -| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | Modèle pour créer des plugins OpenCode | -| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Frontend Neovim pour opencode - un agent de codage IA basé sur terminal | -| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Fournisseur Vercel AI SDK pour utiliser OpenCode via @opencode-ai/sdk | -| [OpenChamber](https://github.com/btriapitsyn/openchamber) | Application Web / Bureau et extension VS Code pour OpenCode | -| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Plugin Obsidian qui intègre OpenCode dans l'interface d'Obsidian | -| [OpenWork](https://github.com/different-ai/openwork) | Une alternative open-source à Claude Cowork, propulsée par OpenCode | -| [ocx](https://github.com/kdcokenny/ocx) | Gestionnaire d'extensions OpenCode avec profils portables et isolés. | -| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | Application client Bureau, Web, Mobile et Distante pour OpenCode | - ---- - -## Agents - -| Nom | Description | -| ----------------------------------------------------------------- | ---------------------------------------------------------------------- | -| [Agentic](https://github.com/Cluster444/agentic) | Agents IA modulaires et commandes pour un développement structuré | -| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Configs, prompts, agents et plugins pour des flux de travail améliorés | diff --git a/packages/web/src/content/docs/fr/enterprise.mdx b/packages/web/src/content/docs/fr/enterprise.mdx deleted file mode 100644 index 659fc3e7cc..0000000000 --- a/packages/web/src/content/docs/fr/enterprise.mdx +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: Entreprise -description: Utiliser OpenCode en toute sécurité dans votre organisation. ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -OpenCode Enterprise est destiné aux organisations qui souhaitent s'assurer que leur code et leurs données ne quittent jamais leur infrastructure. Cela est possible grâce à une configuration centralisée qui s'intègre à votre SSO et à votre passerelle IA interne. - -:::note -OpenCode ne stocke aucune de vos données de code ou de contexte. -::: - -Pour démarrer avec OpenCode Enterprise : - -1. Faites un essai en interne avec votre équipe. -2. **Contactez-nous** pour discuter des options de tarification et de mise en œuvre. - ---- - -## Essai - -OpenCode est open source et ne stocke aucune de vos données de code ou de contexte, vos développeurs peuvent donc simplement [commencer ](/docs/) et effectuer un essai. - ---- - -### Traitement des données - -**OpenCode ne stocke pas votre code ni vos données contextuelles.** Tous les traitements s'effectuent localement ou via des appels API directs à votre fournisseur d'IA. - -Cela signifie que tant que vous faites appel à un fournisseur de confiance ou à une passerelle IA, vous pouvez utiliser OpenCode en toute sécurité. - -La seule mise en garde ici concerne la fonctionnalité facultative `/share`. - ---- - -#### Partager des conversations - -Si un utilisateur active la fonctionnalité `/share`, la conversation et les données qui y sont associées sont envoyées au service que nous utilisons pour héberger ces pages de partage sur opencode.ai. - -Les données sont actuellement servies via le réseau périphérique de notre CDN et sont mises en cache en périphérie, à proximité de vos utilisateurs. - -Nous vous recommandons de désactiver cette option pour votre essai. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -[En savoir plus sur le partage](/docs/share). - ---- - -### Propriété du code - -**Vous possédez tout le code produit par OpenCode.** Il n'y a aucune restriction de licence ni revendication de propriété. - ---- - -## Tarifs - -Nous utilisons un modèle par siège pour OpenCode Enterprise. Si vous disposez de votre propre passerelle LLM, nous ne facturons pas les jetons utilisés. Pour plus de détails sur les options de tarification et de mise en œuvre, **contactez-nous**. - ---- - -## Déploiement - -Une fois que vous avez terminé votre essai et que vous êtes prêt à utiliser OpenCode à votre organisation, vous pouvez **nous contacter** pour discuter des options de tarification et de mise en œuvre. - ---- - -### Configuration centrale - -Nous pouvons configurer OpenCode pour utiliser une seule configuration centrale pour l'ensemble de votre organisation. - -Cette configuration centralisée peut s'intégrer à votre fournisseur SSO et garantit que tous les utilisateurs accèdent uniquement à votre passerelle IA interne. - ---- - -### Intégration SSO - -Grâce à la configuration centrale, OpenCode peut s'intégrer au fournisseur SSO de votre organisation pour l'authentification. - -Cela permet à OpenCode d'obtenir les informations d'identification de votre passerelle IA interne via votre système de gestion des identités existant. - ---- - -### Passerelle IA interne - -Avec la configuration centrale, OpenCode peut également être configuré pour utiliser uniquement votre passerelle IA interne. - -Vous pouvez également désactiver tous les autres fournisseurs d'IA, en vous assurant que toutes les demandes transitent par l'infrastructure approuvée de votre organisation. - ---- - -### Auto-hébergement - -Bien que nous vous recommandons de désactiver les pages de partage pour garantir que vos données ne quittent jamais votre organisation, nous pouvons également vous aider à les auto-héberger sur votre infrastructure. - -Ceci est actuellement sur notre feuille de route. Si vous êtes intéressé, **faites-le-nous savoir**. - ---- - -## FAQ - -

-Qu’est-ce que OpenCode Entreprise ? - -OpenCode Enterprise est destiné aux organisations qui souhaitent s'assurer que leur code et leurs données ne quittent jamais leur infrastructure. Il peut le faire en utilisant une configuration centralisée qui s'intègre à votre SSO et à votre passerelle IA interne. - -
- -
-Comment démarrer avec OpenCode Enterprise ? - -Commencez simplement par un essai interne avec votre équipe. OpenCode par défaut ne stocke pas votre code ni vos données contextuelles, ce qui facilite le démarrage. - -Ensuite, **contactez-nous** pour discuter des options de tarification et de mise en œuvre. - -
- -
-Comment fonctionne la tarification d'entreprise ? - -Nous proposons des tarifs d'entreprise par siège. Si vous disposez de votre propre passerelle LLM, nous ne facturons pas les jetons utilisés. Pour plus de détails, **contactez-nous** pour un devis personnalisé basé sur les besoins de votre organisation. - -
- -
-Mes données sont-elles sécurisées avec OpenCode Enterprise ? - -Oui. OpenCode ne stocke pas votre code ni vos données contextuelles. Tout le traitement s'effectue localement ou via des appels API directs à votre fournisseur d'IA. Grâce à la configuration centrale et à l'intégration SSO, vos données restent sécurisées au sein de l'infrastructure de votre organisation. - -
- -
-Pouvons-nous utiliser notre propre registre privé NPM ? - -OpenCode prend en charge les registres npm privés via la prise en charge native des fichiers `.npmrc` de Bun. Si votre organisation utilise un registre privé, tel que JFrog Artifactory, Nexus ou similaire, assurez-vous que les développeurs sont authentifiés avant d'exécuter OpenCode. - -Pour configurer l'authentification avec votre registre privé : - -```bash -npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/ -``` - -Cela crée `~/.npmrc` avec les détails d'authentification. OpenCode le détectera automatiquement. - -:::caution -Vous devez être connecté au registre privé avant d'exécuter OpenCode. -::: - -Alternativement, vous pouvez configurer manuellement un fichier `.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} -``` - -Les développeurs doivent être connectés au registre privé avant d'exécuter OpenCode pour garantir que les packages peuvent être installés à partir du registre de votre entreprise. - -
diff --git a/packages/web/src/content/docs/fr/formatters.mdx b/packages/web/src/content/docs/fr/formatters.mdx deleted file mode 100644 index 96b5911efe..0000000000 --- a/packages/web/src/content/docs/fr/formatters.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: Formateurs -description: OpenCode utilise des formateurs spécifiques au langage. ---- - -OpenCode formate automatiquement les fichiers après leur écriture ou leur modification à l'aide de formateurs spécifiques au langage. Cela garantit que le code généré suit les styles de code de votre projet. - ---- - -## Formateurs intégrés - -OpenCode est livré avec plusieurs formateurs intégrés pour les langages et frameworks populaires. Vous trouverez ci-dessous une liste des formateurs, des extensions de fichiers prises en charge et des commandes ou options de configuration dont il a besoin. - -| Formateur | Extensions | Prérequis | -| -------------------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | -| gofmt | .go | Commande `gofmt` disponible | -| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | Commande `mix` disponible | -| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml et [plus](https://prettier.io/docs/en/index.html) | Dépendance `prettier` dans `package.json` | -| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml et [plus](https://biomejs.dev/) | Fichier de configuration `biome.json(c)` | -| zig | .zig, .zon | Commande `zig` disponible | -| clang-format | .c, .cpp, .h, .hpp, .ino et [plus](https://clang.llvm.org/docs/ClangFormat.html) | Fichier de configuration `.clang-format` | -| ktlint | .kt, .kts | Commande `ktlint` disponible | -| ruff | .py, .pyi | Commande `ruff` disponible avec config | -| rustfmt | .rs | Commande `rustfmt` disponible | -| cargofmt | .rs | Commande `cargo fmt` disponible | -| uv | .py, .pyi | Commande `uv` disponible | -| rubocop | .rb, .rake, .gemspec, .ru | Commande `rubocop` disponible | -| standardrb | .rb, .rake, .gemspec, .ru | Commande `standardrb` disponible | -| htmlbeautifier | .erb, .html.erb | Commande `htmlbeautifier` disponible | -| air | .R | Commande `air` disponible | -| dart | .dart | Commande `dart` disponible | -| dfmt | .d | Commande `dfmt` disponible | -| ocamlformat | .ml, .mli | Commande `ocamlformat` disponible et fichier de configuration `.ocamlformat` | -| terraform | .tf, .tfvars | Commande `terraform` disponible | -| gleam | .gleam | Commande `gleam` disponible | -| nixfmt | .nix | Commande `nixfmt` disponible | -| shfmt | .sh, .bash | Commande `shfmt` disponible | -| pint | .php | Dépendance `laravel/pint` dans `composer.json` | -| oxfmt (expérimental) | .js, .jsx, .ts, .tsx | Dépendance `oxfmt` dans `package.json` et un [flag de variable d'environnement expérimental](/docs/cli/#experimental) | -| ormolu | .hs | Commande `ormolu` disponible | - -Ainsi, si votre projet a `prettier` dans votre `package.json`, OpenCode l'utilisera automatiquement. - ---- - -## Comment ça marche - -Lorsque OpenCode écrit ou modifie un fichier, il : - -1. Vérifie l'extension du fichier par rapport à tous les formateurs activés. -2. Exécute la commande de formatage appropriée sur le fichier. -3. Applique automatiquement les modifications de formatage. - -Ce processus se déroule en arrière-plan, garantissant que vos styles de code sont conservés sans aucune étape manuelle. - ---- - -## Configuration - -Vous pouvez personnaliser les formateurs via la section `formatter` de votre configuration OpenCode. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "formatter": {} -} -``` - -Chaque configuration du formateur prend en charge les éléments suivants : - -| Propriété | Type | Description | -| ------------- | -------- | -------------------------------------------------------------------- | -| `disabled` | booléen | Définissez ceci sur `true` pour désactiver le formateur | -| `command` | chaîne[] | La commande à exécuter pour le formatage | -| `environment` | objet | Variables d'environnement à définir lors de l'exécution du formateur | -| `extensions` | chaîne[] | Extensions de fichiers que ce formateur doit gérer | - -Regardons quelques exemples. - ---- - -### Désactivation des formateurs - -Pour désactiver **tous** les formateurs globalement, définissez `formatter` sur `false` : - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": false -} -``` - -Pour désactiver un formateur **spécifique**, définissez `disabled` sur `true` : - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": { - "prettier": { - "disabled": true - } - } -} -``` - ---- - -### Formateurs personnalisés - -Vous pouvez remplacer les formateurs intégrés ou en ajouter de nouveaux en spécifiant la commande, les variables d'environnement et les extensions de fichier : - -```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"] - } - } -} -``` - -L'espace réservé **`$FILE`** dans la commande sera remplacé par le chemin d'accès au fichier en cours de formatage. diff --git a/packages/web/src/content/docs/fr/github.mdx b/packages/web/src/content/docs/fr/github.mdx deleted file mode 100644 index 968ae4d458..0000000000 --- a/packages/web/src/content/docs/fr/github.mdx +++ /dev/null @@ -1,322 +0,0 @@ ---- -title: GitHub -description: Utilisez OpenCode dans les issues et les pull-requests GitHub. ---- - -OpenCode s'intègre à votre flux de travail GitHub. Mentionnez `/opencode` ou `/oc` dans votre commentaire, et OpenCode exécutera des tâches dans votre runner GitHub Actions. - ---- - -## Fonctionnalités - -- **Triage des issues** : demandez à OpenCode d'examiner une issue et de vous l'expliquer. -- **Correction et implémentation** : demandez à OpenCode de résoudre un problème ou d'implémenter une fonctionnalité. Il travaillera dans une nouvelle branche et soumettra une PR avec tous les changements. -- **Sécurisé** : OpenCode s'exécute à l'intérieur de vos runners GitHub. - ---- - -## Installation - -Exécutez la commande suivante dans un projet qui se trouve dans un dépôt GitHub : - -```bash -opencode github install -``` - -Cela vous guidera dans l'installation de l'application GitHub, la création du workflow et la configuration des secrets. - ---- - -### Configuration manuelle - -Ou vous pouvez le configurer manuellement. - -1. **Installez l'application GitHub** - -Rendez-vous sur [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Assurez-vous qu'il est installé sur le dépôt cible. - -2. **Ajouter le workflow** - -Ajoutez le fichier de workflow suivant à `.github/workflows/opencode.yml` dans votre dépôt. Assurez-vous de définir les clés `model` appropriées et les clés API requises dans `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. **Stockez les clés API dans les secrets** - -Dans les **paramètres** de votre organisation ou de votre projet, développez **Secrets et variables** sur la gauche et sélectionnez **Actions**. Puis ajoutez les clés API requises. - ---- - -## Configuration - -- `model` : Le modèle à utiliser avec OpenCode. Prend le format `provider/model`. Ceci est **obligatoire**. -- `agent` : l'agent à utiliser. Doit être un agent primaire. Revient à `default_agent` à partir de la configuration ou à `"build"` s'il n'est pas trouvé. -- `share` : s'il faut partager la session OpenCode. La valeur par défaut est **true** pour les référentiels publics. -- `prompt` : prompt personnalisé facultatif pour remplacer le comportement par défaut. Utilisez-le pour personnaliser la façon dont OpenCode traite les demandes. -- `token` : jeton d'accès GitHub facultatif pour effectuer des opérations telles que la création de commentaires, le commit de modifications et l'ouverture de pull requests. Par défaut, OpenCode utilise le jeton d'accès à l'installation de l'application OpenCode GitHub, de sorte que les commits, les commentaires et les pull requests apparaissent comme provenant de l'application. - -Vous pouvez également utiliser le `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) intégré du runner GitHub Actions sans installer l'application OpenCode GitHub. Assurez-vous simplement d'accorder les autorisations requises dans votre workflow : - -```yaml -permissions: - id-token: write - contents: write - pull-requests: write - issues: write -``` - -Vous pouvez également utiliser un [jeton d'accès personnel](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) si vous préférez. - ---- - -## Événements supportés - -OpenCode peut être déclenché par les événements GitHub suivants : - -| Type d'événement | Déclenché par | Détails | -| ----------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `issue_comment` | Commentaire sur une issue ou une PR | Mentionnez `/opencode` ou `/oc` dans votre commentaire. OpenCode lit le contexte et peut créer des branches, ouvrir des PR ou répondre. | -| `pull_request_review_comment` | Commentaire sur des lignes de code spécifiques dans une PR | Mentionnez `/opencode` ou `/oc` lors de la révision du code. OpenCode reçoit le chemin du fichier, les numéros de ligne et le contexte de comparaison. | -| `issues` | Issue ouverte ou modifiée | Déclenchez automatiquement OpenCode lorsque des issues sont créées ou modifiées. Nécessite une entrée `prompt`. | -| `pull_request` | PR ouverte ou mise à jour | Déclenchez automatiquement OpenCode lorsque les PR sont ouvertes, synchronisées ou rouvertes. Utile pour les revues automatisées. | -| `schedule` | Planification basée sur Cron | Exécutez OpenCode selon un planning. Nécessite une entrée `prompt`. La sortie va aux journaux et aux PR (pas de commentaire sur les issues). | -| `workflow_dispatch` | Déclenchement manuel depuis l'interface utilisateur GitHub | Déclenchez OpenCode à la demande via l'onglet Actions. Nécessite une entrée `prompt`. La sortie va aux journaux et aux PR. | - -### Exemple de planification - -Exécutez OpenCode selon un planning pour effectuer des tâches automatisées : - -```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. -``` - -Pour les événements planifiés, l'entrée `prompt` est **obligatoire** car il n'y a aucun commentaire pour extraire les instructions. Les workflows planifiés s'exécutent sans contexte utilisateur pour vérifier les autorisations. Le workflow doit donc accorder `contents: write` et `pull-requests: write` si vous vous attendez à ce que OpenCode crée des branches ou des PR. - ---- - -### Exemple de Pull Request - -Examinez automatiquement les PR lorsqu'ils sont ouverts ou mis à jour : - -```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 -``` - -Pour les événements `pull_request`, si aucun `prompt` n'est fourni, OpenCode examine par défaut la pull request. - ---- - -### Exemple de Triage d'Issue - -Triez automatiquement les nouvelles issues. Cet exemple filtre les comptes datant de plus de 30 jours pour réduire le 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. -``` - -Pour les événements `issues`, l'entrée `prompt` est **obligatoire** car il n'y a aucun commentaire à partir duquel extraire les instructions. - ---- - -## Invites personnalisées - -Remplacez l'invite par défaut pour personnaliser le comportement de OpenCode pour votre 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 -``` - -Ceci est utile pour appliquer des critères d’évaluation spécifiques, des normes de codage ou des domaines d’intervention pertinents pour votre projet. - ---- - -## Exemples - -Voici quelques exemples de la façon dont vous pouvez utiliser OpenCode dans GitHub. - -- **Expliquer une issue** - -Ajoutez ce commentaire dans une issue GitHub. - -``` - /opencode explain this issue -``` - -OpenCode lira l'intégralité du fil de discussion, y compris tous les commentaires, et répondra avec une explication claire. - -- **Résoudre une issue** - -Dans une issue GitHub, dites : - -``` - /opencode fix this -``` - -Et OpenCode créera une nouvelle branche, mettra en œuvre les modifications et ouvrira une PR avec les modifications. - -- **Examinez les PR et apportez des modifications** - -Laissez le commentaire suivant sur une PR GitHub. - -``` - Delete the attachment from S3 when the note is removed /oc -``` - -OpenCode mettra en œuvre la modification demandée et la validera dans la même PR. - -- **Revue de lignes de code spécifiques** - -Laissez un commentaire directement sur les lignes de code dans l'onglet "Fichiers" de la PR. OpenCode détecte automatiquement le fichier, les numéros de ligne et le contexte de comparaison pour fournir des réponses précises. - -``` - [Comment on specific lines in Files tab] - /oc add error handling here -``` - -Lorsqu'il commente des lignes spécifiques, OpenCode reçoit : - -- Le fichier exact en cours d'examen -- Les lignes de code spécifiques -- Le contexte différentiel environnant -- Informations sur le numéro de ligne - -Cela permet des requêtes plus ciblées sans avoir besoin de spécifier manuellement les chemins de fichiers ou les numéros de ligne. diff --git a/packages/web/src/content/docs/fr/gitlab.mdx b/packages/web/src/content/docs/fr/gitlab.mdx deleted file mode 100644 index db4b1c1a4f..0000000000 --- a/packages/web/src/content/docs/fr/gitlab.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: GitLab -description: Utilisez OpenCode dans les issues GitLab et les merge requests. ---- - -OpenCode s'intègre à votre flux de travail GitLab via votre pipeline CI/CD GitLab ou avec GitLab Duo. - -Dans les deux cas, OpenCode fonctionnera sur vos runners GitLab. - ---- - -## GitLab CI - -OpenCode fonctionne dans un pipeline GitLab régulier. Vous pouvez l'intégrer dans un pipeline en tant que [composant CI](https://docs.gitlab.com/ee/ci/components/) - -Ici, nous utilisons un composant CI/CD créé par la communauté pour OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode). - ---- - -### Fonctionnalités - -- **Utiliser une configuration personnalisée par tâche** : configurez OpenCode avec un répertoire de configuration personnalisé, par exemple `./config/#custom-directory` pour activer ou désactiver la fonctionnalité pour chaque appel d'OpenCode. -- **Configuration minimale** : le composant CI configure OpenCode en arrière-plan, il vous suffit de créer la configuration OpenCode et le prompt initial. -- **Flexible** : le composant CI prend en charge plusieurs entrées pour personnaliser son comportement - ---- - -### Installation - -1. Stockez votre authentification OpenCode JSON en tant que variables d'environnement CI de type fichier sous **Paramètres** > **CI/CD** > **Variables**. Assurez-vous de les marquer comme « Masquées et protégées ». -2. Ajoutez ce qui suit à votre fichier `.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" - ``` - -Pour plus d'entrées et de cas d'utilisation [consultez la doc](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) pour ce composant. - ---- - -## GitLab Duo - -OpenCode s'intègre à votre flux de travail GitLab. -Mentionnez `@opencode` dans un commentaire et OpenCode exécutera les tâches au sein de votre pipeline CI GitLab. - ---- - -### Fonctionnalités - -- **Triage d'issues** : demandez à OpenCode d'examiner une issue et de vous l'expliquer. -- **Correction et implémentation** : demandez à OpenCode de résoudre une issue ou d'implémenter une fonctionnalité. - Cela créera une nouvelle branche et déclenchera une merge request avec les modifications. -- **Sécurisé** : OpenCode fonctionne sur vos runners GitLab. - ---- - -### Installation - -OpenCode s'exécute dans votre pipeline CI/CD GitLab. Voici ce dont vous aurez besoin pour le configurer : - -:::tip -Consultez la [**documentation GitLab**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) pour obtenir des instructions à jour. -::: - -1. Configurez votre environnement GitLab -2. Configurer CI/CD -3. Obtenez la clé API d'un fournisseur de modèles d'IA -4. Créer un compte de service -5. Configurer les variables CI/CD -6. Créez un fichier de configuration de flux, voici un exemple : - -
- - Configuration du flux - - ```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. - - - 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. - - " - - 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 - ``` - -
- -Vous pouvez vous référer aux [GitLab CLI agents docs](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) pour des instructions détaillées. - ---- - -### Exemples - -Voici quelques exemples de la façon dont vous pouvez utiliser OpenCode dans GitLab. - -:::tip -Vous pouvez configurer pour utiliser une phrase de déclenchement différente de `@opencode`. -::: - -- **Expliquer une issue** - -Ajoutez ce commentaire dans une issue GitLab. - -``` - @opencode explain this issue -``` - -OpenCode lira l'issue et répondra avec une explication claire. - -- **Résoudre une issue** - -Dans une issue GitLab, dites : - -``` - @opencode fix this -``` - -OpenCode créera une nouvelle branche, mettra en œuvre les modifications et ouvrira une merge request avec les modifications. - -- **Revue de merge request** - -Laissez le commentaire suivant sur une merge request GitLab. - -``` - @opencode review this merge request -``` - -OpenCode examinera la merge request et fournira des commentaires. diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx deleted file mode 100644 index 057f2a5207..0000000000 --- a/packages/web/src/content/docs/fr/go.mdx +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: Go -description: Abonnement à bas coût pour les modèles de codage ouverts. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Go est un abonnement à bas coût — **5 $ pour votre premier mois**, puis **10 $/mois** — qui vous donne un accès fiable aux modèles de codage ouverts populaires. - -Go fonctionne comme n'importe quel autre fournisseur dans OpenCode. Vous vous abonnez à OpenCode Go et obtenez votre clé d'API. C'est **totalement facultatif** et vous n'avez pas besoin de l'utiliser pour utiliser OpenCode. - -Il est conçu principalement pour les utilisateurs internationaux, avec des modèles hébergés aux États-Unis, dans l'UE et à Singapour pour un accès mondial stable. - ---- - -## Contexte - -Les modèles ouverts sont devenus vraiment performants. Ils atteignent désormais des performances proches de celles des modèles propriétaires pour les tâches de codage. Et comme de nombreux fournisseurs peuvent les proposer de manière compétitive, ils sont généralement beaucoup moins chers. - -Cependant, obtenir un accès fiable et à faible latence à ces modèles peut être difficile. Les fournisseurs varient en qualité et en disponibilité. - -:::tip -Nous avons testé un groupe sélectionné de modèles et de fournisseurs qui fonctionnent bien avec OpenCode. -::: - -Pour remédier à cela, nous avons fait plusieurs choses : - -1. Nous avons testé un groupe sélectionné de modèles ouverts et discuté avec leurs équipes de la meilleure façon de les exécuter. -2. Nous avons ensuite travaillé avec quelques fournisseurs pour nous assurer qu'ils étaient correctement servis. -3. Enfin, nous avons évalué les performances de la combinaison modèle/fournisseur et avons dressé une liste que nous nous sentons à l'aise de recommander. - -OpenCode Go vous donne accès à ces modèles pour **5 $ pour votre premier mois**, puis **10 $/mois**. - ---- - -## Comment ça marche - -OpenCode Go fonctionne comme n'importe quel autre fournisseur dans OpenCode. - -1. Vous vous connectez à **OpenCode Zen**, vous vous abonnez à Go et copiez votre clé d'API. -2. Vous exécutez la commande `/connect` dans la TUI, sélectionnez `OpenCode Go` et collez votre clé d'API. -3. Exécutez `/models` dans la TUI pour voir la liste des modèles disponibles via Go. - -:::note -Un seul membre par espace de travail peut s'abonner à OpenCode Go. -::: - -La liste actuelle des modèles comprend : - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -La liste des modèles peut changer au fur et à mesure que nous en testons et en ajoutons de nouveaux. - ---- - -## Limites d'utilisation - -OpenCode Go inclut les limites suivantes : - -- **Limite de 5 heures** — 12 $ d'utilisation -- **Limite hebdomadaire** — 30 $ d'utilisation -- **Limite mensuelle** — 60 $ d'utilisation - -Les limites sont définies en valeur monétaire (dollars). Cela signifie que votre nombre réel de requêtes dépend du modèle que vous utilisez. Les modèles moins chers comme DeepSeek V4 Flash permettent plus de requêtes, tandis que les modèles plus coûteux comme GLM-5.2 en permettent moins. - -Le tableau ci-dessous fournit une estimation du nombre de requêtes basée sur des modèles d'utilisation typiques de Go : - -| Model | requêtes par 5 heures | requêtes par semaine | requêtes par mois | -| ----------------- | --------------------- | -------------------- | ----------------- | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -Les estimations sont basées sur les schémas de requêtes moyens observés : - -- GLM-5.2/5.1 — 700 tokens en entrée, 52,000 en cache, 150 tokens en sortie par requête -- Kimi K2.7 Code/K2.6 — 870 tokens en entrée, 55,000 en cache, 200 tokens en sortie par requête -- DeepSeek V4 Pro — 750 tokens en entrée, 82,000 en cache, 290 tokens en sortie par requête -- DeepSeek V4 Flash — 790 tokens en entrée, 68,000 en cache, 280 tokens en sortie par requête -- MiniMax M3 — 510 tokens en entrée, 56,000 en cache, 190 tokens en sortie par requête -- MiniMax M2.7 — 300 tokens en entrée, 55,000 en cache, 125 tokens en sortie par requête -- Qwen3.7 Max — 420 tokens en entrée, 66,000 en cache, 200 tokens en sortie par requête -- Qwen3.7 Plus — 500 tokens en entrée, 57,000 en cache, 190 tokens en sortie par requête -- Qwen3.6 Plus — 500 tokens en entrée, 57,000 en cache, 190 tokens en sortie par requête -- MiMo-V2.5 — 830 tokens en entrée, 71,500 en cache, 295 tokens en sortie par requête -- MiMo-V2.5-Pro — 790 tokens en entrée, 86,000 en cache, 305 tokens en sortie par requête - -Les estimations sont également basées sur les prix suivants par 1M tokens : - -| Modèle | Input | Output | Cached Read | Cached Write | -| ---------------------------- | ----- | ------ | ----------- | ------------ | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -Vous pouvez suivre votre utilisation actuelle dans la **console**. - -:::tip -Si vous atteignez la limite d'utilisation, vous pouvez continuer à utiliser les modèles gratuits. -::: - -Les limites d'utilisation peuvent changer au fur et à mesure que nous tirons des enseignements des premières utilisations et des retours. - ---- - -### Utilisation au-delà des limites - -Si vous avez également des crédits sur votre solde Zen, vous pouvez activer l'option **Use balance** dans la console. Lorsqu'elle est activée, Go se rabattra sur votre solde Zen après que vous ayez atteint vos limites d'utilisation au lieu de bloquer les requêtes. - ---- - -## Points de terminaison - -Vous pouvez également accéder aux modèles Go via les points de terminaison d'API suivants. - -| Modèle | ID de modèle | Point de terminaison | Package AI SDK | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -L'[ID de modèle](/docs/config/#models) dans votre configuration OpenCode utilise le format `opencode-go/`. Par exemple, pour Kimi K2.7 Code, vous utiliseriez `opencode-go/kimi-k2.7-code` dans votre configuration. - ---- - -### Modèles - -Vous pouvez récupérer la liste complète des modèles disponibles et leurs métadonnées à partir de : - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## Confidentialité - -Cette offre est conçue avant tout pour les utilisateurs internationaux, avec des modèles hébergés aux US, dans l’EU et à Singapore afin d’assurer un accès mondial stable. Nos fournisseurs appliquent une politique de rétention zéro et n’utilisent pas vos données pour l’entraînement des modèles. - ---- - -## Objectifs - -Nous avons créé OpenCode Go pour : - -1. Rendre le codage par IA **accessible** à un plus grand nombre de personnes avec un abonnement à bas coût. -2. Fournir un accès **fiable** aux meilleurs modèles de codage ouverts. -3. Sélectionner des modèles qui sont **testés et évalués** pour une utilisation en tant qu'agent de codage. -4. N'avoir **aucun verrouillage exclusif** en vous permettant d'utiliser n'importe quel autre fournisseur avec OpenCode également. diff --git a/packages/web/src/content/docs/fr/ide.mdx b/packages/web/src/content/docs/fr/ide.mdx deleted file mode 100644 index fc0c526191..0000000000 --- a/packages/web/src/content/docs/fr/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: IDE -description: L'extension OpenCode pour VS Code, Cursor et autres IDE ---- - -OpenCode s'intègre à VS Code, Cursor ou tout IDE prenant en charge un terminal. Exécutez simplement `opencode` dans le terminal pour commencer. - ---- - -## Utilisation - -- **Lancement rapide** : utilisez `Cmd+Esc` (Mac) ou `Ctrl+Esc` (Windows/Linux) pour ouvrir OpenCode dans une vue de terminal divisée, ou focus sur une session de terminal existante si elle est déjà en cours d'exécution. -- **Nouvelle session** : utilisez `Cmd+Shift+Esc` (Mac) ou `Ctrl+Shift+Esc` (Windows/Linux) pour démarrer une nouvelle session de terminal OpenCode, même si elle est déjà ouverte. Vous pouvez également cliquer sur le bouton OpenCode dans l'interface utilisateur. -- **Contexte** : partagez automatiquement votre sélection ou onglet actuel avec OpenCode. -- **Raccourcis de référence de fichier** : utilisez `Cmd+Option+K` (Mac) ou `Alt+Ctrl+K` (Linux/Windows) pour insérer des références de fichier. Par exemple, `@File#L37-42`. - ---- - -## Installation - -Pour installer OpenCode sur VS Code et les forks populaires comme Cursor, Windsurf, VSCodium : - -1. Ouvrir VS Code -2. Ouvrez le terminal intégré -3. Exécutez `opencode` - l'extension s'installe automatiquement - -Si, d'un autre côté, vous souhaitez utiliser votre propre IDE lorsque vous exécutez `/editor` ou `/export` à partir du TUI, vous devrez définir `export EDITOR="code --wait"`. [En savoir plus](/docs/tui/#editor-setup). - ---- - -### Installation manuelle - -Recherchez **OpenCode** dans Extension Marketplace et cliquez sur **Installer**. - ---- - -### Dépannage - -Si l'extension ne parvient pas à s'installer automatiquement : - -- Assurez-vous que vous exécutez `opencode` dans le terminal intégré. -- Confirmez que la CLI de votre IDE est installée : - - Pour VS Code : commande `code` - - Pour Cursor : commande `cursor` - - Pour Windsurf : commande `windsurf` - - Pour VSCodium : commande `codium` - - Sinon, exécutez `Cmd+Shift+P` (Mac) ou `Ctrl+Shift+P` (Windows/Linux) et recherchez « Shell Command: Install 'code' command in PATH » (ou l'équivalent pour votre IDE) -- Assurez-vous que VS Code est autorisé à installer des extensions diff --git a/packages/web/src/content/docs/fr/index.mdx b/packages/web/src/content/docs/fr/index.mdx deleted file mode 100644 index 4f6b2f2a5b..0000000000 --- a/packages/web/src/content/docs/fr/index.mdx +++ /dev/null @@ -1,344 +0,0 @@ ---- -title: Introduction -description: Commencez avec OpenCode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" -import config from "../../../../config.mjs" -export const console = config.console - -[**OpenCode**](/) est un agent de codage d'IA open source. Il est disponible sous forme d'interface basée sur un terminal, d'application de bureau ou d'extension IDE. - -![OpenCode TUI avec le thème opencode](../../../assets/lander/screenshot.png) - -Commençons. - ---- - -#### Prérequis - -Pour utiliser OpenCode dans votre terminal, vous aurez besoin de : - -1. Un émulateur de terminal moderne comme : - - [WezTerm](https://wezterm.org), multiplateforme - - [Alacritty](https://alacritty.org), multiplateforme - - [Ghostty](https://ghostty.org), Linux et macOS - - [Kitty](https://sw.kovidgoyal.net/kitty/), Linux et macOS - -2. Clés API pour les fournisseurs de LLM que vous souhaitez utiliser. - ---- - -## Installation - -Le moyen le plus simple d'installer OpenCode est d'utiliser le script d'installation. - -```bash -curl -fsSL https://opencode.ai/install | bash -``` - -Vous pouvez également l'installer avec les commandes suivantes : - -- **Node.js** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **Via Homebrew sur macOS et Linux** - - ```bash - brew install anomalyco/tap/opencode - ``` - - > Nous vous recommandons d'utiliser le tap OpenCode pour les versions les plus récentes. La formule officielle `brew install opencode` est maintenue par l'équipe Homebrew et est mise à jour moins fréquemment. - -- **Via Paru sur Arch Linux** - - ```bash - sudo pacman -S opencode # Arch Linux (Stable) - paru -S opencode-bin # Arch Linux (Latest from AUR) - ``` - -#### Windows - -:::tip[Recommandé : utilisez WSL] -Pour une expérience optimale sur Windows, nous vous recommandons d'utiliser le [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). Il offre de meilleures performances et une compatibilité totale avec les fonctionnalités de OpenCode. -::: - -- **Via Chocolatey** - - ```bash - choco install opencode - ``` - -- **Via Scoop** - - ```bash - scoop install opencode - ``` - -- **Via NPM** - - ```bash - npm install -g opencode-ai - ``` - -- **Via Mise** - - ```bash - mise use -g github:anomalyco/opencode - ``` - -- **Via Docker** - - ```bash - docker run -it --rm ghcr.io/anomalyco/opencode - ``` - -Le support de l'installation de OpenCode sur Windows à l'aide de Bun est actuellement en cours de développement. - -Vous pouvez également récupérer le binaire dans les [Releases](https://github.com/anomalyco/opencode/releases). - ---- - -## Configuration - -Avec OpenCode, vous pouvez utiliser n'importe quel fournisseur de LLM en configurant ses clés API. - -Si vous débutez avec les fournisseurs de LLM, nous vous recommandons d'utiliser [OpenCode Zen](/docs/zen). -C'est une liste curée de modèles qui ont été testés et vérifiés par l'équipe OpenCode. - -1. Exécutez la commande `/connect` dans le TUI, sélectionnez opencode et allez sur [opencode.ai/auth](https://opencode.ai/auth). - - ```txt - /connect - ``` - -2. Connectez-vous, ajoutez vos informations de facturation et copiez votre clé API. - -3. Collez votre clé API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -Vous pouvez également sélectionner l'un des autres fournisseurs. [En savoir plus](/docs/providers#directory). - ---- - -## Initialisation - -Maintenant que vous avez configuré un fournisseur, vous pouvez accéder à un projet sur lequel vous voulez travailler. - -```bash -cd /path/to/project -``` - -Et exécutez OpenCode. - -```bash -opencode -``` - -Ensuite, initialisez OpenCode pour le projet en exécutant la commande suivante. - -```bash frame="none" -/init -``` - -Cela permettra à OpenCode d'analyser votre projet et de créer un fichier `AGENTS.md` à la racine du projet. - -:::tip -Vous devez valider le fichier `AGENTS.md` de votre projet dans Git. -::: - -Cela aide OpenCode à comprendre la structure du projet et les modèles de codage utilisés. - ---- - -## Utilisation - -Vous êtes maintenant prêt à utiliser OpenCode pour travailler sur votre projet. N'hésitez pas à lui demander n'importe quoi ! - -Si vous débutez dans l'utilisation d'un agent de codage IA, voici quelques exemples qui pourraient aider. - ---- - -### Poser des questions - -Vous pouvez demander à OpenCode de vous expliquer la base de code. - -:::tip -Utilisez la touche `@` pour effectuer une recherche floue de fichiers dans le projet. -::: - -```txt frame="none" "@packages/functions/src/api/index.ts" -How is authentication handled in @packages/functions/src/api/index.ts -``` - -Ceci est utile s'il y a une partie de la base de code sur laquelle vous n'avez pas travaillé. - ---- - -### Ajouter des fonctionnalités - -Vous pouvez demander à OpenCode d'ajouter de nouvelles fonctionnalités à votre projet. Cependant, nous recommandons d’abord de lui demander de créer un plan. - -1. **Créer un plan** - -OpenCode dispose d'un _Mode Plan_ qui désactive sa capacité à apporter des modifications et suggère plutôt _comment_ il implémentera la fonctionnalité. - -Accédez-y à l'aide de la touche **Tab**. Vous verrez un indicateur à cet effet dans le coin inférieur droit. - -```bash frame="none" title="Switch to Plan mode" - -``` - -Décrivons maintenant ce que nous voulons qu'il fasse. - -```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. -``` - -Vous souhaitez donner à OpenCode suffisamment de détails pour comprendre ce que vous voulez. Ça aide pour lui parler comme si vous parliez à un développeur junior de votre équipe. - -:::tip -Donnez à OpenCode beaucoup de contexte et d'exemples pour l'aider à comprendre ce que vous voulez. -::: - -2. **Itérer sur le plan** - -Une fois qu'il vous donne un plan, vous pouvez lui faire part de vos commentaires ou ajouter plus de détails. - -```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 -Glissez-déposez des images dans le terminal pour les ajouter à l'invite. -::: - -OpenCode peut scanner toutes les images que vous lui donnez et les ajouter à l'invite. Vous pouvez le faire en glissant et en déposant une image dans le terminal. - -3. **Créez la fonctionnalité** - -Une fois que vous vous sentez à l'aise avec le plan, revenez au _Mode Build_ en appuyant à nouveau sur la touche **Tab**. - -```bash frame="none" - -``` - -Et demandez-lui d'apporter les modifications. - -```bash frame="none" - Sounds good! Go ahead and make the changes. -``` - ---- - -### Apporter des modifications - -Pour des modifications plus simples, vous pouvez demander à OpenCode de construire directement sans avoir à revoir le plan au préalable. - -```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 -``` - -Vous devez fournir suffisamment de détails pour qu'OpenCode effectue les bonnes modifications. - ---- - -### Annuler les modifications - -Disons que vous demandez à OpenCode d'apporter quelques modifications. - -```txt frame="none" "@packages/functions/src/api/index.ts" -Can you refactor the function in @packages/functions/src/api/index.ts? -``` - -Mais vous réalisez que ce n’est pas ce que vous vouliez. Vous **pouvez annuler** les modifications à l'aide de la commande `/undo`. - -```bash frame="none" -/undo -``` - -OpenCode annulera désormais les modifications que vous avez apportées et affichera votre message d'origine encore. - -```txt frame="none" "@packages/functions/src/api/index.ts" -Can you refactor the function in @packages/functions/src/api/index.ts? -``` - -À partir de là, vous pouvez modifier l'invite et demander à OpenCode de réessayer. - -:::tip -Vous pouvez exécuter `/undo` plusieurs fois pour annuler plusieurs modifications. -::: - -Ou vous **pouvez refaire** les modifications à l'aide de la commande `/redo`. - -```bash frame="none" -/redo -``` - ---- - -## Partager - -Les conversations que vous avez avec OpenCode peuvent être [partagées avec votre équipe](/docs/share). - -```bash frame="none" -/share -``` - -Cela créera un lien vers la conversation en cours et le copiera dans votre presse-papiers. - -:::note -Les conversations ne sont pas partagées par défaut. -::: - -Voici un [exemple de conversation](https://opencode.ai/s/4XP1fce5) avec OpenCode. - ---- - -## Personnaliser - -Et c'est tout ! Vous êtes désormais un pro de l'utilisation de OpenCode. - -Pour vous l'approprier, nous vous recommandons de [choisir un thème](/docs/themes), [de personnaliser les raccourcis clavier](/docs/keybinds), de [configurer les formateurs de code](/docs/formatters), de [créer des commandes personnalisées](/docs/commands) ou de jouer avec la [OpenCode Config](/docs/config). diff --git a/packages/web/src/content/docs/fr/keybinds.mdx b/packages/web/src/content/docs/fr/keybinds.mdx deleted file mode 100644 index feb4ba37f6..0000000000 --- a/packages/web/src/content/docs/fr/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Raccourcis clavier -description: Personnalisez vos raccourcis clavier. ---- - -OpenCode a une liste de raccourcis clavier que vous pouvez personnaliser via la configuration OpenCode. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "h", - "display_thinking": "none" - } -} -``` - ---- - -## Touche Leader - -OpenCode utilise une touche `leader` pour la plupart des raccourcis clavier. Cela évite les conflits dans votre terminal. - -Par défaut, `ctrl+x` est la touche leader et la plupart des actions nécessitent que vous appuyiez d'abord sur la touche leader, puis sur le raccourci. Par exemple, pour démarrer une nouvelle session, appuyez d'abord sur `ctrl+x`, puis sur `n`. - -Vous n'avez pas besoin d'utiliser une touche leader pour vos raccourcis clavier, mais nous vous recommandons de le faire. - ---- - -## Désactiver le raccourci clavier - -Vous pouvez désactiver un raccourci clavier en ajoutant la clé à votre configuration avec la valeur `none`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "keybinds": { - "session_compact": "none" - } -} -``` - ---- - -## Raccourcis de saisie desktop - -Le champ de saisie de l'application de bureau OpenCode prend en charge les raccourcis courants de style Readline/Emacs pour l'édition de texte. Ceux-ci sont intégrés et actuellement non configurables via `opencode.json`. - -| Raccourci | Actions | -| --------- | --------------------------------------------------------- | -| `ctrl+a` | Déplacer au début de la ligne actuelle | -| `ctrl+e` | Aller à la fin de la ligne actuelle | -| `ctrl+b` | Reculer le curseur d'un caractère | -| `ctrl+f` | Avancer le curseur d'un caractère | -| `alt+b` | Reculer le curseur d'un mot | -| `alt+f` | Avancer le curseur d'un mot | -| `ctrl+d` | Supprimer le caractère sous le curseur | -| `ctrl+k` | Couper jusqu'à la fin de la ligne | -| `ctrl+u` | Couper jusqu'au début de la ligne | -| `ctrl+w` | Couper le mot précédent | -| `alt+d` | Couper le mot suivant | -| `ctrl+t` | Transposer les caractères | -| `ctrl+g` | Annuler les popovers/abandonner l'exécution de la réponse | - ---- - -## Maj+Entrée - -Certains terminaux n'envoient pas de touches de modification avec Entrée par défaut. Vous devrez peut-être configurer votre terminal pour envoyer `Shift+Enter` comme séquence d'échappement. - -### Windows Terminal - -Ouvrez votre `settings.json` à : - -``` -%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json -``` - -Ajoutez ceci au tableau `actions` de niveau racine : - -```json -"actions": [ - { - "command": { - "action": "sendInput", - "input": "\u001b[13;2u" - }, - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Ajoutez ceci au tableau `keybindings` de niveau racine : - -```json -"keybindings": [ - { - "keys": "shift+enter", - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Enregistrez le fichier et redémarrez le terminal Windows ou ouvrez un nouvel onglet. diff --git a/packages/web/src/content/docs/fr/lsp.mdx b/packages/web/src/content/docs/fr/lsp.mdx deleted file mode 100644 index 143361d9a9..0000000000 --- a/packages/web/src/content/docs/fr/lsp.mdx +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: Serveurs LSP -description: OpenCode s'intègre à vos serveurs LSP. ---- - -OpenCode peut s'intégrer aux serveurs Language Server Protocol (LSP) pour utiliser les diagnostics comme retour pour l'agent. - ---- - -## Serveurs intégrés - -OpenCode est livré avec plusieurs serveurs LSP intégrés pour les langages populaires : - -| Serveur LSP | Extensions | Prérequis | -| ------------------ | ------------------------------------------------------------------- | ----------------------------------------------------------------------- | -| astro | .astro | Installation automatique pour les projets Astro | -| bash | .sh, .bash, .zsh, .ksh | Installe automatiquement le serveur bash-language-server | -| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Installation automatique pour les projets C/C++ | -| csharp | .cs | `.NET SDK` installé | -| clojure-lsp | .clj, .cljs, .cljc, .edn | Commande `clojure-lsp` disponible | -| dart | .dart | Commande `dart` disponible | -| deno | .ts, .tsx, .js, .jsx, .mjs | Commande `deno` disponible (détection automatique deno.json/deno.jsonc) | -| elixir-ls | .ex, .ex | Commande `elixir` disponible | -| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | Dépendance `eslint` dans le projet | -| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` installé | -| gleam | .gleam | Commande `gleam` disponible | -| gopls | .go | Commande `go` disponible | -| hls | .hs, .lhs | Commande `haskell-language-server-wrapper` disponible | -| jdtls | .java | `Java SDK (version 21+)` installé | -| julials | .jl | `julia` et `LanguageServer.jl` installés | -| kotlin-ls | .kt, .kts | Installation automatique pour les projets Kotlin | -| lua-ls | .lua | Installation automatique pour les projets Lua | -| nixd | .nix | Commande `nixd` disponible | -| ocaml-lsp | .ml, .mli | Commande `ocamllsp` disponible | -| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | Dépendance `oxlint` dans le projet | -| php intelephense | .php | Installation automatique pour les projets PHP | -| prisma | .prisma | Commande `prisma` disponible | -| pyright | .py, .pyi | Dépendance `pyright` installée | -| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | Commandes `ruby` et `gem` disponibles | -| rust | .rs | Commande `rust-analyzer` disponible | -| sourcekit-lsp | .swift, .objc, .objcpp | `swift` installé (`xcode` sur macOS) | -| svelte | .svelte | Installation automatique pour les projets Svelte | -| terraform | .tf, .tfvars | Installation automatique à partir des versions GitHub | -| tinymist | .typ, .typc | Installation automatique à partir des versions GitHub | -| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | Dépendance `typescript` dans le projet | -| vue | .vue | Installation automatique pour les projets Vue | -| yaml-ls | .yaml, .yml | Installe automatiquement le serveur yaml-language-server de Red Hat | -| zls | .zig, .zon | Commande `zig` disponible | - -LSP est désactivé par défaut. Lorsqu'il est activé, les serveurs démarrent lorsqu'une des extensions de fichier ci-dessus est détectée et que les exigences sont remplies. - -:::note -Vous pouvez désactiver les téléchargements automatiques du serveur LSP en définissant la variable d'environnement `OPENCODE_DISABLE_LSP_DOWNLOAD` sur `true`. -::: - ---- - -## Comment ça marche - -Lorsque LSP est activé et qu'opencode ouvre un fichier, il : - -1. Vérifie l'extension du fichier par rapport à tous les serveurs LSP activés. -2. Démarre le serveur LSP approprié s'il n'est pas déjà en cours d'exécution. - ---- - -## Bonnes pratiques - -LSP peut aider l'agent à trouver et corriger des problèmes en fournissant les diagnostics des serveurs de langage. C'est utile dans certains projets, mais ce n'est pas toujours un gain net. - -Les serveurs de langage peuvent se désynchroniser, consommer beaucoup de mémoire, varier selon la version ou le projet, et ralentir les flux de travail de l'agent. Dans de nombreux projets, il est préférable de faire exécuter directement par l'agent le lint, le typecheck ou d'autres outils CLI de diagnostic, afin que les erreurs reviennent dans la boucle de l'agent sans ces compromis. Documentez ces commandes dans des fichiers d'instructions comme `AGENTS.md` ou des skills afin que l'agent sache quoi exécuter. Activez LSP lorsque votre projet bénéficie d'un retour supplémentaire des serveurs de langage. - ---- - -## Configuration - -Vous pouvez activer et personnaliser les serveurs LSP via la section `lsp` de votre configuration opencode. - -Pour activer tous les serveurs LSP intégrés, définissez `lsp` sur `true`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -Utilisez un objet pour conserver les serveurs intégrés activés tout en configurant des remplacements ou des serveurs personnalisés. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": {} -} -``` - -Chaque serveur LSP prend en charge les éléments suivants : - -| Propriété | Type | Description | -| ---------------- | -------- | ---------------------------------------------------------------- | -| `disabled` | booléen | Définissez ceci sur `true` pour désactiver le serveur LSP | -| `command` | chaîne[] | La commande pour démarrer le serveur LSP | -| `extensions` | chaîne[] | Extensions de fichiers que ce serveur LSP doit gérer | -| `env` | objet | Variables d'environnement à définir lors du démarrage du serveur | -| `initialization` | objet | Options d'initialisation à envoyer au serveur LSP | - -Regardons quelques exemples. - ---- - -### Variables d'environnement - -Utilisez la propriété `env` pour définir les variables d'environnement lors du démarrage du serveur LSP : - -```json title="opencode.json" {5-7} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "rust": { - "env": { - "RUST_LOG": "debug" - } - } - } -} -``` - ---- - -### Options d'initialisation - -Utilisez la propriété `initialization` pour transmettre les options d'initialisation au serveur LSP. Il s'agit de paramètres spécifiques au serveur envoyés lors de la requête LSP `initialize` : - -```json title="opencode.json" {5-9} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "initialization": { - "preferences": { - "importModuleSpecifierPreference": "relative" - } - } - } - } -} -``` - -:::note -Les options d'initialisation varient selon le serveur LSP. Consultez la documentation de votre serveur LSP pour connaître les options disponibles. -::: - ---- - -### Désactivation des serveurs LSP - -Si `lsp` est omis, tous les serveurs LSP sont désactivés. Pour désactiver tous les serveurs LSP après qu'une autre configuration les a activés, définissez `lsp` sur `false` : - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": false -} -``` - -Pour désactiver un serveur LSP **spécifique**, définissez `disabled` sur `true` : - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "disabled": true - } - } -} -``` - ---- - -### Serveurs LSP personnalisés - -Vous pouvez ajouter des serveurs LSP personnalisés en spécifiant les extensions de commande et de fichier : - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "custom-lsp": { - "command": ["custom-lsp-server", "--stdio"], - "extensions": [".custom"] - } - } -} -``` - ---- - -## Informations supplémentaires - -### PHP Intelephense - -PHP Intelephense offre des fonctionnalités premium via une clé de licence. Vous pouvez fournir une clé de licence en plaçant (uniquement) la clé dans un fichier texte à l'adresse : - -- macOS/Linux : `$HOME/intelephense/license.txt` -- Windows : `%USERPROFILE%/intelephense/license.txt` - -Le fichier doit contenir uniquement la clé de licence sans contenu supplémentaire. diff --git a/packages/web/src/content/docs/fr/mcp-servers.mdx b/packages/web/src/content/docs/fr/mcp-servers.mdx deleted file mode 100644 index 5d01286879..0000000000 --- a/packages/web/src/content/docs/fr/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -title: Serveurs MCP -description: Ajoutez des outils MCP locaux et distants. ---- - -Vous pouvez ajouter des outils externes à OpenCode à l'aide du _Model Context Protocol_ ou MCP. OpenCode prend en charge les serveurs locaux et distants. - -Une fois ajoutés, les outils MCP sont automatiquement disponibles pour le LLM aux côtés des outils intégrés. - ---- - -#### Mises en garde - -Lorsque vous utilisez un serveur MCP, cela ajoute au contexte. Cela peut vite s’additionner si vous disposez de beaucoup d’outils. Nous vous recommandons donc de faire attention aux serveurs MCP que vous utilisez. - -:::tip -Les serveurs MCP s'ajoutent à votre contexte, vous devez donc faire attention à ceux que vous activez. -::: - -Certains serveurs MCP, comme le serveur GitHub MCP, ont tendance à ajouter beaucoup de jetons et peuvent facilement dépasser la limite de contexte. - ---- - -## Activation - -Vous pouvez définir des serveurs MCP dans votre [OpenCode Config](https://opencode.ai/docs/config/) sous `mcp`. Ajoutez chaque MCP avec un nom unique. Vous pouvez faire référence à ce MCP par son nom lorsque vous demandez le LLM. - -```jsonc title="opencode.jsonc" {6} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "name-of-mcp-server": { - // ... - "enabled": true, - }, - "name-of-other-mcp-server": { - // ... - }, - }, -} -``` - -Vous pouvez également désactiver un serveur en définissant `enabled` sur `false`. Ceci est utile si vous souhaitez désactiver temporairement un serveur sans le supprimer de votre configuration. - ---- - -### Remplacement des valeurs par défaut distantes - -Les organisations peuvent fournir des serveurs MCP par défaut via leur point de terminaison `.well-known/opencode`. Ces serveurs peuvent être désactivés par défaut, permettant aux utilisateurs de choisir ceux dont ils ont besoin. - -Pour activer un serveur spécifique à partir de la configuration distante de votre organisation, ajoutez-le à votre configuration locale avec `enabled: true` : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - -Vos valeurs de configuration locales remplacent les valeurs par défaut distantes. Voir [config precedence](/docs/config#precedence-order) pour plus de détails. - ---- - -## Local - -Ajoutez des serveurs MCP locaux en définissant `type` sur `"local"` dans l'objet 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", - }, - }, - }, -} -``` - -La commande indique comment le serveur MCP local est démarré. Vous pouvez également transmettre une liste de variables d’environnement. - -Par exemple, voici comment ajouter le serveur de test [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP. - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "mcp_everything": { - "type": "local", - "command": ["npx", "-y", "@modelcontextprotocol/server-everything"], - }, - }, -} -``` - -Et pour l'utiliser, je peux ajouter `use the mcp_everything tool` à mes prompts. - -```txt "mcp_everything" -use the mcp_everything tool to add the number 3 and 4 -``` - ---- - -#### Options - -Voici toutes les options pour configurer un serveur MCP local. - -| Options | Type | Obligatoire | Description | -| ------------- | ------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `type` | Chaîne | Oui | Le type de connexion au serveur MCP doit être `"local"`. | -| `command` | Tableau | Oui | Commande et arguments pour exécuter le serveur MCP. | -| `environment` | Objet | | Variables d'environnement à définir lors de l'exécution du serveur. | -| `enabled` | Booléen | | Activez ou désactivez le serveur MCP au démarrage. | -| `timeout` | Numéro | | Délai d'expiration en ms pour la récupération des outils depuis le serveur MCP. La valeur par défaut est 5 000 (5 secondes). | - ---- - -## Distant - -Ajoutez des serveurs MCP distants en définissant `type` sur `"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" - } - } - } -} -``` - -Le champ `url` est l'URL du serveur MCP distant et l'option `headers` vous permet de transmettre des en-têtes. - ---- - -#### Options - -| Options | Type | Obligatoire | Description | -| --------- | ------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `type` | Chaîne | Oui | Le type de connexion au serveur MCP doit être `"remote"`. | -| `url` | Chaîne | Oui | URL du serveur MCP distant. | -| `enabled` | Booléen | | Activez ou désactivez le serveur MCP au démarrage. | -| `headers` | Objet | | En-têtes à envoyer avec la demande. | -| `oauth` | Objet | | Configuration de l'authentification OAuth. Voir la section [OAuth](#oauth) ci-dessous. | -| `timeout` | Numéro | | Délai d'expiration en ms pour la récupération des outils depuis le serveur MCP. La valeur par défaut est 5 000 (5 secondes). | - ---- - -## OAuth - -OpenCode gère automatiquement l'authentification OAuth pour les serveurs MCP distants. Lorsqu'un serveur nécessite une authentification, OpenCode : - -1. Détecte la réponse 401 et lance le flux OAuth -2. Utilise **Enregistrement client dynamique (RFC 7591)** s'il est pris en charge par le serveur. -3. Stocke les jetons en toute sécurité pour les demandes futures - ---- - -### Automatique - -Pour la plupart des serveurs MCP compatibles OAuth, aucune configuration particulière n'est nécessaire. Configurez simplement le serveur distant : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "my-oauth-server": { - "type": "remote", - "url": "https://mcp.example.com/mcp" - } - } -} -``` - -Si le serveur nécessite une authentification, OpenCode vous demandera de vous authentifier lorsque vous essayez de l'utiliser pour la première fois. Sinon, vous pouvez [déclencher manuellement le flux](#authenticating) avec `opencode mcp auth `. - ---- - -### Pré-enregistré - -Si vous disposez des informations d'identification client du fournisseur de serveur MCP, vous pouvez les configurer : - -```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" - } - } - } -} -``` - ---- - -### Authentification - -Vous pouvez déclencher manuellement l'authentification ou gérer les informations d'identification. - -Authentifiez-vous auprès d'un serveur MCP spécifique : - -```bash -opencode mcp auth my-oauth-server -``` - -Répertoriez tous les serveurs MCP et leur statut d'authentification : - -```bash -opencode mcp list -``` - -Supprimez les informations d'identification stockées : - -```bash -opencode mcp logout my-oauth-server -``` - -La commande `mcp auth` ouvrira votre navigateur pour autorisation. Après votre autorisation, OpenCode stockera les jetons en toute sécurité dans `~/.local/share/opencode/mcp-auth.json`. - ---- - -#### Désactivation d'OAuth - -Si vous souhaitez désactiver le OAuth automatique pour un serveur (par exemple, pour les serveurs qui utilisent les clés API à la place), définissez `oauth` sur `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}" - } - } - } -} -``` - ---- - -#### Options OAuth - -| Options | Type | Description | -| -------------- | ------------- | ---------------------------------------------------------------------------------------- | -| `oauth` | Objet \| faux | Objet de configuration OAuth, ou `false` pour désactiver la détection automatique OAuth. | -| `clientId` | Chaîne | ID client OAuth. S’il n’est pas fourni, l’enregistrement dynamique du client sera tenté. | -| `clientSecret` | Chaîne | OAuth secret client, si requis par le serveur d'autorisation. | -| `scope` | Chaîne | OAuth scopes à demander lors de l'autorisation. | - -#### Débogage - -Si un serveur MCP distant ne parvient pas à s'authentifier, vous pouvez diagnostiquer les problèmes avec : - -```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 -``` - -La commande `mcp debug` affiche l'état d'authentification actuel, teste la connectivité HTTP et tente le flux de découverte OAuth. - ---- - -## Gestion - -Vos MCP sont disponibles sous forme d'outils dans OpenCode, aux côtés des outils intégrés. Vous pouvez donc les gérer via la configuration OpenCode comme n'importe quel autre outil. - ---- - -### Global - -Cela signifie que vous pouvez les activer ou les désactiver globalement. - -```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 - } -} -``` - -Nous pouvons également utiliser un modèle global pour désactiver tous les MCP correspondants. - -```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 - } -} -``` - -Ici, nous utilisons le modèle global `my-mcp*` pour désactiver tous les MCP. - ---- - -### Par agent - -Si vous disposez d'un grand nombre de serveurs MCP, vous souhaiterez peut-être les activer uniquement par agent et les désactiver globalement. Pour ce faire : - -1. Désactivez-le en tant qu'outil à l'échelle mondiale. -2. Dans votre [agent config](/docs/agents#tools), activez le serveur MCP en tant qu'outil. - -```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 - } - } - } -} -``` - ---- - -#### Modèles globaux - -Le modèle glob utilise des modèles de globbing regex simples : - -- `*` correspond à zéro ou plusieurs caractères (par exemple, `"my-mcp*"` correspond à `my-mcp_search`, `my-mcp_list`, etc.) -- `?` correspond exactement à un caractère -- Tous les autres caractères correspondent littéralement - -:::note -Les outils serveur MCP sont enregistrés avec le nom du serveur comme préfixe, donc pour désactiver tous les outils d'un serveur, utilisez simplement : - -``` -"mymcpservername_*": false -``` - -::: - ---- - -## Exemples - -Vous trouverez ci-dessous des exemples de serveurs MCP courants. Vous pouvez soumettre un PR si vous souhaitez documenter d'autres serveurs. - ---- - -### Sentry - -Ajoutez le [serveur Sentry MCP](https://mcp.sentry.dev) pour interagir avec vos projets et problèmes Sentry. - -```json title="opencode.json" {4-8} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "sentry": { - "type": "remote", - "url": "https://mcp.sentry.dev/mcp", - "oauth": {} - } - } -} -``` - -Après avoir ajouté la configuration, authentifiez-vous auprès de Sentry : - -```bash -opencode mcp auth sentry -``` - -Cela ouvrira une fenêtre de navigateur pour terminer le flux OAuth et connecter OpenCode à votre compte Sentry. - -Une fois authentifié, vous pouvez utiliser les outils Sentry dans vos prompts pour interroger les problèmes, les projets et les données d'erreur. - -```txt "use sentry" -Show me the latest unresolved issues in my project. use sentry -``` - ---- - -### Context7 - -Ajoutez le [Context7 MCP server](https://github.com/upstash/context7) pour effectuer une recherche dans les documents. - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "context7": { - "type": "remote", - "url": "https://mcp.context7.com/mcp" - } - } -} -``` - -Si vous avez créé un compte gratuit, vous pouvez utiliser votre clé API et obtenir des limites de débit plus élevées. - -```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}" - } - } - } -} -``` - -Ici, nous supposons que la variable d'environnement `CONTEXT7_API_KEY` est définie. - -Ajoutez `use context7` à vos prompts pour utiliser le serveur Context7 MCP. - -```txt "use context7" -Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7 -``` - -Alternativement, vous pouvez ajouter quelque chose comme ceci à votre [AGENTS.md](/docs/rules/). - -```md title="AGENTS.md" -When you need to search docs, use `context7` tools. -``` - ---- - -### Grep by Vercel - -Ajoutez le serveur [Grep by Vercel](https://grep.app) MCP pour rechercher des extraits de code sur GitHub. - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "gh_grep": { - "type": "remote", - "url": "https://mcp.grep.app" - } - } -} -``` - -Puisque nous avons nommé notre serveur MCP `gh_grep`, vous pouvez ajouter `use the gh_grep tool` à vos prompts pour que l'agent l'utilise. - -```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 -``` - -Alternativement, vous pouvez ajouter quelque chose comme ceci à votre [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. -``` diff --git a/packages/web/src/content/docs/fr/models.mdx b/packages/web/src/content/docs/fr/models.mdx deleted file mode 100644 index 6dd91435c7..0000000000 --- a/packages/web/src/content/docs/fr/models.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: Modèles -description: Configuration d'un fournisseur et d'un modèle LLM. ---- - -OpenCode utilise [AI SDK](https://ai-sdk.dev/) et [Models.dev](https://models.dev) pour prendre en charge **75+ fournisseurs LLM** et prend en charge l'exécution de modèles locaux. - ---- - -## Fournisseurs - -Les fournisseurs les plus populaires sont préchargés par défaut. Si vous avez ajouté les informations d'identification d'un fournisseur via la commande `/connect`, elles seront disponibles lorsque vous démarrerez OpenCode. - -En savoir plus sur [fournisseurs](/docs/providers). - ---- - -## Sélection d'un modèle - -Une fois que vous avez configuré votre fournisseur, vous pouvez sélectionner le modèle souhaité en tapant : - -```bash frame="none" -/models -``` - ---- - -## Modèles recommandés - -Il existe de nombreux modèles et de nouveaux modèles sortent chaque semaine. - -:::tip -Pensez à utiliser l’un des modèles que nous recommandons. -::: - -Cependant, seuls quelques-uns d’entre eux savent à la fois générer du code et appeler des outils. - -Voici plusieurs modèles qui fonctionnent bien avec OpenCode, sans ordre particulier. (Cette liste n’est pas exhaustive et n’est pas nécessairement à jour) : - -- GPT 5.2 -- Codex GPT 5.1 -- Claude Opus 4.5 -- Claude Sonnet 4.5 -- Minimax M2.1 -- Gemini 3 Pro - ---- - -## Définir une valeur par défaut - -Pour définir l'un d'entre eux comme modèle par défaut, vous pouvez définir la clé `model` dans votre configuration OpenCode. - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "model": "lmstudio/google/gemma-3n-e4b" -} -``` - -Ici, l'identifiant complet est `provider_id/model_id`. Par exemple, si vous utilisez [OpenCode Zen](/docs/zen), vous utiliserez `opencode/gpt-5.1-codex` pour GPT 5.1 Codex. - -Si vous avez configuré un [fournisseur personnalisé](/docs/providers#custom), le `provider_id` est la clé de la partie `provider` de votre configuration et le `model_id` est la clé de `provider.models`. - ---- - -## Configuration des modèles - -Vous pouvez configurer globalement les options d'un modèle via le fichier 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, - }, - }, - }, - }, - }, - }, -} -``` - -Ici, nous configurons les paramètres globaux pour deux modèles intégrés : `gpt-5` lorsqu'il est accessible via le fournisseur `openai` et `claude-sonnet-4-20250514` lorsqu'il est accessible via le fournisseur `anthropic`. -Les noms du fournisseur intégré et des modèles peuvent être trouvés sur [Models.dev](https://models.dev). - -Vous pouvez également configurer ces options pour tous les agents que vous utilisez. La configuration de l'agent remplace ici toutes les options globales. [En savoir plus](/docs/agents/#additional). - -Vous pouvez également définir des variantes personnalisées qui étendent celles intégrées. Les variantes vous permettent de configurer différents paramètres pour le même modèle sans créer d'entrées en double : - -```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", - }, - }, - }, - }, - }, - }, -} -``` - ---- - -## Variantes - -De nombreux modèles prennent en charge plusieurs variantes avec différentes configurations. OpenCode est livré avec des variantes par défaut intégrées pour les fournisseurs populaires. - -### Variantes intégrées - -OpenCode est livré avec des variantes par défaut pour de nombreux fournisseurs : - -**Anthropic** : - -- `high` - Budget de réflexion élevé (par défaut) -- `max` - Budget de réflexion maximum - -**OpenAI** : - -Varie selon le modèle mais en gros : - -- `none` - Aucun raisonnement -- `minimal` - Effort de raisonnement minimal -- `low` - Faible effort de raisonnement -- `medium` - Effort de raisonnement moyen -- `high` – Effort de raisonnement élevé -- `xhigh` - Effort de raisonnement très élevé - -**Google**: - -- `low` – Budget d'effort/jetons réduit -- `high` – Budget d'effort/de jetons plus élevé - -:::tip -Cette liste n'est pas exhaustive. De nombreux autres fournisseurs ont également des paramètres par défaut intégrés. -::: - -### Variantes personnalisées - -Vous pouvez remplacer les variantes existantes ou ajouter les vôtres : - -```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, - }, - }, - }, - }, - }, - }, -} -``` - -### Cycle des variantes - -Utilisez le raccourci clavier `variant_cycle` pour basculer rapidement entre les variantes. [En savoir plus](/docs/keybinds). - ---- - -## Chargement des modèles - -Lorsque OpenCode démarre, il recherche les modèles dans l'ordre de priorité suivant : - -1. Le flag de ligne de commande `--model` ou `-m`. Le format est le même que dans le fichier de configuration : `provider_id/model_id`. - -2. La liste des modèles dans la configuration OpenCode. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-20250514" - } - ``` - -Le format ici est `provider/model`. - -3. Le dernier modèle utilisé. - -4. Le premier modèle utilisant une priorité interne. diff --git a/packages/web/src/content/docs/fr/network.mdx b/packages/web/src/content/docs/fr/network.mdx deleted file mode 100644 index 0ebafea442..0000000000 --- a/packages/web/src/content/docs/fr/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Réseau -description: Configurez les proxys et les certificats personnalisés. ---- - -OpenCode prend en charge les variables d'environnement proxy standard et les certificats personnalisés pour les environnements réseau d'entreprise. - ---- - -## Proxy - -OpenCode respecte les variables d'environnement proxy standard. - -```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 -Le TUI communique avec un serveur HTTP local. Vous devez contourner le proxy pour cette connexion afin d'éviter les boucles de routage. -::: - -Vous pouvez configurer le port et le nom d'hôte du serveur à l'aide de [CLI flags](/docs/cli#run). - ---- - -### Authentification - -Si votre proxy nécessite une authentification de base, incluez les informations d'identification dans l'URL. - -```bash -export HTTPS_PROXY=http://username:password@proxy.example.com:8080 -``` - -:::caution -Évitez de coder en dur les mots de passe. Utilisez des variables d’environnement ou un stockage sécurisé des informations d’identification. -::: - -Pour les proxys nécessitant une authentification avancée comme NTLM ou Kerberos, envisagez d'utiliser une passerelle LLM qui prend en charge votre méthode d'authentification. - ---- - -## Certificats personnalisés - -Si votre entreprise utilise des autorités de certification personnalisées pour les connexions HTTPS, configurez OpenCode pour leur faire confiance. - -```bash -export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem -``` - -Cela fonctionne à la fois pour les connexions proxy et pour l'accès direct à l'API. diff --git a/packages/web/src/content/docs/fr/permissions.mdx b/packages/web/src/content/docs/fr/permissions.mdx deleted file mode 100644 index 99902647af..0000000000 --- a/packages/web/src/content/docs/fr/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -title: Autorisations -description: Contrôlez quelles actions nécessitent une approbation pour être exécutées. ---- - -OpenCode utilise la configuration `permission` pour décider si une action donnée doit s'exécuter automatiquement, vous inviter ou être bloquée. - -Depuis `v1.1.1`, l'ancienne configuration booléenne `tools` est obsolète et a été fusionnée dans `permission`. L'ancienne configuration `tools` est toujours prise en charge pour des raisons de compatibilité ascendante. - ---- - -## Actions - -Chaque règle d'autorisation se résout en l'une des suivantes : - -- `"allow"` – exécuter sans approbation -- `"ask"` – demande d'approbation -- `"deny"` — bloque l'action - ---- - -## Configuration - -Vous pouvez définir des autorisations globalement (avec `*`) et remplacer des outils spécifiques. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "*": "ask", - "bash": "allow", - "edit": "deny" - } -} -``` - -Vous pouvez également définir toutes les autorisations en même temps : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": "allow" -} -``` - ---- - -## Règles granulaires (syntaxe d'objet) - -Pour la plupart des autorisations, vous pouvez utiliser un objet pour appliquer différentes actions en fonction de l'entrée de l'outil. - -```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" - } - } -} -``` - -Les règles sont évaluées par correspondance de modèle, la **dernière règle correspondante étant gagnante**. Un modèle courant consiste à placer la règle fourre-tout `"*"` en premier, et les règles plus spécifiques après. - -### Caractères génériques - -Les modèles d'autorisation utilisent une simple correspondance de caractères génériques : - -- `*` correspond à zéro ou plusieurs caractères -- `?` correspond exactement à un caractère -- Tous les autres caractères correspondent littéralement - -### Extension du répertoire personnel - -Vous pouvez utiliser `~` ou `$HOME` au début d'un modèle pour référencer votre répertoire personnel. Ceci est particulièrement utile pour les règles [`external_directory`](#external-directories). - -- `~/projects/*` -> `/Users/username/projects/*` -- `$HOME/projects/*` -> `/Users/username/projects/*` -- `~` -> `/Users/username` - -### Répertoires externes - -Utilisez `external_directory` pour autoriser les appels d'outils qui touchent des chemins en dehors du répertoire de travail où OpenCode a été démarré. Cela s'applique à tout outil qui prend un chemin en entrée (par exemple `read`, `edit`, `glob`, `grep` et de nombreuses commandes `bash`). - -L'expansion du répertoire personnel (comme `~/...`) n'affecte que la façon dont un modèle est écrit. Cela n'intègre pas un chemin externe à l'espace de travail actuel, donc les chemins en dehors du répertoire de travail doivent toujours être autorisés via `external_directory`. - -Par exemple, cela permet d'accéder à tout ce qui se trouve sous `~/projects/personal/` : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - } - } -} -``` - -Tout répertoire autorisé ici hérite des mêmes valeurs par défaut que l'espace de travail actuel. Étant donné que [`read` est par défaut `allow`](#defaults), les lectures sont également autorisées pour les entrées sous `external_directory`, sauf dérogation. Ajoutez des règles explicites lorsqu'un outil doit être restreint dans ces chemins, comme bloquer les modifications tout en conservant les lectures : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - }, - "edit": { - "~/projects/personal/**": "deny" - } - } -} -``` - -Gardez la liste centrée sur les chemins approuvés et superposez des règles d'autorisation ou de refus supplémentaires selon les besoins pour d'autres outils (par exemple `bash`). - ---- - -## Autorisations disponibles - -Les autorisations OpenCode sont classées par nom d'outil, plus quelques garde-fous de sécurité : - -- `read` — lecture d'un fichier (correspond au chemin du fichier) -- `edit` — toutes les modifications de fichiers (couvre `edit`, `write`, `patch`) -- `glob` — globalisation de fichiers (correspond au modèle global) -- `grep` — recherche de contenu (correspond au modèle regex) -- `bash` - exécution de commandes shell (correspond aux commandes analysées comme `git status --porcelain`) -- `task` — lancement de sous-agents (correspond au type de sous-agent) -- `skill` — chargement d'une compétence (correspond au nom de la compétence) -- `lsp` — exécution de requêtes LSP (actuellement non granulaires) -- `webfetch` — récupérer une URL (correspond à l'URL) -- `websearch` — recherche Web (correspond à la requête) -- `external_directory` - déclenché lorsqu'un outil touche des chemins en dehors du répertoire de travail du projet -- `doom_loop` — déclenché lorsque le même appel d'outil se répète 3 fois avec une entrée identique - ---- - -## Valeurs par défaut - -Si vous ne spécifiez rien, OpenCode démarre avec les valeurs par défaut permissives : - -- La plupart des autorisations sont par défaut `"allow"`. -- `doom_loop` et `external_directory` sont par défaut `"ask"`. -- `read` est `"allow"`, mais les fichiers `.env` sont refusés par défaut : - -```json title="opencode.json" -{ - "permission": { - "read": { - "*": "allow", - "*.env": "deny", - "*.env.*": "deny", - "*.env.example": "allow" - } - } -} -``` - ---- - -## Que fait « Demander » ? - -Lorsque OpenCode demande l'approbation, l'interface utilisateur propose trois résultats : - -- `once` — approuve uniquement cette demande -- `always` — approuve les futures demandes correspondant aux modèles suggérés (pour le reste de la session OpenCode en cours) -- `reject` — refuser la demande - -L'ensemble des modèles que `always` approuverait est fourni par l'outil (par exemple, les approbations bash mettent généralement sur liste blanche un préfixe de commande sûr comme `git status*`). - ---- - -## Agents - -Vous pouvez remplacer les autorisations par agent. Les autorisations des agents sont fusionnées avec la configuration globale et les règles des agents sont prioritaires. [En savoir plus](/docs/agents#permissions) sur les autorisations des agents. - -:::note -Reportez-vous à la section [Règles granulaires (syntaxe d'objet)](#granular-rules-object-syntax) ci-dessus pour des exemples de correspondance de modèles plus détaillés. -::: - -```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" - } - } - } - } -} -``` - -Vous pouvez également configurer les autorisations des agents dans 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 -Utilisez la correspondance de modèles pour les commandes avec des arguments. `"grep *"` autorise `grep pattern file.txt`, tandis que `"grep"` seul le bloquerait. Les commandes comme `git status` fonctionnent pour le comportement par défaut mais nécessitent une autorisation explicite (comme `"git status *"`) lorsque des arguments sont passés. -::: diff --git a/packages/web/src/content/docs/fr/plugins.mdx b/packages/web/src/content/docs/fr/plugins.mdx deleted file mode 100644 index 48cdc4d116..0000000000 --- a/packages/web/src/content/docs/fr/plugins.mdx +++ /dev/null @@ -1,384 +0,0 @@ ---- -title: Plugins -description: Écrivez vos propres plugins pour étendre OpenCode. ---- - -Les plugins vous permettent d'étendre OpenCode en vous connectant à divers événements et en personnalisant le comportement. Vous pouvez créer des plugins pour ajouter de nouvelles fonctionnalités, intégrer des services externes ou modifier le comportement par défaut de OpenCode. - -Pour des exemples, consultez les [plugins](/docs/ecosystem#plugins) créés par la communauté. - ---- - -## Utiliser un plugin - -Il existe deux manières de charger des plugins. - ---- - -### À partir de fichiers locaux - -Placez les fichiers JavaScript ou TypeScript dans le répertoire du plugin. - -- `.opencode/plugins/` - Plugins au niveau du projet -- `~/.config/opencode/plugins/` - Plugins globaux - -Les fichiers de ces répertoires sont automatiquement chargés au démarrage. - ---- - -### Depuis npm - -Spécifiez les packages npm dans votre fichier de configuration. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"] -} -``` - -Les packages npm scopés et standards sont pris en charge. - -Parcourez les plugins disponibles dans le [ecosystem](/docs/ecosystem#plugins). - ---- - -### Comment les plugins sont installés - -Les **plugins npm** sont installés automatiquement à l'aide de Bun au démarrage. Les packages et leurs dépendances sont mis en cache dans `~/.cache/opencode/node_modules/`. - -Les **plugins locaux** sont chargés directement depuis le répertoire des plugins. Pour utiliser des packages externes, vous devez créer un `package.json` dans votre répertoire de configuration (voir [Dépendances](#dependencies)), ou publier le plugin sur npm et [l'ajouter à votre config](/docs/config#plugins). - ---- - -### Ordre de chargement - -Les plugins sont chargés à partir de toutes les sources et tous les hooks s'exécutent dans l'ordre. L'ordre de chargement est le suivant : - -1. Configuration globale (`~/.config/opencode/opencode.json`) -2. Configuration du projet (`opencode.json`) -3. Répertoire global des plugins (`~/.config/opencode/plugins/`) -4. Répertoire des plugins du projet (`.opencode/plugins/`) - -Les packages npm en double avec le même nom et la même version sont chargés une fois. Cependant, un plugin local et un plugin npm portant des noms similaires sont tous deux chargés séparément. - ---- - -## Créer un plugin - -Un plugin est un **module JavaScript/TypeScript** qui exporte une ou plusieurs fonctions de plugin. Chaque fonction reçoit un objet contextuel et renvoie un objet hooks. - ---- - -### Dépendances - -Les plugins locaux et les outils personnalisés peuvent utiliser des packages npm externes. Ajoutez un `package.json` à votre répertoire de configuration avec les dépendances dont vous avez besoin. - -```json title=".opencode/package.json" -{ - "dependencies": { - "shescape": "^2.1.0" - } -} -``` - -OpenCode exécute `bun install` au démarrage pour les installer. Vos plugins et outils peuvent ensuite les importer. - -```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) - } - }, - } -} -``` - ---- - -### Structure de base - -```js title=".opencode/plugins/example.js" -export const MyPlugin = async ({ project, client, $, directory, worktree }) => { - console.log("Plugin initialized!") - - return { - // Hook implementations go here - } -} -``` - -La fonction plugin reçoit : - -- `project` : informations sur le projet actuel. -- `directory` : le répertoire de travail actuel. -- `worktree` : le chemin de l'arbre de travail git. -- `client` : un client SDK opencode pour interagir avec l'IA. -- `$` : [shell API](https://bun.com/docs/runtime/shell) de Bun pour l'exécution de commandes. - ---- - -### Prise en charge de TypeScript - -Pour les plugins TypeScript, vous pouvez importer des types à partir du package du plugin : - -```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 - } -} -``` - ---- - -### Événements - -Les plugins peuvent s'abonner à des événements comme indiqué ci-dessous dans la section Exemples. Voici une liste des différents événements disponibles. - -#### Événements de commande - -- `command.executed` - -#### Événements de fichier - -- `file.edited` -- `file.watcher.updated` - -#### Événements d'installation - -- `installation.updated` - -#### LSP Événements - -- `lsp.client.diagnostics` -- `lsp.updated` - -#### Événements de messages - -- `message.part.removed` -- `message.part.updated` -- `message.removed` -- `message.updated` - -#### Événements d'autorisation - -- `permission.asked` -- `permission.replied` - -#### Événements du serveur - -- `server.connected` - -#### Événements de session - -- `session.created` -- `session.compacted` -- `session.deleted` -- `session.diff` -- `session.error` -- `session.idle` -- `session.status` -- `session.updated` - -#### Événements à faire - -- `todo.updated` - -#### Événements Shell - -- `shell.env` - -#### Événements d'outils - -- `tool.execute.after` -- `tool.execute.before` - -#### TUI Événements - -- `tui.prompt.append` -- `tui.command.execute` -- `tui.toast.show` - ---- - -## Exemples - -Voici quelques exemples de plugins que vous pouvez utiliser pour étendre opencode. - ---- - -### Envoyer des notifications - -Envoyez des notifications lorsque certains événements se produisent : - -```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"'` - } - }, - } -} -``` - -Nous utilisons `osascript` pour exécuter AppleScript sur macOS. Ici, nous l'utilisons pour envoyer des notifications. - -:::note -Si vous utilisez l'application de bureau OpenCode, elle peut envoyer automatiquement des notifications système lorsqu'une réponse est prête ou en cas d'erreur de session. -::: - ---- - -### Protection .env - -Empêchez opencode de lire les fichiers `.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") - } - }, - } -} -``` - ---- - -### Injecter des variables d'environnement - -Injectez des variables d'environnement dans toutes les exécutions du shell (outils d'IA et terminal utilisateur) : - -```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 - }, - } -} -``` - ---- - -### Outils personnalisés - -Les plugins peuvent également ajouter des outils personnalisés à 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})` - }, - }), - }, - } -} -``` - -L'assistant `tool` crée un outil personnalisé que opencode peut appeler. Il prend une fonction de schéma Zod et renvoie une définition d'outil avec : - -- `description` : ce que fait l'outil -- `args` : schéma Zod pour les arguments de l'outil -- `execute` : Fonction qui s'exécute lorsque l'outil est appelé - -Vos outils personnalisés seront disponibles pour opencode aux côtés des outils intégrés. - ---- - -### Journalisation - -Utilisez `client.app.log()` au lieu de `console.log` pour la journalisation structurée : - -```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" }, - }, - }) -} -``` - -Niveaux : `debug`, `info`, `warn`, `error`. Voir la [documentation du SDK](https://opencode.ai/docs/sdk) pour plus de détails. - ---- - -### Hooks de compactage - -Personnalisez le contexte inclus lorsqu'une session est compactée : - -```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 -`) - }, - } -} -``` - -Le hook `experimental.session.compacting` se déclenche avant que le LLM ne génère un résumé de continuation. Utilisez-le pour injecter un contexte spécifique au domaine que le prompt de compactage par défaut manquerait. - -Vous pouvez également remplacer entièrement le prompt de compactage en définissant `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. -` - }, - } -} -``` - -Lorsque `output.prompt` est défini, il remplace complètement le prompt de compactage par défaut. Le tableau `output.context` est ignoré dans ce cas. diff --git a/packages/web/src/content/docs/fr/providers.mdx b/packages/web/src/content/docs/fr/providers.mdx deleted file mode 100644 index 90bdb1fbc3..0000000000 --- a/packages/web/src/content/docs/fr/providers.mdx +++ /dev/null @@ -1,1996 +0,0 @@ ---- -title: Fournisseurs -description: Utiliser n’importe quel fournisseur LLM en OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console - -OpenCode utilise [AI SDK](https://ai-sdk.dev/) et [Models.dev](https://models.dev) pour prendre en charge **75+ fournisseurs LLM** et prend en charge l'exécution de modèles locaux. - -Pour ajouter un fournisseur, vous devez : - -1. Ajoutez les clés API pour le fournisseur à l'aide de la commande `/connect`. -2. Configurez le fournisseur dans votre configuration OpenCode. - ---- - -### Informations d'identification - -Lorsque vous ajoutez les clés API d'un fournisseur avec la commande `/connect`, elles sont stockées -en `~/.local/share/opencode/auth.json`. - ---- - -### Configuration - -Vous pouvez personnaliser les fournisseurs via la section `provider` de votre OpenCode -configuration. - ---- - -#### Socle URL - -Vous pouvez personnaliser la base URL pour n'importe quel fournisseur en définissant l'option `baseURL`. Ceci est utile lors de l'utilisation de services proxy ou de points de terminaison personnalisés. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen est une liste de modèles fournis par l'équipe OpenCode qui ont été -testé et vérifié pour fonctionner correctement avec OpenCode. [En savoir plus](/docs/zen). - -:::tip -Si vous êtes nouveau, nous vous recommandons de commencer par OpenCode Zen. -::: - -1. Exécutez la commande `/connect` dans le TUI, sélectionnez opencode et dirigez-vous vers [opencode.ai/auth](https://opencode.ai/auth). - - ```txt - /connect - ``` - -2. Connectez-vous, ajoutez vos informations de facturation et copiez votre clé API. - -3. Collez votre clé API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez `/models` dans le TUI pour voir la liste des modèles que nous recommandons. - - ```txt - /models - ``` - -Il fonctionne comme n’importe quel autre fournisseur dans OpenCode et son utilisation est totalement facultative. - ---- - -## OpenCode Go - -OpenCode Go est un plan d'abonnement à faible coût qui offre un accès fiable aux modèles de codage ouverts populaires fournis par l'équipe OpenCode qui ont été -testé et vérifié pour fonctionner correctement avec OpenCode. - -1. Exécutez la commande `/connect` dans le TUI, sélectionnez `OpenCode Go` et rendez-vous sur [opencode.ai/auth](https://opencode.ai/zen). - - ```txt - /connect - ``` - -2. Connectez-vous, ajoutez vos informations de facturation et copiez votre clé API. - -3. Collez votre clé API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez `/models` dans le TUI pour voir la liste des modèles que nous recommandons. - - ```txt - /models - ``` - -Il fonctionne comme n’importe quel autre fournisseur dans OpenCode et son utilisation est totalement facultative. - ---- - -## Annuaire - -Examinons certains fournisseurs en détail. Si vous souhaitez ajouter un fournisseur au -liste, n'hésitez pas à ouvrir un PR. - -:::note -Vous ne voyez pas de fournisseur ici ? Soumettez un PR. -::: - ---- - -### 302.AI - -1. Rendez-vous sur la [console 302.AI](https://302.ai/), créez un compte et générez une clé API. - -2. Exécutez la commande `/connect` et recherchez **302.AI**. - - ```txt - /connect - ``` - -3. Saisissez votre clé 302.AI API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle. - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -Pour utiliser Amazon Bedrock avec OpenCode : - -1. Rendez-vous sur le **Catalogue de modèles** dans la console Amazon Bedrock et demandez - accédez aux modèles que vous souhaitez. - - :::tip - Vous devez avoir accès au modèle souhaité dans Amazon Bedrock. - ::: - -2. **Configurez l'authentification** à l'aide de l'une des méthodes suivantes : - - #### Variables d'environnement (démarrage rapide) - -Définissez l'une de ces variables d'environnement lors de l'exécution de opencode : - -```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode -``` - -Ou ajoutez-les à votre profil bash : - -```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 -``` - -#### Fichier de configuration (recommandé) - -Pour une configuration spécifique au projet ou persistante, utilisez `opencode.json` : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } -} -``` - -**Options disponibles :** - -- `region` - Région AWS (par exemple, `us-east-1`, `eu-west-1`) -- `profile` - Profil nommé AWS de `~/.aws/credentials` -- `endpoint` - URL de point de terminaison personnalisée pour les endpoints VPC (alias de l'option générique `baseURL`) - -:::tip -Les options du fichier de configuration sont prioritaires sur les variables d'environnement. -::: - -#### Avancé : points de terminaison d'un VPC - -Si vous utilisez des points de terminaison d'un VPC pour Bedrock : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } -} -``` - -:::note -L'option `endpoint` est un alias pour l'option générique `baseURL`, utilisant la terminologie spécifique à AWS. Si `endpoint` et `baseURL` sont spécifiés, `endpoint` est prioritaire. -::: - -#### Méthodes d'authentification - -- **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`** : créez un utilisateur IAM et générez des clés d'accès dans la console AWS -- **`AWS_PROFILE`** : utilisez les profils nommés de `~/.aws/credentials`. Configurez d'abord avec `aws configure --profile my-profile` ou `aws sso login` -- **`AWS_BEARER_TOKEN_BEDROCK`** : Générez des clés API à long terme à partir de la console Amazon Bedrock -- **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`** : pour EKS IRSA (rôles IAM pour les comptes de service) ou d'autres environnements Kubernetes avec fédération OIDC. Ces variables d'environnement sont automatiquement injectées par Kubernetes lors de l'utilisation des annotations de compte de service. - -#### Priorité d'authentification - -Amazon Bedrock utilise la priorité d'authentification suivante : - -1. **Bearer Token** - Variable d'environnement `AWS_BEARER_TOKEN_BEDROCK` ou jeton de la commande `/connect` -2. **AWS Credential Chain** - Profil, clés d'accès, informations d'identification partagées, rôles IAM, jetons d'identité Web (EKS IRSA), métadonnées d'instance - -:::note -Lorsqu'un jeton de porteur est défini (via `/connect` ou `AWS_BEARER_TOKEN_BEDROCK`), il est prioritaire sur toutes les méthodes d'identification AWS, y compris les profils configurés. -::: - -3. Exécutez la commande `/models` pour sélectionner le modèle souhaité. - - ```txt - /models - ``` - -:::note -Pour les profils d'inférence personnalisés, utilisez le nom du modèle et du fournisseur dans la clé et définissez la propriété `id` sur l'arn. Cela garantit une mise en cache correcte : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - -::: - ---- - -### Anthropic - -1. Une fois inscrit, exécutez la commande `/connect` et sélectionnez Anthropic. - - ```txt - /connect - ``` - -2. Ici, vous pouvez sélectionner l'option **Claude Pro/Max** et cela ouvrira votre navigateur. - et vous demande de vous authentifier. - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. Désormais, tous les modèles Anthropic devraient être disponibles lorsque vous utilisez la commande `/models`. - - ```txt - /models - ``` - -:::info -L'utilisation de votre abonnement Claude Pro/Max dans OpenCode n'est pas officiellement prise en charge par [Anthropic](https://anthropic.com). -::: - -##### Utilisation des clés API - -Vous pouvez également sélectionner **Créer une clé API** si vous n'avez pas d'abonnement Pro/Max. Il ouvrira également votre navigateur et vous demandera de vous connecter à Anthropic et vous donnera un code que vous pourrez coller dans votre terminal. - -Ou si vous disposez déjà d'une clé API, vous pouvez sélectionner **Entrer manuellement la clé API** et la coller dans votre terminal. - ---- - -### Atomic Chat - -Vous pouvez configurer opencode pour utiliser des modèles locaux via [Atomic Chat](https://atomic.chat), une application de bureau qui exécute des LLM locaux derrière un serveur API compatible OpenAI (point de terminaison par défaut `http://127.0.0.1:1337/v1`). - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -Dans cet exemple : - -- `atomic-chat` est l'identifiant personnalisé du fournisseur. Il peut s'agir de n'importe quelle chaîne. -- `npm` spécifie le paquet à utiliser pour ce fournisseur. Ici, `@ai-sdk/openai-compatible` est utilisé pour toute API compatible OpenAI. -- `name` est le nom du fournisseur affiché dans l'interface. -- `options.baseURL` est le point de terminaison du serveur local. Modifiez l'hôte et le port selon votre configuration Atomic Chat. -- `models` est une carte d'ID de modèles vers leurs noms d'affichage. Chaque ID doit correspondre à l'`id` renvoyé par `GET /v1/models` — exécutez `curl http://127.0.0.1:1337/v1/models` pour lister les ID actuellement chargés dans Atomic Chat. - -:::tip -Si les appels d'outils ne fonctionnent pas bien, choisissez un modèle chargé avec un bon support du tool calling (par exemple, une variante Qwen-Coder ou DeepSeek-Coder). -::: - ---- - -### Azure OpenAI - -:::note -Si vous rencontrez des erreurs « Je suis désolé, mais je ne peux pas vous aider avec cette demande », essayez de modifier le filtre de contenu de **DefaultV2** à **Default** dans votre ressource Azure. -::: - -1. Rendez-vous sur le [portail Azure](https://portal.azure.com/) et créez une ressource **Azure OpenAI**. Vous aurez besoin de : - - **Nom de la ressource** : cela fait partie de votre point de terminaison API (`https://RESOURCE_NAME.openai.azure.com/`) - - **Clé API** : soit `KEY 1` ou `KEY 2` de votre ressource - -2. Accédez à [Azure AI Foundry](https://ai.azure.com/) et déployez un modèle. - - :::note - Le nom du déploiement doit correspondre au nom du modèle pour que opencode fonctionne correctement. - ::: - -3. Exécutez la commande `/connect` et recherchez **Azure**. - - ```txt - /connect - ``` - -4. Entrez votre clé API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Définissez le nom de votre ressource comme variable d'environnement : - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - -Ou ajoutez-le à votre profil bash : - -```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX -``` - -6. Exécutez la commande `/models` pour sélectionner votre modèle déployé. - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. Rendez-vous sur le [portail Azure](https://portal.azure.com/) et créez une ressource **Azure OpenAI**. Vous aurez besoin de : - - **Nom de la ressource** : cela fait partie de votre point de terminaison API (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) - - **Clé API** : soit `KEY 1` ou `KEY 2` de votre ressource - -2. Accédez à [Azure AI Foundry](https://ai.azure.com/) et déployez un modèle. - - :::note - Le nom du déploiement doit correspondre au nom du modèle pour que opencode fonctionne correctement. - ::: - -3. Exécutez la commande `/connect` et recherchez **Azure Cognitive Services**. - - ```txt - /connect - ``` - -4. Entrez votre clé API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Définissez le nom de votre ressource comme variable d'environnement : - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - -Ou ajoutez-le à votre profil bash : - -```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX -``` - -6. Exécutez la commande `/models` pour sélectionner votre modèle déployé. - - ```txt - /models - ``` - ---- - -### Baseten - -1. Rendez-vous sur [Baseten](https://app.baseten.co/), créez un compte et générez une clé API. - -2. Exécutez la commande `/connect` et recherchez **Baseten**. - - ```txt - /connect - ``` - -3. Entrez votre clé Baseten API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle. - - ```txt - /models - ``` - ---- - -### Cerebras - -1. Rendez-vous sur la [console Cerebras](https://inference.cerebras.ai/), créez un compte et générez une clé API. - -2. Exécutez la commande `/connect` et recherchez **Cerebras**. - - ```txt - /connect - ``` - -3. Entrez votre clé Cerebras API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle tel que _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -Cloudflare AI Gateway vous permet d'accéder aux modèles de OpenAI, Anthropic, Workers AI et bien plus encore via un point de terminaison unifié. Avec [Unified Billing](https://developers.cloudflare.com/ai-gateway/features/unified-billing/), vous n'avez pas besoin de clés API distinctes pour chaque fournisseur. - -1. Rendez-vous sur le [tableau de bord Cloudflare](https://dash.cloudflare.com/), accédez à **AI** > **AI Gateway** et créez une nouvelle passerelle. - -2. Définissez votre ID de compte et votre ID de passerelle comme variables d'environnement. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. Exécutez la commande `/connect` et recherchez **Cloudflare AI Gateway**. - - ```txt - /connect - ``` - -4. Entrez votre jeton Cloudflare API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -Ou définissez-le comme variable d'environnement. - -```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token -``` - -5. Exécutez la commande `/models` pour sélectionner un modèle. - - ```txt - /models - ``` - -Vous pouvez également ajouter des modèles via votre configuration opencode. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } -} -``` - ---- - -### Cortecs - -1. Rendez-vous sur la [console Cortecs](https://cortecs.ai/), créez un compte et générez une clé API. - -2. Exécutez la commande `/connect` et recherchez **Cortecs**. - - ```txt - /connect - ``` - -3. Entrez votre clé Cortecs API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle tel que _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. Rendez-vous sur la [console DeepSeek](https://platform.deepseek.com/), créez un compte et cliquez sur **Créer une nouvelle clé API**. - -2. Exécutez la commande `/connect` et recherchez **DeepSeek**. - - ```txt - /connect - ``` - -3. Entrez votre clé DeepSeek API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle DeepSeek tel que _DeepSeek V4 Pro_. - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. Rendez-vous sur le [tableau de bord Deep Infra](https://deepinfra.com/dash), créez un compte et générez une clé API. - -2. Exécutez la commande `/connect` et recherchez **Deep Infra**. - - ```txt - /connect - ``` - -3. Entrez votre clé Deep Infra API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle. - - ```txt - /models - ``` - ---- - -### FrogBot - -1. Rendez-vous sur le [Tableau de bord du micrologiciel](https://app.frogbot.ai/signup), créez un compte et générez une clé API. - -2. Exécutez la commande `/connect` et recherchez **FrogBot**. - - ```txt - /connect - ``` - -3. Entrez la clé API de votre micrologiciel. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle. - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. Rendez-vous sur la [console Fireworks AI](https://app.fireworks.ai/), créez un compte et cliquez sur **Créer une clé API**. - -2. Exécutez la commande `/connect` et recherchez **Fireworks AI**. - - ```txt - /connect - ``` - -3. Entrez votre clé Fireworks AI API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle tel que _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo fournit un chat agent basé sur l'IA avec des capacités d'appel d'outils natives via le proxy Anthropic de GitLab. - -1. Exécutez la commande `/connect` et sélectionnez GitLab. - - ```txt - /connect - ``` - -2. Choisissez votre méthode d'authentification : - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### Utilisation de OAuth (recommandé) - -Sélectionnez **OAuth** et votre navigateur s'ouvrira pour autorisation. - -#### Utilisation d'un jeton d'accès personnel - -1. Accédez à [GitLab Paramètres utilisateur > Jetons d'accès](https://gitlab.com/-/user_settings/personal_access_tokens) -2. Cliquez sur **Ajouter un nouveau jeton** -3. Nom : `OpenCode`, Portées : `api` -4. Copiez le jeton (commence par `glpat-`) -5. Entrez-le dans le terminal - -6. Exécutez la commande `/models` pour voir les modèles disponibles. - - ```txt - /models - ``` - -```` - -Trois modèles basés sur Claude sont disponibles : - -- **duo-chat-haiku-4-5** (Par défaut) - Réponses rapides pour des tâches rapides -- **duo-chat-sonnet-4-5** - Performances équilibrées pour la plupart des flux de travail -- **duo-chat-opus-4-5** - Le plus capable pour les analyses complexes - -:::note -Vous pouvez également spécifier la variable d'environnement 'GITLAB_TOKEN' si vous ne souhaitez pas -pour stocker le jeton dans le stockage d'authentification opencode. -::: - -##### GitLab auto-hébergé - -:::note[note de conformité] -OpenCode utilise un petit modèle pour certaines tâches d'IA telles que la génération du titre de la session. -Il est configuré pour utiliser gpt-5-nano par défaut, hébergé par Zen. Pour verrouiller OpenCode -pour utiliser uniquement votre propre instance hébergée par GitLab, ajoutez ce qui suit à votre -Fichier `opencode.json`. Il est également recommandé de désactiver le partage de session. - -```json -{ -"$schema": "https://opencode.ai/config.json", -"small_model": "gitlab/duo-chat-haiku-4-5", -"share": "disabled" -} -```` - -::: - -Pour les instances GitLab auto-hébergées : - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -Si votre instance exécute une AI Gateway personnalisée : - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -Ou ajoutez à votre profil bash : - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -Votre administrateur GitLab doit activer les éléments suivants : - -1. [Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) pour l'utilisateur, le groupe ou l'instance -2. Indicateurs de fonctionnalités (via la console Rails) : - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### OAuth pour les instances auto-hébergées - -Afin que Oauth fonctionne pour votre instance auto-hébergée, vous devez créer -une nouvelle application (Paramètres → Applications) avec le -rappel URL `http://127.0.0.1:8080/callback` et étendues suivantes : - -- api (Accédez au API en votre nom) -- read_user (Lire vos informations personnelles) -- read_repository (Autorise l'accès en lecture seule au référentiel) - -Exposez ensuite l'ID de l'application en tant que variable d'environnement : - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -Plus de documentation sur la page d'accueil [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth). - -##### Configuration - -Personnalisez via `opencode.json` : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### Outils GitLab API (facultatif, mais fortement recommandé) - -Pour accéder aux outils GitLab (demandes de fusion, tickets, pipelines, CI/CD, etc.) : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -Ce plugin fournit des fonctionnalités complètes de gestion du référentiel GitLab, notamment les examens MR, le suivi des problèmes, la surveillance du pipeline, etc. - ---- - -### GitHub Copilot - -Pour utiliser votre abonnement GitHub Copilot avec opencode : - -:::note -Certains modèles peuvent avoir besoin d'un [Pro+ -abonnement](https://github.com/features/copilot/plans) à utiliser. - -Certains modèles doivent être activés manuellement dans vos [GitHub Copilot paramètres](https://docs.github.com/en/copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use). -::: - -1. Exécutez la commande `/connect` et recherchez GitHub Copilot. - - ```txt - /connect - ``` - -2. Accédez à [github.com/login/device](https://github.com/login/device) et entrez le code. - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - └ Waiting for authorization... - ``` - -3. Exécutez maintenant la commande `/models` pour sélectionner le modèle souhaité. - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -Pour utiliser Google Vertex AI avec OpenCode : - -1. Rendez-vous sur **Model Garden** dans Google Cloud Console et vérifiez les - modèles disponibles dans votre région. - - :::note - Vous devez disposer d'un projet Google Cloud avec Vertex AI API activé. - ::: - -2. Définissez les variables d'environnement requises : - - `GOOGLE_CLOUD_PROJECT` : ID de votre projet Google Cloud - - `VERTEX_LOCATION` (facultatif) : région pour Vertex AI (par défaut : `global`) - - Authentification (au choix) : - - `GOOGLE_APPLICATION_CREDENTIALS` : chemin d'accès au fichier de clé JSON de votre compte de service - - Authentifiez-vous à l'aide de gcloud CLI : `gcloud auth application-default login` - -Définissez-les lors de l'exécution de opencode. - -```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode -``` - -Ou ajoutez-les à votre profil bash. - -```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global -``` - -:::tip -La région `global` améliore la disponibilité et réduit les erreurs sans frais supplémentaires. Utilisez des points de terminaison régionaux (par exemple, `us-central1`) pour les exigences de résidence des données. [En savoir plus](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. Exécutez la commande `/models` pour sélectionner le modèle souhaité. - - ```txt - /models - ``` - ---- - -### Groq - -1. Rendez-vous sur la [console Groq](https://console.groq.com/), cliquez sur **Créer une clé API** et copiez la clé. - -2. Exécutez la commande `/connect` et recherchez Groq. - - ```txt - /connect - ``` - -3. Saisissez la clé API du fournisseur. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner celle que vous souhaitez. - - ```txt - /models - ``` - ---- - -### Hugging Face - -[Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers) donne accès à des modèles ouverts pris en charge par plus de 17 fournisseurs. - -1. Rendez-vous sur [Hugging Face settings](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained) pour créer un jeton avec l'autorisation de passer des appels aux fournisseurs d'inférence. - -2. Exécutez la commande `/connect` et recherchez **Hugging Face**. - - ```txt - /connect - ``` - -3. Entrez votre jeton Hugging Face. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle comme _Kimi-K2-Instruct_ ou _GLM-4.6_. - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) est une plate-forme d'observabilité LLM qui fournit la journalisation, la surveillance et l'analyse de vos applications d'IA. L'Helicone AI Gateway achemine automatiquement vos demandes vers le fournisseur approprié en fonction du modèle. - -1. Rendez-vous sur [Helicone](https://helicone.ai), créez un compte et générez une clé API à partir de votre tableau de bord. - -2. Exécutez la commande `/connect` et recherchez **Helicone**. - - ```txt - /connect - ``` - -3. Entrez votre clé Helicone API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle. - - ```txt - /models - ``` - -Pour plus de fournisseurs et de fonctionnalités avancées telles que la mise en cache et la limitation de débit, consultez la [documentation Helicone](https://docs.helicone.ai). - -#### Configurations facultatives - -Si vous voyez une fonctionnalité ou un modèle d'Helicone qui n'est pas configuré automatiquement via opencode, vous pouvez toujours le configurer vous-même. - -Voici le [Répertoire des modèles d'Helicone](https://helicone.ai/models), vous en aurez besoin pour récupérer les identifiants des modèles que vous souhaitez ajouter. - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### En-têtes personnalisés - -Helicone prend en charge les en-têtes personnalisés pour des fonctionnalités telles que la mise en cache, le suivi des utilisateurs et la gestion des sessions. Ajoutez-les à la configuration de votre fournisseur en utilisant `options.headers` : - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### Suivi des sessions - -La fonctionnalité [Sessions](https://docs.helicone.ai/features/sessions) d'Helicone vous permet de regrouper les requêtes LLM associées. Utilisez le plugin [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) pour enregistrer automatiquement chaque conversation OpenCode en tant que session dans Helicone. - -```bash -npm install -g opencode-helicone-session -``` - -Ajoutez-le à votre configuration. - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -Le plugin injecte les en-têtes `Helicone-Session-Id` et `Helicone-Session-Name` dans vos requêtes. Sur la page Sessions d'Helicone, vous verrez chaque conversation OpenCode répertoriée comme une session distincte. - -##### En-têtes Helicone communs - -| En-tête | Descriptif | -| -------------------------- | ------------------------------------------------------------------------------------ | -| `Helicone-Cache-Enabled` | Activer la mise en cache des réponses (`true`/`false`) | -| `Helicone-User-Id` | Suivre les métriques par utilisateur | -| `Helicone-Property-[Name]` | Ajouter des propriétés personnalisées (par exemple, `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | Associer les requêtes aux versions d'invite | - -Consultez le [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory) pour tous les en-têtes disponibles. - ---- - -### llama.cpp - -Vous pouvez configurer opencode pour utiliser des modèles locaux via l'utilitaire llama-server de [llama.cpp's](https://github.com/ggml-org/llama.cpp) - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -Dans cet exemple : - -- `llama.cpp` est l'ID du fournisseur personnalisé. Cela peut être n’importe quelle chaîne de votre choix. -- `npm` spécifie le package à utiliser pour ce fournisseur. Ici, `@ai-sdk/openai-compatible` est utilisé pour tout API compatible OpenAI. -- `name` est le nom d'affichage du fournisseur dans l'interface utilisateur. -- `options.baseURL` est le point de terminaison du serveur local. -- `models` est une carte des ID de modèle avec leurs configurations. Le nom du modèle sera affiché dans la liste de sélection du modèle. - ---- - -### IO.NET - -IO.NET propose 17 modèles optimisés pour différents cas d'utilisation : - -1. Rendez-vous sur la [console IO.NET](https://ai.io.net/), créez un compte et générez une clé API. - -2. Exécutez la commande `/connect` et recherchez **IO.NET**. - - ```txt - /connect - ``` - -3. Entrez votre clé IO.NET API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle. - - ```txt - /models - ``` - ---- - -### LM Studio - -Vous pouvez configurer opencode pour utiliser des modèles locaux via LM Studio. - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -Dans cet exemple : - -- `lmstudio` est l'ID du fournisseur personnalisé. Cela peut être n’importe quelle chaîne de votre choix. -- `npm` spécifie le package à utiliser pour ce fournisseur. Ici, `@ai-sdk/openai-compatible` est utilisé pour tout API compatible OpenAI. -- `name` est le nom d'affichage du fournisseur dans l'interface utilisateur. -- `options.baseURL` est le point de terminaison du serveur local. -- `models` est une carte des ID de modèle avec leurs configurations. Le nom du modèle sera affiché dans la liste de sélection du modèle. - ---- - -### Moonshot AI - -Pour utiliser Kimi K2 de Moonshot AI : - -1. Rendez-vous sur la [console Moonshot AI](https://platform.moonshot.ai/console), créez un compte et cliquez sur **Créer une clé API**. - -2. Exécutez la commande `/connect` et recherchez **Moonshot AI**. - - ```txt - /connect - ``` - -3. Entrez votre clé Moonshot API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner _Kimi K2_. - - ```txt - /models - ``` - ---- - -### MiniMax - -1. Rendez-vous sur la [Console MiniMax API](https://platform.minimax.io/login), créez un compte et générez une clé API. - -2. Exécutez la commande `/connect` et recherchez **MiniMax**. - - ```txt - /connect - ``` - -3. Entrez votre clé MiniMax API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle tel que _M2.1_. - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. Rendez-vous sur la [console Nebius Token Factory](https://tokenfactory.nebius.com/), créez un compte et cliquez sur **Ajouter une clé**. - -2. Exécutez la commande `/connect` et recherchez **Nebius Token Factory**. - - ```txt - /connect - ``` - -3. Entrez votre clé Nebius Token Factory API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle tel que _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Ollama - -Vous pouvez configurer opencode pour utiliser des modèles locaux via Ollama. - -:::tip -Ollama peut se configurer automatiquement pour OpenCode. Voir les [documents d'intégration Ollama](https://docs.ollama.com/integrations/opencode) pour plus de détails. -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -Dans cet exemple : - -- `ollama` est l'ID du fournisseur personnalisé. Cela peut être n’importe quelle chaîne de votre choix. -- `npm` spécifie le package à utiliser pour ce fournisseur. Ici, `@ai-sdk/openai-compatible` est utilisé pour tout API compatible OpenAI. -- `name` est le nom d'affichage du fournisseur dans l'interface utilisateur. -- `options.baseURL` est le point de terminaison du serveur local. -- `models` est une carte des ID de modèle avec leurs configurations. Le nom du modèle sera affiché dans la liste de sélection du modèle. - -:::tip -Si les appels d'outils ne fonctionnent pas, essayez d'augmenter `num_ctx` dans Ollama. Commencez vers 16k - 32k. -::: - ---- - -### Ollama Cloud - -Pour utiliser Ollama Cloud avec OpenCode : - -1. Rendez-vous sur [https://ollama.com/](https://ollama.com/) et connectez-vous ou créez un compte. - -2. Accédez à **Paramètres** > **Clés** et cliquez sur **Ajouter une clé API** pour générer une nouvelle clé API. - -3. Copiez la clé API à utiliser dans OpenCode. - -4. Exécutez la commande `/connect` et recherchez **Ollama Cloud**. - - ```txt - /connect - ``` - -5. Entrez votre clé Ollama Cloud API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **Important** : Avant d'utiliser des modèles cloud dans OpenCode, vous devez extraire les informations du modèle localement : - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. Exécutez la commande `/models` pour sélectionner votre modèle Ollama Cloud. - - ```txt - /models - ``` - ---- - -### OpenAI - -Nous vous recommandons de vous inscrire à [ChatGPT Plus ou Pro](https://chatgpt.com/pricing). - -1. Une fois inscrit, exécutez la commande `/connect` et sélectionnez OpenAI. - - ```txt - /connect - ``` - -2. Ici, vous pouvez sélectionner l'option **ChatGPT Plus/Pro** et cela ouvrira votre navigateur. - et vous demande de vous authentifier. - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. Désormais, tous les modèles OpenAI devraient être disponibles lorsque vous utilisez la commande `/models`. - - ```txt - /models - ``` - -##### Utilisation des clés API - -Si vous disposez déjà d'une clé API, vous pouvez sélectionner **Entrer manuellement la clé API** et la coller dans votre terminal. - ---- - -### OpenCode Zen - -OpenCode Zen est une liste de modèles testés et vérifiés fournie par l'équipe OpenCode. [En savoir plus](/docs/zen). - -1. Connectez-vous à **OpenCode Zen** et cliquez sur **Créer une clé API**. - -2. Exécutez la commande `/connect` et recherchez **OpenCode Zen**. - - ```txt - /connect - ``` - -3. Entrez votre clé OpenCode API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle tel que _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. Rendez-vous sur le [tableau de bord OpenRouter](https://openrouter.ai/settings/keys), cliquez sur **Créer une clé API** et copiez la clé. - -2. Exécutez la commande `/connect` et recherchez OpenRouter. - - ```txt - /connect - ``` - -3. Saisissez la clé API du fournisseur. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. De nombreux modèles OpenRouter sont préchargés par défaut, exécutez la commande `/models` pour sélectionner celui que vous souhaitez. - - ```txt - /models - ``` - -Vous pouvez également ajouter des modèles supplémentaires via votre configuration opencode. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } -} -``` - -5. Vous pouvez également les personnaliser via votre configuration opencode. Voici un exemple de spécification d'un fournisseur - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI Core donne accès à plus de 40 modèles de OpenAI, Anthropic, Google, Amazon, Meta, Mistral et AI21 via une plateforme unifiée. - -1. Accédez à votre [SAP BTP Cockpit](https://account.hana.ondemand.com/), accédez à votre instance de service SAP AI Core et créez une clé de service. - - :::tip - La clé de service est un objet JSON contenant `clientid`, `clientsecret`, `url` et `serviceurls.AI_API_URL`. Vous pouvez trouver votre instance AI Core sous **Services** > **Instances et abonnements** dans le cockpit BTP. - ::: - -2. Exécutez la commande `/connect` et recherchez **SAP AI Core**. - - ```txt - /connect - ``` - -3. Entrez votre clé de service JSON. - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - -Ou définissez la variable d'environnement `AICORE_SERVICE_KEY` : - -```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode -``` - -Ou ajoutez-le à votre profil bash : - -```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' -``` - -4. Définissez éventuellement l'ID de déploiement et le groupe de ressources : - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - Ces paramètres sont facultatifs et doivent être configurés en fonction de votre configuration SAP AI Core. - ::: - -5. Exécutez la commande `/models` pour sélectionner parmi plus de 40 modèles disponibles. - - ```txt - /models - ``` - ---- - -### STACKIT - -STACKIT AI Model Serving fournit un environnement d'hébergement souverain entièrement géré pour les modèles d'IA, se concentrant sur les LLM comme Llama, Mistral et Qwen, avec une souveraineté maximale des données sur l'infrastructure européenne. - -1. Rendez-vous sur le [portail STACKIT](https://portal.stackit.cloud), accédez à **AI Model Serving** et créez un jeton d'authentification pour votre projet. - - :::tip - Vous avez besoin d'un compte client STACKIT, d'un compte utilisateur et d'un projet avant de créer des jetons d'authentification. - ::: - -2. Exécutez la commande `/connect` et recherchez **STACKIT**. - - ```txt - /connect - ``` - -3. Entrez votre jeton d'authentification STACKIT AI Model Serving. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner parmi les modèles disponibles tels que _Qwen3-VL 235B_ ou _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. Rendez-vous sur le [Panneau OVHcloud](https://ovh.com/manager). Accédez à la section `Public Cloud`, `AI & Machine Learning` > `AI Endpoints` et dans l'onglet `API Keys`, cliquez sur **Créer une nouvelle clé API**. - -2. Exécutez la commande `/connect` et recherchez **OVHcloud AI Endpoints**. - - ```txt - /connect - ``` - -3. Saisissez votre clé OVHcloud AI Endpoints API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle tel que _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Scaleway - -Pour utiliser [Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/) avec Opencode : - -1. Rendez-vous dans les [Paramètres IAM de la console Scaleway](https://console.scaleway.com/iam/api-keys) pour générer une nouvelle clé API. - -2. Exécutez la commande `/connect` et recherchez **Scaleway**. - - ```txt - /connect - ``` - -3. Entrez votre clé Scaleway API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle tel que _devstral-2-123b-instruct-2512_ ou _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Together AI - -1. Rendez-vous sur [Together AI console](https://api.together.ai), créez un compte et cliquez sur **Ajouter une clé**. - -2. Exécutez la commande `/connect` et recherchez **Together AI**. - - ```txt - /connect - ``` - -3. Entrez votre clé Together AI API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle tel que _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Venice AI - -1. Rendez-vous sur la [Venice AI console](https://venice.ai), créez un compte et générez une clé API. - -2. Exécutez la commande `/connect` et recherchez **Venice AI**. - - ```txt - /connect - ``` - -3. Entrez votre clé Venise AI API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle tel que _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -Vercel AI Gateway vous permet d'accéder aux modèles de OpenAI, Anthropic, Google, xAI et plus encore via un point de terminaison unifié. Les modèles sont proposés au prix catalogue sans majoration. - -1. Rendez-vous sur le [tableau de bord Vercel](https://vercel.com/), accédez à l'onglet **AI Gateway** et cliquez sur **API Keys** pour créer une nouvelle clé API. - -2. Exécutez la commande `/connect` et recherchez **Vercel AI Gateway**. - - ```txt - /connect - ``` - -3. Entrez votre clé Vercel AI Gateway API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle. - - ```txt - /models - ``` - -Vous pouvez également personnaliser les modèles via votre configuration opencode. Voici un exemple de spécification de l'ordre de routage du fournisseur. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -Quelques options de routage utiles : - -| Options | Descriptif | -| ------------------- | ------------------------------------------------------------------------------------------- | -| `order` | Séquence de fournisseur à essayer | -| `only` | Restreindre à des fournisseurs spécifiques | -| `zeroDataRetention` | Utilisez uniquement des fournisseurs avec des politiques de conservation des données nulles | - ---- - -### xAI - -1. Rendez-vous sur la [console xAI](https://console.x.ai/), créez un compte et générez une clé API. - -2. Exécutez la commande `/connect` et recherchez **xAI**. - - ```txt - /connect - ``` - -3. Entrez votre clé xAI API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle tel que _Grok Beta_. - - ```txt - /models - ``` - ---- - -### Z.AI - -1. Rendez-vous sur la [console Z.AI API](https://z.ai/manage-apikey/apikey-list), créez un compte et cliquez sur **Créer une nouvelle clé API**. - -2. Exécutez la commande `/connect` et recherchez **Z.AI**. - - ```txt - /connect - ``` - -Si vous êtes abonné au **Plan de codage GLM**, sélectionnez **Plan de codage Z.AI**. - -3. Entrez votre clé Z.AI API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Exécutez la commande `/models` pour sélectionner un modèle tel que _GLM-4.7_. - - ```txt - /models - ``` - ---- - -### ZenMux - -1. Rendez-vous sur le [tableau de bord ZenMux](https://zenmux.ai/settings/keys), cliquez sur **Créer une clé API** et copiez la clé. - -2. Exécutez la commande `/connect` et recherchez ZenMux. - - ```txt - /connect - ``` - -3. Saisissez la clé API du fournisseur. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. De nombreux modèles ZenMux sont préchargés par défaut, exécutez la commande `/models` pour sélectionner celui que vous souhaitez. - - ```txt - /models - ``` - -Vous pouvez également ajouter des modèles supplémentaires via votre configuration opencode. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } -} -``` - ---- - -## Fournisseur personnalisé - -Pour ajouter un fournisseur **OpenAI-compatible** qui n'est pas répertorié dans la commande `/connect` : - -:::tip -Vous pouvez utiliser n'importe quel fournisseur compatible OpenAI avec opencode. La plupart des fournisseurs d'IA modernes proposent des API compatibles OpenAI. -::: - -1. Exécutez la commande `/connect` et faites défiler jusqu'à **Autre**. - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. Saisissez un identifiant unique pour le fournisseur. - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - Choisissez un identifiant mémorable, vous l'utiliserez dans votre fichier de configuration. - ::: - -3. Entrez votre clé API pour le fournisseur. - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. Créez ou mettez à jour votre fichier `opencode.json` dans le répertoire de votre projet : - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - -Voici les options de configuration : - -- **npm** : package AI SDK à utiliser, `@ai-sdk/openai-compatible` pour les fournisseurs compatibles OpenAI -- **nom** : nom à afficher dans l'interface utilisateur. -- **modèles** : Modèles disponibles. -- **options.baseURL** : URL de l'endpoint API. -- **options.apiKey** : définissez éventuellement la clé API, si vous n'utilisez pas d'authentification. -- **options.headers** : définissez éventuellement des en-têtes personnalisés. - -En savoir plus sur les options avancées dans l'exemple ci-dessous. - -5. Exécutez la commande `/models` et votre fournisseur et vos modèles personnalisés apparaîtront dans la liste de sélection. - ---- - -##### Exemple - -Voici un exemple de définition des options `apiKey`, `headers` et modèle `limit`. - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -Détails de configuration : - -- **apiKey** : défini à l'aide de la syntaxe de variable `env`, [en savoir plus](/docs/config#env-vars). -- **headers** : en-têtes personnalisés envoyés avec chaque requête. -- **limit.context** : nombre maximal de jetons d'entrée acceptés par le modèle. -- **limit.output** : nombre maximal de jetons que le modèle peut générer. - -Les champs `limit` permettent à OpenCode de comprendre la quantité de contexte qu'il vous reste. Les fournisseurs standard les extraient automatiquement de models.dev. - ---- - -## Dépannage - -Si vous rencontrez des difficultés lors de la configuration d'un fournisseur, vérifiez les points suivants : - -1. **Vérifiez la configuration de l'authentification** : exécutez `opencode auth list` pour voir si les informations d'identification - pour le fournisseur sont ajoutés à votre configuration. - -Cela ne s'applique pas aux fournisseurs comme Amazon Bedrock, qui s'appuient sur des variables d'environnement pour leur authentification. - -2. Pour les fournisseurs personnalisés, vérifiez la configuration opencode et : - - Assurez-vous que l'ID du fournisseur utilisé dans la commande `/connect` correspond à l'ID de votre configuration opencode. - - Le bon package npm est utilisé pour le fournisseur. Par exemple, utilisez `@ai-sdk/cerebras` pour Cerebras. Et pour tous les autres fournisseurs compatibles OpenAI, utilisez `@ai-sdk/openai-compatible`. - - Vérifiez que le point de terminaison API correct est utilisé dans le champ `options.baseURL`. diff --git a/packages/web/src/content/docs/fr/rules.mdx b/packages/web/src/content/docs/fr/rules.mdx deleted file mode 100644 index 2b0d13c724..0000000000 --- a/packages/web/src/content/docs/fr/rules.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: Règles -description: Définissez des instructions personnalisées pour opencode. ---- - -Vous pouvez fournir des instructions personnalisées à opencode en créant un fichier `AGENTS.md`. Ceci est similaire aux règles du curseur. Il contient des instructions qui seront incluses dans le contexte du LLM pour personnaliser son comportement pour votre projet spécifique. - ---- - -## Initialiser - -Pour créer un nouveau fichier `AGENTS.md`, vous pouvez exécuter la commande `/init` dans opencode. - -:::tip -Vous devez valider le fichier `AGENTS.md` de votre projet dans Git. -::: - -Cela analysera votre projet et tout son contenu pour comprendre de quoi il s'agit et générera un fichier `AGENTS.md` avec celui-ci. Cela aide opencode à mieux naviguer dans le projet. - -Si vous avez un fichier `AGENTS.md` existant, cela tentera de l'ajouter. - ---- - -## Exemple - -Vous pouvez également simplement créer ce fichier manuellement. Voici un exemple de certaines choses que vous pouvez mettre dans un fichier `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` -``` - -Nous ajoutons ici des instructions spécifiques au projet et celles-ci seront partagées au sein de votre équipe. - ---- - -## Types - -opencode prend également en charge la lecture du fichier `AGENTS.md` à partir de plusieurs emplacements. Et cela répond à des objectifs différents. - -### Projet - -Placez un `AGENTS.md` à la racine de votre projet pour les règles spécifiques au projet. Celles-ci ne s'appliquent que lorsque vous travaillez dans ce répertoire ou ses sous-répertoires. - -### Mondial - -Vous pouvez également avoir des règles globales dans un fichier `~/.config/opencode/AGENTS.md`. Ceci est appliqué à toutes les sessions opencode. - -Étant donné que cela n'est pas validé par Git ni partagé avec votre équipe, nous vous recommandons de l'utiliser pour spécifier les règles personnelles que le LLM doit suivre. - -### Compatibilité des codes Claude - -Pour les utilisateurs migrant depuis Claude Code, OpenCode prend en charge les conventions de fichiers de Claude Code comme solutions de secours : - -- **Règles du projet** : `CLAUDE.md` dans le répertoire de votre projet (utilisé si aucun `AGENTS.md` n'existe) -- **Règles globales** : `~/.claude/CLAUDE.md` (utilisé si aucun `~/.config/opencode/AGENTS.md` n'existe) -- **Compétences** : `~/.claude/skills/` — voir [Compétences de l'agent](/docs/skills/) pour plus de détails - -Pour désactiver la compatibilité Claude Code, définissez l'une de ces variables d'environnement : - -```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 -``` - ---- - -## Priorité - -Lorsque opencode démarre, il recherche les fichiers de règles dans cet ordre : - -1. **Fichiers locaux** en parcourant le répertoire actuel (`AGENTS.md`, `CLAUDE.md`) -2. **Fichier global** à `~/.config/opencode/AGENTS.md` -3. **Fichier Claude Code** à `~/.claude/CLAUDE.md` (sauf si désactivé) - -Le premier fichier correspondant gagne dans chaque catégorie. Par exemple, si vous possédez à la fois `AGENTS.md` et `CLAUDE.md`, seul `AGENTS.md` est utilisé. De même, `~/.config/opencode/AGENTS.md` a priorité sur `~/.claude/CLAUDE.md`. - ---- - -## Instructions personnalisées - -Vous pouvez spécifier des fichiers d'instructions personnalisés dans votre `opencode.json` ou dans le `~/.config/opencode/opencode.json` global. Cela vous permet, à vous et à votre équipe, de réutiliser les règles existantes plutôt que d'avoir à les dupliquer dans AGENTS.md. - -Exemple: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -Vous pouvez également utiliser des URL distantes pour charger des instructions à partir du Web. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"] -} -``` - -Les instructions à distance sont récupérées avec un délai d'attente de 5 secondes. - -Tous les fichiers d'instructions sont combinés avec vos fichiers `AGENTS.md`. - ---- - -## Référencement de fichiers externes - -Bien que opencode n'analyse pas automatiquement les références de fichiers dans `AGENTS.md`, vous pouvez obtenir des fonctionnalités similaires de deux manières : - -### Utilisation de opencode.json - -L'approche recommandée consiste à utiliser le champ `instructions` dans `opencode.json` : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"] -} -``` - -### Instructions manuelles dans AGENTS.md - -Vous pouvez apprendre à opencode à lire des fichiers externes en fournissant des instructions explicites dans votre `AGENTS.md`. Voici un exemple pratique : - -```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. -``` - -Cette approche vous permet de : - -- Créez des fichiers de règles modulaires et réutilisables -- Partagez des règles entre projets via des liens symboliques ou des sous-modules git -- Gardez AGENTS.md concis tout en faisant référence à des directives détaillées -- Assurez-vous que opencode charge les fichiers uniquement lorsque cela est nécessaire pour une tâche spécifique. - -:::tip -Pour les monorepos ou les projets avec des normes partagées, l'utilisation de `opencode.json` avec des modèles globaux (comme `packages/*/AGENTS.md`) est plus maintenable que les instructions manuelles. -::: diff --git a/packages/web/src/content/docs/fr/sdk.mdx b/packages/web/src/content/docs/fr/sdk.mdx deleted file mode 100644 index ee3a2dc49c..0000000000 --- a/packages/web/src/content/docs/fr/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: SDK -description: Client JS de type sécurisé pour le serveur opencode. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -Le SDK opencode JS/TS fournit un client de type sécurisé pour interagir avec le serveur. -Utilisez-le pour créer des intégrations et contrôler opencode par programme. - -[En savoir plus](/docs/server) sur le fonctionnement du serveur. Pour des exemples, consultez les [projects](/docs/ecosystem#projects) construits par la communauté. - ---- - -## Installer - -Installez le SDK à partir de npm : - -```bash -npm install @opencode-ai/sdk -``` - ---- - -## Créer un client - -Créez une instance de opencode : - -```javascript -import { createOpencode } from "@opencode-ai/sdk" - -const { client } = await createOpencode() -``` - -Cela démarre à la fois un serveur et un client - -#### Options - -| Options | Tapez | Descriptif | Par défaut | -| ---------- | ------------- | -------------------------------------------------- | ----------- | -| `hostname` | `string` | Nom d'hôte du serveur | `127.0.0.1` | -| `port` | `number` | Port du serveur | `4096` | -| `signal` | `AbortSignal` | Signal d'abandon pour annulation | `undefined` | -| `timeout` | `number` | Délai d'attente en ms pour le démarrage du serveur | `5000` | -| `config` | `Config` | Objet de configuration | `{}` | - ---- - -## Configuration - -Vous pouvez transmettre un objet de configuration pour personnaliser le comportement. L'instance récupère toujours votre `opencode.json`, mais vous pouvez remplacer ou ajouter une configuration en ligne : - -```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() -``` - -## Client uniquement - -Si vous disposez déjà d'une instance en cours d'exécution de opencode, vous pouvez créer une instance client pour vous y connecter : - -```javascript -import { createOpencodeClient } from "@opencode-ai/sdk" - -const client = createOpencodeClient({ - baseUrl: "http://localhost:4096", -}) -``` - -#### Options - -| Options | Tapez | Descriptif | Par défaut | -| --------------- | ---------- | -------------------------------------------- | ----------------------- | -| `baseUrl` | `string` | URL du serveur | `http://localhost:4096` | -| `fetch` | `function` | Implémentation de récupération personnalisée | `globalThis.fetch` | -| `parseAs` | `string` | Méthode d'analyse des réponses | `auto` | -| `responseStyle` | `string` | Style de retour : `data` ou `fields` | `fields` | -| `throwOnError` | `boolean` | Lancez des erreurs au lieu de return | `false` | - ---- - -## Types - -Le SDK inclut des définitions TypeScript pour tous les types API. Importez-les directement : - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -Tous les types sont générés à partir de la spécification OpenAPI du serveur et disponibles dans le fichier de types. - ---- - -## Erreurs - -Le SDK peut générer des erreurs que vous pouvez détecter et gérer : - -```typescript -try { - await client.session.get({ path: { id: "invalid-id" } }) -} catch (error) { - console.error("Failed to get session:", (error as Error).message) -} -``` - ---- - -## Sortie structurée - -Vous pouvez demander une sortie JSON structurée au modèle en spécifiant un `format` avec un schéma JSON. Le modèle utilisera un outil `StructuredOutput` pour renvoyer un JSON validé correspondant à votre schéma. - -### Utilisation de base - -```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"] } -``` - -### Types de format de sortie - -| Type | Description | -| ------------- | ----------------------------------------------------------------- | -| `text` | Par défaut. Réponse textuelle standard (pas de sortie structurée) | -| `json_schema` | Renvoie un JSON validé correspondant au schéma fourni | - -### Format de schéma JSON - -Lors de l'utilisation de `type: 'json_schema'`, fournissez : - -| Champ | Type | Description | -| ------------ | --------------- | --------------------------------------------------------------- | -| `type` | `'json_schema'` | Requis. Spécifie le mode de schéma JSON | -| `schema` | `object` | Requis. Objet JSON Schema définissant la structure de sortie | -| `retryCount` | `number` | Facultatif. Nombre de tentatives de validation (par défaut : 2) | - -### Gestion des erreurs - -Si le modèle ne parvient pas à produire une sortie structurée valide après toutes les tentatives, la réponse inclura une `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) -} -``` - -### Bonnes pratiques - -1. **Fournissez des descriptions claires** dans les propriétés de votre schéma pour aider le modèle à comprendre quelles données extraire -2. **Utilisez `required`** pour spécifier quels champs doivent être présents -3. **Gardez les schémas ciblés** - les schémas imbriqués complexes peuvent être plus difficiles à remplir correctement pour le modèle -4. **Définissez un `retryCount` approprié** - augmentez-le pour les schémas complexes, diminuez-le pour les simples - ---- - -## APIs - -Le SDK expose toutes les API du serveur via un client de type sécurisé. - ---- - -### Mondial - -| Méthode | Descriptif | Réponse | -| ----------------- | ---------------------------------------- | ------------------------------------ | -| `global.health()` | Vérifier l'état et la version du serveur | `{ healthy: true, version: string }` | - ---- - -#### Exemples - -```javascript -const health = await client.global.health() -console.log(health.data.version) -``` - ---- - -### Application - -| Méthode | Descriptif | Réponse | -| -------------- | --------------------------------- | ------------------------------------------- | -| `app.log()` | Écrire une entrée de journal | `boolean` | -| `app.agents()` | Liste tous les agents disponibles | Agent[] | - ---- - -#### Exemples - -```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() -``` - ---- - -### Projet - -| Méthode | Descriptif | Réponse | -| ------------------- | -------------------------- | --------------------------------------------- | -| `project.list()` | Lister tous les projets | Project[] | -| `project.current()` | Obtenir le projet en cours | Project | - ---- - -#### Exemples - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### Chemin - -| Méthode | Descriptif | Réponse | -| ------------ | ------------------------ | ---------------------------------------- | -| `path.get()` | Obtenir le chemin actuel | Path | - ---- - -#### Exemples - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### Configuration - -| Méthode | Descriptif | Réponse | -| -------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | Obtenir des informations de configuration | Config | -| `config.providers()` | Liste des fournisseurs et modèles par défaut | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### Exemples - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### Séances - -| Méthode | Descriptif | Remarques | -| ---------------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `session.list()` | Liste des séances | Renvoie Session[] | -| `session.get({ path })` | Obtenir une session | Renvoie Session | -| `session.children({ path })` | Liste des sessions enfants | Renvoie Session[] | -| `session.create({ body })` | Créer une séance | Renvoie Session | -| `session.delete({ path })` | Supprimer la séance | Renvoie `boolean` | -| `session.update({ path, body })` | Mettre à jour les propriétés de la session | Renvoie Session | -| `session.init({ path, body })` | Analysez l'application et créez `AGENTS.md` | Renvoie `boolean` | -| `session.abort({ path })` | Abandonner une session en cours | Renvoie `boolean` | -| `session.share({ path })` | Séance de partage | Renvoie Session | -| `session.unshare({ path })` | Annuler le partage de la session | Renvoie Session | -| `session.summarize({ path, body })` | Résumer la séance | Renvoie `boolean` | -| `session.messages({ path })` | Liste des messages dans une session | Renvoie `{ info: `Message`, parts: `Part[]`}[]` | -| `session.message({ path })` | Obtenir les détails du message | Renvoie `{ info: `Message`, parts: `Part[]`}` | -| `session.prompt({ path, body })` | Envoyer un message d'invite | `body.noReply: true` renvoie UserMessage (contexte uniquement). La valeur par défaut renvoie AssistantMessage avec réponse IA. Prend en charge `body.outputFormat` pour [sortie structurée](#structured-output) | -| `session.command({ path, body })` | Envoyer la commande à la session | Renvoie `{ info: `AssistantMessage`, parts: `Part[]`}` | -| `session.shell({ path, body })` | Exécuter une commande shell | Renvoie AssistantMessage | -| `session.revert({ path, body })` | Rétablir un message | Renvoie Session | -| `session.unrevert({ path })` | Restaurer les messages annulés | Renvoie Session | -| `postSessionByIdPermissionsByPermissionId({ path, body })` | Répondre à une demande d'autorisation | Renvoie `boolean` | - ---- - -#### Exemples - -```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." }], - }, -}) -``` - ---- - -### Fichiers - -| Méthode | Descriptif | Réponse | -| ------------------------- | -------------------------------------------------- | --------------------------------------------------------------------------------------------------- | -| `find.text({ query })` | Rechercher du texte dans des fichiers | Tableau d'objets correspondant avec `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `find.files({ query })` | Rechercher des fichiers et des répertoires par nom | `string[]` (chemins) | -| `find.symbols({ query })` | Rechercher des symboles d'espace de travail | Symbol[] | -| `file.read({ query })` | Lire un fichier | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | Obtenir le statut des fichiers suivis | File[] | - -`find.files` prend en charge quelques champs de requête facultatifs : - -- `type` : `"file"` ou `"directory"` -- `directory` : remplace la racine du projet pour la recherche -- `limit` : résultats maximum (1 à 200) - ---- - -#### Exemples - -```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 - -| Méthode | Descriptif | Réponse | -| ------------------------------ | ---------------------------------- | --------- | -| `tui.appendPrompt({ body })` | Ajouter du texte à l'invite | `boolean` | -| `tui.openHelp()` | Ouvrir la boîte de dialogue d'aide | `boolean` | -| `tui.openSessions()` | Ouvrez le sélecteur de session | `boolean` | -| `tui.openThemes()` | Ouvrez le sélecteur de thème | `boolean` | -| `tui.openModels()` | Ouvrez le sélecteur de modèle | `boolean` | -| `tui.submitPrompt()` | Soumettre l'invite actuelle | `boolean` | -| `tui.clearPrompt()` | Effacez l'invite | `boolean` | -| `tui.executeCommand({ body })` | Exécuter une commande | `boolean` | -| `tui.showToast({ body })` | Afficher la notification toast | `boolean` | - ---- - -#### Exemples - -```javascript -// Control TUI interface -await client.tui.appendPrompt({ - body: { text: "Add this to prompt" }, -}) - -await client.tui.showToast({ - body: { message: "Task completed", variant: "success" }, -}) -``` - ---- - -### Authentification - -| Méthode | Descriptif | Réponse | -| ------------------- | ------------------------------------------- | --------- | -| `auth.set({ ... })` | Définir les informations d'authentification | `boolean` | - ---- - -#### Exemples - -```javascript -await client.auth.set({ - path: { id: "anthropic" }, - body: { type: "api", key: "your-api-key" }, -}) -``` - ---- - -### Événements - -| Méthode | Descriptif | Réponse | -| ------------------- | ---------------------------------------- | ---------------------------------------- | -| `event.subscribe()` | Flux d'événements envoyés par le serveur | Flux d'événements envoyés par le serveur | - ---- - -#### Exemples - -```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) -} -``` diff --git a/packages/web/src/content/docs/fr/server.mdx b/packages/web/src/content/docs/fr/server.mdx deleted file mode 100644 index a376f4a18c..0000000000 --- a/packages/web/src/content/docs/fr/server.mdx +++ /dev/null @@ -1,287 +0,0 @@ ---- -title: Serveur -description: Interagissez avec le serveur opencode via HTTP. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -La commande `opencode serve` exécute un serveur HTTP sans tête qui expose un point de terminaison OpenAPI qu'un client opencode peut utiliser. - ---- - -### Usage - -```bash -opencode serve [--port ] [--hostname ] [--cors ] -``` - -#### Options - -| Drapeau | Descriptif | Par défaut | -| --------------- | -------------------------------------------------- | ---------------- | -| `--port` | Port à écouter sur | `4096` | -| `--hostname` | Nom d'hôte sur lequel écouter | `127.0.0.1` | -| `--mdns` | Activer la découverte mDNS | `false` | -| `--mdns-domain` | Nom de domaine personnalisé pour le service mDNS | `opencode.local` | -| `--cors` | Origines de navigateur supplémentaires à autoriser | `[]` | - -`--cors` peut être transmis plusieurs fois : - -```bash -opencode serve --cors http://localhost:5173 --cors https://app.example.com -``` - ---- - -### Authentification - -Définissez `OPENCODE_SERVER_PASSWORD` pour protéger le serveur avec l'authentification de base HTTP. Le nom d'utilisateur est par défaut `opencode`, ou définissez `OPENCODE_SERVER_USERNAME` pour le remplacer. Cela s’applique à la fois à `opencode serve` et à `opencode web`. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve -``` - ---- - -### Comment ça marche - -Lorsque vous exécutez `opencode`, il démarre un TUI et un serveur. Où le TUI est le -client qui parle au serveur. Le serveur expose une spécification OpenAPI 3.1 -point final. Ce point de terminaison est également utilisé pour générer un [SDK](/docs/sdk). - -:::tip -Utilisez le serveur opencode pour interagir avec opencode par programmation. -::: - -Cette architecture permet à opencode de prendre en charge plusieurs clients et vous permet d'interagir avec opencode par programme. - -Vous pouvez exécuter `opencode serve` pour démarrer un serveur autonome. Si vous avez le -opencode TUI en cours d'exécution, `opencode serve` démarrera un nouveau serveur. - ---- - -#### Connectez-vous à un serveur existant - -Lorsque vous démarrez le TUI, il attribue de manière aléatoire un port et un nom d'hôte. Vous pouvez à la place transmettre les `--hostname` et `--port` [flags](/docs/cli). Utilisez-le ensuite pour vous connecter à son serveur. - -Le point de terminaison [`/tui`](#tui) peut être utilisé pour piloter le TUI via le serveur. Par exemple, vous pouvez pré-remplir ou exécuter une invite. Cette configuration est utilisée par les plugins OpenCode [IDE](/docs/ide). - ---- - -## Spécification - -Le serveur publie une spécification OpenAPI 3.1 qui peut être consultée à l'adresse : - -``` -http://:/doc -``` - -Par exemple, `http://localhost:4096/doc`. Utilisez la spécification pour générer des clients ou inspecter les types de requêtes et de réponses. Ou visualisez-le dans un explorateur Swagger. - ---- - -## APIs - -Le serveur opencode expose les API suivantes. - ---- - -### Mondial - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | ---------------- | ------------------------------------------ | ------------------------------------ | -| `GET` | `/global/health` | Obtenir l'état et la version du serveur | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | Obtenez des événements mondiaux (flux SSE) | Flux d'événements | - ---- - -### Projet - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | ------------------ | -------------------------- | --------------------------------------------- | -| `GET` | `/project` | Lister tous les projets | Project[] | -| `GET` | `/project/current` | Obtenez le projet en cours | Project | - ---- - -### Chemin et VCS - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | ------- | ---------------------------------------------------- | ------------------------------------------- | -| `GET` | `/path` | Obtenir le chemin actuel | Path | -| `GET` | `/vcs` | Obtenir des informations VCS pour le projet en cours | VcsInfo | - ---- - -### Exemple - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | ------------------- | ----------------------------- | --------- | -| `POST` | `/instance/dispose` | Supprimer l'instance actuelle | `boolean` | - ---- - -### Configuration - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | ------------------- | -------------------------------------------- | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | Obtenir des informations de configuration | Config | -| `PATCH` | `/config` | Mettre à jour la configuration | Config | -| `GET` | `/config/providers` | Liste des fournisseurs et modèles par défaut | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -### Fournisseur - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | -------------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | Liste de tous les fournisseurs | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | Obtenir les méthodes d'authentification du fournisseur | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | Autoriser un fournisseur en utilisant OAuth | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | Gérer le rappel OAuth pour un fournisseur | `boolean` | - ---- - -### Séances - -| Méthode | Chemin | Descriptif | Remarques | -| -------- | ---------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------ | -| `GET` | `/session` | Liste toutes les sessions | Renvoie Session[] | -| `POST` | `/session` | Créer une nouvelle session | corps : `{ parentID?, title? }`, renvoie Session | -| `GET` | `/session/status` | Obtenir l'état de la session pour toutes les sessions | Renvoie `{ [sessionID: string]: `SessionStatus` }` | -| `GET` | `/session/:id` | Obtenez les détails de la session | Renvoie Session | -| `DELETE` | `/session/:id` | Supprimer une session et toutes ses données | Renvoie `boolean` | -| `PATCH` | `/session/:id` | Mettre à jour les propriétés de la session | corps : `{ title? }`, renvoie Session | -| `GET` | `/session/:id/children` | Obtenir les sessions enfants d'une session | Renvoie Session[] | -| `GET` | `/session/:id/todo` | Obtenez la liste de tâches pour une session | Renvoie Todo[] | -| `POST` | `/session/:id/init` | Analysez l'application et créez `AGENTS.md` | corps : `{ messageID, providerID, modelID }`, renvoie `boolean` | -| `POST` | `/session/:id/fork` | Forkez une session existante à un message | corps : `{ messageID? }`, renvoie Session | -| `POST` | `/session/:id/abort` | Abandonner une session en cours | Renvoie `boolean` | -| `POST` | `/session/:id/share` | Partager une séance | Renvoie Session | -| `DELETE` | `/session/:id/share` | Annuler le partage d'une session | Renvoie Session | -| `GET` | `/session/:id/diff` | Obtenez le diff pour cette session | requête : `messageID?`, renvoie FileDiff[] | -| `POST` | `/session/:id/summarize` | Résumer la séance | corps : `{ providerID, modelID }`, renvoie `boolean` | -| `POST` | `/session/:id/revert` | Rétablir un message | corps : `{ messageID, partID? }`, renvoie `boolean` | -| `POST` | `/session/:id/unrevert` | Restaurer tous les messages annulés | Renvoie `boolean` | -| `POST` | `/session/:id/permissions/:permissionID` | Répondre à une demande d'autorisation | corps : `{ response, remember? }`, renvoie `boolean` | - ---- - -### Messages - -| Méthode | Chemin | Descriptif | Remarques | -| ------- | --------------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `GET` | `/session/:id/message` | Liste des messages dans une session | requête : `limit?`, renvoie `{ info: `Message`, parts: `Part[]`}[]` | -| `POST` | `/session/:id/message` | Envoyer un message et attendre une réponse | corps : `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, renvoie `{ info: `Message`, parts: `Part[]`}` | -| `GET` | `/session/:id/message/:messageID` | Obtenir les détails du message | Renvoie `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/prompt_async` | Envoyer un message de manière asynchrone (pas d'attente) | body : identique à `/session/:id/message`, renvoie `204 No Content` | -| `POST` | `/session/:id/command` | Exécuter une commande slash | corps : `{ messageID?, agent?, model?, command, arguments }`, renvoie `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/shell` | Exécuter une commande shell | corps : `{ agent, model?, command }`, renvoie `{ info: `Message`, parts: `Part[]`}` | - ---- - -### Commandes - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | ---------- | -------------------------- | --------------------------------------------- | -| `GET` | `/command` | Liste toutes les commandes | Command[] | - ---- - -### Fichiers - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | ------------------------ | -------------------------------------------------- | --------------------------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | Rechercher du texte dans des fichiers | Tableau d'objets correspondant avec `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `GET` | `/find/file?query=` | Rechercher des fichiers et des répertoires par nom | `string[]` (chemins) | -| `GET` | `/find/symbol?query=` | Rechercher des symboles d'espace de travail | Symbol[] | -| `GET` | `/file?path=` | Liste des fichiers et répertoires | FileNode[] | -| `GET` | `/file/content?path=

` | Lire un fichier | FileContent | -| `GET` | `/file/status` | Obtenir le statut des fichiers suivis | File[] | - -#### Paramètres de requête `/find/file` - -- `query` (obligatoire) — chaîne de recherche (correspondance floue) -- `type` (facultatif) — limiter les résultats à `"file"` ou `"directory"` -- `directory` (facultatif) — remplace la racine du projet pour la recherche -- `limit` (facultatif) — résultats maximum (1 à 200) -- `dirs` (facultatif) — indicateur hérité (`"false"` renvoie uniquement les fichiers) - ---- - -### Outils (expérimentaux) - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | ------------------------------------------- | ----------------------------------------------------------- | -------------------------------------------- | -| `GET` | `/experimental/tool/ids` | Répertorier tous les ID d'outils | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | Répertorier les outils avec des schémas JSON pour un modèle | ToolList | - ---- - -### LSP, formateurs et MCP - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | ------------ | ------------------------------------ | -------------------------------------------------------- | -| `GET` | `/lsp` | Obtenir l'état du serveur LSP | LSPStatus[] | -| `GET` | `/formatter` | Obtenir le statut du formateur | FormatterStatus[] | -| `GET` | `/mcp` | Obtenir l'état du serveur MCP | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | Ajouter dynamiquement le serveur MCP | corps : `{ name, config }`, renvoie l'objet d'état MCP | - ---- - -### Agents - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | -------- | --------------------------------- | ------------------------------------------- | -| `GET` | `/agent` | Liste tous les agents disponibles | Agent[] | - ---- - -### Enregistrement - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | ------ | --------------------------------------------------------------------------- | --------- | -| `POST` | `/log` | Écrire une entrée de journal. Corps : `{ service, level, message, extra? }` | `boolean` | - ---- - -### TUI - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | ----------------------- | -------------------------------------------------- | ---------------------------- | -| `POST` | `/tui/append-prompt` | Ajouter du texte à l'invite | `boolean` | -| `POST` | `/tui/open-help` | Ouvrir la boîte de dialogue d'aide | `boolean` | -| `POST` | `/tui/open-sessions` | Ouvrez le sélecteur de session | `boolean` | -| `POST` | `/tui/open-themes` | Ouvrez le sélecteur de thème | `boolean` | -| `POST` | `/tui/open-models` | Ouvrez le sélecteur de modèle | `boolean` | -| `POST` | `/tui/submit-prompt` | Soumettre l'invite actuelle | `boolean` | -| `POST` | `/tui/clear-prompt` | Effacez l'invite | `boolean` | -| `POST` | `/tui/execute-command` | Exécuter une commande (`{ command }`) | `boolean` | -| `POST` | `/tui/show-toast` | Afficher le toast (`{ title?, message, variant }`) | `boolean` | -| `GET` | `/tui/control/next` | Attendre la prochaine demande de contrôle | Objet de demande de contrôle | -| `POST` | `/tui/control/response` | Répondre à une demande de contrôle (`{ body }`) | `boolean` | - ---- - -### Authentification - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | ----------- | --------------------------------------------------------------------------------------------------- | --------- | -| `PUT` | `/auth/:id` | Définissez les informations d'authentification. Le corps doit correspondre au schéma du fournisseur | `boolean` | - ---- - -### Événements - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | -------- | ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | -| `GET` | `/event` | Flux d’événements envoyés par le serveur. Le premier événement est `server.connected`, puis les événements de bus | Flux d'événements envoyés par le serveur | - ---- - -### Documents - -| Méthode | Chemin | Descriptif | Réponse | -| ------- | ------ | ------------------------- | ------------------------------------ | -| `GET` | `/doc` | Spécification OpenAPI 3.1 | Page HTML avec spécification OpenAPI | diff --git a/packages/web/src/content/docs/fr/share.mdx b/packages/web/src/content/docs/fr/share.mdx deleted file mode 100644 index e6b067a8c8..0000000000 --- a/packages/web/src/content/docs/fr/share.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Partager -description: Partagez vos conversations OpenCode. ---- - -La fonctionnalité de partage de OpenCode vous permet de créer des liens publics vers vos conversations OpenCode, afin que vous puissiez collaborer avec vos coéquipiers ou obtenir de l'aide d'autres personnes. - -:::note -Les conversations partagées sont accessibles publiquement à toute personne disposant du lien. -::: - ---- - -## Comment ça marche - -Lorsque vous partagez une conversation, OpenCode : - -1. Crée un URL public unique pour votre session -2. Synchronise l'historique de vos conversations avec nos serveurs -3. Rend la conversation accessible via le lien partageable — `opncd.ai/s/` - ---- - -## Partage - -OpenCode prend en charge trois modes de partage qui contrôlent la manière dont les conversations sont partagées : - ---- - -### Manuel (par défaut) - -Par défaut, OpenCode utilise le mode de partage manuel. Les sessions ne sont pas partagées automatiquement, mais vous pouvez les partager manuellement à l'aide de la commande `/share` : - -``` -/share -``` - -Cela générera un URL unique qui sera copié dans votre presse-papiers. - -Pour définir explicitement le mode manuel dans votre [fichier de configuration](/docs/config) : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - ---- - -### Partage automatique - -Vous pouvez activer le partage automatique pour toutes les nouvelles conversations en définissant l'option `share` sur `"auto"` dans votre [fichier de configuration](/docs/config) : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "auto" -} -``` - -Avec le partage automatique activé, chaque nouvelle conversation sera automatiquement partagée et un lien sera généré. - ---- - -### Désactivé - -Vous pouvez désactiver entièrement le partage en définissant l'option `share` sur `"disabled"` dans votre [fichier de configuration](/docs/config) : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -Pour appliquer cela au sein de votre équipe pour un projet donné, ajoutez-le au `opencode.json` dans votre projet et enregistrez-vous dans Git. - ---- - -## Annuler le partage - -Pour arrêter de partager une conversation et la supprimer de l'accès public : - -``` -/unshare -``` - -Cela supprimera le lien de partage et supprimera les données liées à la conversation. - ---- - -## Confidentialité - -Il y a quelques points à garder à l’esprit lorsque vous partagez une conversation. - ---- - -### Conservation des données - -Les conversations partagées restent accessibles jusqu'à ce que vous les annuliez explicitement. Ce -comprend : - -- Historique complet des conversations -- Tous les messages et réponses -- Métadonnées de session - ---- - -### Recommandations - -- Partagez uniquement les conversations qui ne contiennent pas d'informations sensibles. -- Examinez le contenu de la conversation avant de la partager. -- Annulez le partage des conversations une fois la collaboration terminée. -- Évitez de partager des conversations avec du code propriétaire ou des données confidentielles. -- Pour les projets sensibles, désactivez complètement le partage. - ---- - -## Pour les entreprises - -Pour les déploiements en entreprise, la fonctionnalité de partage peut être : - -- **Désactivé** entièrement pour des raisons de conformité en matière de sécurité -- **Réservé** aux utilisateurs authentifiés via SSO uniquement -- **Auto-hébergé** sur votre propre infrastructure - -[En savoir plus](/docs/enterprise) sur l'utilisation de opencode dans votre organisation. diff --git a/packages/web/src/content/docs/fr/skills.mdx b/packages/web/src/content/docs/fr/skills.mdx deleted file mode 100644 index 05f109d172..0000000000 --- a/packages/web/src/content/docs/fr/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: "Compétences des agents" -description: "Définir un comportement réutilisable via les définitions SKILL.md" ---- - -Les compétences d'agent permettent à OpenCode de découvrir des instructions réutilisables à partir de votre dépôt ou de votre répertoire personnel. -Les compétences sont chargées à la demande via l'outil natif `skill` : les agents voient les compétences disponibles et peuvent charger le contenu complet en cas de besoin. - ---- - -## Placer des fichiers - -Créez un dossier par nom de compétence et insérez-y un `SKILL.md`. -OpenCode recherche ces emplacements : - -- Configuration du projet : `.opencode/skills//SKILL.md` -- Configuration globale : `~/.config/opencode/skills//SKILL.md` -- Compatible Projet Claude : `.claude/skills//SKILL.md` -- Compatible Global Claude : `~/.claude/skills//SKILL.md` -- Compatible avec l'agent de projet : `.agents/skills//SKILL.md` -- Compatible avec les agents globaux : `~/.agents/skills//SKILL.md` - ---- - -## Comprendre la découverte - -Pour les chemins locaux du projet, OpenCode remonte de votre répertoire de travail actuel jusqu'à ce qu'il atteigne l'arbre de travail git. -Il charge tout `skills/*/SKILL.md` correspondant dans `.opencode/` et tout `.claude/skills/*/SKILL.md` ou `.agents/skills/*/SKILL.md` correspondant en cours de route. - -Les définitions globales sont également chargées à partir de `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` et `~/.agents/skills/*/SKILL.md`. - ---- - -## Écrire un texte de présentation - -Chaque `SKILL.md` doit commencer par YAML frontmatter. -Seuls ces champs sont reconnus : - -- `name` (obligatoire) -- `description` (obligatoire) -- `license` (facultatif) -- `compatibility` (facultatif) -- `metadata` (facultatif, mappage chaîne à chaîne) - -Les champs de contenu inconnus sont ignorés. - ---- - -## Valider les noms - -`name` doit : - -- Comprenant entre 1 et 64 caractères -- Être alphanumérique en minuscules avec des séparateurs à tiret unique -- Ne commence ni ne termine par `-` -- Ne contient pas de `--` consécutifs -- Faites correspondre le nom du répertoire qui contient `SKILL.md` - -Expression régulière équivalente : - -```text -^[a-z0-9]+(-[a-z0-9]+)*$ -``` - ---- - -## Suivez les règles de longueur - -`description` doit comporter entre 1 et 1 024 caractères. -Gardez-le suffisamment précis pour que l'agent puisse choisir correctement. - ---- - -## Utiliser un exemple - -Créez `.opencode/skills/git-release/SKILL.md` comme ceci : - -```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. -``` - ---- - -## Reconnaître la description de l'outil - -OpenCode répertorie les compétences disponibles dans la description de l'outil `skill`. -Chaque entrée comprend le nom et la description de la compétence : - -```xml - - - git-release - Create consistent releases and changelogs - - -``` - -L'agent charge une compétence en appelant l'outil : - -``` -skill({ name: "git-release" }) -``` - ---- - -## Configurer les autorisations - -Contrôlez les compétences auxquelles les agents peuvent accéder à l'aide d'autorisations basées sur des modèles dans `opencode.json` : - -```json -{ - "permission": { - "skill": { - "*": "allow", - "pr-review": "allow", - "internal-*": "deny", - "experimental-*": "ask" - } - } -} -``` - -| Autorisation | Comportement | -| ------------ | --------------------------------------------------------------------- | -| `allow` | Les compétences se chargent immédiatement | -| `deny` | Compétence masquée à l'agent, accès refusé | -| `ask` | L'utilisateur est invité à donner son approbation avant le chargement | - -Les modèles prennent en charge les caractères génériques : `internal-*` correspond à `internal-docs`, `internal-tools`, etc. - ---- - -## Remplacement par agent - -Accordez à des agents spécifiques des autorisations différentes de celles par défaut globales. - -**Pour les agents personnalisés** (dans la rubrique Agent) : - -```yaml ---- -permission: - skill: - "documents-*": "allow" ---- -``` - -**Pour les agents intégrés** (dans `opencode.json`) : - -```json -{ - "agent": { - "plan": { - "permission": { - "skill": { - "internal-*": "allow" - } - } - } - } -} -``` - ---- - -## Désactiver l'outil de compétences - -Désactivez complètement les compétences pour les agents qui ne devraient pas les utiliser : - -**Pour les agents personnalisés** : - -```yaml ---- -tools: - skill: false ---- -``` - -**Pour les agents intégrés** : - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -Lorsqu'elle est désactivée, la section `` est entièrement omise. - ---- - -## Dépanner le chargement - -Si une compétence n'apparaît pas : - -1. Vérifiez que `SKILL.md` est écrit en majuscules -2. Vérifiez que le frontmatter inclut `name` et `description` -3. Assurez-vous que les noms des compétences sont uniques sur tous les sites -4. Vérifiez les autorisations : les compétences avec `deny` sont masquées aux agents diff --git a/packages/web/src/content/docs/fr/themes.mdx b/packages/web/src/content/docs/fr/themes.mdx deleted file mode 100644 index 696e56d59c..0000000000 --- a/packages/web/src/content/docs/fr/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -title: Thèmes -description: Sélectionnez un thème intégré ou définissez le vôtre. ---- - -Avec OpenCode, vous pouvez choisir parmi plusieurs thèmes intégrés, utiliser un thème qui s'adapte au thème de votre terminal ou définir votre propre thème personnalisé. - -Par défaut, OpenCode utilise notre propre thème `opencode`. - ---- - -## Exigences des terminaux - -Pour que les thèmes s'affichent correctement avec leur palette de couleurs complète, votre terminal doit prendre en charge **truecolor** (couleur 24 bits). La plupart des terminaux modernes le prennent en charge par défaut, mais vous devrez peut-être l'activer : - -- **Vérifiez le support** : Exécutez `echo $COLORTERM` - il devrait afficher `truecolor` ou `24bit` -- **Activer truecolor** : définissez la variable d'environnement `COLORTERM=truecolor` dans votre profil shell -- **Compatibilité des terminaux** : assurez-vous que votre émulateur de terminal prend en charge les couleurs 24 bits (la plupart des terminaux modernes comme iTerm2, Alacritty, Kitty, Windows Terminal et les versions récentes de GNOME Terminal le font) - -Sans la prise en charge de TrueColor, les thèmes peuvent apparaître avec une précision des couleurs réduite ou revenir à l'approximation de 256 couleurs la plus proche. - ---- - -## Thèmes intégrés - -OpenCode est livré avec plusieurs thèmes intégrés. - -| Nom | Descriptif | -| ---------------------- | --------------------------------------------------------------------------- | -| `system` | S'adapte à la couleur de fond de votre terminal | -| `tokyonight` | Basé sur le thème [Tokyonight](https://github.com/folke/tokyonight.nvim) | -| `everforest` | Basé sur le thème [Everforest](https://github.com/sainnhe/everforest) | -| `ayu` | Basé sur le thème sombre [Ayu](https://github.com/ayu-theme) | -| `catppuccin` | Basé sur le thème [Catppuccin](https://github.com/catppuccin) | -| `catppuccin-macchiato` | Basé sur le thème [Catppuccin](https://github.com/catppuccin) | -| `gruvbox` | Basé sur le thème [Gruvbox](https://github.com/morhetz/gruvbox) | -| `kanagawa` | Basé sur le thème [Kanagawa](https://github.com/rebelot/kanagawa.nvim) | -| `nord` | Basé sur le thème [Nord](https://github.com/nordtheme/nord) | -| `matrix` | Vert style hacker sur thème noir | -| `one-dark` | Basé sur le thème [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) Dark | - -De plus, nous ajoutons constamment de nouveaux thèmes. - ---- - -## Thème système - -Le thème `system` est conçu pour s'adapter automatiquement à la palette de couleurs de votre terminal. Contrairement aux thèmes traditionnels qui utilisent des couleurs fixes, le thème *system* : - -- **Génère une échelle de gris** : crée une échelle de gris personnalisée basée sur la couleur d'arrière-plan de votre terminal, garantissant un contraste optimal. -- **Utilise les couleurs ANSI** : exploite les couleurs ANSI standard (0-15) pour la coloration syntaxique et les éléments de l'interface utilisateur, qui respectent la palette de couleurs de votre terminal. -- **Préserve les paramètres par défaut du terminal** : utilise `none` pour les couleurs du texte et de l'arrière-plan afin de conserver l'apparence native de votre terminal. - -Le thème système est destiné aux utilisateurs qui : - -- Vous souhaitez que OpenCode corresponde à l'apparence de leur terminal -- Utiliser des schémas de couleurs de terminal personnalisés -- Préférez une apparence cohérente sur toutes les applications de terminal - ---- - -## Utiliser un thème - -Vous pouvez sélectionner un thème en affichant la sélection de thème avec la commande `/theme`. Ou vous pouvez le spécifier dans `tui.json`. - -```json title="tui.json" {3} -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - ---- - -## Thèmes personnalisés - -OpenCode prend en charge un système de thèmes flexible basé sur JSON qui permet aux utilisateurs de créer et de personnaliser facilement des thèmes. - ---- - -### Hiérarchie - -Les thèmes sont chargés à partir de plusieurs répertoires dans l'ordre suivant, les répertoires ultérieurs remplaçant les précédents : - -1. **Thèmes intégrés** - Ceux-ci sont intégrés au binaire -2. **Répertoire de configuration utilisateur** - Défini dans `~/.config/opencode/themes/*.json` ou `$XDG_CONFIG_HOME/opencode/themes/*.json` -3. **Répertoire racine du projet** - Défini dans `/.opencode/themes/*.json` -4. **Répertoire de travail actuel** - Défini dans `./.opencode/themes/*.json` - -Si plusieurs répertoires contiennent un thème portant le même nom, le thème du répertoire ayant la priorité la plus élevée sera utilisé. - ---- - -### Création d'un thème - -Pour créer un thème personnalisé, créez un fichier JSON dans l'un des répertoires de thème. - -Pour les thèmes à l’échelle de l’utilisateur : - -```bash no-frame -mkdir -p ~/.config/opencode/themes -vim ~/.config/opencode/themes/my-theme.json -``` - -Et pour des thèmes spécifiques au projet. - -```bash no-frame -mkdir -p .opencode/themes -vim .opencode/themes/my-theme.json -``` - ---- - -### Format JSON - -Les thèmes utilisent un format JSON flexible avec prise en charge de : - -- **Couleurs hexadécimales** : `"#ffffff"` -- **Couleurs ANSI** : `3` (0-255) -- **Références de couleurs** : `"primary"` ou définitions personnalisées -- **Variantes sombre/clair** : `{"dark": "#000", "light": "#fff"}` -- **Aucune couleur** : `"none"` - Utilise la couleur par défaut du terminal ou le transparent - ---- - -### Définitions des couleurs - -La section `defs` est facultative et elle permet de définir des couleurs réutilisables pouvant être référencées dans le thème. - ---- - -### Paramètres par défaut du terminal - -La valeur spéciale `"none"` peut être utilisée pour n'importe quelle couleur afin d'hériter de la couleur par défaut du terminal. Ceci est particulièrement utile pour créer des thèmes qui se fondent parfaitement dans la palette de couleurs de votre terminal : - -- `"text": "none"` - Utilise la couleur de premier plan par défaut du terminal -- `"background": "none"` - Utilise la couleur d'arrière-plan par défaut du terminal - ---- - -### Exemple - -Voici un exemple de thème personnalisé : - -```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" - } - } -} -``` diff --git a/packages/web/src/content/docs/fr/tools.mdx b/packages/web/src/content/docs/fr/tools.mdx deleted file mode 100644 index 72edf98191..0000000000 --- a/packages/web/src/content/docs/fr/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -title: Outils -description: Gérez les outils qu'un LLM peut utiliser. ---- - -Les outils permettent au LLM d'effectuer des actions dans votre base de code. OpenCode est livré avec un ensemble d'outils intégrés, mais vous pouvez l'étendre avec [outils personnalisés](/docs/custom-tools) ou [serveurs MCP](/docs/mcp-servers). - -Par défaut, tous les outils sont **activés** et n'ont pas besoin d'autorisation pour s'exécuter. Vous pouvez contrôler le comportement de l'outil via [permissions](/docs/permissions). - ---- - -## Configurer - -Utilisez le champ `permission` pour contrôler le comportement de l'outil. Vous pouvez autoriser, refuser ou exiger une approbation pour chaque outil. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny", - "bash": "ask", - "webfetch": "allow" - } -} -``` - -Vous pouvez également utiliser des caractères génériques pour contrôler plusieurs outils à la fois. Par exemple, pour exiger l'approbation de tous les outils d'un serveur MCP : - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "mymcp_*": "ask" - } -} -``` - -[En savoir plus](/docs/permissions) sur la configuration des autorisations. - ---- - -## Intégré - -Voici tous les outils intégrés disponibles dans OpenCode. - ---- - -### frapper - -Exécutez des commandes shell dans votre environnement de projet. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "bash": "allow" - } -} -``` - -Cet outil permet au LLM d'exécuter des commandes de terminal telles que `npm install`, `git status` ou toute autre commande shell. - ---- - -### modifier - -Modifiez les fichiers existants en utilisant des remplacements de chaînes exacts. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Cet outil effectue des modifications précises des fichiers en remplaçant les correspondances de texte exactes. C'est la principale façon dont LLM modifie le code. - ---- - -### écrire - -Créez de nouveaux fichiers ou écrasez ceux existants. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Utilisez-le pour permettre au LLM de créer de nouveaux fichiers. Il écrasera les fichiers existants s'ils existent déjà. - -:::note -L'outil `write` est contrôlé par l'autorisation `edit`, qui couvre toutes les modifications de fichiers (`edit`, `write`, `patch`). -::: - ---- - -### lire - -Lisez le contenu du fichier à partir de votre base de code. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "read": "allow" - } -} -``` - -Cet outil lit les fichiers et renvoie leur contenu. Il prend en charge la lecture de plages de lignes spécifiques pour les fichiers volumineux. - ---- - -### grep - -Recherchez le contenu du fichier à l’aide d’expressions régulières. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "grep": "allow" - } -} -``` - -Recherche rapide de contenu dans votre base de code. Prend en charge la syntaxe regex complète et le filtrage des modèles de fichiers. - ---- - -### globe - -Recherchez des fichiers par correspondance de modèles. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "glob": "allow" - } -} -``` - -Recherchez des fichiers à l'aide de modèles globaux tels que `**/*.js` ou `src/**/*.ts`. Renvoie les chemins de fichiers correspondants triés par heure de modification. - ---- - -### lsp (expérimental) - -Interagissez avec vos serveurs LSP configurés pour obtenir des fonctionnalités d'intelligence du code telles que des définitions, des références, des informations de survol et une hiérarchie d'appels. - -:::note -Cet outil n'est disponible que lorsque `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (ou `OPENCODE_EXPERIMENTAL=true`). -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "lsp": "allow" - } -} -``` - -Les opérations prises en charge incluent `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` et `outgoingCalls`. - -Pour configurer les serveurs LSP disponibles pour votre projet, consultez [LSP Servers](/docs/lsp). - ---- - -### correctif - -Appliquez des correctifs aux fichiers. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Cet outil applique les fichiers de correctifs à votre base de code. Utile pour appliquer des différences et des correctifs provenant de diverses sources. - -:::note -L'outil `patch` est contrôlé par l'autorisation `edit`, qui couvre toutes les modifications de fichiers (`edit`, `write`, `patch`). -::: - ---- - -### compétence - -Chargez une [skill](/docs/skills) (un fichier `SKILL.md`) et renvoyez son contenu dans la conversation. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "skill": "allow" - } -} -``` - ---- - -### à écrire - -Gérez les listes de tâches pendant les sessions de codage. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "todowrite": "allow" - } -} -``` - -Crée et met à jour des listes de tâches pour suivre la progression lors d'opérations complexes. Le LLM l'utilise pour organiser des tâches en plusieurs étapes. - -:::note -Cet outil est désactivé par défaut pour les sous-agents, mais vous pouvez l'activer manuellement. [En savoir plus](/docs/agents/#permissions) -::: - ---- - -### récupération sur le Web - -Récupérer du contenu Web. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "webfetch": "allow" - } -} -``` - -Permet au LLM de récupérer et de lire des pages Web. Utile pour rechercher de la documentation ou rechercher des ressources en ligne. - ---- - -### recherche sur le Web - -Recherchez des informations sur le Web. - -:::note -Cet outil n'est disponible que lors de l'utilisation du fournisseur OpenCode ou lorsque la variable d'environnement `OPENCODE_ENABLE_EXA` est définie sur une valeur véridique (par exemple, `true` ou `1`). - -À activer lors du lancement de OpenCode : - -```bash -OPENCODE_ENABLE_EXA=1 opencode -``` - -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "websearch": "allow" - } -} -``` - -Effectue des recherches sur le Web à l'aide d'Exa AI pour trouver des informations pertinentes en ligne. Utile pour rechercher des sujets, trouver des événements actuels ou collecter des informations au-delà de la limite des données de formation. - -Aucune clé API n'est requise : l'outil se connecte directement au service MCP hébergé d'Exa AI sans authentification. - -:::tip -Utilisez `websearch` lorsque vous avez besoin de rechercher des informations (découverte) et `webfetch` lorsque vous devez récupérer le contenu d'un URL spécifique (récupération). -::: - ---- - -### question - -Posez des questions à l'utilisateur pendant l'exécution. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "question": "allow" - } -} -``` - -Cet outil permet au LLM de poser des questions à l'utilisateur lors d'une tâche. C'est utile pour : - -- Recueillir les préférences ou les exigences des utilisateurs -- Clarifier les instructions ambiguës -- Obtenir des décisions sur les choix de mise en œuvre -- Offrir des choix sur la direction à prendre - -Chaque question comprend un en-tête, le texte de la question et une liste d'options. Les utilisateurs peuvent choisir parmi les options proposées ou saisir une réponse personnalisée. Lorsqu'il y a plusieurs questions, les utilisateurs peuvent naviguer entre elles avant de soumettre toutes les réponses. - ---- - -## Outils personnalisés - -Les outils personnalisés vous permettent de définir vos propres fonctions que le LLM peut appeler. Ceux-ci sont définis dans votre fichier de configuration et peuvent exécuter du code arbitraire. - -[En savoir plus](/docs/custom-tools) sur la création d'outils personnalisés. - ---- - -## Serveurs MCP - -Les serveurs MCP (Model Context Protocol) vous permettent d'intégrer des outils et services externes. Cela inclut l'accès à la base de données, les intégrations API et les services tiers. - -[En savoir plus](/docs/mcp-servers) sur la configuration des serveurs MCP. - ---- - -## Internes - -En interne, des outils comme `grep` et `glob` utilisent [ripgrep](https://github.com/BurntSushi/ripgrep) sous le capot. Par défaut, ripgrep respecte les modèles `.gitignore`, ce qui signifie que les fichiers et répertoires répertoriés dans votre `.gitignore` seront exclus des recherches et des listes. - ---- - -### Ignorer les modèles - -Pour inclure des fichiers qui seraient normalement ignorés, créez un fichier `.ignore` à la racine de votre projet. Ce fichier peut autoriser explicitement certains chemins. - -```text title=".ignore" -!node_modules/ -!dist/ -!build/ -``` - -Par exemple, ce fichier `.ignore` permet à ripgrep de rechercher dans les répertoires `node_modules/`, `dist/` et `build/` même s'ils sont répertoriés dans `.gitignore`. diff --git a/packages/web/src/content/docs/fr/troubleshooting.mdx b/packages/web/src/content/docs/fr/troubleshooting.mdx deleted file mode 100644 index b33e476e2e..0000000000 --- a/packages/web/src/content/docs/fr/troubleshooting.mdx +++ /dev/null @@ -1,300 +0,0 @@ ---- -title: Dépannage -description: Problèmes courants et comment les résoudre. ---- - -Pour déboguer les problèmes avec OpenCode, commencez par vérifier les journaux et les données locales qu'il stocke sur le disque. - ---- - -## Journaux - -Les fichiers journaux sont écrits dans : - -- **macOS/Linux** : `~/.local/share/opencode/log/` -- **Windows** : appuyez sur `WIN+R` et collez `%USERPROFILE%\.local\share\opencode\log` - -Les fichiers journaux sont nommés avec des horodatages (par exemple, `2025-01-09T123456.log`) et les 10 fichiers journaux les plus récents sont conservés. - -Vous pouvez définir le niveau de journalisation avec l'option de ligne de commande `--log-level` pour obtenir des informations de débogage plus détaillées. Par exemple, `opencode --log-level DEBUG`. - ---- - -## Stockage - -opencode stocke les données de session et autres données d'application sur le disque à l'emplacement : - -- **macOS/Linux** : `~/.local/share/opencode/` -- **Windows** : appuyez sur `WIN+R` et collez `%USERPROFILE%\.local\share\opencode` - -Ce répertoire contient : - -- `auth.json` - Données d'authentification telles que les clés API, les jetons OAuth -- `log/` - Journaux d'applications -- `project/` - Données spécifiques au projet telles que les données de session et de message - - Si le projet se trouve dans un dépôt Git, il est stocké dans `.//storage/` - - S'il ne s'agit pas d'un dépôt Git, il est stocké dans `./global/storage/` - ---- - -## Application de bureau - -OpenCode Desktop exécute un serveur OpenCode local (le side-car `opencode-cli`) en arrière-plan. La plupart des problèmes sont causés par un plugin qui se comporte mal, un cache corrompu ou un mauvais paramètre du serveur. - -### Vérifications rapides - -- Quittez complètement et relancez l'application. -- Si l'application affiche un écran d'erreur, cliquez sur **Redémarrer** et copiez les détails de l'erreur. -- macOS uniquement : menu `OpenCode` -> **Recharger la vue Web** (aide si l'interface utilisateur est vide/gelée). - ---- - -### Désactiver les plugins - -Si l'application de bureau plante au lancement, se bloque ou se comporte étrangement, commencez par désactiver les plugins. - -#### Vérifiez la configuration globale - -Ouvrez votre fichier de configuration global et recherchez une clé `plugin`. - -- **macOS/Linux** : `~/.config/opencode/opencode.jsonc` (ou `~/.config/opencode/opencode.json`) -- **macOS/Linux** (anciennes installations) : `~/.local/share/opencode/opencode.jsonc` -- **Windows** : appuyez sur `WIN+R` et collez `%USERPROFILE%\.config\opencode\opencode.jsonc` - -Si vous avez configuré des plugins, désactivez-les temporairement en supprimant la clé ou en la définissant sur un tableau vide : - -```jsonc -{ - "$schema": "https://opencode.ai/config.json", - "plugin": [], -} -``` - -#### Vérifiez les répertoires des plugins - -OpenCode peut également charger des plugins locaux à partir du disque. Écartez-les temporairement (ou renommez le dossier) et redémarrez l'application de bureau : - -- **Plugins mondiaux** - - **macOS/Linux** : `~/.config/opencode/plugins/` - - **Windows** : appuyez sur `WIN+R` et collez `%USERPROFILE%\.config\opencode\plugins` -- **Plugins de projet** (uniquement si vous utilisez une configuration par projet) - - `/.opencode/plugins/` - -Si l'application recommence à fonctionner, réactivez les plugins un par un pour trouver celui à l'origine du problème. - ---- - -### Vider le cache - -Si la désactivation des plugins ne résout pas le problème (ou si l'installation d'un plugin est bloquée), videz le cache afin que OpenCode puisse le reconstruire. - -1. Quittez complètement OpenCode Desktop. -2. Supprimez le répertoire cache : - -- **macOS** : Finder -> `Cmd+Shift+G` -> coller `~/.cache/opencode` -- **Linux** : supprimez `~/.cache/opencode` (ou exécutez `rm -rf ~/.cache/opencode`) -- **Windows** : appuyez sur `WIN+R` et collez `%USERPROFILE%\.cache\opencode` - -3. Redémarrez le bureau OpenCode. - ---- - -### Résoudre les problèmes de connexion au serveur - -OpenCode Desktop peut soit démarrer son propre serveur local (par défaut), soit se connecter à un serveur URL que vous avez configuré. - -Si vous voyez une boîte de dialogue **« Échec de la connexion »** (ou si l'application ne dépasse jamais l'écran de démarrage), recherchez un serveur personnalisé URL. - -#### Effacer le serveur par défaut du bureau URL - -Depuis l'écran d'accueil, cliquez sur le nom du serveur (avec le point d'état) pour ouvrir le sélecteur de serveur. Dans la section **Serveur par défaut**, cliquez sur **Effacer**. - -#### Supprimez `server.port` / `server.hostname` de votre configuration - -Si votre `opencode.json(c)` contient une section `server`, supprimez-la temporairement et redémarrez l'application de bureau. - -#### Vérifier les variables d'environnement - -Si `OPENCODE_PORT` est défini dans votre environnement, l'application de bureau tentera d'utiliser ce port pour le serveur local. - -- Désactivez `OPENCODE_PORT` (ou choisissez un port libre) et redémarrez. - ---- - -### Linux : Problèmes Wayland / X11 - -Sur Linux, certaines configurations Wayland peuvent provoquer des fenêtres vides ou des erreurs de composition. - -- Si vous êtes sur Wayland et que l'application est vide/plante, essayez de la lancer avec `OC_ALLOW_WAYLAND=1`. -- Si cela aggrave les choses, supprimez-le et essayez plutôt de le lancer sous une session X11. - ---- - -### Windows : exécution WebView2 - -Sur Windows, OpenCode Desktop nécessite Microsoft Edge **WebView2 Runtime**. Si l'application s'ouvre sur une fenêtre vide ou ne démarre pas, installez/mettez à jour WebView2 et réessayez. - ---- - -### Windows : problèmes de performances généraux - -Si vous rencontrez des performances lentes, des problèmes d'accès aux fichiers ou des problèmes de terminal sur Windows, essayez d'utiliser [WSL (Windows Sous-système pour Linux)](/docs/windows-wsl). WSL fournit un environnement Linux qui fonctionne de manière plus transparente avec les fonctionnalités de OpenCode. - ---- - -### Les notifications ne s'affichent pas - -OpenCode Desktop affiche uniquement les notifications système lorsque : - -- les notifications sont activées pour OpenCode dans les paramètres de votre système d'exploitation, et -- la fenêtre de l'application n'est pas ciblée. - ---- - -### Réinitialiser le stockage des applications de bureau (dernier recours) - -Si l'application ne démarre pas et que vous ne pouvez pas effacer les paramètres depuis l'interface utilisateur, réinitialisez l'état enregistré de l'application de bureau. - -1. Quittez le bureau OpenCode. -2. Recherchez et supprimez ces fichiers (ils se trouvent dans le répertoire de données de l'application OpenCode Desktop) : - -- `opencode.settings.dat` (serveur de bureau par défaut URL) -- `opencode.global.dat` et `opencode.workspace.*.dat` (état de l'interface utilisateur comme les serveurs/projets récents) - -Pour trouver rapidement le répertoire : - -- **macOS** : Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (puis recherchez les noms de fichiers ci-dessus) -- **Linux** : recherchez sous `~/.local/share` les noms de fichiers ci-dessus -- **Windows** : appuyez sur `WIN+R` -> `%APPDATA%` (puis recherchez les noms de fichiers ci-dessus) - ---- - -## Obtenir de l'aide - -Si vous rencontrez des problèmes avec OpenCode : - -1. **Signaler les problèmes le GitHub** - -La meilleure façon de signaler des bogues ou de demander des fonctionnalités consiste à utiliser notre référentiel GitHub : - -[**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues) - -Avant de créer un nouveau problème, recherchez les problèmes existants pour voir si votre problème a déjà été signalé. - -2. **Rejoignez notre Discord** - -Pour obtenir de l'aide en temps réel et une discussion communautaire, rejoignez notre serveur Discord : - -[**opencode.ai/discord**](https://opencode.ai/discord) - ---- - -## Problèmes courants - -Voici quelques problèmes courants et comment les résoudre. - ---- - -### OpenCode ne démarre pas - -1. Vérifiez les journaux pour les messages d'erreur -2. Essayez d'exécuter avec `--print-logs` pour voir la sortie dans le terminal -3. Assurez-vous d'avoir la dernière version avec `opencode upgrade` - ---- - -### Problèmes d'authentification - -1. Essayez de vous réauthentifier avec la commande `/connect` dans le TUI -2. Vérifiez que vos clés API sont valides -3. Assurez-vous que votre réseau autorise les connexions au API du fournisseur. - ---- - -### Modèle non disponible - -1. Vérifiez que vous êtes authentifié auprès du fournisseur -2. Vérifiez que le nom du modèle dans votre configuration est correct -3. Certains modèles peuvent nécessiter un accès ou des abonnements spécifiques - -Si vous rencontrez `ProviderModelNotFoundError`, vous avez probablement tort -faire référence à un modèle quelque part. -Les modèles doivent être référencés comme suit : `/` - -Exemples : - -- `openai/gpt-4.1` -- `openrouter/google/gemini-2.5-flash` -- `opencode/kimi-k2` - -Pour déterminer à quels modèles vous avez accès, exécutez `opencode models` - ---- - -### ErreurInit du fournisseur - -Si vous rencontrez une ProviderInitError, vous avez probablement une configuration non valide ou corrompue. - -Pour résoudre ce problème : - -1. Tout d'abord, vérifiez que votre fournisseur est correctement configuré en suivant le [guide du fournisseur](/docs/providers) -2. Si le problème persiste, essayez d'effacer votre configuration stockée : - - ```bash - rm -rf ~/.local/share/opencode - ``` - -Sur Windows, appuyez sur `WIN+R` et supprimez : `%USERPROFILE%\.local\share\opencode` - -3. Ré-authentifiez-vous auprès de votre fournisseur à l'aide de la commande `/connect` dans le TUI. - ---- - -### Problèmes liés à AI_APICallError et au package du fournisseur - -Si vous rencontrez des erreurs d’appel API, cela peut être dû à des packages de fournisseurs obsolètes. opencode installe dynamiquement les packages du fournisseur (OpenAI, Anthropic, Google, etc.) selon les besoins et les met en cache localement. - -Pour résoudre les problèmes liés au package du fournisseur : - -1. Videz le cache du package du fournisseur : - - ```bash - rm -rf ~/.cache/opencode - ``` - -Sur Windows, appuyez sur `WIN+R` et supprimez : `%USERPROFILE%\.cache\opencode` - -2. Redémarrez opencode pour réinstaller les derniers packages du fournisseur - -Cela forcera opencode à télécharger les versions les plus récentes des packages du fournisseur, ce qui résout souvent les problèmes de compatibilité avec les paramètres du modèle et les modifications de API. - ---- - -### Le copier/coller ne fonctionne pas sur Linux - -Les utilisateurs de Linux doivent disposer de l'un des utilitaires de presse-papiers suivants installés pour que la fonctionnalité copier/coller fonctionne : - -**Pour les systèmes X11 :** - -```bash -apt install -y xclip -# or -apt install -y xsel -``` - -**Pour les systèmes Wayland :** - -```bash -apt install -y wl-clipboard -``` - -**Pour les environnements sans tête :** - -```bash -apt install -y xvfb -# and run: -Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & -export DISPLAY=:99.0 -``` - -opencode détectera si vous utilisez Wayland et préférez `wl-clipboard`, sinon il essaiera de trouver les outils du presse-papiers dans l'ordre : `xclip` et `xsel`. diff --git a/packages/web/src/content/docs/fr/tui.mdx b/packages/web/src/content/docs/fr/tui.mdx deleted file mode 100644 index 79de0d43fb..0000000000 --- a/packages/web/src/content/docs/fr/tui.mdx +++ /dev/null @@ -1,429 +0,0 @@ ---- -title: TUI -description: Utilisation de l’interface utilisateur du terminal OpenCode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode fournit une interface de terminal interactif ou TUI pour travailler sur vos projets avec un LLM. - -L’exécution de OpenCode démarre le TUI pour le répertoire actuel. - -```bash -opencode -``` - -Ou vous pouvez le démarrer pour un répertoire de travail spécifique. - -```bash -opencode /path/to/project -``` - -Une fois que vous êtes dans le TUI, vous pouvez lui envoyer un message. - -```text -Give me a quick summary of the codebase. -``` - ---- - -## Références de fichiers - -Vous pouvez référencer des fichiers dans vos messages en utilisant `@`. Cela effectue une recherche de fichier floue dans le répertoire de travail actuel. - -:::tip -Vous pouvez également utiliser `@` pour référencer des fichiers dans vos messages. -::: - -```text "@packages/functions/src/api/index.ts" -How is auth handled in @packages/functions/src/api/index.ts? -``` - -Le contenu du fichier est automatiquement ajouté à la conversation. - ---- - -## Commandes Bash - -Démarrez un message avec `!` pour exécuter une commande shell. - -```bash frame="none" -!ls -la -``` - -Le résultat de la commande est ajouté à la conversation en tant que résultat de l'outil. - ---- - -## Commandes - -Lorsque vous utilisez le OpenCode TUI, vous pouvez taper `/` suivi d'un nom de commande pour exécuter rapidement des actions. Par exemple: - -```bash frame="none" -/help -``` - -La plupart des commandes ont également une liaison clavier utilisant `ctrl+x` comme touche leader, où `ctrl+x` est la touche leader par défaut. [En savoir plus](/docs/keybinds). - -Voici toutes les commandes slash disponibles : - ---- - -### connect - -Ajoutez un fournisseur à OpenCode. Vous permet de sélectionner parmi les fournisseurs disponibles et d’ajouter leurs clés API. - -```bash frame="none" -/connect -``` - ---- - -### compact - -Compactez la session en cours. *Alias* : `/summarize` - -```bash frame="none" -/compact -``` - -**Reliure de touches :** `ctrl+x c` - ---- - -### details - -Basculer les détails d'exécution de l'outil. - -```bash frame="none" -/details -``` - -**Reliure de touches :** `ctrl+x d` - ---- - -### editor - -Ouvrez un éditeur externe pour rédiger des messages. Utilise l'éditeur défini dans votre variable d'environnement `EDITOR`. [En savoir plus](#editor-setup). - -```bash frame="none" -/editor -``` - -**Reliure de touches :** `ctrl+x e` - ---- - -### exit - -Quittez OpenCode. *Alias* : `/quit`, `/q` - -```bash frame="none" -/exit -``` - -**Reliure de touches :** `ctrl+x q` - ---- - -### export - -Exportez la conversation en cours vers Markdown et ouvrez-la dans votre éditeur par défaut. Utilise l'éditeur défini dans votre variable d'environnement `EDITOR`. [En savoir plus](#editor-setup). - -```bash frame="none" -/export -``` - -**Reliure de touches :** `ctrl+x x` - ---- - -### help - -Afficher la boîte de dialogue d'aide. - -```bash frame="none" -/help -``` - -**Reliure de touches :** `ctrl+x h` - ---- - -### init - -Créez ou mettez à jour le fichier `AGENTS.md`. [En savoir plus](/docs/rules). - -```bash frame="none" -/init -``` - -**Reliure de touches :** `ctrl+x i` - ---- - -### models - -Liste des modèles disponibles. - -```bash frame="none" -/models -``` - -**Reliure de touches :** `ctrl+x m` - ---- - -### new - -Démarrez une nouvelle session. *Alias* : `/clear` - -```bash frame="none" -/new -``` - -**Reliure de touches :** `ctrl+x n` - ---- - -### redo - -Refaire un message précédemment annulé. Disponible uniquement après avoir utilisé `/undo`. - -:::tip -Toutes les modifications de fichiers seront également restaurées. -::: - -En interne, cela utilise Git pour gérer les modifications de fichiers. Votre projet **doit donc -être un dépôt Git**. - -```bash frame="none" -/redo -``` - -**Reliure de touches :** `ctrl+x r` - ---- - -### sessions - -Répertoriez et basculez entre les sessions. *Alias* : `/resume`, `/continue` - -```bash frame="none" -/sessions -``` - -**Reliure de touches :** `ctrl+x l` - ---- - -### share - -Partager la session en cours. [En savoir plus](/docs/share). - -```bash frame="none" -/share -``` - -**Reliure de touches :** `ctrl+x s` - ---- - -### theme - -Répertoriez les thèmes disponibles. - -```bash frame="none" -/theme -``` - -**Reliure de touches :** `ctrl+x t` - ---- - -### thinking - -Activez/désactivez la visibilité des blocages de réflexion/raisonnement dans la conversation. Lorsque cette option est activée, vous pouvez voir le processus de raisonnement du modèle pour les modèles prenant en charge la réflexion étendue. - -:::note -Cette commande contrôle uniquement si les blocs de réflexion sont **affichés** ; elle n'active ni ne désactive les capacités de raisonnement du modèle. Pour basculer entre les capacités de raisonnement réelles, utilisez `ctrl+t` pour parcourir les variantes du modèle. -::: - -```bash frame="none" -/thinking -``` - ---- - -### undo - -Annuler le dernier message de la conversation. Supprime le message utilisateur le plus récent, toutes les réponses ultérieures et toutes les modifications de fichier. - -:::tip -Toutes les modifications apportées au fichier seront également annulées. -::: - -En interne, cela utilise Git pour gérer les modifications de fichiers. Votre projet **doit donc -être un dépôt Git**. - -```bash frame="none" -/undo -``` - -**Reliure de touches :** `ctrl+x u` - ---- - -### unshare - -Annuler le partage de la session en cours. [En savoir plus](/docs/share#un-sharing). - -```bash frame="none" -/unshare -``` - ---- - -## Configuration de l'éditeur - -Les commandes `/editor` et `/export` utilisent l'éditeur spécifié dans votre variable d'environnement `EDITOR`. - - - - ```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" - ``` - -Pour le rendre permanent, ajoutez-le à votre profil shell ; -`~/.bashrc`, `~/.zshrc`, etc. - - - - - ```bash - set EDITOR=notepad - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - set EDITOR=code --wait - ``` - -Pour le rendre permanent, utilisez **Propriétés système** > **Environnement -Variables**. - - - - - ```powershell - $env:EDITOR = "notepad" - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - $env:EDITOR = "code --wait" - ``` - -Pour le rendre permanent, ajoutez-le à votre profil PowerShell. - - - - -Les options d'éditeur populaires incluent : - -- `code`-Code Visual Studio -- `cursor` - Curseur -- `windsurf` - Planche à voile -- `nvim` - Editeur Neovim -- `vim` - Éditeur Vim -- `nano` - Éditeur nano -- `notepad` - Windows Bloc-notes -- `subl` - Texte sublime - -:::note -Certains éditeurs comme VS Code doivent être démarrés avec le drapeau `--wait`. -::: - -Certains éditeurs ont besoin d'arguments de ligne de commande pour s'exécuter en mode blocage. L'indicateur `--wait` bloque le processus de l'éditeur jusqu'à sa fermeture. - ---- - -## Configurer - -Vous pouvez personnaliser le comportement de TUI via `tui.json` (ou `tui.jsonc`). - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -Ceci est séparé de `opencode.json`, qui configure le comportement du serveur/d'exécution. - -`keybinds` est fusionné avec les valeurs par défaut intégrées, vous ne devez donc configurer que les raccourcis que vous souhaitez modifier. - -### Options - -- `theme` - Définit votre thème d'interface utilisateur. [En savoir plus](/docs/themes). -- `keybinds` - Personnalise les raccourcis clavier. [En savoir plus](/docs/keybinds). -- `leader_timeout` - Contrôle la durée pendant laquelle OpenCode attend après la leader key. Valeur par défaut : `2000`. -- `scroll_acceleration.enabled` - Activez l'accélération de défilement de style macOS pour un défilement fluide et naturel. Lorsqu'elle est activée, la vitesse de défilement augmente avec les gestes de défilement rapides et reste précise pour les mouvements plus lents. **Ce paramètre est prioritaire sur `scroll_speed` et le remplace lorsqu'il est activé.** -- `scroll_speed` - Contrôle la vitesse de défilement du TUI lors de l'utilisation des commandes de défilement (minimum : `0.001`, prend en charge les valeurs décimales). La valeur par défaut est `3`. **Remarque : Ceci est ignoré si `scroll_acceleration.enabled` est défini sur `true`.** -- `diff_style` - Contrôle le rendu différentiel. `"auto"` s'adapte à la largeur du terminal, `"stacked"` affiche toujours une seule colonne. -- `mouse` - Active ou désactive la capture de la souris dans le TUI (valeur par défaut : `true`). Lorsque cette option est désactivée, le comportement natif du terminal pour la sélection et le défilement à la souris est conservé. -- `attention` - Configure les notifications de bureau et les sons du TUI. Désactivé par défaut. - -Utilisez `OPENCODE_TUI_CONFIG` pour charger un chemin de configuration TUI personnalisé. - -### Attention - -Attention permet au TUI de vous prévenir quand OpenCode attend une réponse, une autorisation, qu'une erreur de session doit être consultée ou qu'une session est terminée. Activez-le avec `attention.enabled` ; les événements intégrés jouent un son lorsqu'ils se produisent. Les notifications de bureau ne sont envoyées que lorsque la fenêtre du terminal n'est pas au premier plan, et elles ne sont pas utilisées pour les événements de subagent. - -- `enabled` - Active toutes les notifications et tous les sons d'Attention. Valeur par défaut : `false`. -- `notifications` - Lorsque Attention est activé, autorise le TUI à envoyer des notifications de bureau via le terminal. Valeur par défaut : `true`. -- `sound` - Lorsque Attention est activé, autorise la lecture des sons d'alerte. Valeur par défaut : `true`. -- `volume` - Volume par défaut des sons, de `0` à `1`. Valeur par défaut : `0.4`. -- `sound_pack` - ID du sound pack à utiliser. Valeur par défaut : `opencode.default`. -- `sounds` - Définit des fichiers sonores personnalisés pour `default`, `question`, `permission`, `error`, `done` ou `subagent_done`. Les chemins peuvent être absolus, des URL `file://` ou relatifs à `tui.json`. - ---- - -## Personnalisation - -Vous pouvez personnaliser divers aspects de la vue TUI à l'aide de la palette de commandes (`ctrl+x h` ou `/help`). Ces paramètres persistent lors des redémarrages. - ---- - -#### Affichage du nom d'utilisateur - -Indiquez si votre nom d'utilisateur apparaît dans les messages de discussion. Accédez-y via : - -- Palette de commandes : recherchez "nom d'utilisateur" ou "masquer le nom d'utilisateur" -- Le paramètre persiste automatiquement et sera mémorisé au cours de TUI sessions. diff --git a/packages/web/src/content/docs/fr/web.mdx b/packages/web/src/content/docs/fr/web.mdx deleted file mode 100644 index c24a3095e9..0000000000 --- a/packages/web/src/content/docs/fr/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Web -description: En utilisant OpenCode dans votre navigateur. ---- - -OpenCode peut s'exécuter comme une application Web dans votre navigateur, offrant la même expérience puissante de codage d'IA sans avoir besoin d'un terminal. - -![OpenCode Web - Nouvelle session](../../../assets/web/web-homepage-new-session.png) - -## Commencer - -Démarrez l'interface Web en exécutant : - -```bash -opencode web -``` - -Cela démarre un serveur local sur `127.0.0.1` avec un port disponible aléatoire et ouvre automatiquement OpenCode dans votre navigateur par défaut. - -:::caution -Si `OPENCODE_SERVER_PASSWORD` n'est pas défini, le serveur ne sera pas sécurisé. C'est bien pour une utilisation locale mais doit être défini pour l'accès au réseau. -::: - -:::tip[Windows Utilisateurs] -Pour une expérience optimale, exécutez `opencode web` à partir de [WSL](/docs/windows-wsl) plutôt que de PowerShell. Cela garantit un accès correct au système de fichiers et une intégration du terminal. -::: - ---- - -## Configuration - -Vous pouvez configurer le serveur Web à l'aide d'indicateurs de ligne de commande ou dans votre [fichier de configuration](/docs/config). - -### Port - -Par défaut, OpenCode sélectionne un port disponible. Vous pouvez spécifier un port : - -```bash -opencode web --port 4096 -``` - -### Nom d'hôte - -Par défaut, le serveur se lie à `127.0.0.1` (localhost uniquement). Pour rendre OpenCode accessible sur votre réseau : - -```bash -opencode web --hostname 0.0.0.0 -``` - -Lorsque vous utilisez `0.0.0.0`, OpenCode affichera les adresses locales et réseau : - -``` - Local access: http://localhost:4096 - Network access: http://192.168.1.100:4096 -``` - -### Découverte mDNS - -Activez mDNS pour rendre votre serveur visible sur le réseau local : - -```bash -opencode web --mdns -``` - -Cela définit automatiquement le nom d'hôte sur `0.0.0.0` et annonce le serveur comme `opencode.local`. - -Vous pouvez personnaliser le nom de domaine mDNS pour exécuter plusieurs instances sur le même réseau : - -```bash -opencode web --mdns --mdns-domain myproject.local -``` - -### CORS - -Pour autoriser des domaines supplémentaires pour CORS (utile pour les frontends personnalisés) : - -```bash -opencode web --cors https://example.com -``` - -### Authentification - -Pour protéger l'accès, définissez un mot de passe à l'aide de la variable d'environnement `OPENCODE_SERVER_PASSWORD` : - -```bash -OPENCODE_SERVER_PASSWORD=secret opencode web -``` - -Le nom d'utilisateur par défaut est `opencode` mais peut être modifié avec `OPENCODE_SERVER_USERNAME`. - ---- - -## Utilisation de l'interface Web - -Une fois démarrée, l'interface web permet d'accéder à vos sessions OpenCode. - -### Sessions - -Consultez et gérez vos sessions depuis la page d'accueil. Vous pouvez voir les sessions actives et en démarrer de nouvelles. - -![OpenCode Web - Session active](../../../assets/web/web-homepage-active-session.png) - -### Statut du serveur - -Cliquez sur "Voir les serveurs" pour afficher les serveurs connectés et leur état. - -![OpenCode Web - Voir Serveurs](../../../assets/web/web-homepage-see-servers.png) - ---- - -## Attacher un terminal - -Vous pouvez connecter un terminal TUI à un serveur Web en cours d'exécution : - -```bash -# Start the web server -opencode web --port 4096 - -# In another terminal, attach the TUI -opencode attach http://localhost:4096 -``` - -Cela vous permet d'utiliser simultanément l'interface Web et le terminal, en partageant les mêmes sessions et le même état. - ---- - -## Fichier de configuration - -Vous pouvez également configurer les paramètres du serveur dans votre fichier de configuration `opencode.json` : - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -Les indicateurs de ligne de commande ont priorité sur les paramètres du fichier de configuration. diff --git a/packages/web/src/content/docs/fr/windows-wsl.mdx b/packages/web/src/content/docs/fr/windows-wsl.mdx deleted file mode 100644 index 08563a16e4..0000000000 --- a/packages/web/src/content/docs/fr/windows-wsl.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Windows (WSL) -description: Exécutez OpenCode sur Windows avec WSL pour une expérience optimale. ---- - -import { Steps } from "@astrojs/starlight/components" - -Même si OpenCode peut fonctionner directement sur Windows, nous recommandons d'utiliser [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) pour la meilleure expérience. WSL fournit un environnement Linux qui s'intègre parfaitement aux fonctionnalités d'OpenCode. - -:::tip[Pourquoi WSL?] -WSL offre de meilleures performances du système de fichiers, une prise en charge complète du terminal et la compatibilité avec les outils de développement dont OpenCode dépend. -::: - ---- - -## Configuration - - - -1. **Installez WSL** - - Si ce n'est pas encore fait, [installez WSL](https://learn.microsoft.com/en-us/windows/wsl/install) à l'aide du guide officiel Microsoft. - -2. **Installez OpenCode dans WSL** - - Une fois WSL configuré, ouvrez votre terminal WSL et installez OpenCode avec l'une des [méthodes d'installation](/docs/). - - ```bash - curl -fsSL https://opencode.ai/install | bash - ``` - -3. **Utilisez OpenCode depuis WSL** - - Allez dans votre dossier de projet (accédez aux fichiers Windows via `/mnt/c/`, `/mnt/d/`, etc.) et lancez OpenCode. - - ```bash - cd /mnt/c/Users/YourName/project - opencode - ``` - - - ---- - -## Application bureau + serveur WSL - -Si vous préférez utiliser l'application Desktop OpenCode tout en exécutant le serveur dans WSL: - -1. **Démarrez le serveur dans WSL** avec `--hostname 0.0.0.0` pour autoriser les connexions externes: - - ```bash - opencode serve --hostname 0.0.0.0 --port 4096 - ``` - -2. **Connectez l'application Desktop** à `http://localhost:4096` - -:::note -Si `localhost` ne fonctionne pas dans votre configuration, utilisez plutôt l'adresse IP WSL (depuis WSL: `hostname -I`) et `http://:4096`. -::: - -:::caution -Lorsque vous utilisez `--hostname 0.0.0.0`, définissez `OPENCODE_SERVER_PASSWORD` pour sécuriser le serveur. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0 -``` - -::: - ---- - -## Client web + WSL - -Pour la meilleure expérience web sous Windows: - -1. **Exécutez `opencode web` dans le terminal WSL** plutôt que dans PowerShell: - - ```bash - opencode web --hostname 0.0.0.0 - ``` - -2. **Accédez-y depuis votre navigateur Windows** à `http://localhost:` (OpenCode affiche l'URL) - -Lancer `opencode web` depuis WSL garantit un accès correct au système de fichiers et une bonne intégration terminal, tout en restant accessible depuis votre navigateur Windows. - ---- - -## Accéder aux fichiers Windows - -WSL peut accéder à tous vos fichiers Windows via le répertoire `/mnt/`: - -- Lecteur `C:` → `/mnt/c/` -- Lecteur `D:` → `/mnt/d/` -- Et ainsi de suite... - -Exemple: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -Pour une expérience plus fluide, vous pouvez cloner/copier votre dépôt dans le système de fichiers WSL (par exemple sous `~/code/`) et y exécuter OpenCode. -::: - ---- - -## Conseils - -- Gardez OpenCode dans WSL pour les projets stockés sur des lecteurs Windows: l'accès aux fichiers est fluide -- Utilisez l'[extension WSL de VS Code](https://code.visualstudio.com/docs/remote/wsl) avec OpenCode pour un flux de travail intégré -- Votre configuration OpenCode et vos sessions sont stockées dans l'environnement WSL à `~/.local/share/opencode/` diff --git a/packages/web/src/content/docs/fr/zen.mdx b/packages/web/src/content/docs/fr/zen.mdx deleted file mode 100644 index 8342f76b89..0000000000 --- a/packages/web/src/content/docs/fr/zen.mdx +++ /dev/null @@ -1,301 +0,0 @@ ---- -title: Zen -description: Liste organisée de modèles fournis par OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen est une liste de modèles testés et vérifiés fournie par l'équipe OpenCode. - -Zen fonctionne comme n'importe quel autre fournisseur dans OpenCode. Vous vous connectez à OpenCode Zen et obtenez votre clé API. C'est **entièrement facultatif** et vous n'avez pas besoin de l'utiliser pour utiliser OpenCode. - ---- - -## Arrière-plan - -Il existe un grand nombre de modèles, mais seuls quelques-uns fonctionnent bien comme agents de codage. De plus, la plupart des fournisseurs sont configurés très différemment ; vous obtenez donc des performances et une qualité très variables. - -:::tip -Nous avons testé un groupe sélectionné de modèles et de fournisseurs qui fonctionnent bien avec OpenCode. -::: - -Donc, si vous utilisez un modèle via quelque chose comme OpenRouter, vous ne pouvez jamais être sûr d'obtenir la meilleure version du modèle que vous voulez. - -Pour corriger cela, nous avons fait plusieurs choses : - -1. Nous avons testé un groupe sélectionné de modèles et discuté avec leurs équipes de la meilleure façon de les faire fonctionner. -2. Nous avons ensuite travaillé avec quelques fournisseurs pour nous assurer qu'ils étaient correctement servis. -3. Enfin, nous avons comparé la combinaison modèle/fournisseur et établi une liste que nous recommandons en toute confiance. - -OpenCode Zen est une passerelle AI qui vous donne accès à ces modèles. - ---- - -## Comment ça marche - -OpenCode Zen fonctionne comme n'importe quel autre fournisseur dans OpenCode. - -1. Vous vous connectez à **OpenCode Zen**, ajoutez vos informations de facturation et copiez votre clé API. -2. Vous exécutez la commande `/connect` dans le TUI, sélectionnez OpenCode Zen et collez votre clé API. -3. Exécutez `/models` dans le TUI pour voir la liste des modèles que nous recommandons. - -La facturation se fait à la requête et vous pouvez ajouter des crédits à votre compte. - ---- - -## Points de terminaison - -Vous pouvez également accéder à nos modèles via les points de terminaison API suivants. - -| Modèle | ID du modèle | Point de terminaison | Package 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -Le [model id](/docs/config/#models) dans votre configuration OpenCode utilise le format `opencode/`. Par exemple, pour GPT 5.5, vous utiliseriez `opencode/gpt-5.5` dans votre configuration. - ---- - -### Modèles - -Vous pouvez récupérer la liste complète des modèles disponibles et leurs métadonnées à partir de : - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## Tarification - -Nous prenons en charge un modèle de paiement à l'utilisation. Vous trouverez ci-dessous les prix **par 1M tokens**. - -| Modèle | Input | Output | Cached Read | Cached Write | -| --------------------------------- | ------ | ------- | ----------- | ------------ | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -Vous remarquerez peut-être _Claude Haiku 3.5_ dans votre historique d'utilisation. Il s'agit d'un [modèle à faible coût](/docs/config/#models) utilisé pour générer les titres de vos sessions. - -:::note -Les frais de carte de crédit sont répercutés au prix coûtant (4.4% + $0.30 par transaction) ; nous ne facturons rien au-delà. -::: - -Les modèles gratuits : - -- DeepSeek V4 Flash Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. -- MiMo-V2.5 Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. -- North Mini Code Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. -- Nemotron 3 Ultra Free est disponible sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. -- Big Pickle est un modèle stealth gratuit sur OpenCode pour une durée limitée. L'équipe utilise cette période pour recueillir des retours et améliorer le modèle. - -Contactez-nous si vous avez des questions. - ---- - -### Rechargement automatique - -Si votre solde passe sous $5, Zen rechargera automatiquement $20. - -Vous pouvez modifier le montant du rechargement automatique. Vous pouvez également désactiver complètement le rechargement automatique. - ---- - -### Limites mensuelles - -Vous pouvez également définir une limite d'utilisation mensuelle pour l'ensemble de l'espace de travail et pour chaque membre de votre équipe. - -Par exemple, si vous définissez une limite d'utilisation mensuelle à $20, Zen n'utilisera pas plus de $20 sur un mois. Mais si le rechargement automatique est activé, Zen peut finir par vous facturer plus de $20 si votre solde passe sous $5. - ---- - -### Modèles obsolètes - -| Modèle | Date de dépréciation | -| ------------------ | -------------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## Confidentialité - -Tous nos modèles sont hébergés aux US. Nos fournisseurs suivent une politique de rétention zéro et n'utilisent pas vos données pour l'entraînement des modèles, avec les exceptions suivantes : - -- Big Pickle : Pendant sa période gratuite, les données collectées peuvent être utilisées pour améliorer le modèle. -- DeepSeek V4 Flash Free : Pendant sa période gratuite, les données collectées peuvent être utilisées pour améliorer le modèle. -- MiMo-V2.5 Free : Pendant sa période gratuite, les données collectées peuvent être utilisées pour améliorer le modèle. -- North Mini Code Free : Pendant la période de gratuité, les données collectées peuvent être conservées et utilisées pour améliorer le modèle. Ne transmettez aucune donnée personnelle ou confidentielle. Consultez nos [Conditions d’utilisation](https://cohere.com/terms-of-use) et notre [Politique de confidentialité](https://cohere.com/privacy). -- Nemotron 3 Ultra Free (endpoints NVIDIA gratuits) : Réservé à un usage d'essai — n'envoyez pas de données personnelles ou confidentielles. Votre utilisation est journalisée à des fins de sécurité et pour améliorer les produits et services de NVIDIA. Les données de session journalisées à des fins d'amélioration ne sont pas liées à votre identité ni à un quelconque identifiant persistant. Pour plus d'informations sur nos pratiques de traitement des données, consultez notre [Politique de confidentialité](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). En interagissant avec cet endpoint, vous consentez à notre collecte, à notre enregistrement et à notre utilisation de ces informations ainsi qu'aux [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). -- OpenAI APIs : Les requêtes sont conservées pendant 30 jours conformément à [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). -- Anthropic APIs : Les requêtes sont conservées pendant 30 jours conformément à [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). - ---- - -## Pour les équipes - -Zen fonctionne aussi très bien pour les équipes. Vous pouvez inviter des coéquipiers, attribuer des rôles, sélectionner les modèles que votre équipe utilise, et plus encore. - -:::note -Les espaces de travail sont actuellement gratuits pour les équipes dans le cadre de la version bêta. -::: - -La gestion de votre espace de travail est actuellement gratuite pour les équipes dans le cadre de la version bêta. Nous partagerons bientôt plus de détails sur la tarification. - ---- - -### Rôles - -Vous pouvez inviter des coéquipiers dans votre espace de travail et attribuer des rôles : - -- **Admin** : Gérer les modèles, les membres, les clés API et la facturation -- **Member** : Gérer uniquement ses propres clés API - -Les administrateurs peuvent également définir des limites de dépenses mensuelles pour chaque membre afin de garder les coûts sous contrôle. - ---- - -### Accès aux modèles - -Les administrateurs peuvent activer ou désactiver des modèles spécifiques pour l'espace de travail. Les requêtes effectuées vers un modèle désactivé renverront une erreur. - -Cela est utile si vous souhaitez désactiver l'utilisation d'un modèle qui collecte des données. - ---- - -### Apportez votre propre clé - -Vous pouvez utiliser vos propres clés API OpenAI ou Anthropic tout en accédant à d'autres modèles dans Zen. - -Lorsque vous utilisez vos propres clés, les tokens sont facturés directement par le fournisseur, pas par Zen. - -Par exemple, votre organisation a peut-être déjà une clé pour OpenAI ou Anthropic et vous souhaitez l'utiliser à la place de celle fournie par Zen. - ---- - -## Objectifs - -Nous avons créé OpenCode Zen pour : - -1. **Benchmark** les meilleurs modèles/fournisseurs pour les agents de codage. -2. Avoir accès aux options de **la plus haute qualité** sans dégrader les performances ni basculer vers des fournisseurs moins chers. -3. Répercuter toute **baisse de prix** en vendant au prix coûtant ; la seule marge sert à couvrir nos frais de traitement. -4. N'avoir **aucun lock-in** en vous permettant de l'utiliser avec n'importe quel autre agent de codage. Et toujours vous permettre d'utiliser n'importe quel autre fournisseur avec OpenCode également. diff --git a/packages/web/src/content/docs/it/acp.mdx b/packages/web/src/content/docs/it/acp.mdx deleted file mode 100644 index 046aba5f25..0000000000 --- a/packages/web/src/content/docs/it/acp.mdx +++ /dev/null @@ -1,155 +0,0 @@ ---- -title: Supporto ACP -description: Usa OpenCode in qualunque editor compatibile con ACP. ---- - -OpenCode supporta [Agent Client Protocol](https://agentclientprotocol.com) (ACP), permettendoti di usarlo direttamente in editor e IDE compatibili. - -:::tip -Per una lista di editor e tool che supportano ACP, vedi l'[ACP progress report](https://zed.dev/blog/acp-progress-report#available-now). -::: - -ACP e è un protocollo aperto che standardizza la comunicazione tra editor di codice e agenti di coding AI. - ---- - -## Configurazione - -Per usare OpenCode via ACP, configura l'editor in modo che esegua il comando `opencode acp`. - -Il comando avvia OpenCode come sottoprocesso compatibile con ACP che comunica con l'editor via JSON-RPC su stdio. - -Qui sotto trovi esempi per editor popolari che supportano ACP. - ---- - -### Zed - -Aggiungi alla configurazione di [Zed](https://zed.dev) (`~/.config/zed/settings.json`): - -```json title="~/.config/zed/settings.json" -{ - "agent_servers": { - "OpenCode": { - "command": "opencode", - "args": ["acp"] - } - } -} -``` - -Per aprirlo, usa l'azione `agent: new thread` nella **Command Palette**. - -Puoi anche assegnare una scorciatoia da tastiera modificando `keymap.json`: - -```json title="keymap.json" -[ - { - "bindings": { - "cmd-alt-o": [ - "agent::NewExternalAgentThread", - { - "agent": { - "custom": { - "name": "OpenCode", - "command": { - "command": "opencode", - "args": ["acp"] - } - } - } - } - ] - } - } -] -``` - ---- - -### JetBrains IDEs - -Aggiungi al tuo acp.json per [JetBrains IDE](https://www.jetbrains.com/) secondo la [documentazione](https://www.jetbrains.com/help/ai-assistant/acp.html): - -```json title="acp.json" -{ - "agent_servers": { - "OpenCode": { - "command": "/absolute/path/bin/opencode", - "args": ["acp"] - } - } -} -``` - -Per aprirlo, seleziona il nuovo agente 'OpenCode' nel selettore agenti di AI Chat. - ---- - -### Avante.nvim - -Aggiungi alla configurazione di [Avante.nvim](https://github.com/yetone/avante.nvim): - -```lua -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" } - } - } -} -``` - -Se devi passare variabili d'ambiente: - -```lua {6-8} -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" }, - env = { - OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY") - } - } - } -} -``` - ---- - -### CodeCompanion.nvim - -Per usare OpenCode come agente ACP in [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), aggiungi quanto segue alla config di Neovim: - -```lua -require("codecompanion").setup({ - interactions = { - chat = { - adapter = { - name = "opencode", - model = "claude-sonnet-4", - }, - }, - }, -}) -``` - -Questa config imposta CodeCompanion per usare OpenCode come agente ACP per la chat. - -Se devi passare variabili d'ambiente (come `OPENCODE_API_KEY`), vedi [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) nella documentazione di CodeCompanion.nvim. - -## Supporto - -OpenCode funziona via ACP come nel terminale. Tutte le funzionalita sono supportate: -:::note -Alcuni comandi slash integrati come `/undo` e `/redo` non sono attualmente supportati. -::: - -- Strumenti integrati (operazioni sui file, comandi da terminale, ecc.) -- Strumenti personalizzati e comandi slash -- Server MCP configurati nella tua configurazione OpenCode -- Regole specifiche del progetto da `AGENTS.md` -- Formatter e linter personalizzati -- Sistema di agenti e permessi diff --git a/packages/web/src/content/docs/it/agents.mdx b/packages/web/src/content/docs/it/agents.mdx deleted file mode 100644 index 70aea57533..0000000000 --- a/packages/web/src/content/docs/it/agents.mdx +++ /dev/null @@ -1,753 +0,0 @@ ---- -title: Agenti -description: Configura e usa agenti specializzati. ---- - -Gli agenti sono assistenti AI specializzati che puoi configurare per task e workflow specifici. Ti permettono di creare strumenti mirati con prompt personalizzati, modelli e accesso agli strumenti. - -:::tip -Usa l'agente plan per analizzare codice e valutare suggerimenti senza apportare modifiche al codice. -::: - -Puoi passare da un agente all'altro durante una sessione oppure invocarli con la menzione `@`. - ---- - -## Tipi - -In OpenCode esistono due tipi di agenti: agenti primari e subagenti. - ---- - -### Agenti primari - -Gli agenti primari sono gli assistenti principali con cui interagisci direttamente. Puoi scorrerli usando il tasto **Tab** o la scorciatoia `switch_agent` configurata. Questi agenti gestiscono la conversazione principale. L'accesso agli strumenti si configura tramite i permessi: per esempio, Build ha tutti gli strumenti abilitati, mentre Plan è limitato. - -:::tip -Puoi usare **Tab** per passare tra gli agenti primari durante una sessione. -::: - -OpenCode include due agenti primari integrati: **Build** e **Plan**. Li vediamo sotto. - ---- - -### Subagenti - -I subagenti sono assistenti specializzati che gli agenti primari possono invocare per task specifici. Puoi anche invocarli manualmente **menzionandoli con @** nei tuoi messaggi. - -OpenCode include tre subagenti integrati: **General**, **Explore** e **Scout**. Li vediamo sotto. - ---- - -## Integrati - -OpenCode include due agenti primari integrati e tre subagenti integrati. - ---- - -### Build - -_Mode_: `primary` - -Build è l'agente primario **predefinito** con tutti gli strumenti abilitati. È l'agente standard per lavoro di sviluppo quando ti serve pieno accesso a operazioni sui file e comandi di sistema. - ---- - -### Plan - -_Mode_: `primary` - -Un agente limitato pensato per pianificazione e analisi. Usiamo un sistema di permessi per darti più controllo e prevenire modifiche non intenzionali. -Di default, tutte le seguenti sono impostate a `ask`: - -- `file edits`: tutte le scritture, patch ed edit -- `bash`: tutti i comandi bash - -Questo agente è utile quando vuoi che l'LLM analizzi il codice, suggerisca modifiche o crei piani senza effettuare alcuna modifica reale al codebase. - ---- - -### General - -_Mode_: `subagent` - -Un agente general-purpose per ricercare domande complesse ed eseguire task multi-step. Ha accesso completo agli strumenti (tranne todo), quindi può modificare file quando serve. Usalo per eseguire più unità di lavoro in parallelo. - ---- - -### Explore - -_Mode_: `subagent` - -Un agente rapido in sola lettura per esplorare codebase. Non può modificare file. Usalo quando devi trovare rapidamente file tramite pattern, cercare nel codice per keyword o rispondere a domande sul codebase. - ---- - -### Scout - -_Mode_: `subagent` - -Un agente in sola lettura per la ricerca su documentazione esterna e dipendenze. Usalo quando devi clonare il repository di una dipendenza nella cache gestita di OpenCode, ispezionare il codice sorgente di una libreria o confrontare il codice locale con implementazioni upstream senza modificare il tuo workspace. - ---- - -### Compaction - -_Mode_: `primary` - -Agente di sistema nascosto che compatta contesti lunghi in un riassunto più piccolo. Viene eseguito automaticamente quando serve e non è selezionabile nella UI. - ---- - -### Title - -_Mode_: `primary` - -Agente di sistema nascosto che genera titoli brevi per le sessioni. Viene eseguito automaticamente quando serve e non è selezionabile nella UI. - ---- - -### Summary - -_Mode_: `primary` - -Agente di sistema nascosto che crea riassunti di sessione. Viene eseguito automaticamente quando serve e non è selezionabile nella UI. - ---- - -## Utilizzo - -1. Per gli agenti primari, usa il tasto **Tab** per scorrerli durante una sessione. Puoi anche usare la scorciatoia `switch_agent` configurata. - -2. I subagenti possono essere invocati: - - **Automaticamente** dagli agenti primari per task specializzati in base alle loro descrizioni. - - Manualmente **menzionando con @** un subagente nel tuo messaggio. Per esempio: - - ```txt frame="none" - @general help me search for this function - ``` - 3. **Navigazione tra sessioni**: quando i subagenti creano le loro child session, puoi navigare tra la sessione padre e tutte le sessioni figlie usando: - - **\+Right** (o la scorciatoia `session_child_cycle` configurata) per ciclare in avanti tra parent → child1 → child2 → ... → parent - - **\+Left** (o la scorciatoia `session_child_cycle_reverse` configurata) per ciclare indietro tra parent ← child1 ← child2 ← ... ← parent - - Questo ti permette di passare senza soluzione di continuità tra la conversazione principale e il lavoro specializzato dei subagenti. - ---- - -## Configurazione - -Puoi personalizzare gli agenti integrati o crearne di tuoi tramite configurazione. Gli agenti possono essere configurati in due modi: - ---- - -### JSON - -Configura gli agenti nel file `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 - -Puoi anche definire agenti usando file markdown. Mettili in: - -- Globale: `~/.config/opencode/agents/` -- Per progetto: `.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. -``` - -Il nome del file markdown diventa il nome dell'agente. Per esempio, `review.md` crea un agente `review`. - ---- - -## Opzioni - -Vediamo nel dettaglio queste opzioni di configurazione. - ---- - -### Descrizione - -Usa l'opzione `description` per fornire una breve descrizione di cosa fa l'agente e quando usarlo. - -```json title="opencode.json" -{ - "agent": { - "review": { - "description": "Reviews code for best practices and potential issues" - } - } -} -``` - -Questa è un'opzione di configurazione **obbligatoria**. - ---- - -### Temperatura - -Controlla casualità e creatività delle risposte dell'LLM con la config `temperature`. - -Valori bassi rendono le risposte più focalizzate e deterministiche, mentre valori alti aumentano creatività e variabilità. - -```json title="opencode.json" -{ - "agent": { - "plan": { - "temperature": 0.1 - }, - "creative": { - "temperature": 0.8 - } - } -} -``` - -I valori di temperature tipicamente vanno da 0.0 a 1.0: - -- **0.0-0.2**: risposte molto focalizzate e deterministiche, ideali per analisi del codice e pianificazione -- **0.3-0.5**: risposte bilanciate con un po' di creatività, adatte a task generali di sviluppo -- **0.6-1.0**: risposte più creative e varie, utili per brainstorming ed esplorazione - -```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}" - } - } -} -``` - -Se non specifichi una temperature, OpenCode usa i default specifici del modello; tipicamente 0 per la maggior parte dei modelli e 0.55 per i modelli Qwen. - ---- - -### Passi massimi - -Controlla il numero massimo di iterazioni agentiche che un agente può eseguire prima di essere forzato a rispondere solo con testo. Questo permette a chi vuole controllare i costi di impostare un limite alle azioni agentiche. - -Se non è impostato, l'agente continuerà a iterare finché il modello sceglie di fermarsi o l'utente interrompe la sessione. - -```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 - } - } -} -``` - -Quando viene raggiunto il limite, l'agente riceve un system prompt speciale che lo istruisce a rispondere con un riassunto del lavoro svolto e con i task rimanenti consigliati. - -:::caution -Il campo legacy `maxSteps` è deprecato. Usa `steps`. -::: - ---- - -### Disabilitazione - -Imposta a `true` per disabilitare l'agente. - -```json title="opencode.json" -{ - "agent": { - "review": { - "disable": true - } - } -} -``` - ---- - -### Prompt - -Specifica un file di system prompt personalizzato per questo agente tramite la config `prompt`. Il file deve contenere istruzioni specifiche per lo scopo dell'agente. - -```json title="opencode.json" -{ - "agent": { - "review": { - "prompt": "{file:./prompts/code-review.txt}" - } - } -} -``` - -Questo path è relativo alla posizione del file di configurazione. Quindi funziona sia per la config globale di OpenCode sia per la config specifica del progetto. - ---- - -### Modello - -Usa la config `model` per sovrascrivere il modello per questo agente. Utile per usare modelli diversi ottimizzati per task diversi. Per esempio, un modello più veloce per la pianificazione e uno più capace per l'implementazione. - -:::tip -Se non specifichi un modello, gli agenti primari usano il [modello configurato globalmente](/docs/config#models), mentre i subagenti useranno il modello dell'agente primario che li ha invocati. -::: - -```json title="opencode.json" -{ - "agent": { - "plan": { - "model": "anthropic/claude-haiku-4-20250514" - } - } -} -``` - -L'ID modello nella configurazione OpenCode usa il formato `provider/model-id`. Per esempio, se stai usando [OpenCode Zen](/docs/zen), useresti `opencode/gpt-5.1-codex` per GPT 5.1 Codex. - ---- - -### Strumenti - -Controlla quali strumenti sono disponibili per questo agente tramite la config `tools`. Puoi abilitare o disabilitare strumenti specifici impostandoli a `true` o `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 -La configurazione specifica dell'agente sovrascrive la configurazione globale. -::: - -Puoi anche usare wildcard per controllare più strumenti in una volta. Per esempio, per disabilitare tutti gli strumenti di un server MCP: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "readonly": { - "tools": { - "mymcp_*": false, - "write": false, - "edit": false - } - } - } -} -``` - -[Scopri di più sugli strumenti](/docs/tools). - ---- - -### Permessi - -Puoi configurare i permessi per gestire quali azioni un agente può eseguire. Attualmente, i permessi per gli strumenti `edit`, `bash` e `webfetch` possono essere configurati come: - -- `"ask"` — chiede approvazione prima di eseguire lo strumento -- `"allow"` — consente tutte le operazioni senza approvazione -- `"deny"` — disabilita lo strumento - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - } -} -``` - -Puoi sovrascrivere questi permessi per agente. - -```json title="opencode.json" {3-5,8-10} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - }, - "agent": { - "build": { - "permission": { - "edit": "ask" - } - } - } -} -``` - -Puoi anche impostare permessi negli agenti 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. -``` - -Puoi impostare permessi per comandi bash specifici. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git push": "ask", - "grep *": "allow" - } - } - } - } -} -``` - -Questo può usare un glob pattern. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git *": "ask" - } - } - } - } -} -``` - -E puoi anche usare la wildcard `*` per gestire i permessi per tutti i comandi. -Dato che l'ultima regola che corrisponde ha la precedenza, metti prima la wildcard `*` e poi le regole specifiche. - -```json title="opencode.json" {8} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "*": "ask", - "git status *": "allow" - } - } - } - } -} -``` - -[Scopri di più sui permessi](/docs/permissions). - ---- - -### Modalità - -Controlla la modalità dell'agente con la config `mode`. L'opzione `mode` determina come l'agente può essere usato. - -```json title="opencode.json" -{ - "agent": { - "review": { - "mode": "subagent" - } - } -} -``` - -`mode` può essere `primary`, `subagent` o `all`. Se `mode` non è specificato, il default è `all`. - ---- - -### Nascosto - -Nascondi un subagente dal menu autocomplete di `@` con `hidden: true`. Utile per subagenti interni che dovrebbero essere invocati solo programmaticamente da altri agenti tramite lo strumento Task. - -```json title="opencode.json" -{ - "agent": { - "internal-helper": { - "mode": "subagent", - "hidden": true - } - } -} -``` - -Questo influisce solo sulla visibilità per l'utente nel menu autocomplete. Gli agenti nascosti possono comunque essere invocati dal modello tramite lo strumento Task se i permessi lo consentono. - -:::note -Si applica solo ad agenti con `mode: subagent`. -::: - ---- - -### Permessi Task - -Controlla quali subagenti un agente può invocare tramite lo strumento Task con `permission.task`. Usa glob pattern per un matching flessibile. - -```json title="opencode.json" -{ - "agent": { - "orchestrator": { - "mode": "primary", - "permission": { - "task": { - "*": "deny", - "orchestrator-*": "allow", - "code-reviewer": "ask" - } - } - } - } -} -``` - -Quando è impostato a `deny`, il subagente viene rimosso interamente dalla descrizione dello strumento Task, quindi il modello non proverà a invocarlo. - -:::tip -Le regole vengono valutate in ordine e **vince l'ultima regola che corrisponde**. Nell'esempio sopra, `orchestrator-planner` corrisponde sia a `*` (deny) sia a `orchestrator-*` (allow), ma dato che `orchestrator-*` viene dopo `*`, il risultato è `allow`. -::: - -:::tip -Gli utenti possono sempre invocare qualunque subagente direttamente dal menu autocomplete `@`, anche se i permessi task dell'agente lo negherebbero. -::: - ---- - -### Colore - -Personalizza l'aspetto visivo dell'agente nella UI con l'opzione `color`. Questo influisce su come l'agente appare nell'interfaccia. - -Usa un colore hex valido (ad es. `#FF5733`) o un colore tema: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`. - -```json title="opencode.json" -{ - "agent": { - "creative": { - "color": "#ff6b6b" - }, - "code-reviewer": { - "color": "accent" - } - } -} -``` - ---- - -### Top P - -Controlla la diversità delle risposte con l'opzione `top_p`. Alternativa alla temperature per controllare la casualità. - -```json title="opencode.json" -{ - "agent": { - "brainstorm": { - "top_p": 0.9 - } - } -} -``` - -I valori vanno da 0.0 a 1.0. Valori più bassi sono più focalizzati, valori più alti più diversi. - ---- - -### Opzioni aggiuntive - -Qualsiasi altra opzione che specifichi nella configurazione dell'agente verrà **passata direttamente** al provider come opzione del modello. Questo ti permette di usare feature e parametri specifici del provider. - -Per esempio, con i modelli di reasoning di OpenAI, puoi controllare lo sforzo di ragionamento: - -```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" - } - } -} -``` - -Queste opzioni aggiuntive sono specifiche per modello e provider. Controlla la documentazione del provider per i parametri disponibili. - -:::tip -Esegui `opencode models` per vedere la lista dei modelli disponibili. -::: - ---- - -## Creazione agenti - -Puoi creare nuovi agenti usando il comando seguente: - -```bash -opencode agent create -``` - -Questo comando interattivo: - -1. Chiede dove salvare l'agente: globale o specifico del progetto. -2. Chiede una descrizione di cosa dovrebbe fare l'agente. -3. Genera un system prompt appropriato e un identificatore. -4. Ti fa selezionare a quali strumenti l'agente può accedere. -5. Infine, crea un file markdown con la configurazione dell'agente. - ---- - -## Casi d'uso - -Ecco alcuni casi d'uso comuni per agenti diversi. - -- **Build agent**: sviluppo completo con tutti gli strumenti abilitati -- **Plan agent**: analisi e pianificazione senza apportare modifiche -- **Review agent**: code review con accesso in sola lettura più strumenti documentazione -- **Debug agent**: focalizzato sull'investigazione con strumenti bash e read abilitati -- **Docs agent**: scrittura documentazione con operazioni sui file ma senza comandi di sistema - ---- - -## Esempi - -Ecco alcuni agenti di esempio che potresti trovare utili. - -:::tip -Hai un agente che vorresti condividere? [Invia una PR](https://github.com/anomalyco/opencode). -::: - ---- - -### Agente documentazione - -```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 -``` - ---- - -### Auditor di sicurezza - -```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 -``` diff --git a/packages/web/src/content/docs/it/cli.mdx b/packages/web/src/content/docs/it/cli.mdx deleted file mode 100644 index 67cd703a9f..0000000000 --- a/packages/web/src/content/docs/it/cli.mdx +++ /dev/null @@ -1,617 +0,0 @@ ---- -title: CLI -description: Opzioni e comandi della CLI di OpenCode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -La CLI di OpenCode, per impostazione predefinita, avvia la [TUI](/docs/tui) quando viene eseguita senza argomenti. - -```bash -opencode -``` - -Ma accetta anche i comandi documentati in questa pagina. Questo ti permette di interagire con OpenCode in modo programmatico. - -```bash -opencode run "Explain how closures work in JavaScript" -``` - ---- - -### tui - -Avvia l'interfaccia testuale di OpenCode (interfaccia utente da terminale). - -```bash -opencode [project] -``` - -#### Flag - -| Flag | Breve | Descrizione | -| ---------------------------------------- | ----- | ------------------------------------------------------------------------ | -| {"--continue"} | `-c` | Continua l'ultima sessione | -| {"--session"} | `-s` | ID sessione da continuare | -| {"--fork"} | | Duplica la sessione quando continui (usa con `--continue` o `--session`) | -| {"--prompt"} | | Prompt da usare | -| {"--model"} | `-m` | Modello nel formato provider/model | -| {"--agent"} | | Agente da usare | -| {"--port"} | | Porta su cui mettersi in ascolto | -| {"--hostname"} | | Hostname su cui mettersi in ascolto | - ---- - -## Comandi - -La CLI di OpenCode include anche i seguenti comandi. - ---- - -### agent - -Gestisci gli agenti per OpenCode. - -```bash -opencode agent [command] -``` - ---- - -### attach - -Collega un terminale a un backend server di OpenCode già in esecuzione avviato tramite i comandi `serve` o `web`. - -```bash -opencode attach [url] -``` - -Questo consente di usare la TUI con un backend OpenCode remoto. Per esempio: - -```bash -# Start the backend server for web/mobile access -opencode web --port 4096 --hostname 0.0.0.0 - -# In un altro terminale, collega la TUI al backend in esecuzione -opencode attach http://10.20.30.40:4096 -``` - -#### Flag - -| Flag | Breve | Descrizione | -| ---------------------------------------- | ----- | ----------------------------------------------------------------------------------------------- | -| {"--dir"} | | Working directory in cui avviare la TUI | -| {"--continue"} | `-c` | Continua l'ultima sessione | -| {"--session"} | `-s` | ID sessione da continuare | -| {"--fork"} | | Crea un fork della sessione durante la continuazione (usa con `--continue` o `--session`) | -| {"--password"} | `-p` | Password per l'autenticazione di base (predefinita: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Nome utente per l'autenticazione di base (predefinito: `OPENCODE_SERVER_USERNAME` o `opencode`) | - ---- - -#### create - -Crea un nuovo agente con configurazione personalizzata. - -```bash -opencode agent create -``` - -Questo comando ti guida nella creazione di un nuovo agente con un system prompt personalizzato e configurazione degli strumenti. - ---- - -#### list - -Elenca tutti gli agenti disponibili. - -```bash -opencode agent list -``` - ---- - -### auth - -Comando per gestire le credenziali e il login dei provider. - -```bash -opencode auth [command] -``` - ---- - -#### login - -OpenCode si basa sull'elenco provider di [Models.dev](https://models.dev), quindi puoi usare `opencode auth login` per configurare le API key per qualunque provider tu voglia usare. Le credenziali vengono salvate in `~/.local/share/opencode/auth.json`. - -```bash -opencode auth login -``` - -Quando OpenCode si avvia, carica i provider dal file delle credenziali e, se presenti, anche eventuali key definite nell'ambiente o in un file `.env` nel progetto. - ---- - -#### list - -Elenca tutti i provider autenticati come salvati nel file delle credenziali. - -```bash -opencode auth list -``` - -Oppure la versione corta. - -```bash -opencode auth ls -``` - ---- - -#### logout - -Esegue il logout da un provider rimuovendolo dal file delle credenziali. - -```bash -opencode auth logout -``` - ---- - -### github - -Gestisci l'agente GitHub per l'automazione dei repository. - -```bash -opencode github [command] -``` - ---- - -#### install - -Installa l'agente GitHub nel tuo repository. - -```bash -opencode github install -``` - -Questo configura il workflow GitHub Actions necessario e ti guida nel processo di configurazione. [Scopri di più](/docs/github). - ---- - -#### run - -Esegui l'agente GitHub. Tipicamente usato in GitHub Actions. - -```bash -opencode github run -``` - -##### Flag - -| Flag | Descrizione | -| ------------------------------------- | -------------------------------------------- | -| {"--event"} | Evento GitHub mock per cui eseguire l'agente | -| {"--token"} | GitHub personal access token | - ---- - -### mcp - -Gestisci i server Model Context Protocol. - -```bash -opencode mcp [command] -``` - ---- - -#### add - -Aggiungi un server MCP alla tua configurazione. - -```bash -opencode mcp add -``` - -Questo comando ti guida nell'aggiunta di un server MCP locale o remoto. - ---- - -#### list - -Elenca tutti i server MCP configurati e il loro stato di connessione. - -```bash -opencode mcp list -``` - -Oppure la versione corta. - -```bash -opencode mcp ls -``` - ---- - -#### auth - -Autentica con un server MCP con OAuth abilitato. - -```bash -opencode mcp auth [name] -``` - -Se non fornisci un nome server, ti verrà chiesto di selezionare tra i server OAuth-capable disponibili. - -Puoi anche elencare i server OAuth-capable e il loro stato di autenticazione. - -```bash -opencode mcp auth list -``` - -Oppure la versione corta. - -```bash -opencode mcp auth ls -``` - ---- - -#### logout - -Rimuovi le credenziali OAuth per un server MCP. - -```bash -opencode mcp logout [name] -``` - ---- - -#### debug - -Esegui debug di problemi di connessione OAuth per un server MCP. - -```bash -opencode mcp debug -``` - ---- - -### models - -Elenca tutti i modelli disponibili dai provider configurati. - -```bash -opencode models [provider] -``` - -Questo comando mostra tutti i modelli disponibili tra i provider configurati nel formato `provider/model`. - -È utile per capire l'esatto nome del modello da usare nella [config](/docs/config/). - -Puoi anche passare opzionalmente un ID provider per filtrare i modelli a quel provider. - -```bash -opencode models anthropic -``` - -#### Flag - -| Flag | Descrizione | -| --------------------------------------- | -------------------------------------------------- | -| {"--refresh"} | Aggiorna la cache modelli da models.dev | -| {"--verbose"} | Output più verboso (include metadati come i costi) | - -Usa `--refresh` per aggiornare l'elenco modelli in cache. È utile quando nuovi modelli vengono aggiunti a un provider e vuoi vederli in OpenCode. - -```bash -opencode models --refresh -``` - ---- - -### run - -Esegui opencode in modalità non interattiva passando un prompt direttamente. - -```bash -opencode run [message..] -``` - -È utile per scripting, automazione o quando vuoi una risposta rapida senza avviare la TUI completa. Per esempio: - -```bash "opencode run" -opencode run Explain the use of context in Go -``` - -Puoi anche collegarti a una istanza `opencode serve` già in esecuzione per evitare i cold boot dei server MCP ad ogni esecuzione: - -```bash -# Avvia un server headless in un terminale -opencode serve - -# In un altro terminale, esegui comandi che si collegano ad esso -opencode run --attach http://localhost:4096 "Explain async/await in JavaScript" -``` - -#### Flag - -| Flag | Breve | Descrizione | -| ---------------------------------------- | ----- | ----------------------------------------------------------------------------------------------- | -| {"--command"} | | Il comando da eseguire; usa message per gli argomenti | -| {"--continue"} | `-c` | Continua l'ultima sessione | -| {"--session"} | `-s` | ID sessione da continuare | -| {"--fork"} | | Duplica la sessione quando continui (usa con `--continue` o `--session`) | -| {"--share"} | | Condividi la sessione | -| {"--model"} | `-m` | Modello nel formato provider/model | -| {"--agent"} | | Agente da usare | -| {"--file"} | `-f` | File da allegare al messaggio | -| {"--format"} | | Formato: default (formattato) o json (eventi JSON grezzi) | -| {"--title"} | | Titolo sessione (usa prompt troncato se non viene fornito un valore) | -| {"--attach"} | | Attach a un server opencode in esecuzione (es. http://localhost:4096) | -| {"--password"} | `-p` | Password per l'autenticazione di base (predefinita: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Nome utente per l'autenticazione di base (predefinito: `OPENCODE_SERVER_USERNAME` o `opencode`) | -| {"--dir"} | | Directory di esecuzione, o percorso sul server remoto durante il collegamento | -| {"--variant"} | | Variante del modello (sforzo di ragionamento specifico del provider) | -| {"--thinking"} | | Mostra blocchi di pensiero | -| {"--port"} | | Porta per il server locale (di default una porta casuale) | - ---- - -### serve - -Avvia un server OpenCode headless per accesso via API. Vedi le [server docs](/docs/server) per l'interfaccia HTTP completa. - -```bash -opencode serve -``` - -Avvia un server HTTP che espone accesso API alle funzionalità di opencode senza la TUI. Imposta `OPENCODE_SERVER_PASSWORD` per abilitare HTTP basic auth (username di default `opencode`). - -#### Flag - -| Flag | Descrizione | -| ---------------------------------------- | ---------------------------------------------- | -| {"--port"} | Porta su cui mettersi in ascolto | -| {"--hostname"} | Hostname su cui mettersi in ascolto | -| {"--mdns"} | Abilita discovery mDNS | -| {"--cors"} | Origin browser addizionali per consentire CORS | - ---- - -### session - -Gestisci le sessioni OpenCode. - -```bash -opencode session [command] -``` - ---- - -#### list - -Elenca tutte le sessioni OpenCode. - -```bash -opencode session list -``` - -##### Flag - -| Flag | Breve | Descrizione | -| ----------------------------------------- | ----- | ------------------------------------ | -| {"--max-count"} | `-n` | Limita alle N sessioni più recenti | -| {"--format"} | | Formato output: table o json (table) | - ---- - -### stats - -Mostra statistiche di utilizzo token e costo per le sessioni OpenCode. - -```bash -opencode stats -``` - -#### Flag - -| Flag | Descrizione | -| --------------------------------------- | ------------------------------------------------------------------------------------- | -| {"--days"} | Mostra statistiche per gli ultimi N giorni (all time) | -| {"--tools"} | Numero di strumenti da mostrare (all) | -| {"--models"} | Mostra breakdown di utilizzo modelli (nascosto di default). Passa un numero per top N | -| {"--project"} | Filtra per progetto (tutti i progetti; stringa vuota: progetto corrente) | - ---- - -### export - -Esporta i dati di sessione come JSON. - -```bash -opencode export [sessionID] -``` - -Se non fornisci un ID sessione, ti verrà chiesto di selezionare tra le sessioni disponibili. - ---- - -### import - -Importa i dati di sessione da un file JSON o da un URL di condivisione OpenCode. - -```bash -opencode import -``` - -Puoi importare da un file locale o da un URL di condivisione OpenCode. - -```bash -opencode import session.json -opencode import https://opncd.ai/s/abc123 -``` - ---- - -### web - -Avvia un server OpenCode headless con interfaccia web. - -```bash -opencode web -``` - -Avvia un server HTTP e apre un browser per accedere a OpenCode tramite interfaccia web. Imposta `OPENCODE_SERVER_PASSWORD` per abilitare HTTP basic auth (username di default `opencode`). - -#### Flag - -| Flag | Descrizione | -| ---------------------------------------- | ---------------------------------------------- | -| {"--port"} | Porta su cui mettersi in ascolto | -| {"--hostname"} | Hostname su cui mettersi in ascolto | -| {"--mdns"} | Abilita discovery mDNS | -| {"--cors"} | Origin browser addizionali per consentire CORS | - ---- - -### acp - -Avvia un server ACP (Agent Client Protocol). - -```bash -opencode acp -``` - -Questo comando avvia un server ACP che comunica via stdin/stdout usando nd-JSON. - -#### Flag - -| Flag | Descrizione | -| ---------------------------------------- | ----------------------------------- | -| {"--cwd"} | Directory di lavoro | -| {"--port"} | Porta su cui mettersi in ascolto | -| {"--hostname"} | Hostname su cui mettersi in ascolto | - ---- - -### uninstall - -Disinstalla OpenCode e rimuove tutti i file correlati. - -```bash -opencode uninstall -``` - -#### Flag - -| Flag | Breve | Descrizione | -| ------------------------------------------- | ----- | -------------------------------------------- | -| {"--keep-config"} | `-c` | Mantieni i file di configurazione | -| {"--keep-data"} | `-d` | Mantieni dati di sessione e snapshot | -| {"--dry-run"} | | Mostra cosa verrebbe rimosso senza rimuovere | -| {"--force"} | `-f` | Salta le richieste di conferma | - ---- - -### upgrade - -Aggiorna opencode all'ultima versione o a una versione specifica. - -```bash -opencode upgrade [target] -``` - -Per aggiornare all'ultima versione: - -```bash -opencode upgrade -``` - -Per aggiornare a una versione specifica: - -```bash -opencode upgrade v0.1.48 -``` - -#### Flag - -| Flag | Breve | Descrizione | -| -------------------------------------- | ----- | --------------------------------------------------------- | -| {"--method"} | `-m` | Metodo di installazione usato: curl, npm, pnpm, bun, brew | - ---- - -## Flag globali - -La CLI di opencode accetta i seguenti flag globali. - -| Flag | Breve | Descrizione | -| ------------------------------------------ | ----- | -------------------------------------- | -| {"--help"} | `-h` | Mostra l'help | -| {"--version"} | `-v` | Stampa il numero di versione | -| {"--print-logs"} | | Stampa i log su stderr | -| {"--log-level"} | | Livello log (DEBUG, INFO, WARN, ERROR) | - ---- - -## Variabili d'ambiente - -OpenCode può essere configurato tramite variabili d'ambiente. - -| Variabile | Tipo | Descrizione | -| ------------------------------------- | ------- | ----------------------------------------------------------- | -| `OPENCODE_AUTO_SHARE` | boolean | Condivide automaticamente le sessioni | -| `OPENCODE_GIT_BASH_PATH` | string | Percorso all'eseguibile Git Bash su Windows | -| `OPENCODE_CONFIG` | string | Percorso al file di configurazione | -| `OPENCODE_TUI_CONFIG` | string | Percorso al file di configurazione TUI | -| `OPENCODE_CONFIG_DIR` | string | Percorso alla directory di configurazione | -| `OPENCODE_CONFIG_CONTENT` | string | Contenuto JSON di config inline | -| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | Disabilita i controlli automatici di aggiornamento | -| `OPENCODE_DISABLE_PRUNE` | boolean | Disabilita la potatura dei dati vecchi | -| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | Disabilita aggiornamenti automatici del titolo terminale | -| `OPENCODE_PERMISSION` | string | Config permessi JSON inline | -| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | Disabilita i plugin di default | -| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | Disabilita download automatico dei server LSP | -| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | Abilita modelli sperimentali | -| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | Disabilita compaction automatica del contesto | -| `OPENCODE_DISABLE_CLAUDE_CODE` | boolean | Disabilita lettura da `.claude` (prompt + skill) | -| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | Disabilita lettura di `~/.claude/CLAUDE.md` | -| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | Disabilita caricamento di `.claude/skills` | -| `OPENCODE_DISABLE_MODELS_FETCH` | boolean | Disabilita fetch dei modelli da fonti remote | -| `OPENCODE_FAKE_VCS` | string | Provider VCS finto per scopi di test | -| `OPENCODE_CLIENT` | string | Identificatore client (default `cli`) | -| `OPENCODE_ENABLE_EXA` | boolean | Abilita gli strumenti di web search Exa | -| `OPENCODE_SERVER_PASSWORD` | string | Abilita basic auth per `serve`/`web` | -| `OPENCODE_SERVER_USERNAME` | string | Sovrascrive lo username basic auth (default `opencode`) | -| `OPENCODE_MODELS_URL` | string | URL personalizzato per recuperare la configurazione modelli | - ---- - -### Sperimentale - -Queste variabili d'ambiente abilitano funzionalità sperimentali che potrebbero cambiare o essere rimosse. - -| Variabile | Tipo | Descrizione | -| ----------------------------------------------- | ------- | ------------------------------------------------------- | -| `OPENCODE_EXPERIMENTAL` | boolean | Abilita funzionalità sperimentali sotto il flag globale | -| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | Abilita icon discovery | -| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | Disabilita copy on select nella TUI | -| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | Timeout di default per comandi bash in ms | -| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | Massimo token di output per risposte LLM | -| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Abilita file watcher per l'intera dir | -| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Abilita formatter oxfmt | -| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | Abilita strumento LSP sperimentale | -| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | Disabilita file watcher | -| `OPENCODE_EXPERIMENTAL_EXA` | boolean | Abilita funzionalità Exa sperimentali | -| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolean | Abilita TY LSP per i file python | -| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | Abilita plan mode | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | boolean | Abilita task subagent in background | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | boolean | Abilita sistema eventi sperimentale | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | boolean | Abilita percorso nativo di richiesta LLM | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | boolean | Abilita esecuzione parallela della ricerca web | -| `OPENCODE_EXPERIMENTAL_SCOUT` | boolean | Abilita subagent Scout | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | boolean | Abilita supporto workspace | diff --git a/packages/web/src/content/docs/it/commands.mdx b/packages/web/src/content/docs/it/commands.mdx deleted file mode 100644 index bec4bf8deb..0000000000 --- a/packages/web/src/content/docs/it/commands.mdx +++ /dev/null @@ -1,322 +0,0 @@ ---- -title: Comandi -description: Crea comandi personalizzati per task ripetitivi. ---- - -I comandi personalizzati ti permettono di definire un prompt da eseguire quando quel comando viene lanciato nella TUI. - -```bash frame="none" -/my-command -``` - -I comandi personalizzati si aggiungono a quelli integrati come `/init`, `/undo`, `/redo`, `/share`, `/help`. [Scopri di piu](/docs/tui#commands). - ---- - -## Creazione file di comando - -Crea file markdown nella directory `commands/` per definire comandi personalizzati. - -Crea `.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. -``` - -Il frontmatter definisce le proprieta del comando. Il contenuto diventa il template. - -Usa il comando digitando `/` seguito dal nome del comando. - -```bash frame="none" -"/test" -``` - ---- - -## Configurazione - -Puoi aggiungere comandi personalizzati tramite la config di OpenCode o creando file markdown nella directory `commands/`. - ---- - -### JSON - -Usa l'opzione `command` nella [config](/docs/config) di OpenCode: - -```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" - } - } -} -``` - -Ora puoi eseguire questo comando nella TUI: - -```bash frame="none" -/test -``` - ---- - -### Markdown - -Puoi anche definire comandi usando file markdown. Mettili in: - -- Globale: `~/.config/opencode/commands/` -- Per progetto: `.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. -``` - -Il nome del file markdown diventa il nome del comando. Per esempio, `test.md` ti permette di eseguire: - -```bash frame="none" -/test -``` - ---- - -## Configurazione del prompt - -I prompt dei comandi personalizzati supportano diversi placeholder e sintassi speciali. - ---- - -### Argomenti - -Passa argomenti ai comandi usando il placeholder `$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. -``` - -Esegui il comando con argomenti: - -```bash frame="none" -/component Button -``` - -E `$ARGUMENTS` verra sostituito con `Button`. - -Puoi anche accedere ai singoli argomenti usando parametri posizionali: - -- `$1` - Primo argomento -- `$2` - Secondo argomento -- `$3` - Terzo argomento -- E cosi via... - -Per esempio: - -```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 -``` - -Esegui il comando: - -```bash frame="none" -/create-file config.json src "{ \"key\": \"value\" }" -``` - -Questo sostituisce: - -- `$1` con `config.json` -- `$2` con `src` -- `$3` con `{ "key": "value" }` - ---- - -### Output della shell - -Usa _!`command`_ per inserire nel prompt l'output di un [comando bash](/docs/tui#bash-commands). - -Per esempio, per creare un comando personalizzato che analizzi la copertura dei test: - -```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. -``` - -Oppure per rivedere modifiche recenti: - -```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. -``` - -I comandi vengono eseguiti nella root del progetto e il loro output diventa parte del prompt. - ---- - -### Riferimenti ai file - -Includi file nel comando usando `@` seguito dal nome del file. - -```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. -``` - -Il contenuto del file viene incluso automaticamente nel prompt. - ---- - -## Opzioni - -Vediamo le opzioni di configurazione nel dettaglio. - ---- - -### Template del prompt - -L'opzione `template` definisce il prompt che verra inviato all'LLM quando il comando viene eseguito. - -```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." - } - } -} -``` - -Questa e un'opzione di config **obbligatoria**. - ---- - -### Descrizione - -Usa l'opzione `description` per fornire una breve descrizione di cosa fa il comando. - -```json title="opencode.json" -{ - "command": { - "test": { - "description": "Run tests with coverage" - } - } -} -``` - -Questo viene mostrato come descrizione nella TUI quando digiti il comando. - ---- - -### Agente - -Usa la config `agent` per specificare opzionalmente quale [agente](/docs/agents) deve eseguire il comando. -Se e un [subagent](/docs/agents/#subagents), il comando attiva per default l'invocazione di un subagent. -Per disabilitare questo comportamento, imposta `subtask` a `false`. - -```json title="opencode.json" -{ - "command": { - "review": { - "agent": "plan" - } - } -} -``` - -Questa e un'opzione di config **opzionale**. Se non specificata, usa l'agente corrente. - ---- - -### Sottotask - -Usa il booleano `subtask` per forzare il comando ad attivare l'invocazione di un [subagent](/docs/agents/#subagents). -E utile se vuoi evitare che il comando inquini il contesto principale e **forza** l'agente ad agire come subagent, -anche se `mode` e impostato su `primary` nella configurazione dell'[agente](/docs/agents). - -```json title="opencode.json" -{ - "command": { - "analyze": { - "subtask": true - } - } -} -``` - -Questa e un'opzione di config **opzionale**. - ---- - -### Modello - -Usa la config `model` per sovrascrivere il modello predefinito per questo comando. - -```json title="opencode.json" -{ - "command": { - "analyze": { - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -Questa e un'opzione di config **opzionale**. - ---- - -## Comandi integrati - -opencode include diversi comandi integrati come `/init`, `/undo`, `/redo`, `/share`, `/help`; [scopri di piu](/docs/tui#commands). - -:::note -I comandi personalizzati possono sovrascrivere quelli integrati. -::: - -Se definisci un comando personalizzato con lo stesso nome, sovrascrivera il comando integrato. diff --git a/packages/web/src/content/docs/it/config.mdx b/packages/web/src/content/docs/it/config.mdx deleted file mode 100644 index 1026b870a9..0000000000 --- a/packages/web/src/content/docs/it/config.mdx +++ /dev/null @@ -1,685 +0,0 @@ ---- -title: Configurazione -description: Usa la configurazione JSON di OpenCode. ---- - -Puoi configurare OpenCode usando un file di configurazione JSON. - ---- - -## Formato - -OpenCode supporta sia **JSON** sia **JSONC** (JSON con commenti). - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-5", - "autoupdate": true, - "server": { - "port": 4096, - }, -} -``` - ---- - -## Posizioni - -Puoi mettere la configurazione in diverse posizioni e ognuna ha un ordine di precedenza diverso. - -:::note -I file di configurazione vengono **uniti (merge)**, non sostituiti. -::: - -I file di configurazione vengono uniti (merge), non sostituiti. Le impostazioni provenienti dalle posizioni qui sotto vengono combinate. Le configurazioni caricate dopo sovrascrivono quelle precedenti solo per le chiavi in conflitto. Le impostazioni non in conflitto vengono preservate. - -Per esempio, se la tua configurazione globale imposta `autoupdate: true` e la configurazione del progetto imposta `model: "anthropic/claude-sonnet-4-5"`, la configurazione finale includera entrambe le impostazioni. - ---- - -### Ordine di precedenza - -Le sorgenti di configurazione vengono caricate in questo ordine (le successive sovrascrivono le precedenti): - -1. **Config remota** (da `.well-known/opencode`) - default dell'organizzazione -2. **Config globale** (`~/.config/opencode/opencode.json`) - preferenze utente -3. **Config personalizzata** (variabile d'ambiente `OPENCODE_CONFIG`) - sovrascritture personalizzate -4. **Config di progetto** (`opencode.json` nel progetto) - impostazioni specifiche del progetto -5. **Directory `.opencode`** - agenti, comandi, plugin -6. **Config inline** (variabile d'ambiente `OPENCODE_CONFIG_CONTENT`) - sovrascritture a runtime - -Questo significa che la configurazione di progetto puo sovrascrivere i default globali, e la configurazione globale puo sovrascrivere i default remoti dell'organizzazione. - -:::note -Le directory `.opencode` e `~/.config/opencode` usano **nomi al plurale** per le sottodirectory: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` e `themes/`. I nomi al singolare (ad es. `agent/`) sono supportati per retrocompatibilita. -::: - ---- - -### Configurazione remota - -Le organizzazioni possono fornire una configurazione predefinita tramite l'endpoint `.well-known/opencode`. Viene recuperata automaticamente quando ti autentichi con un provider che lo supporta. - -La configurazione remota viene caricata per prima e fa da livello base. Tutte le altre sorgenti (globale, progetto) possono sovrascrivere questi default. - -Per esempio, se la tua organizzazione fornisce server MCP disabilitati per impostazione predefinita: - -```json title="Remote config from .well-known/opencode" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": false - } - } -} -``` - -Puoi abilitare server specifici nella tua configurazione locale: - -```json title="opencode.json" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - ---- - -### Configurazione globale - -Metti la configurazione globale di OpenCode in `~/.config/opencode/opencode.json`. Usa la configurazione globale per preferenze server/runtime valide per l'utente come provider, modelli e permessi. - -Per le impostazioni specifiche della TUI, usa `~/.config/opencode/tui.json`. - -La configurazione globale sovrascrive i default remoti dell'organizzazione. - ---- - -### Configurazione di progetto - -Aggiungi `opencode.json` nella root del progetto. La configurazione di progetto ha la precedenza piu alta tra i file standard: sovrascrive sia la configurazione globale sia quella remota. - -Per le impostazioni TUI specifiche del progetto, aggiungi `tui.json` nella stessa posizione. - -:::tip -Metti la configurazione specifica del progetto nella root del progetto. -::: - -Quando OpenCode si avvia, cerca un file di configurazione nella directory corrente oppure risale fino alla directory Git piu vicina. - -Questo file puo essere tranquillamente versionato in Git e usa lo stesso schema di quello globale. - ---- - -### Percorso personalizzato - -Specifica un percorso personalizzato per il file di configurazione usando la variabile d'ambiente `OPENCODE_CONFIG`. - -```bash -export OPENCODE_CONFIG=/path/to/my/custom-config.json -opencode run "Hello world" -``` - -La configurazione personalizzata viene caricata tra quella globale e quella di progetto nell'ordine di precedenza. - ---- - -### Directory personalizzata - -Specifica una directory di configurazione personalizzata usando la variabile d'ambiente `OPENCODE_CONFIG_DIR`. Questa directory verra usata per cercare agenti, comandi, modalita e plugin proprio come la directory standard `.opencode` e dovrebbe seguire la stessa struttura. - -```bash -export OPENCODE_CONFIG_DIR=/path/to/my/config-directory -opencode run "Hello world" -``` - -La directory personalizzata viene caricata dopo la configurazione globale e le directory `.opencode`, quindi **puo sovrascrivere** le loro impostazioni. - ---- - -## Schema - -Il file di configurazione ha uno schema definito in [**`opencode.ai/config.json`**](https://opencode.ai/config.json). - -La configurazione TUI usa [**`opencode.ai/tui.json`**](https://opencode.ai/tui.json). - -Il tuo editor dovrebbe poter validare e suggerire l'autocompletamento in base allo schema. - ---- - -### TUI - -Usa un file dedicato `tui.json` (o `tui.jsonc`) per le impostazioni specifiche della TUI. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": true - }, - "diff_style": "auto" -} -``` - -Usa `OPENCODE_TUI_CONFIG` per puntare a un file di configurazione TUI personalizzato. - -Le chiavi legacy `theme`, `keybinds` e `tui` in `opencode.json` sono deprecate e vengono migrate automaticamente quando possibile. - -[Scopri di piu sulla configurazione TUI](/docs/tui#configure). - ---- - -### Server - -Puoi configurare le impostazioni del server per i comandi `opencode serve` e `opencode web` tramite l'opzione `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"] - } -} -``` - -Opzioni disponibili: - -- `port` - Porta su cui ascoltare. -- `hostname` - Nome host su cui ascoltare. Quando `mdns` e abilitato e non e impostato alcun hostname, il default e `0.0.0.0`. -- `mdns` - Abilita la scoperta del servizio mDNS. Questo permette ad altri dispositivi sulla rete di scoprire il tuo server OpenCode. -- `mdnsDomain` - Nome di dominio personalizzato per il servizio mDNS. Predefinito: `opencode.local`. Utile per eseguire piu istanze sulla stessa rete. -- `cors` - Origini aggiuntive da consentire per CORS quando usi il server HTTP da un client basato su browser. I valori devono essere origini complete (schema + host + porta opzionale), ad es. `https://app.example.com`. - -[Scopri di piu sul server](/docs/server). - ---- - -### Strumenti - -Puoi gestire gli strumenti che un LLM puo usare tramite l'opzione `tools`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "tools": { - "write": false, - "bash": false - } -} -``` - -[Scopri di piu sugli strumenti](/docs/tools). - ---- - -### Modelli - -Puoi configurare provider e modelli da usare in OpenCode tramite le opzioni `provider`, `model` e `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" -} -``` - -L'opzione `small_model` configura un modello separato per task leggeri come la generazione dei titoli. Per impostazione predefinita, OpenCode prova a usare un modello più economico se disponibile dal tuo provider, altrimenti fa fallback sul tuo modello principale. - -Le opzioni del provider possono includere `timeout` e `setCacheKey`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "timeout": 600000, - "setCacheKey": true - } - } - } -} -``` - -- `timeout` - Timeout della richiesta in millisecondi (predefinito: 300000). Imposta a `false` per disabilitare. -- `setCacheKey` - Assicura che venga sempre impostata una cache key per il provider indicato. - -Puoi anche configurare i [modelli locali](/docs/models#local). [Scopri di piu](/docs/models). - ---- - -#### Opzioni specifiche del provider - -Alcuni provider supportano opzioni di configurazione aggiuntive oltre alle impostazioni generiche `timeout` e `apiKey`. - -##### Amazon Bedrock - -Amazon Bedrock supporta una configurazione specifica per 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` - Regione AWS per Bedrock (default: variabile d'ambiente `AWS_REGION` oppure `us-east-1`) -- `profile` - Profilo AWS nominato da `~/.aws/credentials` (default: variabile d'ambiente `AWS_PROFILE`) -- `endpoint` - URL endpoint personalizzato per gli endpoint VPC. E un alias dell'opzione generica `baseURL` usando la terminologia AWS. Se sono specificati sia `endpoint` sia `baseURL`, `endpoint` ha precedenza. - -:::note -I bearer token (`AWS_BEARER_TOKEN_BEDROCK` o `/connect`) hanno precedenza sull'autenticazione basata su profilo. Vedi [ordine di precedenza dell'autenticazione](/docs/providers#authentication-precedence) per i dettagli. -::: - -[Scopri di piu sulla configurazione di Amazon Bedrock](/docs/providers#amazon-bedrock). - ---- - -### Temi - -Imposta il tuo tema UI in `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - -[Scopri di piu](/docs/themes). - ---- - -### Agenti - -Puoi configurare agenti specializzati per task specifici tramite l'opzione `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, - }, - }, - }, -} -``` - -Puoi anche definire agenti usando file markdown in `~/.config/opencode/agents/` o `.opencode/agents/`. [Scopri di piu](/docs/agents). - ---- - -### Agente predefinito - -Puoi impostare l'agente predefinito usando l'opzione `default_agent`. Questo determina quale agente viene usato quando non ne specifichi uno esplicitamente. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "default_agent": "plan" -} -``` - -L'agente predefinito deve essere un agente primary (non un subagent). Puo essere un agente integrato come `"build"` o `"plan"`, oppure un [agente personalizzato](/docs/agents) che hai definito. Se l'agente specificato non esiste o e un subagent, OpenCode fara fallback su `"build"` mostrando un avviso. - -Questa impostazione si applica a tutte le interfacce: TUI, CLI (`opencode run`), app desktop e GitHub Action. - ---- - -### Condivisione - -Puoi configurare la funzione di [condivisione](/docs/share) tramite l'opzione `share`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - -Valori supportati: - -- `"manual"` - Consenti la condivisione manuale tramite comandi (predefinito) -- `"auto"` - Condividi automaticamente le nuove conversazioni -- `"disabled"` - Disabilita completamente la condivisione - -Per impostazione predefinita, la condivisione e in modalita manuale e devi condividere esplicitamente le conversazioni usando il comando `/share`. - ---- - -### Comandi - -Puoi configurare comandi personalizzati per task ripetitivi tramite l'opzione `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", - }, - }, -} -``` - -Puoi anche definire comandi usando file markdown in `~/.config/opencode/commands/` o `.opencode/commands/`. [Scopri di piu](/docs/commands). - ---- - -### Scorciatoie - -Personalizza i keybind in `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": {} -} -``` - -[Scopri di piu](/docs/keybinds). - ---- - -### Aggiornamenti automatici - -OpenCode scarichera automaticamente eventuali aggiornamenti quando si avvia. Puoi disabilitare questa funzione con l'opzione `autoupdate`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "autoupdate": false -} -``` - -Se non vuoi aggiornamenti automatici ma vuoi essere avvisato quando e disponibile una nuova versione, imposta `autoupdate` a `"notify"`. -Nota che questo funziona solo se non e stato installato con un package manager come Homebrew. - ---- - -### Formatter - -Puoi configurare i formatter di codice tramite l'opzione `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"] - } - } -} -``` - -[Scopri di piu sui formatter](/docs/formatters). - ---- - -### Permessi - -Per impostazione predefinita, opencode **consente tutte le operazioni** senza richiedere un'approvazione esplicita. Puoi cambiarlo usando l'opzione `permission`. - -Per esempio, per fare in modo che gli strumenti `edit` e `bash` richiedano l'approvazione dell'utente: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "ask", - "bash": "ask" - } -} -``` - -[Scopri di piu sui permessi](/docs/permissions). - ---- - -### Compattazione - -Puoi controllare il comportamento di compattazione del contesto tramite l'opzione `compaction`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "compaction": { - "auto": true, - "prune": false, - "reserved": 10000 - } -} -``` - -- `auto` - Compatta automaticamente la sessione quando il contesto e pieno (predefinito: `true`). -- `prune` - Rimuove output vecchi degli strumenti per risparmiare token (predefinito: `false`). -- `reserved` - Token buffer per la compattazione. Lascia abbastanza margine per evitare overflow durante la compattazione - ---- - -### Monitoraggio file - -Puoi configurare i pattern di ignoramento del file watcher tramite l'opzione `watcher`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "watcher": { - "ignore": ["node_modules/**", "dist/**", ".git/**"] - } -} -``` - -I pattern seguono la sintassi glob. Usali per escludere directory rumorose dal monitoraggio dei file. - ---- - -### Server MCP - -Puoi configurare i server MCP che vuoi usare tramite l'opzione `mcp`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": {} -} -``` - -[Scopri di piu](/docs/mcp-servers). - ---- - -### Plugin - -[I plugin](/docs/plugins) estendono OpenCode con strumenti personalizzati, hook e integrazioni. - -Metti i file dei plugin in `.opencode/plugins/` o `~/.config/opencode/plugins/`. Puoi anche caricare plugin da npm tramite l'opzione `plugin`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "@my-org/custom-plugin"] -} -``` - -[Scopri di piu](/docs/plugins). - ---- - -### Istruzioni - -Puoi configurare le istruzioni per il modello che stai usando tramite l'opzione `instructions`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -Accetta un array di percorsi e pattern glob verso file di istruzioni. [Scopri di piu sulle regole](/docs/rules). - ---- - -### Provider disabilitati - -Puoi disabilitare i provider caricati automaticamente tramite l'opzione `disabled_providers`. E utile quando vuoi impedire il caricamento di alcuni provider anche se le credenziali sono disponibili. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "disabled_providers": ["openai", "gemini"] -} -``` - -:::note -`disabled_providers` ha priorita su `enabled_providers`. -::: - -L'opzione `disabled_providers` accetta un array di ID provider. Quando un provider e disabilitato: - -- Non verra caricato anche se sono impostate variabili d'ambiente. -- Non verra caricato anche se le chiavi API sono configurate tramite il comando `/connect`. -- I modelli del provider non appariranno nella lista di selezione dei modelli. - ---- - -### Provider abilitati - -Puoi specificare un'allowlist di provider tramite l'opzione `enabled_providers`. Se impostata, solo i provider indicati verranno abilitati e tutti gli altri saranno ignorati. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "enabled_providers": ["anthropic", "openai"] -} -``` - -E utile quando vuoi limitare OpenCode a usare solo alcuni provider invece di disabilitarli uno per uno. - -:::note -`disabled_providers` ha priorita su `enabled_providers`. -::: - -Se un provider appare sia in `enabled_providers` sia in `disabled_providers`, `disabled_providers` ha priorita per retrocompatibilita. - ---- - -### Sperimentale - -La chiave `experimental` contiene opzioni in sviluppo attivo. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "experimental": {} -} -``` - -:::caution -Le opzioni sperimentali non sono stabili. Possono cambiare o essere rimosse senza preavviso. -::: - ---- - -## Variabili - -Puoi usare la sostituzione di variabili nei file di configurazione per referenziare variabili d'ambiente e contenuti di file. - ---- - -### Variabili d'ambiente - -Usa `{env:VARIABLE_NAME}` per sostituire variabili d'ambiente: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "model": "{env:OPENCODE_MODEL}", - "provider": { - "anthropic": { - "models": {}, - "options": { - "apiKey": "{env:ANTHROPIC_API_KEY}" - } - } - } -} -``` - -Se la variabile d'ambiente non e impostata, verra sostituita con una stringa vuota. - ---- - -### File - -Usa `{file:path/to/file}` per sostituire il contenuto di un file: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["./custom-instructions.md"], - "provider": { - "openai": { - "options": { - "apiKey": "{file:~/.secrets/openai-key}" - } - } - } -} -``` - -I percorsi dei file possono essere: - -- Relativi alla directory del file di configurazione -- Oppure percorsi assoluti che iniziano con `/` o `~` - -Sono utili per: - -- Tenere dati sensibili (come chiavi API) in file separati. -- Includere file di istruzioni grandi senza appesantire la configurazione. -- Condividere snippet di configurazione comuni tra piu file di configurazione. diff --git a/packages/web/src/content/docs/it/custom-tools.mdx b/packages/web/src/content/docs/it/custom-tools.mdx deleted file mode 100644 index a0ef1c46c2..0000000000 --- a/packages/web/src/content/docs/it/custom-tools.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: Strumenti personalizzati -description: Crea strumenti che l'LLM puo chiamare in opencode. ---- - -Gli strumenti personalizzati sono funzioni che crei e che l'LLM puo chiamare durante le conversazioni. Funzionano insieme agli [strumenti integrati](/docs/tools) di opencode come `read`, `write` e `bash`. - ---- - -## Creazione di uno strumento - -Gli strumenti sono definiti come file **TypeScript** o **JavaScript**. Tuttavia, la definizione dello strumento puo invocare script scritti in **qualsiasi linguaggio**: TypeScript o JavaScript vengono usati solo per la definizione in se. - ---- - -### Posizione - -Possono essere definiti: - -- In locale, mettendoli nella directory `.opencode/tools/` del progetto. -- Oppure in globale, mettendoli in `~/.config/opencode/tools/`. - ---- - -### Struttura - -Il modo piu semplice per creare strumenti e usare l'helper `tool()` che fornisce type-safety e validazione. - -```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}` - }, -}) -``` - -Il **nome del file** diventa il **nome dello strumento**. L'esempio sopra crea lo strumento `database`. - ---- - -#### Strumenti multipli per file - -Puoi anche esportare piu strumenti da un singolo file. Ogni export diventa **uno strumento separato** con nome **`_`**: - -```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 - }, -}) -``` - -Questo crea due strumenti: `math_add` e `math_multiply`. - ---- - -#### Collisioni di nomi con strumenti integrati - -Gli strumenti personalizzati sono indicizzati per nome. Se uno strumento personalizzato usa lo stesso nome di uno strumento integrato, quello personalizzato ha la precedenza. - -Per esempio, questo file sostituisce lo strumento `bash` integrato: - -```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 -Preferisci nomi univoci a meno che tu non voglia intenzionalmente sostituire uno strumento integrato. Se vuoi disabilitare uno strumento integrato ma non sovrascriverlo, usa i [permessi](/docs/permissions). -::: - ---- - -### Argomenti - -Puoi usare `tool.schema`, che e semplicemente [Zod](https://zod.dev), per definire i tipi degli argomenti. - -```ts "tool.schema" -args: { - query: tool.schema.string().describe("SQL query to execute") -} -``` - -Puoi anche importare [Zod](https://zod.dev) direttamente e restituire un oggetto semplice: - -```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" - }, -} -``` - ---- - -### Contesto - -Gli strumenti ricevono un contesto sulla sessione corrente: - -```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}` - }, -}) -``` - -Usa `context.directory` per la working directory della sessione. -Usa `context.worktree` per la root del worktree git. - ---- - -## Esempi - -### Scrivere uno strumento in Python - -Puoi scrivere gli strumenti in qualunque linguaggio. Ecco un esempio che somma due numeri usando Python. - -Per prima cosa, crea lo strumento come script Python: - -```python title=".opencode/tools/add.py" -import sys - -a = int(sys.argv[1]) -b = int(sys.argv[2]) -print(a + b) -``` - -Poi crea la definizione dello strumento che lo invoca: - -```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() - }, -}) -``` - -Qui usiamo l'utility [`Bun.$`](https://bun.com/docs/runtime/shell) per eseguire lo script Python. diff --git a/packages/web/src/content/docs/it/ecosystem.mdx b/packages/web/src/content/docs/it/ecosystem.mdx deleted file mode 100644 index 093c74b13e..0000000000 --- a/packages/web/src/content/docs/it/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Ecosistema -description: Progetti e integrazioni costruiti con OpenCode. ---- - -Una raccolta di progetti della comunità costruiti su OpenCode. - -:::note -Vuoi aggiungere il tuo progetto legato a OpenCode a questa lista? Apri una PR. -::: - -Puoi anche dare un'occhiata a [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) e [opencode.cafe](https://opencode.cafe), una comunità che aggrega ecosistema e community. - ---- - -## Plugin - -| Nome | Descrizione | -| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | -| [opencode-daytona](https://github.com/daytonaio/daytona/tree/main/libs/opencode-plugin) | Esegue automaticamente sessioni OpenCode in sandbox Daytona isolate con sync git e anteprime live | -| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | Inietta automaticamente gli header di sessione Helicone per raggruppare le richieste | -| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | Inietta automaticamente tipi TypeScript/Svelte nelle letture dei file con tool di lookup | -| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Usa il tuo abbonamento ChatGPT Plus/Pro invece dei crediti API | -| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Usa il tuo piano Gemini esistente invece della fatturazione API | -| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | Usa i modelli gratuiti di Antigravity invece della fatturazione API | -| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Isolamento devcontainer multi-branch con shallow clone e porte assegnate automaticamente | -| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Plugin OAuth Google Antigravity, con supporto a Google Search e gestione API più robusta | -| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Ottimizza l'uso dei token eliminando output obsoleti degli strumenti | -| [opencode-vibeguard](https://github.com/inkdust2021/opencode-vibeguard) | Oscura segreti/PII in placeholder stile VibeGuard prima delle chiamate LLM; ripristina localmente | -| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Aggiunge supporto websearch nativo per provider supportati con stile grounded di Google | -| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Permette agli agenti AI di eseguire processi in background in una PTY e inviare input interattivo | -| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Istruzioni per comandi shell non interattivi: evita blocchi dovuti a operazioni dipendenti da TTY | -| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Traccia l'uso di OpenCode con Wakatime | -| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Ripulisce le tabelle markdown prodotte dai LLM | -| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | Editing Fast Apply, ricerca codebase WarpGrep e compattazione del contesto tramite Morph | -| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Agenti in background, tool LSP/AST/MCP predefiniti, agenti curati, compatibile con Claude Code | -| [opencode-notificator](https://github.com/panta82/opencode-notificator) | Notifiche desktop e avvisi sonori per le sessioni OpenCode | -| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | Notifiche desktop e avvisi sonori per eventi di permesso, completamento ed errore | -| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | Naming automatico delle sessioni Zellij basato sul contesto OpenCode | -| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | Permette agli agenti OpenCode di caricare prompt al bisogno con discovery e injection di skill | -| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Memoria persistente tra sessioni usando Supermemory | -| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Revisione interattiva dei piani con annotazione visiva e condivisione privata/offline | -| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Estende opencode /commands in un sistema di orchestrazione con controllo di flusso granulare | -| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Pianifica job ricorrenti con launchd (Mac) o systemd (Linux) usando sintassi cron | -| [micode](https://github.com/vtemian/micode) | Workflow strutturato Brainstorm → Plan → Implement con continuità di sessione | -| [octto](https://github.com/vtemian/octto) | UI browser interattiva per brainstorming AI con moduli multi-domanda | -| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Agenti in background stile Claude Code con delega async e persistenza del contesto | -| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | Notifiche native del sistema per OpenCode: sai quando i task finiscono | -| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | Harness di orchestrazione multi-agente bundle: 16 componenti, una installazione | -| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | Git worktree senza attriti per OpenCode | -| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | Traccia e debugga i tuoi agenti AI con Sentry AI Monitoring | - ---- - -## Progetti - -| Nome | Descrizione | -| ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------- | -| [kimaki](https://github.com/remorses/kimaki) | Bot Discord per controllare sessioni OpenCode, costruito sull'SDK | -| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Plugin Neovim per prompt consapevoli dell'editor, costruito sull'API | -| [portal](https://github.com/hosenur/portal) | Web UI mobile-first per OpenCode su Tailscale/VPN | -| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | Template per costruire plugin OpenCode | -| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Frontend Neovim per opencode: un agente di coding AI per terminale | -| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Provider Vercel AI SDK per usare OpenCode tramite @opencode-ai/sdk | -| [OpenChamber](https://github.com/btriapitsyn/openchamber) | App Web/Desktop ed estensione VS Code per OpenCode | -| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Plugin Obsidian che integra OpenCode nella UI di Obsidian | -| [OpenWork](https://github.com/different-ai/openwork) | Alternativa open source a Claude Cowork, alimentata da OpenCode | -| [ocx](https://github.com/kdcokenny/ocx) | Gestore di estensioni OpenCode con profili portabili e isolati | -| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | App client Desktop, Web, Mobile e remota per OpenCode | - ---- - -## Agenti - -| Nome | Descrizione | -| ----------------------------------------------------------------- | --------------------------------------------------------- | -| [Agentic](https://github.com/Cluster444/agentic) | Agenti AI modulari e comandi per uno sviluppo strutturato | -| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Config, prompt, agenti e plugin per workflow migliorati | diff --git a/packages/web/src/content/docs/it/enterprise.mdx b/packages/web/src/content/docs/it/enterprise.mdx deleted file mode 100644 index bd142e709a..0000000000 --- a/packages/web/src/content/docs/it/enterprise.mdx +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: Enterprise -description: Usa OpenCode in sicurezza nella tua organizzazione. ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -OpenCode Enterprise e pensato per organizzazioni che vogliono assicurarsi che codice e dati non escano mai dalla propria infrastruttura. Questo e possibile grazie a una config centralizzata che si integra con SSO e con il gateway AI interno. - -:::note -OpenCode non memorizza alcun tuo codice o dato di contesto. -::: - -Per iniziare con OpenCode Enterprise: - -1. Fai una prova interna con il tuo team. -2. **Contattaci** per parlare di prezzi e opzioni di implementazione. - ---- - -## Prova - -OpenCode e open source e non memorizza alcun tuo codice o dato di contesto, quindi i tuoi sviluppatori possono semplicemente [iniziare](/docs/) e fare una prova. - ---- - -### Gestione dati - -**OpenCode non memorizza il tuo codice o i tuoi dati di contesto.** Tutta l'elaborazione avviene in locale o tramite chiamate API dirette al tuo provider AI. - -Questo significa che, finche usi un provider di cui ti fidi o un gateway AI interno, puoi usare OpenCode in modo sicuro. - -L'unica eccezione e la funzione opzionale `/share`. - ---- - -#### Condivisione conversazioni - -Se un utente abilita la funzione `/share`, la conversazione e i dati associati vengono inviati al servizio che usiamo per ospitare queste pagine di condivisione su opencode.ai. - -I dati sono serviti tramite la rete edge della nostra CDN e vengono messi in cache vicino ai tuoi utenti. - -Ti consigliamo di disabilitarla durante la prova. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -[Scopri di più sulla condivisione](/docs/share). - ---- - -### Proprietà del codice - -**Sei proprietario di tutto il codice prodotto da OpenCode.** Non ci sono restrizioni di licenza o rivendicazioni di proprieta. - ---- - -## Prezzi - -Usiamo un modello per-seat per OpenCode Enterprise. Se hai un tuo gateway LLM, non addebitiamo i token usati. Per maggiori dettagli su prezzi e opzioni di implementazione, **contattaci**. - ---- - -## Distribuzione - -Quando hai completato la prova e sei pronto a usare OpenCode nella tua organizzazione, puoi **contattarci** per discutere prezzi e opzioni di implementazione. - ---- - -### Configurazione centralizzata - -Possiamo configurare OpenCode per usare un'unica config centralizzata per tutta l'organizzazione. - -Questa config centralizzata puo integrarsi col provider SSO e garantisce che tutti gli utenti accedano solo al gateway AI interno. - ---- - -### Integrazione SSO - -Tramite la config centralizzata, OpenCode puo integrarsi col provider SSO della tua organizzazione per l'autenticazione. - -Questo consente a OpenCode di ottenere credenziali per il gateway AI interno tramite il sistema di identity management esistente. - ---- - -### Gateway AI interno - -Con la config centralizzata, OpenCode puo anche essere configurato per usare solo il tuo gateway AI interno. - -Puoi anche disabilitare tutti gli altri provider AI, assicurandoti che tutte le richieste passino dall'infrastruttura approvata dalla tua organizzazione. - ---- - -### Hosting autonomo - -Anche se consigliamo di disabilitare le pagine di condivisione per assicurarti che i dati non escano mai dall'organizzazione, possiamo anche aiutarti a ospitarle sulla tua infrastruttura. - -Questa funzionalita e nella nostra roadmap. Se ti interessa, **faccelo sapere**. - ---- - -## FAQ - -

-Che cos'e OpenCode Enterprise? - -OpenCode Enterprise e pensato per organizzazioni che vogliono assicurarsi che codice e dati non escano mai dalla propria infrastruttura. Questo e possibile grazie a una config centralizzata che si integra con SSO e con il gateway AI interno. - -
- -
-Come posso iniziare con OpenCode Enterprise? - -Inizia semplicemente con una prova interna con il tuo team. Per impostazione predefinita OpenCode non memorizza il tuo codice o i dati di contesto, quindi e facile partire. - -Poi **contattaci** per discutere prezzi e opzioni di implementazione. - -
- -
-Come funziona il pricing enterprise? - -Offriamo pricing enterprise per-seat. Se hai un tuo gateway LLM, non addebitiamo i token usati. Per maggiori dettagli, **contattaci** per un preventivo su misura in base alle esigenze della tua organizzazione. - -
- -
-I miei dati sono al sicuro con OpenCode Enterprise? - -Si. OpenCode non memorizza il tuo codice o i dati di contesto. Tutta l'elaborazione avviene in locale o tramite chiamate API dirette al tuo provider AI. Con config centralizzata e integrazione SSO, i dati restano all'interno dell'infrastruttura della tua organizzazione. - -
- -
-Possiamo usare un registry NPM privato? - -OpenCode supporta registry npm privati tramite il supporto nativo di Bun per i file `.npmrc`. Se la tua organizzazione usa un registry privato, come JFrog Artifactory, Nexus o simili, assicurati che gli sviluppatori siano autenticati prima di eseguire OpenCode. - -Per configurare l'autenticazione col registry privato: - -```bash -npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/ -``` - -Questo crea `~/.npmrc` con i dettagli di autenticazione. OpenCode lo rilevera automaticamente. - -:::caution -Devi essere autenticato nel registry privato prima di eseguire OpenCode. -::: - -In alternativa, puoi configurare manualmente un file `.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} -``` - -Gli sviluppatori devono essere autenticati nel registry privato prima di eseguire OpenCode per garantire che i pacchetti possano essere installati dal registry enterprise. - -
diff --git a/packages/web/src/content/docs/it/formatters.mdx b/packages/web/src/content/docs/it/formatters.mdx deleted file mode 100644 index 58e4c60ed0..0000000000 --- a/packages/web/src/content/docs/it/formatters.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Formattatori -description: OpenCode usa formattatori specifici per linguaggio. ---- - -OpenCode formatta automaticamente i file dopo che vengono scritti o modificati usando formattatori specifici per linguaggio. Questo assicura che il codice generato segua lo stile del tuo progetto. - ---- - -## Integrati - -OpenCode include diversi formattatori integrati per linguaggi e framework popolari. Qui sotto trovi la lista dei formattatori, delle estensioni supportate e dei comandi o opzioni di config richiesti. - -| Formattatore | Estensioni | Requisiti | -| -------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | -| air | .R | comando `air` disponibile | -| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, and [more](https://biomejs.dev/) | file di configurazione `biome.json(c)` | -| cargofmt | .rs | comando `cargo fmt` disponibile | -| clang-format | .c, .cpp, .h, .hpp, .ino, and [more](https://clang.llvm.org/docs/ClangFormat.html) | file di configurazione `.clang-format` | -| cljfmt | .clj, .cljs, .cljc, .edn | comando `cljfmt` disponibile | -| dart | .dart | comando `dart` disponibile | -| dfmt | .d | comando `dfmt` disponibile | -| gleam | .gleam | comando `gleam` disponibile | -| gofmt | .go | comando `gofmt` disponibile | -| htmlbeautifier | .erb, .html.erb | comando `htmlbeautifier` disponibile | -| ktlint | .kt, .kts | comando `ktlint` disponibile | -| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | comando `mix` disponibile | -| nixfmt | .nix | comando `nixfmt` disponibile | -| ocamlformat | .ml, .mli | comando `ocamlformat` disponibile e file di configurazione `.ocamlformat` | -| ormolu | .hs | comando `ormolu` disponibile | -| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | dipendenza `oxfmt` in `package.json` e una [flag variabile d'ambiente sperimentale](/docs/cli/#experimental) | -| pint | .php | dipendenza `laravel/pint` in `composer.json` | -| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, and [more](https://prettier.io/docs/en/index.html) | dipendenza `prettier` in `package.json` | -| rubocop | .rb, .rake, .gemspec, .ru | comando `rubocop` disponibile | -| ruff | .py, .pyi | comando `ruff` disponibile con config | -| rustfmt | .rs | comando `rustfmt` disponibile | -| shfmt | .sh, .bash | comando `shfmt` disponibile | -| standardrb | .rb, .rake, .gemspec, .ru | comando `standardrb` disponibile | -| terraform | .tf, .tfvars | comando `terraform` disponibile | -| uv | .py, .pyi | comando `uv` disponibile | -| zig | .zig, .zon | comando `zig` disponibile | - -Quindi, se il progetto ha `prettier` in `package.json`, OpenCode lo usera automaticamente. - ---- - -## Come funziona - -Quando OpenCode scrive o modifica un file: - -1. Controlla l'estensione del file rispetto a tutti i formattatori abilitati. -2. Esegue il comando del formattatore appropriato sul file. -3. Applica automaticamente le modifiche di formattazione. - -Questo processo avviene in background, mantenendo lo stile del codice senza passaggi manuali. - ---- - -## Configurazione - -Puoi personalizzare i formattatori nella sezione `formatter` della config di OpenCode. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "formatter": {} -} -``` - -Ogni configurazione di formattatore supporta: - -| Proprieta | Tipo | Descrizione | -| ------------- | -------- | --------------------------------------------------- | -| `disabled` | boolean | Impostalo a `true` per disabilitare il formattatore | -| `command` | string[] | Il comando da eseguire per la formattazione | -| `environment` | object | Variabili d'ambiente da impostare quando si esegue | -| `extensions` | string[] | Estensioni file gestite da questo formattatore | - -Vediamo alcuni esempi. - ---- - -### Disabilitare i formattatori - -Per disabilitare **tutti** i formattatori globalmente, imposta `formatter` a `false`: - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": false -} -``` - -Per disabilitare un formattatore **specifico**, imposta `disabled` a `true`: - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": { - "prettier": { - "disabled": true - } - } -} -``` - ---- - -### Formattatori personalizzati - -Puoi sovrascrivere i formattatori integrati o aggiungerne di nuovi specificando comando, variabili d'ambiente ed estensioni file: - -```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"] - } - } -} -``` - -Il **placeholder `$FILE`** nel comando viene sostituito con il percorso del file in fase di formattazione. diff --git a/packages/web/src/content/docs/it/github.mdx b/packages/web/src/content/docs/it/github.mdx deleted file mode 100644 index 81bbd59337..0000000000 --- a/packages/web/src/content/docs/it/github.mdx +++ /dev/null @@ -1,321 +0,0 @@ ---- -title: GitHub -description: Usa OpenCode in issue e pull request su GitHub. ---- - -OpenCode si integra nel tuo workflow GitHub. Menziona `/opencode` o `/oc` in un commento e OpenCode eseguira' i task dentro il runner di GitHub Actions. - ---- - -## Funzionalità - -- **Triage delle issue**: chiedi a OpenCode di indagare su una issue e spiegartela. -- **Fix e implementazioni**: chiedi a OpenCode di risolvere una issue o implementare una feature. Lavorera' su un nuovo branch e inviera' una PR con tutte le modifiche. -- **Sicuro**: OpenCode gira all'interno dei runner GitHub. - ---- - -## Installazione - -Esegui il comando seguente in un progetto che si trova in un repo GitHub: - -```bash -opencode github install -``` - -Questo ti guidera' nell'installazione della GitHub app, nella creazione del workflow e nella configurazione dei secret. - ---- - -### Configurazione manuale - -In alternativa, puoi configurarlo manualmente. - -1. **Installa la GitHub app** - - Vai su [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Assicurati che sia installata sul repository di destinazione. - -2. **Aggiungi il workflow** - - Aggiungi il seguente file workflow in `.github/workflows/opencode.yml` nel tuo repo. Assicurati di impostare il `model` appropriato e le API key richieste in `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. **Salva le API key nei secret** - - Nelle **impostazioni** della tua organizzazione o progetto, espandi **Secrets and variables** sulla sinistra e seleziona **Actions**. Poi aggiungi le API key richieste. - ---- - -## Configurazione - -- `model`: il modello da usare con OpenCode. Usa il formato `provider/model`. E' **obbligatorio**. -- `agent`: l'agente da usare. Deve essere un agente primario. Se non trovato, usa `default_agent` dalla config o `"build"`. -- `share`: se condividere la sessione OpenCode. Di default e' **true** per repository pubblici. -- `prompt`: prompt personalizzato opzionale per sovrascrivere il comportamento di default. Usalo per personalizzare come OpenCode processa le richieste. -- `token`: token di accesso GitHub opzionale per eseguire operazioni come creare commenti, committare modifiche e aprire pull request. Di default, OpenCode usa l'installation access token della OpenCode GitHub App, quindi commit, commenti e pull request risultano provenire dalla app. - - In alternativa, puoi usare il [token integrato `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) del runner GitHub Actions senza installare la OpenCode GitHub App. Assicurati solo di concedere i permessi necessari nel workflow: - - ```yaml - permissions: - id-token: write - contents: write - pull-requests: write - issues: write - ``` - - Se preferisci, puoi anche usare un [personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT). - ---- - -## Eventi supportati - -OpenCode puo' essere attivato dai seguenti eventi GitHub: - -| Tipo evento | Attivato da | Dettagli | -| ----------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -| `issue_comment` | Commento su una issue o PR | Menziona `/opencode` o `/oc` nel commento. OpenCode legge il contesto e puo' creare branch, aprire PR o rispondere. | -| `pull_request_review_comment` | Commento su specifiche righe in una PR | Menziona `/opencode` o `/oc` durante una review. OpenCode riceve path file, numeri di riga e contesto del diff. | -| `issues` | Issue aperta o modificata | Attiva automaticamente OpenCode quando le issue vengono create o modificate. Richiede l'input `prompt`. | -| `pull_request` | PR aperta o aggiornata | Attiva automaticamente OpenCode quando le PR vengono aperte, sincronizzate o riaperte. Utile per review automatiche. | -| `schedule` | Pianificazione basata su cron | Esegue OpenCode a pianificazione. Richiede l'input `prompt`. Output nei log e nelle PR (nessuna issue su cui commentare). | -| `workflow_dispatch` | Trigger manuale dalla UI GitHub | Attiva OpenCode on-demand dalla tab Actions. Richiede l'input `prompt`. Output nei log e nelle PR. | - -### Esempio con schedule - -Esegui OpenCode a pianificazione per eseguire task automatizzati: - -```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. -``` - -Per gli eventi schedulati, l'input `prompt` e' **obbligatorio** dato che non c'e' un commento da cui estrarre le istruzioni. I workflow schedulati girano senza un contesto utente per i controlli di permesso, quindi il workflow deve concedere `contents: write` e `pull-requests: write` se ti aspetti che OpenCode crei branch o PR. - ---- - -### Esempio di pull request - -Review automatica delle PR quando vengono aperte o aggiornate: - -```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 -``` - -Per gli eventi `pull_request`, se non viene fornito alcun `prompt`, OpenCode fa di default la review della pull request. - ---- - -### Esempio di triage delle issue - -Triage automatico delle nuove issue. Questo esempio filtra gli account piu' vecchi di 30 giorni per ridurre lo 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. -``` - -Per gli eventi `issues`, l'input `prompt` e' **obbligatorio** dato che non c'e' un commento da cui estrarre le istruzioni. - ---- - -## Prompt personalizzati - -Sovrascrivi il prompt di default per personalizzare il comportamento di OpenCode nel tuo 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 -``` - -E' utile per imporre criteri specifici di review, standard di codice o aree di focus rilevanti per il progetto. - ---- - -## Esempi - -Ecco alcuni esempi di come puoi usare OpenCode su GitHub. - -- **Spiega una issue** - - Aggiungi questo commento in una issue GitHub. - - ``` - /opencode explain this issue - ``` - - OpenCode leggera' l'intero thread, inclusi tutti i commenti, e rispondera' con una spiegazione chiara. - -- **Risolvi una issue** - - In una issue GitHub, scrivi: - - ``` - /opencode fix this - ``` - - OpenCode creera' un nuovo branch, implementera' le modifiche e aprira' una PR con i cambiamenti. - -- **Rivedi PR e fai modifiche** - - Lascia il seguente commento su una PR GitHub. - - ``` - Delete the attachment from S3 when the note is removed /oc - ``` - - OpenCode implementera' la modifica richiesta e la committera' nella stessa PR. - -- **Rivedi righe specifiche di codice** - - Lascia un commento direttamente sulle righe di codice nella tab "Files" della PR. OpenCode rileva automaticamente file, numeri di riga e contesto del diff per fornire risposte precise. - - ``` - [Comment on specific lines in Files tab] - /oc add error handling here - ``` - - Quando commenti su righe specifiche, OpenCode riceve: - - Il file esatto in review - - Le righe di codice specifiche - - Il contesto del diff circostante - - Informazioni sul numero di riga - - Questo permette richieste piu' mirate senza dover specificare manualmente path file o numeri di riga. diff --git a/packages/web/src/content/docs/it/gitlab.mdx b/packages/web/src/content/docs/it/gitlab.mdx deleted file mode 100644 index 479f7db9e7..0000000000 --- a/packages/web/src/content/docs/it/gitlab.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: GitLab -description: Usa OpenCode in issue e merge request su GitLab. ---- - -OpenCode si integra nel tuo workflow GitLab tramite la pipeline GitLab CI/CD o con GitLab Duo. - -In entrambi i casi, OpenCode girera' sui tuoi runner GitLab. - ---- - -## GitLab CI - -OpenCode funziona in una pipeline GitLab standard. Puoi integrarlo nella pipeline come [componente CI](https://docs.gitlab.com/ee/ci/components/). - -Qui usiamo un componente CI/CD creato dalla community per OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode). - ---- - -### Funzionalità - -- **Configurazione personalizzata per job**: configura OpenCode con una directory di configurazione personalizzata, ad esempio `./config/#custom-directory`, per abilitare o disabilitare funzionalita' per ogni invocazione di OpenCode. -- **Setup minimo**: il componente CI prepara OpenCode in background; devi solo creare la configurazione OpenCode e il prompt iniziale. -- **Flessibile**: il componente CI supporta diversi input per personalizzarne il comportamento. - ---- - -### Configurazione - -1. Salva il JSON di autenticazione di OpenCode come variabile d'ambiente CI di tipo File in **Settings** > **CI/CD** > **Variables**. Assicurati di marcarla come "Masked and hidden". -2. Aggiungi quanto segue al tuo file `.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" - ``` - -Per altri input e casi d'uso, [consulta la documentazione](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) di questo componente. - ---- - -## GitLab Duo - -OpenCode si integra nel tuo workflow GitLab. -Menziona `@opencode` in un commento e OpenCode eseguira' i task dentro la tua pipeline GitLab CI. - ---- - -### Funzionalità - -- **Triage delle issue**: chiedi a OpenCode di indagare su una issue e spiegartela. -- **Fix e implementazioni**: chiedi a OpenCode di risolvere una issue o implementare una feature. - Creera' un nuovo branch e aprira' una merge request con le modifiche. -- **Sicuro**: OpenCode gira sui tuoi runner GitLab. - ---- - -### Configurazione - -OpenCode gira nella pipeline GitLab CI/CD. Ecco cosa ti serve per configurarlo: - -:::tip -Dai un'occhiata alle [**GitLab docs**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) per istruzioni aggiornate. -::: - -1. Configura l'ambiente GitLab -2. Configura CI/CD -3. Ottieni una API key di un provider di modelli AI -4. Crea un service account -5. Configura le variabili CI/CD -6. Crea un file di configurazione del flow, ecco un esempio: - -
- - Flow configuration - - ```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. - - - 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. - - " - - 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 - ``` - -
- -Puoi fare riferimento alla [documentazione GitLab CLI agents](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) per istruzioni dettagliate. - ---- - -### Esempi - -Ecco alcuni esempi di come puoi usare OpenCode in GitLab. - -:::tip -Puoi configurare una frase trigger diversa da `@opencode`. -::: - -- **Spiega una issue** - - Aggiungi questo commento in una issue GitLab. - - ``` - @opencode explain this issue - ``` - - OpenCode leggera' la issue e rispondera' con una spiegazione chiara. - -- **Risolvi una issue** - - In una issue GitLab, scrivi: - - ``` - @opencode fix this - ``` - - OpenCode creera' un nuovo branch, implementera' le modifiche e aprira' una merge request con i cambiamenti. - -- **Rivedi merge request** - - Lascia il seguente commento su una merge request GitLab. - - ``` - @opencode review this merge request - ``` - - OpenCode rivedra' la merge request e fornira' feedback. diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx deleted file mode 100644 index fc0bb70775..0000000000 --- a/packages/web/src/content/docs/it/go.mdx +++ /dev/null @@ -1,209 +0,0 @@ ---- -title: Go -description: Abbonamento a basso costo per modelli di programmazione aperti. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Go è un abbonamento a basso costo — **5 $ per il primo mese**, poi **10 $/mese** — che ti offre un accesso affidabile ai popolari modelli di programmazione aperti. - -Go funziona come qualsiasi altro provider in OpenCode. Ti abboni a OpenCode Go e -ottieni la tua chiave API. È **completamente facoltativo** e non hai bisogno di usarlo per -utilizzare OpenCode. - -È progettato principalmente per gli utenti internazionali, con modelli ospitati negli Stati Uniti, nell'Unione Europea e a Singapore per un accesso globale stabile. - ---- - -## Contesto - -I modelli aperti sono diventati davvero validi. Ora raggiungono prestazioni vicine a quelle dei modelli proprietari per le attività di programmazione. E poiché molti provider possono fornirli in modo competitivo, di solito sono molto più economici. - -Tuttavia, ottenere un accesso affidabile e a bassa latenza può essere difficile. I provider -variano per qualità e disponibilità. - -:::tip -Abbiamo testato un gruppo selezionato di modelli e provider che funzionano bene con OpenCode. -::: - -Per risolvere questo problema, abbiamo fatto un paio di cose: - -1. Abbiamo testato un gruppo selezionato di modelli aperti e parlato con i loro team su come - eseguirli al meglio. -2. Abbiamo quindi collaborato con alcuni provider per assicurarci che venissero forniti - correttamente. -3. Infine, abbiamo eseguito dei benchmark sulla combinazione modello/provider e abbiamo stilato - un elenco che ci sentiamo di raccomandare. - -OpenCode Go ti dà accesso a questi modelli a **5 $ per il primo mese**, poi a **10 $/mese**. - ---- - -## Come funziona - -OpenCode Go funziona come qualsiasi altro provider in OpenCode. - -1. Accedi a **OpenCode Zen**, ti abboni a Go e - copi la tua chiave API. -2. Esegui il comando `/connect` nella TUI, selezioni `OpenCode Go` e incolli - la tua chiave API. -3. Esegui `/models` nella TUI per vedere l'elenco dei modelli disponibili tramite Go. - -:::note -Solo un membro per workspace può abbonarsi a OpenCode Go. -::: - -L'elenco attuale dei modelli include: - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -L'elenco dei modelli potrebbe cambiare man mano che ne testiamo e aggiungiamo di nuovi. - ---- - -## Limiti di utilizzo - -OpenCode Go include i seguenti limiti: - -- **Limite di 5 ore** — 12 $ di utilizzo -- **Limite settimanale** — 30 $ di utilizzo -- **Limite mensile** — 60 $ di utilizzo - -I limiti sono definiti in valore in dollari. Questo significa che il conteggio effettivo delle richieste dipende dal modello utilizzato. Modelli più economici come DeepSeek V4 Flash consentono più richieste, mentre modelli più costosi come GLM-5.2 ne consentono di meno. - -La tabella seguente fornisce una stima del conteggio delle richieste in base a pattern di utilizzo tipici di Go: - -| Model | richieste ogni 5 ore | richieste a settimana | richieste al mese | -| ----------------- | -------------------- | --------------------- | ----------------- | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -Le stime si basano sui pattern medi di richieste osservati: - -- GLM-5.2/5.1 — 700 di input, 52.000 in cache, 150 token di output per richiesta -- Kimi K2.7 Code/K2.6 — 870 di input, 55.000 in cache, 200 token di output per richiesta -- DeepSeek V4 Pro — 750 di input, 82.000 in cache, 290 token di output per richiesta -- DeepSeek V4 Flash — 790 di input, 68.000 in cache, 280 token di output per richiesta -- MiniMax M3 — 510 di input, 56.000 in cache, 190 token di output per richiesta -- MiniMax M2.7 — 300 di input, 55.000 in cache, 125 token di output per richiesta -- Qwen3.7 Max — 420 di input, 66.000 in cache, 200 token di output per richiesta -- Qwen3.7 Plus — 500 di input, 57.000 in cache, 190 token di output per richiesta -- Qwen3.6 Plus — 500 di input, 57.000 in cache, 190 token di output per richiesta -- MiMo-V2.5 — 830 di input, 71.500 in cache, 295 token di output per richiesta -- MiMo-V2.5-Pro — 790 di input, 86.000 in cache, 305 token di output per richiesta - -Le stime si basano anche sui seguenti prezzi per 1M token: - -| Modello | Input | Output | Cached Read | Cached Write | -| ---------------------------- | ----- | ------ | ----------- | ------------ | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -Puoi monitorare il tuo utilizzo attuale nella **console**. - -:::tip -Se raggiungi il limite di utilizzo, puoi continuare a usare i modelli gratuiti. -::: - -I limiti di utilizzo potrebbero cambiare man mano che raccogliamo dati sull'utilizzo iniziale e feedback. - ---- - -### Utilizzo oltre i limiti - -Se hai anche dei crediti nel tuo saldo Zen, puoi abilitare l'opzione **Use balance** -nella console. Quando è abilitata, Go ripiegherà sul tuo saldo Zen -dopo che avrai raggiunto i limiti di utilizzo invece di bloccare le richieste. - ---- - -## Endpoint - -Puoi anche accedere ai modelli Go tramite i seguenti endpoint API. - -| Modello | ID Modello | Endpoint | Pacchetto AI SDK | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -Il [model id](/docs/config/#models) nella tua OpenCode config -utilizza il formato `opencode-go/`. Ad esempio, per Kimi K2.7 Code, useresti -`opencode-go/kimi-k2.7-code` nella tua configurazione. - ---- - -### Modelli - -Puoi recuperare l'elenco completo dei modelli disponibili e i relativi metadati da: - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## Privacy - -Il piano è pensato principalmente per gli utenti internazionali, con modelli ospitati negli US, nell’EU e a Singapore per un accesso globale stabile. I nostri provider seguono una politica di zero-retention e non utilizzano i tuoi dati per l’addestramento dei modelli. - ---- - -## Obiettivi - -Abbiamo creato OpenCode Go per: - -1. Rendere la programmazione con l'IA **accessibile** a più persone tramite un abbonamento a basso costo. -2. Fornire un accesso **affidabile** ai migliori modelli di programmazione aperti. -3. Curare modelli che sono **testati e valutati tramite benchmark** per l'uso con gli agenti di programmazione. -4. Non avere **nessun lock-in**, permettendoti di utilizzare anche qualsiasi altro provider con OpenCode. diff --git a/packages/web/src/content/docs/it/ide.mdx b/packages/web/src/content/docs/it/ide.mdx deleted file mode 100644 index 37948acc1d..0000000000 --- a/packages/web/src/content/docs/it/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: IDE -description: L'estensione OpenCode per VS Code, Cursor e altri IDE ---- - -OpenCode si integra con VS Code, Cursor o qualunque IDE che supporti un terminale. Basta eseguire `opencode` nel terminale per iniziare. - ---- - -## Utilizzo - -- **Avvio rapido**: usa `Cmd+Esc` (Mac) o `Ctrl+Esc` (Windows/Linux) per aprire OpenCode in una vista terminale divisa, oppure per mettere a fuoco una sessione esistente se e gia in esecuzione. -- **Nuova sessione**: usa `Cmd+Shift+Esc` (Mac) o `Ctrl+Shift+Esc` (Windows/Linux) per avviare una nuova sessione di OpenCode, anche se ne esiste gia una aperta. Puoi anche cliccare il pulsante OpenCode nell'interfaccia. -- **Consapevolezza del contesto**: condividi automaticamente con OpenCode la selezione corrente o la scheda attiva. -- **Scorciatoie per riferimenti file**: usa `Cmd+Option+K` (Mac) o `Alt+Ctrl+K` (Linux/Windows) per inserire riferimenti a file. Per esempio, `@File#L37-42`. - ---- - -## Installazione - -Per installare OpenCode su VS Code e fork popolari come Cursor, Windsurf, VSCodium: - -1. Apri VS Code -2. Apri il terminale integrato -3. Esegui `opencode` - l'estensione si installa automaticamente - -Se invece vuoi usare il tuo IDE quando esegui `/editor` o `/export` dalla TUI, devi impostare `export EDITOR="code --wait"`. [Scopri di piu](/docs/tui/#editor-setup). - ---- - -### Installazione manuale - -Cerca **OpenCode** nel Marketplace delle estensioni e clicca **Install**. - ---- - -### Risoluzione dei problemi - -Se l'estensione non si installa automaticamente: - -- Assicurati di eseguire `opencode` nel terminale integrato. -- Verifica che la CLI del tuo IDE sia installata: - - Per VS Code: comando `code` - - Per Cursor: comando `cursor` - - Per Windsurf: comando `windsurf` - - Per VSCodium: comando `codium` - - In caso contrario, esegui `Cmd+Shift+P` (Mac) o `Ctrl+Shift+P` (Windows/Linux) e cerca "Shell Command: Install 'code' command in PATH" (o l'equivalente per il tuo IDE) -- Assicurati che VS Code abbia i permessi per installare estensioni diff --git a/packages/web/src/content/docs/it/index.mdx b/packages/web/src/content/docs/it/index.mdx deleted file mode 100644 index 1b48d9df61..0000000000 --- a/packages/web/src/content/docs/it/index.mdx +++ /dev/null @@ -1,344 +0,0 @@ ---- -title: Introduzione -description: Inizia con OpenCode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" -import config from "../../../../config.mjs" -export const console = config.console - -[**OpenCode**](/) e un agente di programmazione AI open source. E disponibile come interfaccia per terminale, app desktop o estensione per IDE. - -![OpenCode TUI con il tema opencode](../../../assets/lander/screenshot.png) - -Iniziamo. - ---- - -#### Prerequisiti - -Per usare OpenCode nel terminale, ti serve: - -1. Un emulatore di terminale moderno, come: - - [WezTerm](https://wezterm.org), cross-platform - - [Alacritty](https://alacritty.org), cross-platform - - [Ghostty](https://ghostty.org), Linux and macOS - - [Kitty](https://sw.kovidgoyal.net/kitty/), Linux and macOS - -2. Le chiavi API dei provider LLM che vuoi usare. - ---- - -## Installa - -Il modo piu semplice per installare OpenCode e usare lo script di installazione. - -```bash -curl -fsSL https://opencode.ai/install | bash -``` - -Puoi anche installarlo con i seguenti comandi: - -- **Con Node.js** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **Con Homebrew su macOS e Linux** - - ```bash - brew install anomalyco/tap/opencode - ``` - - > Ti consigliamo di usare il tap di OpenCode per avere le release piu aggiornate. La formula ufficiale `brew install opencode` e mantenuta dal team Homebrew e viene aggiornata meno spesso. - -- **Con Paru su Arch Linux** - - ```bash - sudo pacman -S opencode # Arch Linux (Stable) - paru -S opencode-bin # Arch Linux (Latest from AUR) - ``` - -#### Windows - -:::tip[Consigliato: usa WSL] -Per la migliore esperienza su Windows, ti consigliamo di usare [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). Offre prestazioni migliori e piena compatibilita con le funzionalita di OpenCode. -::: - -- **Con Chocolatey** - - ```bash - choco install opencode - ``` - -- **Con Scoop** - - ```bash - scoop install opencode - ``` - -- **Con NPM** - - ```bash - npm install -g opencode-ai - ``` - -- **Con Mise** - - ```bash - mise use -g github:anomalyco/opencode - ``` - -- **Con Docker** - - ```bash - docker run -it --rm ghcr.io/anomalyco/opencode - ``` - -Il supporto per installare OpenCode su Windows usando Bun e attualmente in lavorazione. - -Puoi anche scaricare il binario dalle [Releases](https://github.com/anomalyco/opencode/releases). - ---- - -## Configura - -Con OpenCode puoi usare qualsiasi provider LLM configurando le relative chiavi API. - -Se e la prima volta che usi provider LLM, ti consigliamo [OpenCode Zen](/docs/zen). -E una lista curata di modelli testati e verificati dal team di OpenCode. - -1. Esegui il comando `/connect` nella TUI, seleziona opencode e vai su [opencode.ai/auth](https://opencode.ai/auth). - - ```txt - /connect - ``` - -2. Accedi, aggiungi i dettagli di fatturazione e copia la tua chiave API. - -3. Incolla la tua chiave API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -In alternativa, puoi selezionare uno degli altri provider. [Scopri di piu](/docs/providers#directory). - ---- - -## Inizializza - -Ora che hai configurato un provider, puoi spostarti in un progetto su cui vuoi lavorare. - -```bash -cd /path/to/project -``` - -E avviare OpenCode. - -```bash -opencode -``` - -Poi inizializza OpenCode per il progetto eseguendo il comando seguente. - -```bash frame="none" -/init -``` - -Questo fara analizzare il progetto a OpenCode e creera un file `AGENTS.md` nella root del progetto. - -:::tip -Dovresti committare il file `AGENTS.md` del progetto su Git. -::: - -Questo aiuta OpenCode a capire la struttura del progetto e gli stili di codice usati. - ---- - -## Utilizzo - -Ora sei pronto a usare OpenCode sul tuo progetto. Sentiti libero di chiedergli qualsiasi cosa! - -Se e la prima volta che usi un agente di programmazione AI, ecco alcuni esempi che possono aiutare. - ---- - -### Fai domande - -Puoi chiedere a OpenCode di spiegarti la codebase. - -:::tip -Usa il tasto `@` per fare una ricerca fuzzy dei file nel progetto. -::: - -```txt frame="none" "@packages/functions/src/api/index.ts" -How is authentication handled in @packages/functions/src/api/index.ts -``` - -Questo e utile se c'e una parte della codebase su cui non hai lavorato. - ---- - -### Aggiungi funzionalità - -Puoi chiedere a OpenCode di aggiungere nuove funzionalita al progetto. Pero ti consigliamo prima di chiedergli di creare un piano. - -1. **Crea un piano** - - OpenCode ha una _Plan mode_ che disabilita la possibilita di fare modifiche e si limita a suggerire _come_ implementera la funzionalita. - - Passaci con il tasto **Tab**. Vedrai un indicatore nell'angolo in basso a destra. - - ```bash frame="none" title="Switch to Plan mode" - - ``` - - Ora descriviamo cosa vogliamo che faccia. - - ```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. - ``` - - Devi dare a OpenCode abbastanza dettagli per capire cosa vuoi. Aiuta parlargli come se stessi parlando a uno sviluppatore junior del tuo team. - - :::tip - Dai a OpenCode molto contesto ed esempi per aiutarlo a capire cosa vuoi. - ::: - -2. **Itera sul piano** - - Una volta che ti da un piano, puoi dargli feedback o aggiungere piu dettagli. - - ```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 - Trascina e rilascia le immagini nel terminale per aggiungerle al prompt. - ::: - - OpenCode puo analizzare le immagini che gli dai e aggiungerle al prompt. Puoi farlo trascinando e rilasciando un'immagine nel terminale. - -3. **Implementa la funzionalita** - - Quando ti senti a tuo agio con il piano, torna in _Build mode_ premendo di nuovo il tasto **Tab**. - - ```bash frame="none" - - ``` - - E chiedigli di fare le modifiche. - - ```bash frame="none" - Sounds good! Go ahead and make the changes. - ``` - ---- - -### Apporta modifiche - -Per modifiche piu semplici, puoi chiedere a OpenCode di implementarle direttamente senza dover prima rivedere un piano. - -```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 -``` - -Assicurati di fornire abbastanza dettagli, cosi OpenCode fa le modifiche giuste. - ---- - -### Annulla modifiche - -Mettiamo che tu chieda a OpenCode di fare alcune modifiche. - -```txt frame="none" "@packages/functions/src/api/index.ts" -Can you refactor the function in @packages/functions/src/api/index.ts? -``` - -Ma ti accorgi che non e quello che volevi. Puoi **annullare** le modifiche usando il comando `/undo`. - -```bash frame="none" -/undo -``` - -OpenCode ora ripristina le modifiche e mostra di nuovo il tuo messaggio originale. - -```txt frame="none" "@packages/functions/src/api/index.ts" -Can you refactor the function in @packages/functions/src/api/index.ts? -``` - -Da qui puoi modificare il prompt e chiedere a OpenCode di riprovare. - -:::tip -Puoi eseguire `/undo` piu volte per annullare piu modifiche. -::: - -Oppure puoi **rifare** le modifiche usando il comando `/redo`. - -```bash frame="none" -/redo -``` - ---- - -## Condividi - -Le conversazioni che fai con OpenCode possono essere [condivise con il tuo team](/docs/share). - -```bash frame="none" -/share -``` - -Questo creera un link alla conversazione corrente e lo copiera negli appunti. - -:::note -Le conversazioni non vengono condivise per impostazione predefinita. -::: - -Ecco un'[esempio di conversazione](https://opencode.ai/s/4XP1fce5) con OpenCode. - ---- - -## Personalizza - -E tutto qui! Ora sei un pro nell'usare OpenCode. - -Per renderlo davvero tuo, ti consigliamo di [scegliere un tema](/docs/themes), [personalizzare i tasti rapidi](/docs/keybinds), [configurare i formatter](/docs/formatters), [creare comandi personalizzati](/docs/commands) o sperimentare con la [configurazione di OpenCode](/docs/config). diff --git a/packages/web/src/content/docs/it/keybinds.mdx b/packages/web/src/content/docs/it/keybinds.mdx deleted file mode 100644 index aef0a4c936..0000000000 --- a/packages/web/src/content/docs/it/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Scorciatoie -description: Personalizza le scorciatoie da tastiera. ---- - -OpenCode ha una lista di scorciatoie che puoi personalizzare tramite `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "h", - "display_thinking": "none" - } -} -``` - ---- - -## Tasto leader - -OpenCode usa un tasto `leader` per la maggior parte delle scorciatoie. Questo evita conflitti nel terminale. - -Per impostazione predefinita, `ctrl+x` e il tasto leader e la maggior parte delle azioni richiede di premere prima il leader e poi la scorciatoia. Per esempio, per avviare una nuova sessione premi `ctrl+x` e poi `n`. - -Non sei obbligato a usare un tasto leader per le scorciatoie, ma lo consigliamo. - ---- - -## Disabilitare una scorciatoia - -Puoi disabilitare una scorciatoia aggiungendo la chiave in `tui.json` con valore "none". - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "session_compact": "none" - } -} -``` - ---- - -## Scorciatoie del prompt desktop - -Il campo di input del prompt nell'app desktop di OpenCode supporta scorciatoie comuni in stile Readline/Emacs per modificare il testo. Sono integrate e al momento non configurabili tramite `opencode.json`. - -| Scorciatoia | Azione | -| ----------- | ------------------------------------------ | -| `ctrl+a` | Vai all'inizio della riga corrente | -| `ctrl+e` | Vai alla fine della riga corrente | -| `ctrl+b` | Sposta il cursore indietro di un carattere | -| `ctrl+f` | Sposta il cursore avanti di un carattere | -| `alt+b` | Sposta il cursore indietro di una parola | -| `alt+f` | Sposta il cursore avanti di una parola | -| `ctrl+d` | Elimina il carattere sotto il cursore | -| `ctrl+k` | Elimina fino alla fine della riga | -| `ctrl+u` | Elimina fino all'inizio della riga | -| `ctrl+w` | Elimina la parola precedente | -| `alt+d` | Elimina la parola successiva | -| `ctrl+t` | Scambia i caratteri | -| `ctrl+g` | Annulla popover / interrompe la risposta | - ---- - -## Shift+Enter - -Alcuni terminali non inviano di default i tasti modificatori insieme a Invio. Potrebbe essere necessario configurare il terminale per inviare `Shift+Enter` come sequenza di escape. - -### Windows Terminal - -Apri il tuo `settings.json` in: - -``` -%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json -``` - -Aggiungi questo all'array `actions` a livello root: - -```json -"actions": [ - { - "command": { - "action": "sendInput", - "input": "\u001b[13;2u" - }, - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Aggiungi questo all'array `keybindings` a livello root: - -```json -"keybindings": [ - { - "keys": "shift+enter", - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Salva il file e riavvia Windows Terminal oppure apri una nuova scheda. diff --git a/packages/web/src/content/docs/it/lsp.mdx b/packages/web/src/content/docs/it/lsp.mdx deleted file mode 100644 index 7e645b6038..0000000000 --- a/packages/web/src/content/docs/it/lsp.mdx +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: Server LSP -description: OpenCode si integra con i tuoi server LSP. ---- - -OpenCode può integrarsi con server Language Server Protocol (LSP) per usare la diagnostica come feedback per l'agente. - ---- - -## Integrati - -OpenCode include diversi server LSP integrati per linguaggi popolari: - -| Server LSP | Estensioni | Requisiti | -| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------ | -| astro | .astro | Installazione automatica per progetti Astro | -| bash | .sh, .bash, .zsh, .ksh | Installazione automatica di bash-language-server | -| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Installazione automatica per progetti C/C++ | -| csharp | .cs | `.NET SDK` installato | -| clojure-lsp | .clj, .cljs, .cljc, .edn | comando `clojure-lsp` disponibile | -| dart | .dart | comando `dart` disponibile | -| deno | .ts, .tsx, .js, .jsx, .mjs | comando `deno` disponibile (rileva automaticamente deno.json/deno.jsonc) | -| elixir-ls | .ex, .exs | comando `elixir` disponibile | -| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | dipendenza `eslint` nel progetto | -| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` installato | -| gleam | .gleam | comando `gleam` disponibile | -| gopls | .go | comando `go` disponibile | -| hls | .hs, .lhs | comando `haskell-language-server-wrapper` disponibile | -| jdtls | .java | `Java SDK (version 21+)` installato | -| julials | .jl | `julia` e `LanguageServer.jl` installati | -| kotlin-ls | .kt, .kts | Installazione automatica per progetti Kotlin | -| lua-ls | .lua | Installazione automatica per progetti Lua | -| nixd | .nix | comando `nixd` disponibile | -| ocaml-lsp | .ml, .mli | comando `ocamllsp` disponibile | -| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | dipendenza `oxlint` nel progetto | -| php intelephense | .php | Installazione automatica per progetti PHP | -| prisma | .prisma | comando `prisma` disponibile | -| pyright | .py, .pyi | dipendenza `pyright` installata | -| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | comandi `ruby` e `gem` disponibili | -| rust | .rs | comando `rust-analyzer` disponibile | -| sourcekit-lsp | .swift, .objc, .objcpp | `swift` installato (`xcode` su macOS) | -| svelte | .svelte | Installazione automatica per progetti Svelte | -| terraform | .tf, .tfvars | Installazione automatica dalle release GitHub | -| tinymist | .typ, .typc | Installazione automatica dalle release GitHub | -| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | dipendenza `typescript` nel progetto | -| vue | .vue | Installazione automatica per progetti Vue | -| yaml-ls | .yaml, .yml | Installazione automatica di Red Hat yaml-language-server | -| zls | .zig, .zon | comando `zig` disponibile | - -LSP è disabilitato per impostazione predefinita. Quando è abilitato, i server si avviano quando viene rilevata una delle estensioni qui sopra e i requisiti sono soddisfatti. - -:::note -Puoi disabilitare il download automatico dei server LSP impostando la variabile d'ambiente `OPENCODE_DISABLE_LSP_DOWNLOAD` a `true`. -::: - ---- - -## Come funziona - -Quando LSP è abilitato e opencode apre un file: - -1. Controlla l'estensione del file rispetto a tutti i server LSP abilitati. -2. Avvia il server LSP appropriato se non e gia in esecuzione. - ---- - -## Buone pratiche - -LSP può aiutare l'agente a trovare e correggere problemi fornendo diagnostica dai server di linguaggio. Questo è utile in alcuni progetti, ma non è sempre un vantaggio netto. - -I server di linguaggio possono andare fuori sincronizzazione, usare molta memoria, variare in base alla versione o al progetto e rallentare i workflow dell'agente. In molti progetti è meglio far eseguire direttamente all'agente lint, typecheck o altri strumenti CLI diagnostici, così gli errori rientrano nel ciclo dell'agente senza questi compromessi. Documenta questi comandi nei file di istruzioni come `AGENTS.md` o nelle skills, così l'agente sa cosa eseguire. Abilita LSP quando il tuo progetto trae beneficio da feedback aggiuntivo del server di linguaggio. - ---- - -## Configura - -Puoi abilitare e personalizzare i server LSP tramite la sezione `lsp` nella configurazione di opencode. - -Per abilitare tutti i server LSP integrati, imposta `lsp` a `true`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -Usa un oggetto per mantenere abilitati i server integrati mentre configuri override o server personalizzati. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": {} -} -``` - -Ogni server LSP supporta i seguenti campi: - -| Proprieta | Tipo | Descrizione | -| ---------------- | -------- | ------------------------------------------------ | -| `disabled` | boolean | Imposta a `true` per disabilitare il server LSP | -| `command` | string[] | Il comando per avviare il server LSP | -| `extensions` | string[] | Estensioni file gestite da questo server LSP | -| `env` | object | Variabili d'ambiente da impostare all'avvio | -| `initialization` | object | Opzioni di inizializzazione da inviare al server | - -Vediamo alcuni esempi. - ---- - -### Variabili d'ambiente - -Usa la proprieta `env` per impostare variabili d'ambiente quando avvii il server LSP: - -```json title="opencode.json" {5-7} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "rust": { - "env": { - "RUST_LOG": "debug" - } - } - } -} -``` - ---- - -### Opzioni di inizializzazione - -Usa la proprieta `initialization` per passare opzioni di inizializzazione al server LSP. Sono impostazioni specifiche del server inviate durante la richiesta LSP `initialize`: - -```json title="opencode.json" {5-9} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "initialization": { - "preferences": { - "importModuleSpecifierPreference": "relative" - } - } - } - } -} -``` - -:::note -Le opzioni di inizializzazione variano da server a server. Consulta la documentazione del tuo server LSP per le opzioni disponibili. -::: - ---- - -### Disabilitare i server LSP - -Se `lsp` è omesso, tutti i server LSP sono disabilitati. Per disabilitare tutti i server LSP dopo che un'altra configurazione li ha abilitati, imposta `lsp` a `false`: - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": false -} -``` - -Per disabilitare un server LSP **specifico**, imposta `disabled` a `true`: - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "disabled": true - } - } -} -``` - ---- - -### Server LSP personalizzati - -Puoi aggiungere server LSP personalizzati specificando il comando e le estensioni file: - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "custom-lsp": { - "command": ["custom-lsp-server", "--stdio"], - "extensions": [".custom"] - } - } -} -``` - ---- - -## Informazioni aggiuntive - -### PHP Intelephense - -PHP Intelephense offre funzionalita premium tramite una chiave di licenza. Puoi fornire la chiave inserendo (solo) la chiave in un file di testo in: - -- Su macOS/Linux: `$HOME/intelephense/license.txt` -- Su Windows: `%USERPROFILE%/intelephense/license.txt` - -Il file deve contenere solo la chiave di licenza, senza contenuti aggiuntivi. diff --git a/packages/web/src/content/docs/it/mcp-servers.mdx b/packages/web/src/content/docs/it/mcp-servers.mdx deleted file mode 100644 index a067d99639..0000000000 --- a/packages/web/src/content/docs/it/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -title: Server MCP -description: Aggiungi strumenti MCP locali e remoti. ---- - -Puoi aggiungere strumenti esterni a OpenCode usando il _Model Context Protocol_, o MCP. OpenCode supporta sia server locali sia remoti. - -Una volta aggiunti, gli strumenti MCP sono automaticamente disponibili all'LLM insieme agli strumenti integrati. - ---- - -#### Avvertenze - -Quando usi un server MCP, aggiunge contenuto al contesto. Questo puo' crescere rapidamente se hai molti strumenti. Per questo consigliamo di fare attenzione a quali server MCP abiliti. - -:::tip -I server MCP aumentano il contesto, quindi e' meglio essere prudenti su quali abilitare. -::: - -Alcuni server MCP, come il server MCP di GitHub, tendono ad aggiungere molti token e possono facilmente superare il limite di contesto. - ---- - -## Abilita - -Puoi definire server MCP nella tua [OpenCode Config](https://opencode.ai/docs/config/) sotto `mcp`. Aggiungi ogni MCP con un nome univoco. Puoi riferirti a quell'MCP per nome quando fai prompt all'LLM. - -```jsonc title="opencode.jsonc" {6} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "name-of-mcp-server": { - // ... - "enabled": true, - }, - "name-of-other-mcp-server": { - // ... - }, - }, -} -``` - -Puoi anche disabilitare un server impostando `enabled` a `false`. E' utile se vuoi disabilitare temporaneamente un server senza rimuoverlo dalla configurazione. - ---- - -### Sovrascrivere i default remoti - -Le organizzazioni possono fornire server MCP predefiniti tramite l'endpoint `.well-known/opencode`. Questi server possono essere disabilitati di default, lasciando agli utenti la possibilita' di fare opt-in su quelli necessari. - -Per abilitare un server specifico dalla configurazione remota dell'organizzazione, aggiungilo alla configurazione locale con `enabled: true`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - -I valori della configurazione locale sovrascrivono i default remoti. Vedi [config precedence](/docs/config#precedence-order) per maggiori dettagli. - ---- - -## Locali - -Aggiungi server MCP locali impostando `type` a `"local"` dentro l'oggetto `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", - }, - }, - }, -} -``` - -Il comando e' come viene avviato il server MCP locale. Puoi anche passare un elenco di variabili d'ambiente. - -Per esempio, ecco come aggiungere il server MCP di test [`@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"], - }, - }, -} -``` - -E per usarlo posso aggiungere `use the mcp_everything tool` ai miei prompt. - -```txt "mcp_everything" -use the mcp_everything tool to add the number 3 and 4 -``` - ---- - -#### Opzioni - -Ecco tutte le opzioni per configurare un server MCP locale. - -| Opzione | Tipo | Richiesto | Descrizione | -| ------------- | ------- | --------- | ------------------------------------------------------------------------------------ | -| `type` | String | Y | Tipo di connessione del server MCP, deve essere `"local"`. | -| `command` | Array | Y | Comando e argomenti per eseguire il server MCP. | -| `environment` | Object | | Variabili d'ambiente da impostare quando si esegue il server. | -| `enabled` | Boolean | | Abilita o disabilita il server MCP all'avvio. | -| `timeout` | Number | | Timeout in ms per recuperare gli strumenti dal server MCP. Default 5000 (5 secondi). | - ---- - -## Remoti - -Aggiungi server MCP remoti impostando `type` a `"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` e' l'URL del server MCP remoto e con l'opzione `headers` puoi passare un elenco di header. - ---- - -#### Opzioni - -| Opzione | Tipo | Richiesto | Descrizione | -| --------- | ------- | --------- | ------------------------------------------------------------------------------------ | -| `type` | String | Y | Tipo di connessione del server MCP, deve essere `"remote"`. | -| `url` | String | Y | URL del server MCP remoto. | -| `enabled` | Boolean | | Abilita o disabilita il server MCP all'avvio. | -| `headers` | Object | | Header da inviare con la richiesta. | -| `oauth` | Object | | Configurazione autenticazione OAuth. Vedi sezione [OAuth](#oauth) sotto. | -| `timeout` | Number | | Timeout in ms per recuperare gli strumenti dal server MCP. Default 5000 (5 secondi). | - ---- - -## OAuth - -OpenCode gestisce automaticamente l'autenticazione OAuth per i server MCP remoti. Quando un server richiede autenticazione, OpenCode: - -1. Rileva la risposta 401 e avvia il flusso OAuth -2. Usa **Dynamic Client Registration (RFC 7591)** se supportato dal server -3. Memorizza i token in modo sicuro per richieste future - ---- - -### Automatico - -Per la maggior parte dei server MCP con OAuth, non serve alcuna configurazione speciale. Basta configurare il server remoto: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "my-oauth-server": { - "type": "remote", - "url": "https://mcp.example.com/mcp" - } - } -} -``` - -Se il server richiede autenticazione, OpenCode ti chiedera' di autenticarti la prima volta che provi a usarlo. In caso contrario, puoi [attivare manualmente il flusso](#authenticating) con `opencode mcp auth `. - ---- - -### Pre-registrato - -Se hai credenziali client dal provider del server MCP, puoi configurarle: - -```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" - } - } - } -} -``` - ---- - -### Autenticazione - -Puoi avviare manualmente l'autenticazione o gestire le credenziali. - -Autentica con un server MCP specifico: - -```bash -opencode mcp auth my-oauth-server -``` - -Elenca tutti i server MCP e il loro stato di autenticazione: - -```bash -opencode mcp list -``` - -Rimuovi credenziali memorizzate: - -```bash -opencode mcp logout my-oauth-server -``` - -Il comando `mcp auth` aprira' il browser per l'autorizzazione. Dopo l'autorizzazione, OpenCode memorizzera' i token in modo sicuro in `~/.local/share/opencode/mcp-auth.json`. - ---- - -#### Disabilitare OAuth - -Se vuoi disabilitare l'OAuth automatico per un server (ad esempio per server che usano API key), imposta `oauth` a `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}" - } - } - } -} -``` - ---- - -#### Opzioni OAuth - -| Opzione | Tipo | Descrizione | -| -------------- | --------------- | --------------------------------------------------------------------------- | -| `oauth` | Object \| false | Oggetto config OAuth, o `false` per disabilitare l'auto-detection di OAuth. | -| `clientId` | String | OAuth client ID. Se non fornito, si prova la dynamic client registration. | -| `clientSecret` | String | OAuth client secret, se richiesto dal server di autorizzazione. | -| `scope` | String | Scope OAuth da richiedere durante l'autorizzazione. | - -#### Debug - -Se un server MCP remoto non riesce ad autenticarsi, puoi diagnosticare i problemi con: - -```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 -``` - -Il comando `mcp debug` mostra lo stato di autenticazione corrente, testa la connettivita' HTTP e prova il flusso di discovery OAuth. - ---- - -## Gestione - -I tuoi MCP sono disponibili come strumenti in OpenCode insieme agli strumenti integrati. Quindi puoi gestirli tramite la configurazione OpenCode come qualunque altro strumento. - ---- - -### Globale - -Questo significa che puoi abilitarli o disabilitarli globalmente. - -```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 - } -} -``` - -Possiamo anche usare un pattern glob per disabilitare tutti gli MCP corrispondenti. - -```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 - } -} -``` - -Qui stiamo usando il pattern glob `my-mcp*` per disabilitare tutti gli MCP. - ---- - -### Per agente - -Se hai molti server MCP, potresti volerli abilitare solo per agente e disabilitarli globalmente. Per farlo: - -1. Disabilitalo globalmente come strumento. -2. Nella tua [config dell'agente](/docs/agents#tools), abilita il server MCP come strumento. - -```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 - } - } - } -} -``` - ---- - -#### Pattern glob - -Il pattern glob usa semplici regole di globbing: - -- `*` corrisponde a zero o piu' caratteri qualsiasi (ad esempio `"my-mcp*"` corrisponde a `my-mcp_search`, `my-mcp_list`, ecc.) -- `?` corrisponde esattamente a un carattere -- Tutti gli altri caratteri corrispondono letteralmente - -:::note -Gli strumenti del server MCP vengono registrati con il nome del server come prefisso, quindi per disabilitare tutti gli strumenti di un server e' sufficiente usare: - -``` -"mymcpservername_*": false -``` - -::: - ---- - -## Esempi - -Qui sotto trovi esempi di alcuni server MCP comuni. Puoi inviare una PR se vuoi documentare altri server. - ---- - -### Sentry - -Aggiungi il [server MCP di Sentry](https://mcp.sentry.dev) per interagire con i tuoi progetti e le issue di Sentry. - -```json title="opencode.json" {4-8} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "sentry": { - "type": "remote", - "url": "https://mcp.sentry.dev/mcp", - "oauth": {} - } - } -} -``` - -Dopo aver aggiunto la configurazione, autentica con Sentry: - -```bash -opencode mcp auth sentry -``` - -Questo aprira' una finestra del browser per completare il flusso OAuth e collegare OpenCode al tuo account Sentry. - -Una volta autenticato, puoi usare gli strumenti Sentry nei tuoi prompt per interrogare issue, progetti e dati sugli errori. - -```txt "use sentry" -Show me the latest unresolved issues in my project. use sentry -``` - ---- - -### Context7 - -Aggiungi il [server MCP Context7](https://github.com/upstash/context7) per cercare nella documentazione. - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "context7": { - "type": "remote", - "url": "https://mcp.context7.com/mcp" - } - } -} -``` - -Se ti sei registrato per un account gratuito, puoi usare la tua API key e ottenere rate limit piu' alti. - -```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}" - } - } - } -} -``` - -Qui assumiamo che tu abbia impostato la variabile d'ambiente `CONTEXT7_API_KEY`. - -Aggiungi `use context7` ai tuoi prompt per usare il server MCP Context7. - -```txt "use context7" -Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7 -``` - -In alternativa, puoi aggiungere qualcosa del genere al tuo [AGENTS.md](/docs/rules/). - -```md title="AGENTS.md" -When you need to search docs, use `context7` tools. -``` - ---- - -### Grep by Vercel - -Aggiungi il server MCP [Grep by Vercel](https://grep.app) per cercare snippet di codice su GitHub. - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "gh_grep": { - "type": "remote", - "url": "https://mcp.grep.app" - } - } -} -``` - -Dato che abbiamo chiamato il nostro server MCP `gh_grep`, puoi aggiungere `use the gh_grep tool` ai tuoi prompt per fare in modo che l'agente lo usi. - -```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 -``` - -In alternativa, puoi aggiungere qualcosa del genere al tuo [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. -``` diff --git a/packages/web/src/content/docs/it/models.mdx b/packages/web/src/content/docs/it/models.mdx deleted file mode 100644 index 7ac17115e7..0000000000 --- a/packages/web/src/content/docs/it/models.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: Modelli -description: Configurare un provider LLM e un modello. ---- - -OpenCode usa [AI SDK](https://ai-sdk.dev/) e [Models.dev](https://models.dev) per supportare **75+ provider LLM** e supporta anche l'esecuzione di modelli locali. - ---- - -## Provider - -I provider piu popolari sono precaricati per impostazione predefinita. Se hai aggiunto le credenziali di un provider tramite il comando `/connect`, saranno disponibili quando avvii OpenCode. - -[Scopri di piu](/docs/providers) sui provider. - ---- - -## Seleziona un modello - -Dopo aver configurato il provider, puoi selezionare il modello che vuoi digitando: - -```bash frame="none" -/models -``` - ---- - -## Modelli consigliati - -Esistono moltissimi modelli, e ne escono di nuovi ogni settimana. - -:::tip -Valuta di usare uno dei modelli che consigliamo. -::: - -Tuttavia, solo alcuni sono davvero bravi sia a generare codice sia a chiamare strumenti. - -Ecco alcuni modelli che funzionano bene con OpenCode, in nessun ordine particolare. (Non e una lista esaustiva e potrebbe non essere aggiornata): - -- GPT 5.2 -- GPT 5.1 Codex -- Claude Opus 4.5 -- Claude Sonnet 4.5 -- Minimax M2.1 -- Gemini 3 Pro - ---- - -## Imposta un predefinito - -Per impostarne uno come modello predefinito, puoi impostare la chiave `model` nella config di OpenCode. - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "model": "lmstudio/google/gemma-3n-e4b" -} -``` - -Qui l'ID completo e `provider_id/model_id`. Per esempio, se usi [OpenCode Zen](/docs/zen), useresti `opencode/gpt-5.1-codex` per GPT 5.1 Codex. - -Se hai configurato un [provider personalizzato](/docs/providers#custom), `provider_id` e la chiave nella sezione `provider` della config e `model_id` e la chiave in `provider.models`. - ---- - -## Configurazione modelli - -Puoi configurare globalmente le opzioni di un modello tramite la 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, - }, - }, - }, - }, - }, - }, -} -``` - -Qui stiamo configurando impostazioni globali per due modelli integrati: `gpt-5` quando viene usato tramite il provider `openai` e `claude-sonnet-4-20250514` quando viene usato tramite il provider `anthropic`. -I nomi di provider e modelli integrati si trovano su [Models.dev](https://models.dev). - -Puoi anche configurare queste opzioni per gli agenti che usi. La config dell'agente sovrascrive le opzioni globali definite qui. [Scopri di piu](/docs/agents/#additional). - -Puoi anche definire varianti personalizzate che estendono quelle integrate. Le varianti ti permettono di configurare impostazioni diverse per lo stesso modello senza creare voci duplicate: - -```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", - }, - }, - }, - }, - }, - }, -} -``` - ---- - -## Varianti - -Molti modelli supportano piu varianti con configurazioni diverse. OpenCode include varianti predefinite integrate per i provider piu comuni. - -### Varianti integrate - -OpenCode include varianti predefinite per molti provider: - -**Anthropic**: - -- `high` - High thinking budget (default) -- `max` - Maximum thinking budget - -**OpenAI**: - -Varies by model but roughly: - -- `none` - No reasoning -- `minimal` - Minimal reasoning effort -- `low` - Low reasoning effort -- `medium` - Medium reasoning effort -- `high` - High reasoning effort -- `xhigh` - Extra high reasoning effort - -**Google**: - -- `low` - Lower effort/token budget -- `high` - Higher effort/token budget - -:::tip -Questa lista non e completa. Anche molti altri provider hanno default integrati. -::: - -### Varianti personalizzate - -Puoi sovrascrivere varianti esistenti o aggiungerne di tue: - -```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, - }, - }, - }, - }, - }, - }, -} -``` - -### Ciclare tra varianti - -Usa il keybind `variant_cycle` per passare rapidamente tra le varianti. [Scopri di piu](/docs/keybinds). - ---- - -## Caricamento modelli - -Quando OpenCode si avvia, controlla i modelli in questo ordine di priorita: - -1. Il flag da riga di comando `--model` o `-m`. Il formato e lo stesso della config: `provider_id/model_id`. - -2. La lista dei modelli nella config di OpenCode. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-20250514" - } - ``` - - Qui il formato e `provider/model`. - -3. L'ultimo modello usato. - -4. Il primo modello in base a una priorita interna. diff --git a/packages/web/src/content/docs/it/network.mdx b/packages/web/src/content/docs/it/network.mdx deleted file mode 100644 index 866494430a..0000000000 --- a/packages/web/src/content/docs/it/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Rete -description: Configura proxy e certificati personalizzati. ---- - -OpenCode supporta le variabili d'ambiente standard per i proxy e certificati personalizzati per ambienti di rete enterprise. - ---- - -## Proxy - -OpenCode rispetta le variabili d'ambiente standard dei proxy. - -```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 -La TUI comunica con un server HTTP locale. Devi bypassare il proxy per questa connessione per evitare loop di instradamento. -::: - -Puoi configurare porta e hostname del server usando i [flag della CLI](/docs/cli#run). - ---- - -### Autenticazione - -Se il proxy richiede autenticazione basic, includi le credenziali nell'URL. - -```bash -export HTTPS_PROXY=http://username:password@proxy.example.com:8080 -``` - -:::caution -Evita di hardcodare le password. Usa variabili d'ambiente o un archivio sicuro per le credenziali. -::: - -Per proxy che richiedono autenticazioni avanzate come NTLM o Kerberos, valuta l'uso di un LLM Gateway che supporti il tuo metodo di autenticazione. - ---- - -## Certificati personalizzati - -Se la tua organizzazione usa CA personalizzate per connessioni HTTPS, configura OpenCode in modo che si fidi di esse. - -```bash -export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem -``` - -Questo funziona sia per connessioni tramite proxy sia per l'accesso diretto alle API. diff --git a/packages/web/src/content/docs/it/permissions.mdx b/packages/web/src/content/docs/it/permissions.mdx deleted file mode 100644 index d4c848abae..0000000000 --- a/packages/web/src/content/docs/it/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -title: Permessi -description: Controlla quali azioni richiedono approvazione prima di essere eseguite. ---- - -OpenCode usa la configurazione `permission` per decidere se una determinata azione deve essere eseguita automaticamente, se deve chiederti conferma o se deve essere bloccata. - -A partire da `v1.1.1`, la vecchia configurazione booleana `tools` e' deprecata ed e' stata incorporata in `permission`. La vecchia configurazione `tools` e' ancora supportata per retrocompatibilita'. - ---- - -## Azioni - -Ogni regola di permesso si risolve in uno tra: - -- `"allow"` — esegui senza approvazione -- `"ask"` — chiedi approvazione -- `"deny"` — blocca l'azione - ---- - -## Configurazione - -Puoi impostare i permessi globalmente (con `*`) e sovrascrivere quelli di strumenti specifici. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "*": "ask", - "bash": "allow", - "edit": "deny" - } -} -``` - -Puoi anche impostare tutti i permessi in una sola volta: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": "allow" -} -``` - ---- - -## Regole granulari (sintassi a oggetto) - -Per la maggior parte dei permessi, puoi usare un oggetto per applicare azioni diverse in base all'input dello strumento. - -```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" - } - } -} -``` - -Le regole vengono valutate per corrispondenza di pattern e **vince l'ultima regola che corrisponde**. Un pattern comune e' mettere prima la regola jolly `"*"` e poi regole piu' specifiche. - -### Wildcard - -I pattern dei permessi usano un semplice matching con wildcard: - -- `*` corrisponde a zero o piu' caratteri qualsiasi -- `?` corrisponde esattamente a un carattere -- Tutti gli altri caratteri corrispondono letteralmente - -### Espansione della home directory - -Puoi usare `~` o `$HOME` all'inizio di un pattern per riferirti alla tua home directory. Questo e' particolarmente utile per le regole [`external_directory`](#external-directories). - -- `~/projects/*` -> `/Users/username/projects/*` -- `$HOME/projects/*` -> `/Users/username/projects/*` -- `~` -> `/Users/username` - -### Directory esterne - -Usa `external_directory` per consentire chiamate a strumenti che toccano percorsi al di fuori della directory di lavoro da cui e' stato avviato OpenCode. Si applica a qualsiasi strumento che accetta un path come input (ad esempio `read`, `edit`, `glob`, `grep` e molti comandi `bash`). - -L'espansione della home (come `~/...`) influisce solo su come viene scritto un pattern. Non rende un percorso esterno parte della workspace corrente, quindi i path fuori dalla directory di lavoro devono comunque essere consentiti tramite `external_directory`. - -Per esempio, questo consente l'accesso a tutto sotto `~/projects/personal/`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - } - } -} -``` - -Qualsiasi directory consentita qui eredita gli stessi default della workspace corrente. Dato che [`read` di default e' `allow`](#defaults), anche le letture sono consentite per le voci sotto `external_directory` a meno di sovrascritture. Aggiungi regole esplicite quando uno strumento deve essere limitato su questi path, ad esempio bloccando le modifiche ma lasciando consentite le letture: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - }, - "edit": { - "~/projects/personal/**": "deny" - } - } -} -``` - -Mantieni l'elenco limitato a percorsi fidati e aggiungi regole extra di allow/deny quando serve per altri strumenti (ad esempio `bash`). - ---- - -## Permessi disponibili - -I permessi di OpenCode sono indicizzati per nome dello strumento, piu' un paio di guardrail di sicurezza: - -- `read` — lettura di un file (corrisponde al percorso del file) -- `edit` — tutte le modifiche ai file (include `edit`, `write`, `patch`) -- `glob` — ricerca file tramite glob (corrisponde al pattern glob) -- `grep` — ricerca nel contenuto (corrisponde al pattern regex) -- `bash` — esecuzione comandi di shell (corrisponde a comandi parsati come `git status --porcelain`) -- `task` — avvio subagenti (corrisponde al tipo di subagente) -- `skill` — caricamento di una skill (corrisponde al nome della skill) -- `lsp` — esecuzione query LSP (attualmente non granulare) -- `webfetch` — fetch di un URL (corrisponde all'URL) -- `websearch` — ricerca web (corrisponde alla query) -- `external_directory` — si attiva quando uno strumento tocca percorsi fuori dalla working directory del progetto -- `doom_loop` — si attiva quando la stessa chiamata a uno strumento si ripete 3 volte con input identico - ---- - -## Default - -Se non specifichi nulla, OpenCode parte da default permissivi: - -- La maggior parte dei permessi di default e' `"allow"`. -- `doom_loop` ed `external_directory` di default sono `"ask"`. -- `read` e' `"allow"`, ma i file `.env` sono negati di default: - -```json title="opencode.json" -{ - "permission": { - "read": { - "*": "allow", - "*.env": "deny", - "*.env.*": "deny", - "*.env.example": "allow" - } - } -} -``` - ---- - -## Cosa fa "Ask" - -Quando OpenCode chiede approvazione, la UI offre tre esiti: - -- `once` — approva solo questa richiesta -- `always` — approva richieste future che corrispondono ai pattern suggeriti (per il resto della sessione corrente di OpenCode) -- `reject` — nega la richiesta - -L'insieme di pattern che `always` approverebbe e' fornito dallo strumento (ad esempio, le approvazioni per bash in genere mettono in whitelist un prefisso di comando sicuro come `git status*`). - ---- - -## Agenti - -Puoi sovrascrivere i permessi per agente. I permessi dell'agente vengono uniti alla configurazione globale e le regole dell'agente hanno precedenza. [Scopri di piu'](/docs/agents#permissions) sui permessi degli agenti. - -:::note -Fai riferimento alla sezione [Regole granulari (sintassi a oggetto)](#granular-rules-object-syntax) per esempi piu' dettagliati di pattern matching. -::: - -```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" - } - } - } - } -} -``` - -Puoi anche configurare i permessi dell'agente in 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 -Usa il pattern matching per comandi con argomenti. `"grep *"` consente `grep pattern file.txt`, mentre `"grep"` da solo lo bloccherebbe. Comandi come `git status` funzionano per il comportamento di default ma richiedono un permesso esplicito (come `"git status *"`) quando vengono passati argomenti. -::: diff --git a/packages/web/src/content/docs/it/plugins.mdx b/packages/web/src/content/docs/it/plugins.mdx deleted file mode 100644 index 3fc22a78c5..0000000000 --- a/packages/web/src/content/docs/it/plugins.mdx +++ /dev/null @@ -1,388 +0,0 @@ ---- -title: Plugin -description: Scrivi plugin per estendere OpenCode. ---- - -I plugin ti permettono di estendere OpenCode agganciandoti a vari eventi e personalizzando il comportamento. Puoi creare plugin per aggiungere nuove funzionalità, integrare servizi esterni o modificare il comportamento predefinito di OpenCode. - -Per esempi, dai un'occhiata ai [plugin](/docs/ecosystem#plugins) creati dalla community. - ---- - -## Usare un plugin - -Ci sono due modi per caricare i plugin. - ---- - -### Da file locali - -Metti file JavaScript o TypeScript nella directory dei plugin. - -- `.opencode/plugins/` - plugin a livello progetto -- `~/.config/opencode/plugins/` - plugin globali - -I file in queste directory vengono caricati automaticamente all'avvio. - ---- - -### Da npm - -Specifica i pacchetti npm nel tuo file di configurazione. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"] -} -``` - -Sono supportati sia pacchetti npm normali sia scoped. - -Sfoglia i plugin disponibili nell'[ecosistema](/docs/ecosystem#plugins). - ---- - -### Come vengono installati i plugin - -I **plugin npm** vengono installati automaticamente usando Bun all'avvio. I pacchetti e le loro dipendenze vengono cache-ati in `~/.cache/opencode/node_modules/`. - -I **plugin locali** vengono caricati direttamente dalla directory dei plugin. Per usare pacchetti esterni, devi creare un `package.json` nella directory di configurazione (vedi [Dipendenze](#dependencies)) oppure pubblicare il plugin su npm e [aggiungerlo alla configurazione](/docs/config#plugins). - ---- - -### Ordine di caricamento - -I plugin vengono caricati da tutte le sorgenti e tutti gli hook vengono eseguiti in sequenza. L'ordine di caricamento è: - -1. Config globale (`~/.config/opencode/opencode.json`) -2. Config di progetto (`opencode.json`) -3. Directory plugin globale (`~/.config/opencode/plugins/`) -4. Directory plugin di progetto (`.opencode/plugins/`) - -I pacchetti npm duplicati con lo stesso nome e versione vengono caricati una sola volta. Tuttavia, un plugin locale e un plugin npm con nomi simili vengono entrambi caricati separatamente. - ---- - -## Creare un plugin - -Un plugin è un **modulo JavaScript/TypeScript** che esporta una o più funzioni di plugin. Ogni funzione riceve un oggetto di contesto e restituisce un oggetto di hook. - ---- - -### Dipendenze - -I plugin locali e gli strumenti personalizzati possono usare pacchetti npm esterni. Aggiungi un `package.json` alla tua directory di configurazione con le dipendenze di cui hai bisogno. - -```json title=".opencode/package.json" -{ - "dependencies": { - "shescape": "^2.1.0" - } -} -``` - -OpenCode esegue `bun install` all'avvio per installarle. I tuoi plugin e strumenti potranno poi importarle. - -```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) - } - }, - } -} -``` - ---- - -### Struttura base - -```js title=".opencode/plugins/example.js" -export const MyPlugin = async ({ project, client, $, directory, worktree }) => { - console.log("Plugin initialized!") - - return { - // Hook implementations go here - } -} -``` - -La funzione del plugin riceve: - -- `project`: informazioni sul progetto corrente. -- `directory`: la working directory corrente. -- `worktree`: il path del worktree git. -- `client`: un client SDK di opencode per interagire con l'AI. -- `$`: la [shell API](https://bun.com/docs/runtime/shell) di Bun per eseguire comandi. - ---- - -### Supporto TypeScript - -Per i plugin TypeScript, puoi importare i tipi dal pacchetto plugin: - -```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 - } -} -``` - ---- - -### Eventi - -I plugin possono sottoscrivere eventi come mostrato sotto nella sezione Esempi. Ecco l'elenco dei diversi eventi disponibili. - -#### Eventi dei comandi - -- `command.executed` - -#### Eventi dei file - -- `file.edited` -- `file.watcher.updated` - -#### Eventi di installazione - -- `installation.updated` - -#### Eventi LSP - -- `lsp.client.diagnostics` -- `lsp.updated` - -#### Eventi dei messaggi - -- `message.part.removed` -- `message.part.updated` -- `message.removed` -- `message.updated` - -#### Eventi dei permessi - -- `permission.asked` -- `permission.replied` - -#### Eventi del server - -- `server.connected` - -#### Eventi delle sessioni - -- `session.created` -- `session.compacted` -- `session.deleted` -- `session.diff` -- `session.error` -- `session.idle` -- `session.status` -- `session.updated` - -#### Eventi della todo - -- `todo.updated` - -#### Eventi della shell - -- `shell.env` - -#### Eventi degli strumenti - -- `tool.execute.after` -- `tool.execute.before` - -#### Eventi TUI - -- `tui.prompt.append` -- `tui.command.execute` -- `tui.toast.show` - ---- - -## Esempi - -Ecco alcuni esempi di plugin che puoi usare per estendere opencode. - ---- - -### Invia notifiche - -Invia notifiche quando avvengono certi eventi: - -```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"'` - } - }, - } -} -``` - -Stiamo usando `osascript` per eseguire AppleScript su macOS. Qui lo usiamo per inviare notifiche. - -:::note -Se usi l'app desktop di OpenCode, può inviare automaticamente notifiche di sistema quando una risposta è pronta o quando una sessione va in errore. -::: - ---- - -### Protezione .env - -Impedisci a opencode di leggere i file `.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") - } - }, - } -} -``` - ---- - -### Inietta variabili d'ambiente - -Inietta variabili d'ambiente in tutte le esecuzioni di shell (strumenti AI e terminale utente): - -```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 - }, - } -} -``` - ---- - -### Strumenti personalizzati - -I plugin possono anche aggiungere strumenti personalizzati a 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})` - }, - }), - }, - } -} -``` - -L'helper `tool` crea uno strumento personalizzato che opencode può chiamare. Accetta una funzione di schema Zod e restituisce una definizione di tool con: - -- `description`: cosa fa lo strumento -- `args`: schema Zod per gli argomenti dello strumento -- `execute`: funzione eseguita quando lo strumento viene chiamato - -I tuoi strumenti personalizzati saranno disponibili in opencode insieme agli strumenti integrati. - -:::note -Se uno strumento di un plugin usa lo stesso nome di uno strumento integrato, lo strumento del plugin ha la precedenza. -::: - ---- - -### Logging - -Usa `client.app.log()` invece di `console.log` per logging strutturato: - -```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" }, - }, - }) -} -``` - -Livelli: `debug`, `info`, `warn`, `error`. Vedi la [documentazione SDK](https://opencode.ai/docs/sdk) per i dettagli. - ---- - -### Hook di compaction - -Personalizza il contesto incluso quando una sessione viene compattata: - -```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 -`) - }, - } -} -``` - -L'hook `experimental.session.compacting` scatta prima che l'LLM generi un riassunto di continuazione. Usalo per iniettare contesto specifico di dominio che il prompt di compaction predefinito potrebbe non includere. - -Puoi anche sostituire completamente il prompt di compaction impostando `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. -` - }, - } -} -``` - -Quando `output.prompt` è impostato, sostituisce completamente il prompt di compaction predefinito. In questo caso l'array `output.context` viene ignorato. diff --git a/packages/web/src/content/docs/it/providers.mdx b/packages/web/src/content/docs/it/providers.mdx deleted file mode 100644 index f2d195d721..0000000000 --- a/packages/web/src/content/docs/it/providers.mdx +++ /dev/null @@ -1,1964 +0,0 @@ ---- -title: Provider -description: Usa qualsiasi provider LLM in OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console - -OpenCode usa [AI SDK](https://ai-sdk.dev/) e [Models.dev](https://models.dev) per supportare **oltre 75 provider LLM** e anche modelli locali. - -Per aggiungere un provider devi: - -1. Aggiungere le API key del provider con il comando `/connect`. -2. Configurare il provider nella configurazione di OpenCode. - ---- - -### Credenziali - -Quando aggiungi le API key di un provider con `/connect`, vengono salvate -in `~/.local/share/opencode/auth.json`. - ---- - -### Configurazione - -Puoi personalizzare i provider tramite la sezione `provider` nella -configurazione di OpenCode. - ---- - -#### URL base - -Puoi personalizzare l'URL base per qualsiasi provider impostando l'opzione `baseURL`. E utile quando usi servizi proxy o endpoint personalizzati. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen e una lista di modelli forniti dal team OpenCode, testati e -verificati per funzionare bene con OpenCode. [Scopri di piu](/docs/zen). - -:::tip -Se sei all'inizio, ti consigliamo di partire da OpenCode Zen. -::: - -1. Esegui `/connect` nella TUI, seleziona opencode e vai su [opencode.ai/auth](https://opencode.ai/auth). - - ```txt - /connect - ``` - -2. Accedi, aggiungi i dati di fatturazione e copia la tua API key. - -3. Incolla la tua API key. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui `/models` nella TUI per vedere la lista di modelli consigliati. - - ```txt - /models - ``` - -Funziona come qualsiasi altro provider in OpenCode ed e totalmente opzionale. - ---- - -## Elenco - -Vediamo alcuni provider nel dettaglio. Se vuoi aggiungerne uno -all'elenco, apri pure una PR. - -:::note -Non vedi un provider qui? Invia una PR. -::: - ---- - -### 302.AI - -1. Vai alla [console di 302.AI](https://302.ai/), crea un account e genera una chiave API. - -2. Esegui il comando `/connect` e cerca **302.AI**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di 302.AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello. - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -Per usare Amazon Bedrock con OpenCode: - -1. Vai al **Model catalog** nella console Amazon Bedrock e richiedi - accesso ai modelli che vuoi usare. - - :::tip - Devi avere accesso al modello che vuoi in Amazon Bedrock. - ::: - -2. **Configura l'autenticazione** usando uno dei seguenti metodi: - - *** - - #### Variabili d'ambiente (Avvio rapido) - - Imposta una di queste variabili d'ambiente mentre esegui opencode: - - ```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - Oppure aggiungile al tuo profilo bash: - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - *** - - #### File di configurazione (Consigliato) - - Per configurazione specifica del progetto o persistente, usa `opencode.json`: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **Opzioni disponibili:** - - `region` - Regione AWS (ad es. `us-east-1`, `eu-west-1`) - - `profile` - Profilo AWS nominato da `~/.aws/credentials` - - `endpoint` - URL endpoint personalizzato per VPC endpoints (alias per l'opzione generica `baseURL`) - - :::tip - Le opzioni del file di configurazione hanno la precedenza sulle variabili d'ambiente. - ::: - - *** - - #### Avanzato: VPC Endpoints - - Se stai usando VPC endpoints per Bedrock: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } - } - ``` - - :::note - L'opzione `endpoint` è un alias per l'opzione generica `baseURL`, usando terminologia specifica AWS. Se vengono specificati sia `endpoint` sia `baseURL`, `endpoint` ha la precedenza. - ::: - - *** - - #### Metodi di autenticazione - - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: Crea un utente IAM e genera chiavi di accesso nella Console AWS - - **`AWS_PROFILE`**: Usa profili nominati da `~/.aws/credentials`. Configura prima con `aws configure --profile my-profile` o `aws sso login` - - **`AWS_BEARER_TOKEN_BEDROCK`**: Genera chiavi API a lungo termine dalla console Amazon Bedrock - - **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**: Per EKS IRSA (IAM Roles for Service Accounts) o altri ambienti Kubernetes con federazione OIDC. Queste variabili d'ambiente vengono iniettate automaticamente da Kubernetes quando usi le annotazioni del service account. - - *** - - #### Precedenza autenticazione - - Amazon Bedrock usa la seguente priorità di autenticazione: - 1. **Bearer Token** - Variabile d'ambiente `AWS_BEARER_TOKEN_BEDROCK` o token dal comando `/connect` - 2. **AWS Credential Chain** - Profilo, chiavi di accesso, credenziali condivise, ruoli IAM, Web Identity Tokens (EKS IRSA), metadati istanza - - :::note - Quando è impostato un bearer token (tramite `/connect` o `AWS_BEARER_TOKEN_BEDROCK`), ha la precedenza su tutti i metodi di credenziali AWS inclusi i profili configurati. - ::: - -3. Esegui il comando `/models` per selezionare il modello che vuoi. - - ```txt - /models - ``` - -:::note -Per profili di inferenza personalizzati, usa il nome del modello e del provider nella chiave e imposta la proprietà `id` all'arn. Questo assicura una cache corretta. -::: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - ---- - -### Anthropic - -1. Una volta registrato, esegui il comando `/connect` e seleziona Anthropic. - - ```txt - /connect - ``` - -2. Qui puoi selezionare l'opzione **Claude Pro/Max**: aprirà il tuo browser - e ti chiederà di autenticarti. - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. Ora tutti i modelli Anthropic dovrebbero essere disponibili quando usi il comando `/models`. - - ```txt - /models - ``` - -:::info -L'uso dell'abbonamento Claude Pro/Max in OpenCode non è ufficialmente supportato da [Anthropic](https://anthropic.com). -::: - -##### Usare chiavi API - -Puoi anche selezionare **Create an API Key** se non hai un abbonamento Pro/Max. Aprirà il browser, ti chiederà di accedere ad Anthropic e ti darà un codice da incollare nel terminale. - -Oppure se hai già una chiave API, puoi selezionare **Manually enter API Key** e incollarla nel terminale. - ---- - -### Atomic Chat - -Puoi configurare opencode per utilizzare modelli locali tramite [Atomic Chat](https://atomic.chat), un'applicazione desktop che esegue LLM locali dietro un server API compatibile OpenAI (endpoint predefinito `http://127.0.0.1:1337/v1`). - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -In questo esempio: - -- `atomic-chat` è l'ID personalizzato del provider. Può essere qualsiasi stringa. -- `npm` specifica il pacchetto da utilizzare per questo provider. Qui viene usato `@ai-sdk/openai-compatible` per qualsiasi API compatibile OpenAI. -- `name` è il nome visualizzato del provider nell'interfaccia. -- `options.baseURL` è l'endpoint del server locale. Modifica host e porta in base alla tua configurazione Atomic Chat. -- `models` è una mappa di ID modello ai rispettivi nomi visualizzati. Ogni ID deve corrispondere all'`id` restituito da `GET /v1/models` — esegui `curl http://127.0.0.1:1337/v1/models` per elencare gli ID attualmente caricati in Atomic Chat. - -:::tip -Se le chiamate agli strumenti non funzionano bene, scegli un modello caricato con buon supporto per il tool calling (ad esempio, una variante Qwen-Coder o DeepSeek-Coder). -::: - ---- - -### Azure OpenAI - -:::note -Se incontri errori "I'm sorry, but I cannot assist with that request", prova a cambiare il filtro contenuti da **DefaultV2** a **Default** nella tua risorsa Azure. -::: - -1. Vai al [portale Azure](https://portal.azure.com/) e crea una risorsa **Azure OpenAI**. Ti serviranno: - - **Resource name**: Diventa parte del tuo endpoint API (`https://RESOURCE_NAME.openai.azure.com/`) - - **API key**: O `KEY 1` o `KEY 2` dalla tua risorsa - -2. Vai su [Azure AI Foundry](https://ai.azure.com/) e fai il deploy di un modello. - - :::note - Il nome del deployment deve corrispondere al nome del modello affinché opencode funzioni correttamente. - ::: - -3. Esegui il comando `/connect` e cerca **Azure**. - - ```txt - /connect - ``` - -4. Inserisci la tua chiave API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Imposta il nome della risorsa come variabile d'ambiente: - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - - Oppure aggiungilo al tuo profilo bash: - - ```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX - ``` - -6. Esegui il comando `/models` per selezionare il tuo modello deployato. - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. Vai al [portale Azure](https://portal.azure.com/) e crea una risorsa **Azure OpenAI**. Ti serviranno: - - **Resource name**: Diventa parte del tuo endpoint API (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) - - **API key**: O `KEY 1` o `KEY 2` dalla tua risorsa - -2. Vai su [Azure AI Foundry](https://ai.azure.com/) e fai il deploy di un modello. - - :::note - Il nome del deployment deve corrispondere al nome del modello affinché opencode funzioni correttamente. - ::: - -3. Esegui il comando `/connect` e cerca **Azure Cognitive Services**. - - ```txt - /connect - ``` - -4. Inserisci la tua chiave API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Imposta il nome della risorsa come variabile d'ambiente: - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - - Oppure aggiungilo al tuo profilo bash: - - ```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX - ``` - -6. Esegui il comando `/models` per selezionare il tuo modello deployato. - - ```txt - /models - ``` - ---- - -### Baseten - -1. Vai su [Baseten](https://app.baseten.co/), crea un account e genera una chiave API. - -2. Esegui il comando `/connect` e cerca **Baseten**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di Baseten. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello. - - ```txt - /models - ``` - ---- - -### Cerebras - -1. Vai alla [console di Cerebras](https://inference.cerebras.ai/), crea un account e genera una chiave API. - -2. Esegui il comando `/connect` e cerca **Cerebras**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di Cerebras. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello come _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -Cloudflare AI Gateway ti permette di accedere a modelli di OpenAI, Anthropic, Workers AI e altri tramite un endpoint unificato. Con la [fatturazione unificata](https://developers.cloudflare.com/ai-gateway/features/unified-billing/) non hai bisogno di chiavi API separate per ogni provider. - -1. Vai alla [dashboard di Cloudflare](https://dash.cloudflare.com/), naviga in **AI** > **AI Gateway** e crea un nuovo gateway. - -2. Imposta il tuo Account ID e Gateway ID come variabili d'ambiente. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. Esegui il comando `/connect` e cerca **Cloudflare AI Gateway**. - - ```txt - /connect - ``` - -4. Inserisci il tuo API token di Cloudflare. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - - Oppure impostalo come variabile d'ambiente. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token - ``` - -5. Esegui il comando `/models` per selezionare un modello. - - ```txt - /models - ``` - - Puoi anche aggiungere modelli tramite la tua configurazione di opencode. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } - } - ``` - ---- - -### Cortecs - -1. Vai alla [console di Cortecs](https://cortecs.ai/), crea un account e genera una chiave API. - -2. Esegui il comando `/connect` e cerca **Cortecs**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di Cortecs. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello come _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. Vai alla [console di DeepSeek](https://platform.deepseek.com/), crea un account e clicca **Create new API key**. - -2. Esegui il comando `/connect` e cerca **DeepSeek**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di DeepSeek. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello DeepSeek come _DeepSeek V4 Pro_. - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. Vai alla [dashboard di Deep Infra](https://deepinfra.com/dash), crea un account e genera una chiave API. - -2. Esegui il comando `/connect` e cerca **Deep Infra**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di Deep Infra. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello. - - ```txt - /models - ``` - ---- - -### FrogBot - -1. Vai alla [dashboard di FrogBot](https://app.frogbot.ai/signup), crea un account e genera una chiave API. - -2. Esegui il comando `/connect` e cerca **FrogBot**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di FrogBot. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello. - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. Vai alla [console di Fireworks AI](https://app.fireworks.ai/), crea un account e clicca **Create API Key**. - -2. Esegui il comando `/connect` e cerca **Fireworks AI**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di Fireworks AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello come _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo fornisce una chat agentic basata su AI con capacità di chiamata strumenti nativa tramite il proxy Anthropic di GitLab. - -1. Esegui il comando `/connect` e seleziona GitLab. - - ```txt - /connect - ``` - -2. Scegli il tuo metodo di autenticazione: - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### Usando OAuth (Consigliato) - - Seleziona **OAuth** e il tuo browser si aprirà per l'autorizzazione. - - #### Usando Personal Access Token - 1. Vai a [GitLab User Settings > Access Tokens](https://gitlab.com/-/user_settings/personal_access_tokens) - 2. Clicca **Add new token** - 3. Nome: `OpenCode`, Scopes: `api` - 4. Copia il token (inizia con `glpat-`) - 5. Inseriscilo nel terminale - -3. Esegui il comando `/models` per vedere i modelli disponibili. - - ```txt - /models - ``` - - Sono disponibili tre modelli basati su Claude: - - **duo-chat-haiku-4-5** (Default) - Risposte veloci per task rapidi - - **duo-chat-sonnet-4-5** - Prestazioni bilanciate per la maggior parte dei flussi di lavoro - - **duo-chat-opus-4-5** - Più capace per analisi complesse - -:::note -Puoi anche specificare la variabile d'ambiente 'GITLAB_TOKEN' se non vuoi -salvare il token nello storage di auth di opencode. -::: - -##### GitLab Self-Hosted - -:::note[nota di compliance] -OpenCode usa un modello piccolo per alcuni task AI come generare il titolo della sessione. -È configurato per usare gpt-5-nano di default, ospitato da Zen. Per bloccare OpenCode -a usare solo la tua istanza GitLab self-hosted, aggiungi quanto segue al tuo -file `opencode.json`. Si raccomanda anche di disabilitare la condivisione sessioni. - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -Per istanze GitLab self-hosted: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -Se la tua istanza esegue un AI Gateway personalizzato: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -Oppure aggiungi al tuo profilo bash: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -Il tuo amministratore GitLab deve abilitare quanto segue: - -1. [Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) per l'utente, gruppo o istanza -2. Feature flags (via Rails console): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### OAuth per istanze Self-Hosted - -Per far funzionare OAuth per la tua istanza self-hosted, devi creare -una nuova applicazione (Settings → Applications) con l' -URL di callback `http://127.0.0.1:8080/callback` e i seguenti scope: - -- api (Accedi all'API per tuo conto) -- read_user (Leggi le tue informazioni personali) -- read_repository (Consenti accesso in sola lettura al repository) - -Poi esponi l'ID applicazione come variabile d'ambiente: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -Maggior documentazione sulla homepage di [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth). - -##### Configurazione - -Personalizza tramite `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### Strumenti API GitLab (Opzionale, ma altamente raccomandato) - -Per accedere agli strumenti GitLab (merge requests, issues, pipelines, CI/CD, ecc.): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -Questo plugin offre funzionalita complete per la gestione dei repository GitLab, incluse revisioni delle MR, tracciamento dei problemi, monitoraggio delle pipeline e altro. - ---- - -### GitHub Copilot - -Per usare il tuo abbonamento GitHub Copilot con opencode: - -:::note -Alcuni modelli potrebbero richiedere un [abbonamento Pro+](https://github.com/features/copilot/plans) per essere utilizzati. - -Alcuni modelli devono essere abilitati manualmente nelle tue [impostazioni GitHub Copilot](https://docs.github.com/en/copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use). -::: - -1. Esegui il comando `/connect` e cerca GitHub Copilot. - - ```txt - /connect - ``` - -2. Vai su [github.com/login/device](https://github.com/login/device) e inserisci il codice. - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - │ └ Waiting for authorization... - ``` - -3. Ora esegui il comando `/models` per selezionare il modello che vuoi. - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -Per usare Google Vertex AI con OpenCode: - -1. Vai al **Model Garden** nella Google Cloud Console e controlla i - modelli disponibili nella tua regione. - - :::note - Devi avere un progetto Google Cloud con l'API Vertex AI abilitata. - ::: - -2. Imposta le variabili d'ambiente richieste: - - `GOOGLE_CLOUD_PROJECT`: Il tuo ID progetto Google Cloud - - `VERTEX_LOCATION` (opzionale): La regione per Vertex AI (predefinito `global`) - - Autenticazione (scegline una): - - `GOOGLE_APPLICATION_CREDENTIALS`: Percorso al file JSON della chiave del tuo service account - - Autenticati usando la CLI gcloud: `gcloud auth application-default login` - - Impostale mentre esegui opencode. - - ```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode - ``` - - Oppure aggiungile al tuo profilo bash. - - ```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global - ``` - -:::tip -La regione `global` migliora la disponibilità e riduce gli errori senza costi extra. Usa endpoint regionali (ad es. `us-central1`) per requisiti di residenza dei dati. [Scopri di più](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. Esegui il comando `/models` per selezionare il modello che vuoi. - - ```txt - /models - ``` - ---- - -### Groq - -1. Vai alla [console di Groq](https://console.groq.com/), clicca **Create API Key** e copia la chiave. - -2. Esegui il comando `/connect` e cerca Groq. - - ```txt - /connect - ``` - -3. Inserisci la chiave API per il provider. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare quello che vuoi. - - ```txt - /models - ``` - ---- - -### Hugging Face - -[Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers) fornisce accesso a modelli open supportati da 17+ provider. - -1. Vai alle [impostazioni di Hugging Face](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained) per creare un token con il permesso di effettuare chiamate agli Inference Providers. - -2. Esegui il comando `/connect` e cerca **Hugging Face**. - - ```txt - /connect - ``` - -3. Inserisci il tuo token Hugging Face. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello come _Kimi-K2-Instruct_ o _GLM-4.6_. - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) è una piattaforma di osservabilità LLM che fornisce logging, monitoraggio e analisi per le tue applicazioni AI. L'AI Gateway di Helicone instrada automaticamente le tue richieste al provider appropriato in base al modello. - -1. Vai su [Helicone](https://helicone.ai), crea un account e genera una chiave API dalla tua dashboard. - -2. Esegui il comando `/connect` e cerca **Helicone**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di Helicone. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello. - - ```txt - /models - ``` - -Per altri provider e funzionalità avanzate come caching e rate limiting, controlla la [documentazione di Helicone](https://docs.helicone.ai). - -#### Config opzionali - -Nel caso vedessi una funzionalità o un modello di Helicone che non viene configurato automaticamente da opencode, puoi sempre configurarlo tu stesso. - -Ecco la [Model Directory di Helicone](https://helicone.ai/models), ti servirà per recuperare gli ID dei modelli che vuoi aggiungere. - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### Header personalizzati - -Helicone supporta header personalizzati per funzionalità come caching, user tracking e gestione sessioni. Aggiungili alla configurazione del provider usando `options.headers`: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### Tracciamento sessioni - -La funzionalità [Sessions](https://docs.helicone.ai/features/sessions) di Helicone ti permette di raggruppare richieste LLM correlate. Usa il plugin [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) per loggare automaticamente ogni conversazione di OpenCode come una sessione in Helicone. - -```bash -npm install -g opencode-helicone-session -``` - -Aggiungilo alla tua configurazione. - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -Il plugin inietta gli header `Helicone-Session-Id` e `Helicone-Session-Name` nelle tue richieste. Nella pagina Sessions di Helicone, vedrai ogni conversazione di OpenCode elencata come sessione separata. - -##### Header Helicone comuni - -| Header | Descrizione | -| -------------------------- | -------------------------------------------------------------------------- | -| `Helicone-Cache-Enabled` | Abilita response caching (`true`/`false`) | -| `Helicone-User-Id` | Traccia metriche per utente | -| `Helicone-Property-[Name]` | Aggiungi proprietà personalizzate (ad es. `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | Associa richieste con versioni dei prompt | - -Vedi la [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory) per tutti gli header disponibili. - ---- - -### llama.cpp - -Puoi configurare opencode per usare modelli locali tramite l'utility llama-server di [llama.cpp](https://github.com/ggml-org/llama.cpp) - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -In questo esempio: - -- `llama.cpp` è l'ID provider personalizzato. Può essere qualsiasi stringa tu voglia. -- `npm` specifica il pacchetto da usare per questo provider. Qui, `@ai-sdk/openai-compatible` è usato per qualsiasi API OpenAI-compatible. -- `name` è il nome visualizzato per il provider nella UI. -- `options.baseURL` è l'endpoint per il server locale. -- `models` è una mappa di ID modello e relative configurazioni. Il nome del modello verrà visualizzato nella lista di selezione modelli. - ---- - -### IO.NET - -IO.NET offre 17 modelli ottimizzati per vari casi d'uso: - -1. Vai alla [console di IO.NET](https://ai.io.net/), crea un account e genera una chiave API. - -2. Esegui il comando `/connect` e cerca **IO.NET**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di IO.NET. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello. - - ```txt - /models - ``` - ---- - -### LM Studio - -Puoi configurare opencode per usare modelli locali tramite LM Studio. - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -In questo esempio: - -- `lmstudio` è l'ID provider personalizzato. Può essere qualsiasi stringa tu voglia. -- `npm` specifica il pacchetto da usare per questo provider. Qui, `@ai-sdk/openai-compatible` è usato per qualsiasi API OpenAI-compatible. -- `name` è il nome visualizzato per il provider nella UI. -- `options.baseURL` è l'endpoint per il server locale. -- `models` è una mappa di ID modello e relative configurazioni. Il nome del modello verrà visualizzato nella lista di selezione modelli. - ---- - -### Moonshot AI - -Per usare Kimi K2 di Moonshot AI: - -1. Vai alla [console di Moonshot AI](https://platform.moonshot.ai/console), crea un account e clicca **Create API key**. - -2. Esegui il comando `/connect` e cerca **Moonshot AI**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di Moonshot. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare _Kimi K2_. - - ```txt - /models - ``` - ---- - -### MiniMax - -1. Vai alla [MiniMax API Console](https://platform.minimax.io/login), crea un account e genera una chiave API. - -2. Esegui il comando `/connect` e cerca **MiniMax**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di MiniMax. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello come _M2.1_. - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. Vai alla [console di Nebius Token Factory](https://tokenfactory.nebius.com/), crea un account e clicca **Add Key**. - -2. Esegui il comando `/connect` e cerca **Nebius Token Factory**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di Nebius Token Factory. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello come _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Ollama - -Puoi configurare opencode per usare modelli locali tramite Ollama. - -:::tip -Ollama può auto-configurarsi per OpenCode. Vedi la [documentazione di integrazione Ollama](https://docs.ollama.com/integrations/opencode) per dettagli. -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -In questo esempio: - -- `ollama` è l'ID provider personalizzato. Può essere qualsiasi stringa tu voglia. -- `npm` specifica il pacchetto da usare per questo provider. Qui, `@ai-sdk/openai-compatible` è usato per qualsiasi API OpenAI-compatible. -- `name` è il nome visualizzato per il provider nella UI. -- `options.baseURL` è l'endpoint per il server locale. -- `models` è una mappa di ID modello e relative configurazioni. Il nome del modello verrà visualizzato nella lista di selezione modelli. - -:::tip -Se le chiamate agli strumenti non funzionano, prova ad aumentare `num_ctx` in Ollama. Inizia da circa 16k - 32k. -::: - ---- - -### Ollama Cloud - -Per usare Ollama Cloud con OpenCode: - -1. Vai su [https://ollama.com/](https://ollama.com/) e accedi o crea un account. - -2. Naviga in **Settings** > **Keys** e clicca **Add API Key** per generare una nuova chiave API. - -3. Copia la chiave API da usare in OpenCode. - -4. Esegui il comando `/connect` e cerca **Ollama Cloud**. - - ```txt - /connect - ``` - -5. Inserisci la tua chiave API di Ollama Cloud. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **Importante**: Prima di usare modelli cloud in OpenCode, devi scaricare le informazioni del modello localmente: - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. Esegui il comando `/models` per selezionare il tuo modello Ollama Cloud. - - ```txt - /models - ``` - ---- - -### OpenAI - -Consigliamo di iscriversi a [ChatGPT Plus o Pro](https://chatgpt.com/pricing). - -1. Una volta iscritto, esegui il comando `/connect` e seleziona OpenAI. - - ```txt - /connect - ``` - -2. Qui puoi selezionare l'opzione **ChatGPT Plus/Pro**: aprirà il tuo browser - e ti chiederà di autenticarti. - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. Ora tutti i modelli OpenAI dovrebbero essere disponibili quando usi il comando `/models`. - - ```txt - /models - ``` - -##### Usare chiavi API - -Se hai già una chiave API, puoi selezionare **Manually enter API Key** e incollarla nel terminale. - ---- - -### OpenCode Zen - -OpenCode Zen è una lista di modelli testati e verificati forniti dal team OpenCode. [Scopri di più](/docs/zen). - -1. Accedi a **OpenCode Zen** e clicca **Create API Key**. - -2. Esegui il comando `/connect` e cerca **OpenCode Zen**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di OpenCode. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello come _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. Vai alla [dashboard di OpenRouter](https://openrouter.ai/settings/keys), clicca **Create API Key** e copia la chiave. - -2. Esegui il comando `/connect` e cerca OpenRouter. - - ```txt - /connect - ``` - -3. Inserisci la chiave API per il provider. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Molti modelli OpenRouter sono precaricati di default, esegui il comando `/models` per selezionare quello che vuoi. - - ```txt - /models - ``` - - Puoi anche aggiungere modelli addizionali tramite la tua configurazione di opencode. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. Puoi anche personalizzarli tramite la configurazione di opencode. Ecco un esempio di specifica di un provider - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI Core fornisce accesso a oltre 40 modelli di OpenAI, Anthropic, Google, Amazon, Meta, Mistral e AI21 tramite una piattaforma unificata. - -1. Vai al tuo [SAP BTP Cockpit](https://account.hana.ondemand.com/), naviga nella tua istanza di servizio SAP AI Core e crea una service key. - - :::tip - La service key è un oggetto JSON contenente `clientid`, `clientsecret`, `url` e `serviceurls.AI_API_URL`. Puoi trovare la tua istanza AI Core sotto **Services** > **Instances and Subscriptions** nel BTP Cockpit. - ::: - -2. Esegui il comando `/connect` e cerca **SAP AI Core**. - - ```txt - /connect - ``` - -3. Inserisci il JSON della tua service key. - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - Oppure imposta la variabile d'ambiente `AICORE_SERVICE_KEY`: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - Oppure aggiungila al tuo profilo bash: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. Facoltativamente imposta deployment ID e resource group: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - Queste impostazioni sono opzionali e dovrebbero essere configurate in base al tuo setup SAP AI Core. - ::: - -5. Esegui il comando `/models` per selezionare tra gli oltre 40 modelli disponibili. - - ```txt - /models - ``` - ---- - -### STACKIT - -STACKIT AI Model Serving fornisce un ambiente di hosting completamente gestito e sovrano per modelli AI, concentrandosi su LLM come Llama, Mistral e Qwen, con la massima sovranità dei dati su infrastruttura europea. - -1. Vai al [Portale STACKIT](https://portal.stackit.cloud), naviga in **AI Model Serving** e crea un token di autenticazione per il tuo progetto. - - :::tip - Devi avere un account cliente STACKIT, un account utente e un progetto prima di creare token di autenticazione. - ::: - -2. Esegui il comando `/connect` e cerca **STACKIT**. - - ```txt - /connect - ``` - -3. Inserisci il tuo token di autenticazione STACKIT AI Model Serving. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare tra i modelli disponibili come _Qwen3-VL 235B_ o _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. Vai al [pannello OVHcloud](https://ovh.com/manager). Naviga nella sezione `Public Cloud`, `AI & Machine Learning` > `AI Endpoints` e nella scheda `API Keys`, clicca **Create a new API key**. - -2. Esegui il comando `/connect` e cerca **OVHcloud AI Endpoints**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di OVHcloud AI Endpoints. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello come _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Scaleway - -Per usare le [Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/) con Opencode: - -1. Vai alle [impostazioni IAM della Console Scaleway](https://console.scaleway.com/iam/api-keys) per generare una nuova chiave API. - -2. Esegui il comando `/connect` e cerca **Scaleway**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di Scaleway. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello come _devstral-2-123b-instruct-2512_ o _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Together AI - -1. Vai alla [console di Together AI](https://api.together.ai), crea un account e clicca **Add Key**. - -2. Esegui il comando `/connect` e cerca **Together AI**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di Together AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello come _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Venice AI - -1. Vai alla [console di Venice AI](https://venice.ai), crea un account e genera una chiave API. - -2. Esegui il comando `/connect` e cerca **Venice AI**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di Venice AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello come _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -Vercel AI Gateway ti permette di accedere a modelli di OpenAI, Anthropic, Google, xAI e altri tramite un endpoint unificato. I modelli sono offerti al prezzo di listino senza ricarichi. - -1. Vai alla [dashboard Vercel](https://vercel.com/), naviga nella scheda **AI Gateway** e clicca **API keys** per creare una nuova chiave API. - -2. Esegui il comando `/connect` e cerca **Vercel AI Gateway**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di Vercel AI Gateway. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello. - - ```txt - /models - ``` - -Puoi anche personalizzare i modelli tramite la tua configurazione di opencode. Ecco un esempio di come specificare l'ordine di routing dei provider. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -Alcune opzioni di routing utili: - -| Opzione | Descrizione | -| ------------------- | --------------------------------------------------- | -| `order` | Sequenza di provider da provare | -| `only` | Restringi a provider specifici | -| `zeroDataRetention` | Usa solo provider con policy di zero data retention | - ---- - -### xAI - -1. Vai alla [console di xAI](https://console.x.ai/), crea un account e genera una chiave API. - -2. Esegui il comando `/connect` e cerca **xAI**. - - ```txt - /connect - ``` - -3. Inserisci la tua chiave API di xAI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello come _Grok Beta_. - - ```txt - /models - ``` - ---- - -### Z.AI - -1. Vai alla [console API di Z.AI](https://z.ai/manage-apikey/apikey-list), crea un account e clicca **Create a new API key**. - -2. Esegui il comando `/connect` e cerca **Z.AI**. - - ```txt - /connect - ``` - - Se sei iscritto al **GLM Coding Plan**, seleziona **Z.AI Coding Plan**. - -3. Inserisci la tua chiave API di Z.AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Esegui il comando `/models` per selezionare un modello come _GLM-4.7_. - - ```txt - /models - ``` - ---- - -### ZenMux - -1. Vai alla [dashboard di ZenMux](https://zenmux.ai/settings/keys), clicca **Create API Key** e copia la chiave. - -2. Esegui il comando `/connect` e cerca ZenMux. - - ```txt - /connect - ``` - -3. Inserisci la chiave API per il provider. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Molti modelli ZenMux sono precaricati di default, esegui il comando `/models` per selezionare quello che vuoi. - - ```txt - /models - ``` - - Puoi anche aggiungere modelli addizionali tramite la tua configurazione di opencode. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## Provider personalizzato - -Per aggiungere qualsiasi provider **OpenAI-compatible** non elencato nel comando `/connect`: - -:::tip -Puoi usare qualsiasi provider OpenAI-compatible con opencode. La maggior parte dei provider AI moderni offre API OpenAI-compatible. -::: - -1. Esegui il comando `/connect` e scorri fino a **Other**. - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. Inserisci un ID univoco per il provider. - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - Scegli un ID facile da ricordare, lo userai nel tuo file di configurazione. - ::: - -3. Inserisci la tua chiave API per il provider. - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. Crea o aggiorna il tuo file `opencode.json` nella directory del progetto: - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - - Ecco le opzioni di configurazione: - - **npm**: Pacchetto AI SDK da usare, `@ai-sdk/openai-compatible` per provider OpenAI-compatible - - **name**: Nome visualizzato nella UI. - - **models**: Modelli disponibili. - - **options.baseURL**: URL dell'endpoint API. - - **options.apiKey**: Opzionalmente imposta la chiave API, se non usi auth. - - **options.headers**: Opzionalmente imposta header personalizzati. - - Maggiori dettagli sulle opzioni avanzate nell'esempio sotto. - -5. Esegui il comando `/models`: il tuo provider personalizzato e i modelli appariranno nella lista di selezione. - ---- - -##### Esempio - -Ecco un esempio che imposta le opzioni `apiKey`, `headers` e `limit` del modello. - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -Dettagli configurazione: - -- **apiKey**: Imposta usando la sintassi variabile `env`, [scopri di più](/docs/config#env-vars). -- **headers**: Header personalizzati inviati con ogni richiesta. -- **limit.context**: Massimi token di input accettati dal modello. -- **limit.output**: Massimi token che il modello può generare. - -I campi `limit` permettono a OpenCode di capire quanto contesto rimane. I provider standard recuperano questi dati da models.dev automaticamente. - ---- - -## Risoluzione dei problemi - -Se hai problemi con la configurazione di un provider, controlla quanto segue: - -1. **Controlla il setup auth**: Esegui `opencode auth list` per vedere se le credenziali - per il provider sono aggiunte alla tua configurazione. - - Questo non si applica a provider come Amazon Bedrock, che si basano su variabili d'ambiente per l'autenticazione. - -2. Per provider personalizzati, controlla la config di opencode e: - - Assicurati che l'ID provider usato nel comando `/connect` corrisponda all'ID nella tua config opencode. - - Che sia usato il pacchetto npm corretto per il provider. Per esempio, usa `@ai-sdk/cerebras` per Cerebras. E per tutti gli altri provider OpenAI-compatible, usa `@ai-sdk/openai-compatible`. - - Controlla che sia usato l'endpoint API corretto nel campo `options.baseURL`. diff --git a/packages/web/src/content/docs/it/rules.mdx b/packages/web/src/content/docs/it/rules.mdx deleted file mode 100644 index 2534a991af..0000000000 --- a/packages/web/src/content/docs/it/rules.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: Regole -description: Imposta istruzioni personalizzate per opencode. ---- - -Puoi fornire istruzioni personalizzate a opencode creando un file `AGENTS.md`. E' simile alle regole di Cursor. Contiene istruzioni che verranno incluse nel contesto dell'LLM per personalizzarne il comportamento per il tuo progetto. - ---- - -## Inizializza - -Per creare un nuovo file `AGENTS.md`, puoi eseguire il comando `/init` in opencode. - -:::tip -Dovresti committare il file `AGENTS.md` del progetto in Git. -::: - -Questo scansiona il progetto e tutti i suoi contenuti per capire di cosa si tratta e generare un file `AGENTS.md`. Questo aiuta opencode a orientarsi meglio nel progetto. - -Se hai gia' un file `AGENTS.md` esistente, cerchera' di aggiungervi contenuti. - ---- - -## Esempio - -Puoi anche creare questo file manualmente. Ecco un esempio di alcune cose che puoi inserire in un file `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` -``` - -Qui stiamo aggiungendo istruzioni specifiche del progetto e saranno condivise con il tuo team. - ---- - -## Tipi - -opencode supporta anche la lettura del file `AGENTS.md` da piu' posizioni, e questo serve a scopi diversi. - -### Progetto - -Metti un `AGENTS.md` nella root del progetto per regole specifiche del progetto. Si applicano solo quando stai lavorando in questa directory o nelle sue sottodirectory. - -### Globale - -Puoi anche avere regole globali in un file `~/.config/opencode/AGENTS.md`. Queste si applicano a tutte le sessioni di opencode. - -Dato che questo non viene committato in Git o condiviso con il team, consigliamo di usarlo per specificare regole personali che l'LLM deve seguire. - -### Compatibilita Claude Code - -Per gli utenti che migrano da Claude Code, OpenCode supporta come fallback le convenzioni di file di Claude Code: - -- **Regole di progetto**: `CLAUDE.md` nella directory del progetto (usato se non esiste `AGENTS.md`) -- **Regole globali**: `~/.claude/CLAUDE.md` (usato se non esiste `~/.config/opencode/AGENTS.md`) -- **Skill**: `~/.claude/skills/` — vedi [Skill agente](/docs/skills/) per i dettagli - -Per disabilitare la compatibilita' con Claude Code, imposta una di queste variabili d'ambiente: - -```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 -``` - ---- - -## Priorita - -Quando opencode si avvia, cerca i file di regole in questo ordine: - -1. **File locali** risalendo dalla directory corrente (`AGENTS.md`, `CLAUDE.md`) -2. **File globale** in `~/.config/opencode/AGENTS.md` -3. **File Claude Code** in `~/.claude/CLAUDE.md` (se non disabilitato) - -In ogni categoria vince il primo file corrispondente. Per esempio, se hai sia `AGENTS.md` sia `CLAUDE.md`, viene usato solo `AGENTS.md`. Allo stesso modo, `~/.config/opencode/AGENTS.md` ha priorita' su `~/.claude/CLAUDE.md`. - ---- - -## Istruzioni personalizzate - -Puoi specificare file di istruzioni personalizzati nel tuo `opencode.json` o nel globale `~/.config/opencode/opencode.json`. Questo permette a te e al tuo team di riusare regole esistenti invece di doverle duplicare in AGENTS.md. - -Esempio: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -Puoi anche usare URL remoti per caricare istruzioni dal web. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"] -} -``` - -Le istruzioni remote vengono recuperate con un timeout di 5 secondi. - -Tutti i file di istruzioni vengono combinati con i tuoi file `AGENTS.md`. - ---- - -## Riferisci file esterni - -Anche se opencode non interpreta automaticamente i riferimenti a file in `AGENTS.md`, puoi ottenere una funzionalita' simile in due modi: - -### Usa opencode.json - -L'approccio consigliato e' usare il campo `instructions` in `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"] -} -``` - -### Istruzioni manuali in AGENTS.md - -Puoi insegnare a opencode a leggere file esterni fornendo istruzioni esplicite nel tuo `AGENTS.md`. Ecco un esempio pratico: - -```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. -``` - -Questo approccio ti permette di: - -- Crea file di regole modulari e riutilizzabili -- Condividi regole tra progetti con symlink o submodule Git -- Mantieni AGENTS.md conciso riferendoti a linee guida dettagliate -- Assicurati che opencode carichi file solo quando servono per il task specifico - -:::tip -Per monorepo o progetti con standard condivisi, usare `opencode.json` con pattern glob (come `packages/*/AGENTS.md`) e' piu' manutenibile rispetto alle istruzioni manuali. -::: diff --git a/packages/web/src/content/docs/it/sdk.mdx b/packages/web/src/content/docs/it/sdk.mdx deleted file mode 100644 index 2941bfb24c..0000000000 --- a/packages/web/src/content/docs/it/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: SDK -description: Client JS type-safe per il server opencode. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -L'SDK JS/TS di opencode fornisce un client type-safe per interagire con il server. -Usalo per creare integrazioni e controllare opencode in modo programmatico. - -[Scopri di piu](/docs/server) su come funziona il server. Per esempi, guarda i [progetti](/docs/ecosystem#projects) creati dalla comunita. - ---- - -## Installa - -Installa l'SDK da npm: - -```bash -npm install @opencode-ai/sdk -``` - ---- - -## Crea un client - -Crea un'istanza di opencode: - -```javascript -import { createOpencode } from "@opencode-ai/sdk" - -const { client } = await createOpencode() -``` - -Questo avvia sia un server sia un client - -#### Opzioni - -| Opzione | Tipo | Descrizione | Predefinito | -| ---------- | ------------- | ------------------------------ | ----------- | -| `hostname` | `string` | Hostname del server | `127.0.0.1` | -| `port` | `number` | Porta del server | `4096` | -| `signal` | `AbortSignal` | Segnale di abort per annullare | `undefined` | -| `timeout` | `number` | Timeout in ms per avvio server | `5000` | -| `config` | `Config` | Oggetto di configurazione | `{}` | - ---- - -## Configurazione - -Puoi passare un oggetto di configurazione per personalizzare il comportamento. L'istanza legge comunque `opencode.json`, ma puoi sovrascrivere o aggiungere configurazione 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() -``` - -## Solo client - -Se hai gia un'istanza di opencode in esecuzione, puoi creare un client per collegarti: - -```javascript -import { createOpencodeClient } from "@opencode-ai/sdk" - -const client = createOpencodeClient({ - baseUrl: "http://localhost:4096", -}) -``` - -#### Opzioni - -| Opzione | Tipo | Descrizione | Predefinito | -| --------------- | ---------- | ----------------------------------- | ----------------------- | -| `baseUrl` | `string` | URL del server | `http://localhost:4096` | -| `fetch` | `function` | Implementazione fetch custom | `globalThis.fetch` | -| `parseAs` | `string` | Metodo di parsing della risposta | `auto` | -| `responseStyle` | `string` | Stile di ritorno: `data` o `fields` | `fields` | -| `throwOnError` | `boolean` | Lancia errori invece di restituirli | `false` | - ---- - -## Tipi - -L'SDK include definizioni TypeScript per tutti i tipi API. Importale direttamente: - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -Tutti i tipi sono generati dalla specifica OpenAPI del server e disponibili nel file dei tipi. - ---- - -## Errori - -L'SDK puo lanciare errori che puoi intercettare e gestire: - -```typescript -try { - await client.session.get({ path: { id: "invalid-id" } }) -} catch (error) { - console.error("Failed to get session:", (error as Error).message) -} -``` - ---- - -## Output Strutturato - -Puoi richiedere un output JSON strutturato dal modello specificando un `format` con uno schema JSON. Il modello usera un tool `StructuredOutput` per restituire JSON validato che corrisponde al tuo schema. - -### Uso Base - -```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"] } -``` - -### Tipi di Formato Output - -| Tipo | Descrizione | -| ------------- | ------------------------------------------------------------------- | -| `text` | Predefinito. Risposta di testo standard (nessun output strutturato) | -| `json_schema` | Restituisce JSON validato che corrisponde allo schema fornito | - -### Formato Schema JSON - -Quando usi `type: 'json_schema'`, fornisci: - -| Campo | Tipo | Descrizione | -| ------------ | --------------- | --------------------------------------------------------------------- | -| `type` | `'json_schema'` | Richiesto. Specifica la modalita schema JSON | -| `schema` | `object` | Richiesto. Oggetto JSON Schema che definisce la struttura dell'output | -| `retryCount` | `number` | Opzionale. Numero di tentativi di validazione (default: 2) | - -### Gestione Errori - -Se il modello non riesce a produrre un output strutturato valido dopo tutti i tentativi, la risposta includera un `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) -} -``` - -### Best Practices - -1. **Fornisci descrizioni chiare** nelle proprieta del tuo schema per aiutare il modello a capire quali dati estrarre -2. **Usa `required`** per specificare quali campi devono essere presenti -3. **Mantieni gli schemi focalizzati** - schemi annidati complessi potrebbero essere piu difficili da compilare correttamente per il modello -4. **Imposta un `retryCount` appropriato** - aumenta per schemi complessi, diminuisci per quelli semplici - ---- - -## API - -L'SDK espone tutte le API del server tramite un client type-safe. - ---- - -### Globale - -| Metodo | Descrizione | Risposta | -| ----------------- | --------------------------------- | ------------------------------------ | -| `global.health()` | Controlla stato e versione server | `{ healthy: true, version: string }` | - ---- - -#### Esempi - -```javascript -const health = await client.global.health() -console.log(health.data.version) -``` - ---- - -### App - -| Metodo | Descrizione | Risposta | -| -------------- | ----------------------- | ------------------------------------------- | -| `app.log()` | Scrive una voce di log | `boolean` | -| `app.agents()` | Elenca tutti gli agenti | Agent[] | - ---- - -#### Esempi - -```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() -``` - ---- - -### Progetto - -| Metodo | Descrizione | Risposta | -| ------------------- | ----------------- | --------------------------------------------- | -| `project.list()` | Elenca i progetti | Project[] | -| `project.current()` | Progetto corrente | Project | - ---- - -#### Esempi - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### Path - -| Metodo | Descrizione | Risposta | -| ------------ | ----------------- | ---------------------------------------- | -| `path.get()` | Percorso corrente | Path | - ---- - -#### Esempi - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### Config - -| Metodo | Descrizione | Risposta | -| -------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | Ottieni info config | Config | -| `config.providers()` | Elenca provider e modelli default | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### Esempi - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### Sessioni - -| Metodo | Descrizione | Note | -| ---------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `session.list()` | Elenca le sessioni | Returns Session[] | -| `session.get({ path })` | Ottieni una sessione | Returns Session | -| `session.children({ path })` | Elenca sessioni figlie | Returns Session[] | -| `session.create({ body })` | Crea una sessione | Returns Session | -| `session.delete({ path })` | Elimina una sessione | Returns `boolean` | -| `session.update({ path, body })` | Aggiorna proprieta della sessione | Returns Session | -| `session.init({ path, body })` | Analizza app e crea `AGENTS.md` | Returns `boolean` | -| `session.abort({ path })` | Interrompe una sessione in corso | Returns `boolean` | -| `session.share({ path })` | Condivide la sessione | Returns Session | -| `session.unshare({ path })` | Rimuove la condivisione | Returns Session | -| `session.summarize({ path, body })` | Riassume la sessione | Returns `boolean` | -| `session.messages({ path })` | Elenca i messaggi della sessione | Returns `{ info: `Message`, parts: `Part[]`}[]` | -| `session.message({ path })` | Ottieni dettagli di un messaggio | Returns `{ info: `Message`, parts: `Part[]`}` | -| `session.prompt({ path, body })` | Invia un prompt | `body.noReply: true` returns UserMessage (solo contesto). Di default ritorna AssistantMessage con risposta AI. Supporta `body.outputFormat` per [output strutturato](#output-strutturato) | -| `session.command({ path, body })` | Invia un comando alla sessione | Returns `{ info: `AssistantMessage`, parts: `Part[]`}` | -| `session.shell({ path, body })` | Esegue un comando shell | Returns AssistantMessage | -| `session.revert({ path, body })` | Ripristina un messaggio | Returns Session | -| `session.unrevert({ path })` | Ripristina messaggi revertiti | Returns Session | -| `postSessionByIdPermissionsByPermissionId({ path, body })` | Risponde a una richiesta permessi | Returns `boolean` | - ---- - -#### Esempi - -```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." }], - }, -}) -``` - ---- - -### File - -| Metodo | Descrizione | Risposta | -| ------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------- | -| `find.text({ query })` | Cerca testo nei file | Array of match objects with `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `find.files({ query })` | Trova file e directory per nome | `string[]` (paths) | -| `find.symbols({ query })` | Trova simboli nel workspace | Symbol[] | -| `file.read({ query })` | Legge un file | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | Stato dei file tracciati | File[] | - -`find.files` supporta alcuni campi query opzionali: - -- `type`: `"file"` or `"directory"` -- `directory`: sovrascrive la root del progetto per la ricerca -- `limit`: risultati massimi (1–200) - ---- - -#### Esempi - -```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 - -| Metodo | Descrizione | Risposta | -| ------------------------------ | -------------------------- | --------- | -| `tui.appendPrompt({ body })` | Aggiunge testo al prompt | `boolean` | -| `tui.openHelp()` | Apre la finestra help | `boolean` | -| `tui.openSessions()` | Apre il selettore sessioni | `boolean` | -| `tui.openThemes()` | Apre il selettore temi | `boolean` | -| `tui.openModels()` | Apre il selettore modelli | `boolean` | -| `tui.submitPrompt()` | Invia il prompt corrente | `boolean` | -| `tui.clearPrompt()` | Pulisce il prompt | `boolean` | -| `tui.executeCommand({ body })` | Esegue un comando | `boolean` | -| `tui.showToast({ body })` | Mostra una notifica toast | `boolean` | - ---- - -#### Esempi - -```javascript -// Control TUI interface -await client.tui.appendPrompt({ - body: { text: "Add this to prompt" }, -}) - -await client.tui.showToast({ - body: { message: "Task completed", variant: "success" }, -}) -``` - ---- - -### Autenticazione - -| Metodo | Descrizione | Risposta | -| ------------------- | ------------------------ | --------- | -| `auth.set({ ... })` | Imposta credenziali auth | `boolean` | - ---- - -#### Esempi - -```javascript -await client.auth.set({ - path: { id: "anthropic" }, - body: { type: "api", key: "your-api-key" }, -}) -``` - ---- - -### Eventi - -| Metodo | Descrizione | Risposta | -| ------------------- | ---------------------------- | ---------------------------- | -| `event.subscribe()` | Stream di server-sent events | Stream di server-sent events | - ---- - -#### Esempi - -```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) -} -``` diff --git a/packages/web/src/content/docs/it/server.mdx b/packages/web/src/content/docs/it/server.mdx deleted file mode 100644 index df66d39fdc..0000000000 --- a/packages/web/src/content/docs/it/server.mdx +++ /dev/null @@ -1,284 +0,0 @@ ---- -title: Server -description: Interagisci con il server opencode via HTTP. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -Il comando `opencode serve` avvia un server HTTP headless che espone un endpoint OpenAPI utilizzabile da un client opencode. - ---- - -### Utilizzo - -```bash -opencode serve [--port ] [--hostname ] [--cors ] -``` - -#### Opzioni - -| Flag | Descrizione | Predefinito | -| --------------- | --------------------------------------- | ---------------- | -| `--port` | Porta su cui ascoltare | `4096` | -| `--hostname` | Hostname su cui ascoltare | `127.0.0.1` | -| `--mdns` | Abilita la scoperta mDNS | `false` | -| `--mdns-domain` | Nome di dominio personalizzato mDNS | `opencode.local` | -| `--cors` | Origin browser aggiuntive da permettere | `[]` | - -`--cors` puo essere passato piu volte: - -```bash -opencode serve --cors http://localhost:5173 --cors https://app.example.com -``` - ---- - -### Autenticazione - -Imposta `OPENCODE_SERVER_PASSWORD` per proteggere il server con HTTP basic auth. Lo username predefinito e `opencode`, oppure imposta `OPENCODE_SERVER_USERNAME` per sovrascriverlo. Questo vale sia per `opencode serve` sia per `opencode web`. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve -``` - ---- - -### Come funziona - -Quando esegui `opencode` avvia una TUI e un server. La TUI e il client che parla col server. Il server espone un endpoint con specifica OpenAPI 3.1. Questo endpoint viene anche usato per generare un [SDK](/docs/sdk). - -:::tip -Usa il server opencode per interagire con opencode in modo programmatico. -::: - -Questa architettura permette a opencode di supportare piu client e di essere usato in modo programmatico. - -Puoi eseguire `opencode serve` per avviare un server standalone. Se la TUI di opencode e gia in esecuzione, `opencode serve` avviera un nuovo server. - ---- - -#### Connettersi a un server esistente - -Quando avvii la TUI assegna casualmente porta e hostname. In alternativa puoi passare i [flag](/docs/cli) `--hostname` e `--port` e poi usare questi valori per connetterti al suo server. - -L'endpoint [`/tui`](#tui) puo essere usato per pilotare la TUI tramite il server. Per esempio, puoi precompilare o eseguire un prompt. Questa configurazione e usata dai plugin [IDE](/docs/ide) di OpenCode. - ---- - -## Specifica - -Il server pubblica una specifica OpenAPI 3.1 visualizzabile su: - -``` -http://:/doc -``` - -Per esempio, `http://localhost:4096/doc`. Usa la spec per generare client o ispezionare i tipi di request/response, oppure visualizzala in uno Swagger explorer. - ---- - -## API - -Il server opencode espone le seguenti API. - ---- - -### Globale - -| Metodo | Path | Descrizione | Response | -| ------ | ---------------- | --------------------------- | ------------------------------------ | -| `GET` | `/global/health` | Stato di salute e versione | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | Eventi globali (stream SSE) | Event stream | - ---- - -### Progetto - -| Metodo | Path | Descrizione | Response | -| ------ | ------------------ | ----------------------- | --------------------------------------------- | -| `GET` | `/project` | Elenca tutti i progetti | Project[] | -| `GET` | `/project/current` | Progetto corrente | Project | - ---- - -### Percorso e VCS - -| Metodo | Path | Descrizione | Response | -| ------ | ------- | --------------------------------- | ------------------------------------------- | -| `GET` | `/path` | Percorso corrente | Path | -| `GET` | `/vcs` | Info VCS per il progetto corrente | VcsInfo | - ---- - -### Istanza - -| Metodo | Path | Descrizione | Response | -| ------ | ------------------- | --------------------------- | --------- | -| `POST` | `/instance/dispose` | Rilascia l'istanza corrente | `boolean` | - ---- - -### Configurazione - -| Metodo | Path | Descrizione | Response | -| ------- | ------------------- | --------------------------------- | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | Info sulla config | Config | -| `PATCH` | `/config` | Aggiorna la config | Config | -| `GET` | `/config/providers` | Elenca provider e modelli default | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -### Fornitori - -| Metodo | Path | Descrizione | Response | -| ------ | -------------------------------- | ------------------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | Elenca tutti i provider | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | Metodi auth dei provider | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | Autorizza un provider via OAuth | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | Gestisce callback OAuth | `boolean` | - ---- - -### Sessioni - -| Metodo | Path | Descrizione | Note | -| -------- | ---------------------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------- | -| `GET` | `/session` | Elenca tutte le sessioni | Returns Session[] | -| `POST` | `/session` | Crea una nuova sessione | body: `{ parentID?, title? }`, returns Session | -| `GET` | `/session/status` | Stato di tutte le sessioni | Returns `{ [sessionID: string]: `SessionStatus` }` | -| `GET` | `/session/:id` | Dettagli di sessione | Returns Session | -| `DELETE` | `/session/:id` | Elimina una sessione e i suoi dati | Returns `boolean` | -| `PATCH` | `/session/:id` | Aggiorna proprieta sessione | body: `{ title? }`, returns Session | -| `GET` | `/session/:id/children` | Sessioni figlie | Returns Session[] | -| `GET` | `/session/:id/todo` | Todo list della sessione | Returns Todo[] | -| `POST` | `/session/:id/init` | Analizza app e crea `AGENTS.md` | body: `{ messageID, providerID, modelID }`, returns `boolean` | -| `POST` | `/session/:id/fork` | Fork di sessione su un messaggio | body: `{ messageID? }`, returns Session | -| `POST` | `/session/:id/abort` | Interrompe una sessione in esecuzione | Returns `boolean` | -| `POST` | `/session/:id/share` | Condivide una sessione | Returns Session | -| `DELETE` | `/session/:id/share` | Annulla condivisione | Returns Session | -| `GET` | `/session/:id/diff` | Diff della sessione | query: `messageID?`, returns FileDiff[] | -| `POST` | `/session/:id/summarize` | Riassume la sessione | body: `{ providerID, modelID }`, returns `boolean` | -| `POST` | `/session/:id/revert` | Ripristina un messaggio | body: `{ messageID, partID? }`, returns `boolean` | -| `POST` | `/session/:id/unrevert` | Ripristina tutti i messaggi revertiti | Returns `boolean` | -| `POST` | `/session/:id/permissions/:permissionID` | Risponde a una richiesta permessi | body: `{ response, remember? }`, returns `boolean` | - ---- - -### Messaggi - -| Metodo | Path | Descrizione | Note | -| ------ | --------------------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `GET` | `/session/:id/message` | Elenca messaggi in una sessione | query: `limit?`, returns `{ info: `Message`, parts: `Part[]`}[]` | -| `POST` | `/session/:id/message` | Invia un messaggio e attende risposta | body: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, returns `{ info: `Message`, parts: `Part[]`}` | -| `GET` | `/session/:id/message/:messageID` | Dettagli messaggio | Returns `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/prompt_async` | Invia un messaggio in async (senza wait) | body: same as `/session/:id/message`, returns `204 No Content` | -| `POST` | `/session/:id/command` | Esegue un comando slash | body: `{ messageID?, agent?, model?, command, arguments }`, returns `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/shell` | Esegue un comando shell | body: `{ agent, model?, command }`, returns `{ info: `Message`, parts: `Part[]`}` | - ---- - -### Comandi - -| Metodo | Path | Descrizione | Response | -| ------ | ---------- | ---------------- | --------------------------------------------- | -| `GET` | `/command` | Elenca i comandi | Command[] | - ---- - -### File - -| Metodo | Path | Descrizione | Response | -| ------ | ------------------------ | ------------------------------- | ------------------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | Cerca testo nei file | Array of match objects with `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `GET` | `/find/file?query=` | Trova file e directory per nome | `string[]` (paths) | -| `GET` | `/find/symbol?query=` | Trova simboli workspace | Symbol[] | -| `GET` | `/file?path=` | Elenca file e directory | FileNode[] | -| `GET` | `/file/content?path=

` | Legge un file | FileContent | -| `GET` | `/file/status` | Stato dei file tracciati | File[] | - -#### `/find/file` query parameters - -- `query` (required) — stringa di ricerca (fuzzy match) -- `type` (optional) — limita i risultati a `"file"` o `"directory"` -- `directory` (optional) — sovrascrive la root del progetto per la ricerca -- `limit` (optional) — massimo risultati (1–200) -- `dirs` (optional) — flag legacy (`"false"` restituisce solo file) - ---- - -### Strumenti (sperimentale) - -| Metodo | Path | Descrizione | Response | -| ------ | ------------------------------------------- | ------------------------------------------ | -------------------------------------------- | -| `GET` | `/experimental/tool/ids` | Elenca tutti i tool ID | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | Elenca tool con JSON schema per un modello | ToolList | - ---- - -### LSP, formatter e MCP - -| Metodo | Path | Descrizione | Response | -| ------ | ------------ | --------------------------- | -------------------------------------------------------- | -| `GET` | `/lsp` | Stato server LSP | LSPStatus[] | -| `GET` | `/formatter` | Stato formatter | FormatterStatus[] | -| `GET` | `/mcp` | Stato server MCP | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | Aggiunge server MCP runtime | body: `{ name, config }`, returns MCP status object | - ---- - -### Agenti - -| Metodo | Path | Descrizione | Response | -| ------ | -------- | ----------------------- | ------------------------------------------- | -| `GET` | `/agent` | Elenca tutti gli agenti | Agent[] | - ---- - -### Log - -| Metodo | Path | Descrizione | Response | -| ------ | ------ | ------------------------------------------------------------------- | --------- | -| `POST` | `/log` | Scrive una voce di log. Body: `{ service, level, message, extra? }` | `boolean` | - ---- - -### TUI - -| Metodo | Path | Descrizione | Response | -| ------ | ----------------------- | -------------------------------------------------- | ---------------------- | -| `POST` | `/tui/append-prompt` | Aggiunge testo al prompt | `boolean` | -| `POST` | `/tui/open-help` | Apre il dialog help | `boolean` | -| `POST` | `/tui/open-sessions` | Apre il selettore sessioni | `boolean` | -| `POST` | `/tui/open-themes` | Apre il selettore temi | `boolean` | -| `POST` | `/tui/open-models` | Apre il selettore modelli | `boolean` | -| `POST` | `/tui/submit-prompt` | Invia il prompt corrente | `boolean` | -| `POST` | `/tui/clear-prompt` | Pulisce il prompt | `boolean` | -| `POST` | `/tui/execute-command` | Esegue un comando (`{ command }`) | `boolean` | -| `POST` | `/tui/show-toast` | Mostra toast (`{ title?, message, variant }`) | `boolean` | -| `GET` | `/tui/control/next` | Attende la prossima richiesta di controllo | Control request object | -| `POST` | `/tui/control/response` | Risponde a una richiesta di controllo (`{ body }`) | `boolean` | - ---- - -### Autenticazione - -| Metodo | Path | Descrizione | Response | -| ------ | ----------- | -------------------------------------------------------------------- | --------- | -| `PUT` | `/auth/:id` | Imposta credenziali auth. Il body deve rispettare lo schema provider | `boolean` | - ---- - -### Eventi - -| Metodo | Path | Descrizione | Response | -| ------ | -------- | ----------------------------------------------------------- | ------------------------- | -| `GET` | `/event` | Stream SSE. Primo evento `server.connected`, poi eventi bus | Server-sent events stream | - ---- - -### Documentazione - -| Metodo | Path | Descrizione | Response | -| ------ | ------ | --------------------- | ---------------------------- | -| `GET` | `/doc` | Specifica OpenAPI 3.1 | Pagina HTML con spec OpenAPI | diff --git a/packages/web/src/content/docs/it/share.mdx b/packages/web/src/content/docs/it/share.mdx deleted file mode 100644 index 9b410a6b86..0000000000 --- a/packages/web/src/content/docs/it/share.mdx +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Condivisione -description: Condividi le tue conversazioni OpenCode. ---- - -La funzione di condivisione di OpenCode ti permette di creare link pubblici alle tue conversazioni, cosi puoi collaborare con i colleghi o chiedere aiuto ad altre persone. - -:::note -Le conversazioni condivise sono accessibili pubblicamente a chiunque abbia il link. -::: - ---- - -## Come funziona - -Quando condividi una conversazione, OpenCode: - -1. Crea un URL pubblico univoco per la sessione -2. Sincronizza la cronologia della conversazione sui nostri server -3. Rende la conversazione accessibile tramite il link condivisibile: `opncd.ai/s/` - ---- - -## Condivisione - -OpenCode supporta tre modalita di condivisione che controllano come vengono condivise le conversazioni: - ---- - -### Manuale (predefinito) - -Per impostazione predefinita, OpenCode usa la condivisione manuale. Le sessioni non vengono condivise automaticamente, ma puoi condividerle manualmente con il comando `/share`: - -``` -/share -``` - -Questo genera un URL univoco che viene copiato negli appunti. - -Per impostare esplicitamente la modalita manuale nel tuo [file di config](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - ---- - -### Automatico - -Puoi abilitare la condivisione automatica per tutte le nuove conversazioni impostando l'opzione `share` su `"auto"` nel tuo [file di config](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "auto" -} -``` - -Con la condivisione automatica attiva, ogni nuova conversazione verra condivisa automaticamente e verra generato un link. - ---- - -### Disabilitato - -Puoi disabilitare completamente la condivisione impostando l'opzione `share` su `"disabled"` nel tuo [file di config](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -Per applicarlo al tuo team in un progetto specifico, aggiungilo a `opencode.json` nel progetto e versionalo su Git. - ---- - -## Annullare la condivisione - -Per smettere di condividere una conversazione e rimuoverla dall'accesso pubblico: - -``` -/unshare -``` - -Questo rimuove il link di condivisione ed elimina i dati associati alla conversazione. - ---- - -## Privacy - -Ci sono alcune cose da tenere a mente quando condividi una conversazione. - ---- - -### Conservazione dati - -Le conversazioni condivise restano accessibili finche non le annulli esplicitamente. Questo include: - -- La cronologia completa della conversazione -- Tutti i messaggi e le risposte -- I metadati della sessione - ---- - -### Raccomandazioni - -- Condividi solo conversazioni che non contengono informazioni sensibili. -- Rivedi il contenuto della conversazione prima di condividerla. -- Annulla la condivisione quando la collaborazione e conclusa. -- Evita di condividere conversazioni con codice proprietario o dati riservati. -- Per progetti sensibili, disabilita completamente la condivisione. - ---- - -## Per le aziende - -Per deploy enterprise, la condivisione puo essere: - -- **Disabilitata** completamente per requisiti di conformita e sicurezza -- **Limitata** ai soli utenti autenticati tramite SSO -- **Self-hosted** sulla tua infrastruttura - -[Scopri di piu](/docs/enterprise) su come usare opencode nella tua organizzazione. diff --git a/packages/web/src/content/docs/it/skills.mdx b/packages/web/src/content/docs/it/skills.mdx deleted file mode 100644 index e65bdc94ee..0000000000 --- a/packages/web/src/content/docs/it/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: "Competenze dell'agente" -description: "Definisci comportamenti riutilizzabili tramite definizioni in SKILL.md" ---- - -Le skill degli agenti permettono a OpenCode di individuare istruzioni riutilizzabili dal tuo repo o dalla home directory. -Le skill vengono caricate on-demand tramite lo strumento nativo `skill`: gli agenti vedono le skill disponibili e possono caricarne il contenuto completo quando serve. - ---- - -## Posizione dei file - -Crea una cartella per ogni nome di skill e metti un `SKILL.md` al suo interno. -OpenCode cerca in queste posizioni: - -- Config di progetto: `.opencode/skills//SKILL.md` -- Config globale: `~/.config/opencode/skills//SKILL.md` -- Progetto compatibile con Claude: `.claude/skills//SKILL.md` -- Globale compatibile con Claude: `~/.claude/skills//SKILL.md` -- Progetto compatibile con agent: `.agents/skills//SKILL.md` -- Globale compatibile con agent: `~/.agents/skills//SKILL.md` - ---- - -## Discovery - -Per i percorsi locali al progetto, OpenCode risale dalla directory di lavoro corrente finche' non raggiunge il worktree git. -Carica qualsiasi `skills/*/SKILL.md` corrispondente in `.opencode/` e qualsiasi `.claude/skills/*/SKILL.md` o `.agents/skills/*/SKILL.md` corrispondente lungo il percorso. - -Le definizioni globali vengono caricate anche da `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` e `~/.agents/skills/*/SKILL.md`. - ---- - -## Frontmatter - -Ogni `SKILL.md` deve iniziare con frontmatter YAML. -Sono riconosciuti solo questi campi: - -- `name` (obbligatorio) -- `description` (obbligatorio) -- `license` (opzionale) -- `compatibility` (opzionale) -- `metadata` (opzionale, mappa stringa-a-stringa) - -I campi di frontmatter sconosciuti vengono ignorati. - ---- - -## Validazione nomi - -`name` deve: - -- Essere lungo 1-64 caratteri -- Essere alfanumerico minuscolo con separatori `-` singoli -- Non iniziare o finire con `-` -- Non contenere `--` consecutivi -- Corrispondere al nome della directory che contiene `SKILL.md` - -Regex equivalente: - -```text -^[a-z0-9]+(-[a-z0-9]+)*$ -``` - ---- - -## Regole di lunghezza - -`description` deve essere lunga 1-1024 caratteri. -Tieni la descrizione abbastanza specifica da permettere all'agente di scegliere correttamente. - ---- - -## Esempio - -Crea `.opencode/skills/git-release/SKILL.md` cosi': - -```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. -``` - ---- - -## Descrizione strumento - -OpenCode elenca le skill disponibili nella descrizione dello strumento `skill`. -Ogni voce include il nome della skill e la descrizione: - -```xml - - - git-release - Create consistent releases and changelogs - - -``` - -L'agente carica una skill chiamando lo strumento: - -``` -skill({ name: "git-release" }) -``` - ---- - -## Permessi - -Controlla a quali skill gli agenti possono accedere usando permessi basati su pattern in `opencode.json`: - -```json -{ - "permission": { - "skill": { - "*": "allow", - "pr-review": "allow", - "internal-*": "deny", - "experimental-*": "ask" - } - } -} -``` - -| Permesso | Comportamento | -| -------- | -------------------------------------------- | -| `allow` | La skill viene caricata immediatamente | -| `deny` | Skill nascosta all'agente, accesso negato | -| `ask` | L'utente viene invitato ad approvare il load | - -I pattern supportano wildcard: `internal-*` corrisponde a `internal-docs`, `internal-tools`, ecc. - ---- - -## Sovrascrittura per agente - -Dai ad agenti specifici permessi diversi dai default globali. - -**Per agenti personalizzati** (nel frontmatter dell'agente): - -```yaml ---- -permission: - skill: - "documents-*": "allow" ---- -``` - -**Per agenti integrati** (in `opencode.json`): - -```json -{ - "agent": { - "plan": { - "permission": { - "skill": { - "internal-*": "allow" - } - } - } - } -} -``` - ---- - -## Disabilitare skill - -Disabilita completamente le skill per agenti che non dovrebbero usarle: - -**Per agenti personalizzati**: - -```yaml ---- -tools: - skill: false ---- -``` - -**Per agenti integrati**: - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -Quando e' disabilitato, la sezione `` viene omessa completamente. - ---- - -## Risoluzione problemi - -Se una skill non compare: - -1. Verifica che `SKILL.md` sia scritto in maiuscolo -2. Controlla che il frontmatter includa `name` e `description` -3. Assicurati che i nomi delle skill siano unici in tutte le posizioni -4. Controlla i permessi: le skill con `deny` vengono nascoste agli agenti diff --git a/packages/web/src/content/docs/it/themes.mdx b/packages/web/src/content/docs/it/themes.mdx deleted file mode 100644 index 055e108727..0000000000 --- a/packages/web/src/content/docs/it/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -title: Temi -description: Seleziona un tema integrato o definiscine uno tuo. ---- - -Con OpenCode puoi scegliere tra diversi temi integrati, usare un tema che si adatta al tema del tuo terminale oppure definire un tema personalizzato. - -Per impostazione predefinita, OpenCode usa il tema `opencode`. - ---- - -## Requisiti del terminale - -Per visualizzare correttamente i temi con l'intera palette, il terminale deve supportare **truecolor** (colore a 24 bit). La maggior parte dei terminali moderni lo supporta di default, ma potrebbe essere necessario abilitarlo: - -- **Verifica supporto**: esegui `echo $COLORTERM` - dovrebbe stampare `truecolor` o `24bit` -- **Abilita truecolor**: imposta la variabile d'ambiente `COLORTERM=truecolor` nel profilo della shell -- **Compatibilità del terminale**: assicurati che l'emulatore supporti il colore a 24 bit (la maggior parte dei terminali moderni come iTerm2, Alacritty, Kitty, Windows Terminal e le versioni recenti di GNOME Terminal) - -Senza truecolor, i temi potrebbero apparire con colori meno accurati oppure fare fallback alla migliore approssimazione a 256 colori. - ---- - -## Temi integrati - -OpenCode include diversi temi integrati. - -| Nome | Descrizione | -| ---------------------- | ------------------------------------------------------------------------- | -| `system` | Si adatta al colore di sfondo del terminale | -| `tokyonight` | Basato sul tema [Tokyonight](https://github.com/folke/tokyonight.nvim) | -| `everforest` | Basato sul tema [Everforest](https://github.com/sainnhe/everforest) | -| `ayu` | Basato sul tema scuro [Ayu](https://github.com/ayu-theme) | -| `catppuccin` | Basato sul tema [Catppuccin](https://github.com/catppuccin) | -| `catppuccin-macchiato` | Basato sul tema [Catppuccin](https://github.com/catppuccin) | -| `gruvbox` | Basato sul tema [Gruvbox](https://github.com/morhetz/gruvbox) | -| `kanagawa` | Basato sul tema [Kanagawa](https://github.com/rebelot/kanagawa.nvim) | -| `nord` | Basato sul tema [Nord](https://github.com/nordtheme/nord) | -| `matrix` | Tema verde su nero in stile hacker | -| `one-dark` | Basato sul tema Dark [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) | - -E altri ancora: aggiungiamo costantemente nuovi temi. - ---- - -## Tema di sistema - -Il tema `system` è progettato per adattarsi automaticamente allo schema colori del tuo terminale. A differenza dei temi tradizionali con colori fissi, il tema _system_: - -- **Genera una scala di grigi**: crea una scala di grigi personalizzata in base al colore di sfondo del terminale, garantendo un contrasto ottimale. -- **Usa colori ANSI**: sfrutta i colori ANSI standard (0-15) per evidenziazione della sintassi ed elementi UI, rispettando la palette del terminale. -- **Preserva i default del terminale**: usa `none` per testo e sfondo per mantenere l'aspetto nativo del terminale. - -Il tema di sistema è pensato per chi: - -- Vuole che OpenCode corrisponda all'aspetto del terminale -- Usa schemi colori personalizzati del terminale -- Preferisce un aspetto coerente tra tutte le applicazioni da terminale - ---- - -## Usare un tema - -Puoi selezionare un tema aprendo la selezione temi con il comando `/theme`. In alternativa, puoi specificarlo in `tui.json`. - -```json title="tui.json" {3} -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - ---- - -## Temi personalizzati - -OpenCode supporta un sistema di temi flessibile basato su JSON che permette di creare e personalizzare temi facilmente. - ---- - -### Gerarchia - -I temi vengono caricati da più directory nel seguente ordine, dove le directory successive sovrascrivono le precedenti: - -1. **Temi integrati** - incorporati nel binario -2. **Directory di configurazione utente** - in `~/.config/opencode/themes/*.json` o `$XDG_CONFIG_HOME/opencode/themes/*.json` -3. **Directory root del progetto** - in `/.opencode/themes/*.json` -4. **Directory di lavoro corrente** - in `./.opencode/themes/*.json` - -Se più directory contengono un tema con lo stesso nome, verrà usato il tema della directory con priorità più alta. - ---- - -### Creare un tema - -Per creare un tema personalizzato, crea un file JSON in una delle directory dei temi. - -Per temi a livello utente: - -```bash no-frame -mkdir -p ~/.config/opencode/themes -vim ~/.config/opencode/themes/my-theme.json -``` - -E per temi specifici del progetto. - -```bash no-frame -mkdir -p .opencode/themes -vim .opencode/themes/my-theme.json -``` - ---- - -### Formato JSON - -I temi usano un formato JSON flessibile che supporta: - -- **Colori hex**: `"#ffffff"` -- **Colori ANSI**: `3` (0-255) -- **Riferimenti colore**: `"primary"` o definizioni personalizzate -- **Varianti scuro/chiaro**: `{"dark": "#000", "light": "#fff"}` -- **Nessun colore**: `"none"` - usa il colore predefinito del terminale o trasparente - ---- - -### Definizioni dei colori - -La sezione `defs` è opzionale e ti permette di definire colori riutilizzabili che possono essere referenziati nel tema. - ---- - -### Valori predefiniti del terminale - -Il valore speciale `"none"` può essere usato per qualunque colore per ereditare il colore predefinito del terminale. È particolarmente utile per creare temi che si fondono con lo schema colori del terminale: - -- `"text": "none"` - usa il colore del testo predefinito del terminale -- `"background": "none"` - usa il colore di sfondo predefinito del terminale - ---- - -### Esempio - -Ecco un esempio di tema personalizzato: - -```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" - } - } -} -``` diff --git a/packages/web/src/content/docs/it/tools.mdx b/packages/web/src/content/docs/it/tools.mdx deleted file mode 100644 index e3f2f23ce9..0000000000 --- a/packages/web/src/content/docs/it/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -title: Strumenti -description: Gestisci gli strumenti che un LLM puo' usare. ---- - -Gli strumenti permettono all'LLM di eseguire azioni nel tuo codebase. OpenCode include un set di strumenti integrati, ma puoi estenderlo con [strumenti personalizzati](/docs/custom-tools) o con [server MCP](/docs/mcp-servers). - -Di default, tutti gli strumenti sono **abilitati** e non richiedono permessi per essere eseguiti. Puoi controllare il comportamento degli strumenti tramite i [permessi](/docs/permissions). - ---- - -## Configurazione - -Usa il campo `permission` per controllare il comportamento degli strumenti. Puoi consentire, negare o richiedere approvazione per ciascuno. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny", - "bash": "ask", - "webfetch": "allow" - } -} -``` - -Puoi anche usare wildcard per controllare piu' strumenti insieme. Per esempio, per richiedere approvazione per tutti gli strumenti di un server MCP: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "mymcp_*": "ask" - } -} -``` - -[Scopri di piu'](/docs/permissions) su come configurare i permessi. - ---- - -## Integrati - -Ecco tutti gli strumenti integrati disponibili in OpenCode. - ---- - -### bash - -Esegui comandi di shell nel tuo ambiente di progetto. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "bash": "allow" - } -} -``` - -Questo strumento permette all'LLM di eseguire comandi da terminale come `npm install`, `git status` o qualunque altro comando di shell. - ---- - -### edit - -Modifica file esistenti usando sostituzioni esatte di stringhe. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Questo strumento esegue modifiche precise ai file sostituendo corrispondenze di testo esatte. E' il modo principale con cui l'LLM modifica il codice. - ---- - -### write - -Crea nuovi file o sovrascrive quelli esistenti. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Usalo per consentire all'LLM di creare nuovi file. Sovrascrivera' i file esistenti se sono gia' presenti. - -:::note -Lo strumento `write` e' controllato dal permesso `edit`, che copre tutte le modifiche ai file (`edit`, `write`, `patch`). -::: - ---- - -### read - -Leggi il contenuto dei file dal tuo codebase. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "read": "allow" - } -} -``` - -Questo strumento legge i file e ne restituisce il contenuto. Supporta la lettura di intervalli di righe specifici per file grandi. - ---- - -### grep - -Cerca nel contenuto dei file usando espressioni regolari. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "grep": "allow" - } -} -``` - -Ricerca rapida nel contenuto su tutto il codebase. Supporta la sintassi completa delle regex e il filtro per pattern di file. - ---- - -### glob - -Trova file tramite pattern matching. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "glob": "allow" - } -} -``` - -Cerca file usando pattern glob come `**/*.js` o `src/**/*.ts`. Restituisce i percorsi corrispondenti ordinati per data di modifica. - ---- - -### lsp (experimental) - -Interagisci con i server LSP configurati per ottenere funzionalita' di code intelligence come definizioni, riferimenti, hover info e call hierarchy. - -:::note -Questo strumento e' disponibile solo quando `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (oppure `OPENCODE_EXPERIMENTAL=true`). -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "lsp": "allow" - } -} -``` - -Le operazioni supportate includono `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` e `outgoingCalls`. - -Per configurare quali server LSP sono disponibili per il tuo progetto, vedi [LSP Servers](/docs/lsp). - ---- - -### patch - -Applica patch ai file. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Questo strumento applica file patch al tuo codebase. Utile per applicare diff e patch da varie fonti. - -:::note -Lo strumento `patch` e' controllato dal permesso `edit`, che copre tutte le modifiche ai file (`edit`, `write`, `patch`). -::: - ---- - -### skill - -Carica una [skill](/docs/skills) (un file `SKILL.md`) e ne restituisce il contenuto nella conversazione. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "skill": "allow" - } -} -``` - ---- - -### todowrite - -Gestisci todo list durante le sessioni di coding. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "todowrite": "allow" - } -} -``` - -Crea e aggiorna liste di task per tracciare i progressi durante operazioni complesse. L'LLM lo usa per organizzare attivita' multi-step. - -:::note -Questo strumento e' disabilitato per i subagenti di default, ma puoi abilitarlo manualmente. [Scopri di piu'](/docs/agents/#permissions) -::: - ---- - -### webfetch - -Recupera contenuti dal web. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "webfetch": "allow" - } -} -``` - -Permette all'LLM di recuperare e leggere pagine web. Utile per consultare documentazione o ricercare risorse online. - ---- - -### websearch - -Cerca informazioni sul web. - -:::note -Questo strumento e' disponibile solo quando usi il provider OpenCode o quando la variabile d'ambiente `OPENCODE_ENABLE_EXA` e' impostata a un valore truthy (ad esempio `true` o `1`). - -Per abilitarlo all'avvio di OpenCode: - -```bash -OPENCODE_ENABLE_EXA=1 opencode -``` - -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "websearch": "allow" - } -} -``` - -Esegue ricerche web usando Exa AI per trovare informazioni rilevanti online. Utile per ricercare argomenti, trovare eventi attuali o raccogliere informazioni oltre il cutoff dei dati di addestramento. - -Non e' richiesta alcuna API key: lo strumento si connette direttamente al servizio MCP ospitato da Exa AI senza autenticazione. - -:::tip -Usa `websearch` quando devi trovare informazioni (discovery) e `webfetch` quando devi recuperare contenuti da un URL specifico (retrieval). -::: - ---- - -### question - -Fai domande all'utente durante l'esecuzione. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "question": "allow" - } -} -``` - -Questo strumento permette all'LLM di porre domande all'utente durante un task. E' utile per: - -- Raccogliere preferenze o requisiti dell'utente -- Chiarire istruzioni ambigue -- Ottenere decisioni sulle scelte di implementazione -- Offrire opzioni su che direzione prendere - -Ogni domanda include un header, il testo della domanda e una lista di opzioni. Gli utenti possono selezionare dalle opzioni fornite o digitare una risposta personalizzata. Quando ci sono piu' domande, gli utenti possono navigare tra di esse prima di inviare tutte le risposte. - ---- - -## Strumenti personalizzati - -Gli strumenti personalizzati ti permettono di definire funzioni che l'LLM puo' chiamare. Sono definiti nel tuo file di configurazione e possono eseguire codice arbitrario. - -[Scopri di piu'](/docs/custom-tools) su come creare strumenti personalizzati. - ---- - -## Server MCP - -I server MCP (Model Context Protocol) permettono di integrare strumenti e servizi esterni. Questo include accesso a database, integrazioni API e servizi di terze parti. - -[Scopri di piu'](/docs/mcp-servers) su come configurare i server MCP. - ---- - -## Interni - -Internamente, strumenti come `grep` e `glob` usano [ripgrep](https://github.com/BurntSushi/ripgrep) sotto al cofano. Di default, ripgrep rispetta i pattern di `.gitignore`, quindi i file e le directory elencati in `.gitignore` vengono esclusi da ricerche ed elenchi. - ---- - -### Pattern di ignore - -Per includere file che normalmente verrebbero ignorati, crea un file `.ignore` nella root del progetto. Questo file puo' consentire esplicitamente certi path. - -```text title=".ignore" -!node_modules/ -!dist/ -!build/ -``` - -Per esempio, questo file `.ignore` permette a ripgrep di cercare dentro `node_modules/`, `dist/` e `build/` anche se sono elencate in `.gitignore`. diff --git a/packages/web/src/content/docs/it/troubleshooting.mdx b/packages/web/src/content/docs/it/troubleshooting.mdx deleted file mode 100644 index 7c168979da..0000000000 --- a/packages/web/src/content/docs/it/troubleshooting.mdx +++ /dev/null @@ -1,299 +0,0 @@ ---- -title: Risoluzione dei problemi -description: Problemi comuni e come risolverli. ---- - -Per diagnosticare problemi con OpenCode, inizia controllando i log e i dati locali che salva su disco. - ---- - -## Log - -I file di log vengono scritti in: - -- **macOS/Linux**: `~/.local/share/opencode/log/` -- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.local\share\opencode\log` - -I file di log hanno nomi con timestamp (ad es. `2025-01-09T123456.log`) e vengono conservati i 10 file di log piu recenti. - -Puoi impostare il livello di log con l'opzione a riga di comando `--log-level` per ottenere informazioni di debug piu dettagliate. Per esempio: `opencode --log-level DEBUG`. - ---- - -## Archiviazione - -opencode salva i dati delle sessioni e altri dati dell'applicazione su disco in: - -- **macOS/Linux**: `~/.local/share/opencode/` -- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.local\share\opencode` - -Questa directory contiene: - -- `auth.json` - dati di autenticazione come chiavi API, token OAuth -- `log/` - log dell'applicazione -- `project/` - dati specifici del progetto come dati di sessione e messaggi - - Se il progetto e dentro un repository Git, viene salvato in `.//storage/` - - Se non e un repository Git, viene salvato in `./global/storage/` - ---- - -## App desktop - -OpenCode Desktop esegue in background un server locale di OpenCode (il sidecar `opencode-cli`). La maggior parte dei problemi e causata da un plugin che si comporta male, da una cache corrotta o da un'impostazione del server errata. - -### Controlli rapidi - -- Chiudi completamente l'app e riaprila. -- Se l'app mostra una schermata di errore, fai clic su **Restart** e copia i dettagli dell'errore. -- Solo macOS: menu `OpenCode` -> **Reload Webview** (utile se l'interfaccia e vuota o bloccata). - ---- - -### Disabilita i plugin - -Se l'app desktop va in crash all'avvio, si blocca o si comporta in modo strano, inizia disabilitando i plugin. - -#### Controlla la configurazione globale - -Apri il tuo file di configurazione globale e cerca la chiave `plugin`. - -- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (o `~/.config/opencode/opencode.json`) -- **macOS/Linux** (installazioni vecchie): `~/.local/share/opencode/opencode.jsonc` -- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.config\opencode\opencode.jsonc` - -Se hai plugin configurati, disabilitali temporaneamente rimuovendo la chiave o impostandola a un array vuoto: - -```jsonc -{ - "$schema": "https://opencode.ai/config.json", - "plugin": [], -} -``` - -#### Controlla le directory dei plugin - -OpenCode puo anche caricare plugin locali dal disco. Spostali temporaneamente altrove (o rinomina la cartella) e riavvia l'app desktop: - -- **Plugin globali** - - **macOS/Linux**: `~/.config/opencode/plugins/` -- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.config\opencode\plugins` -- **Plugin del progetto** (solo se usi una configurazione per progetto) - - `/.opencode/plugins/` - -Se l'app ricomincia a funzionare, riabilita i plugin uno alla volta per capire quale stia causando il problema. - ---- - -### Svuota la cache - -Se disabilitare i plugin non aiuta (o l'installazione di un plugin e bloccata), svuota la cache in modo che OpenCode possa ricostruirla. - -1. Chiudi completamente OpenCode Desktop. -2. Elimina la directory della cache: - -- **macOS**: Finder -> `Cmd+Shift+G` -> paste `~/.cache/opencode` -- **Linux**: elimina `~/.cache/opencode` (oppure esegui `rm -rf ~/.cache/opencode`) -- **Windows**: premi `WIN+R` e incolla `%USERPROFILE%\.cache\opencode` - -3. Riavvia OpenCode Desktop. - ---- - -### Risolvi problemi di connessione al server - -OpenCode Desktop puo avviare il proprio server locale (predefinito) oppure connettersi a un URL server che hai configurato. - -Se vedi una finestra **"Connection Failed"** (o l'app non supera mai la schermata di avvio), controlla se hai impostato un URL server personalizzato. - -#### Cancella l'URL del server predefinito dell'app desktop - -Dalla schermata Home, fai clic sul nome del server (con il pallino di stato) per aprire il selettore dei server. Nella sezione **Default server**, fai clic su **Clear**. - -#### Rimuovi `server.port` / `server.hostname` dalla tua configurazione - -Se il tuo `opencode.json(c)` contiene una sezione `server`, rimuovila temporaneamente e riavvia l'app desktop. - -#### Controlla le variabili d'ambiente - -Se hai `OPENCODE_PORT` impostato nell'ambiente, l'app desktop provera a usare quella porta per il server locale. - -- Rimuovi `OPENCODE_PORT` (o scegli una porta libera) e riavvia. - ---- - -### Linux: problemi Wayland / X11 - -Su Linux, alcune configurazioni Wayland possono causare finestre vuote o errori del compositor. - -- Se sei su Wayland e l'app e vuota o va in crash, prova ad avviarla con `OC_ALLOW_WAYLAND=1`. -- Se peggiora la situazione, rimuovilo e prova invece ad avviare sotto una sessione X11. - ---- - -### Windows: runtime WebView2 - -Su Windows, OpenCode Desktop richiede **WebView2 Runtime** di Microsoft Edge. Se l'app si apre su una finestra vuota o non parte, installa/aggiorna WebView2 e riprova. - ---- - -### Windows: problemi generali di prestazioni - -Se riscontri prestazioni lente, problemi di accesso ai file o problemi del terminale su Windows, prova a usare [WSL (Windows Subsystem for Linux)](/docs/windows-wsl). WSL fornisce un ambiente Linux che funziona in modo piu fluido con le funzionalita di OpenCode. - ---- - -### Notifiche non visualizzate - -OpenCode Desktop mostra le notifiche di sistema solo quando: - -- le notifiche sono abilitate per OpenCode nelle impostazioni del sistema operativo, e -- la finestra dell'app non e in primo piano. - ---- - -### Reimposta lo stato dell'app desktop (ultima risorsa) - -Se l'app non si avvia e non riesci a ripulire le impostazioni dall'interfaccia, reimposta lo stato salvato dell'app desktop. - -1. Chiudi OpenCode Desktop. -2. Trova ed elimina questi file (si trovano nella directory dati dell'app OpenCode Desktop): - -- `opencode.settings.dat` (desktop default server URL) -- `opencode.global.dat` e `opencode.workspace.*.dat` (stato dell'interfaccia come server/progetti recenti) - -Per trovare rapidamente la directory: - -- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (poi cerca i nomi file qui sopra) -- **Linux**: cerca sotto `~/.local/share` i nomi file qui sopra -- **Windows**: premi `WIN+R` -> `%APPDATA%` (poi cerca i nomi file qui sopra) - ---- - -## Ottenere aiuto - -Se riscontri problemi con OpenCode: - -1. **Segnala i problemi su GitHub** - - Il modo migliore per segnalare bug o richiedere funzionalita e tramite il nostro repository GitHub: - - [**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues) - - Prima di creare una nuova issue, cerca tra quelle esistenti per vedere se il problema e gia stato segnalato. - -2. **Unisciti al nostro Discord** - - Per supporto in tempo reale e discussioni con la community, unisciti al nostro server Discord: - - [**opencode.ai/discord**](https://opencode.ai/discord) - ---- - -## Problemi comuni - -Ecco alcuni problemi comuni e come risolverli. - ---- - -### OpenCode non si avvia - -1. Controlla i log per eventuali messaggi di errore -2. Prova a eseguire con `--print-logs` per vedere l'output nel terminale -3. Assicurati di avere l'ultima versione con `opencode upgrade` - ---- - -### Problemi di autenticazione - -1. Prova a riautenticarti con il comando `/connect` nella TUI -2. Controlla che le chiavi API siano valide -3. Assicurati che la rete permetta connessioni all'API del provider - ---- - -### Modello non disponibile - -1. Controlla di esserti autenticato con il provider -2. Verifica che il nome del modello nella configurazione sia corretto -3. Alcuni modelli potrebbero richiedere accessi o abbonamenti specifici - -Se incontri `ProviderModelNotFoundError`, probabilmente stai facendo riferimento a un modello in modo errato da qualche parte. -I modelli vanno indicati in questo formato: `/` - -Esempi: - -- `openai/gpt-4.1` -- `openrouter/google/gemini-2.5-flash` -- `opencode/kimi-k2` - -Per capire a quali modelli hai accesso, esegui `opencode models` - ---- - -### ProviderInitError - -Se incontri un ProviderInitError, probabilmente la tua configurazione e invalida o corrotta. - -Per risolvere: - -1. Per prima cosa, verifica che il provider sia configurato correttamente seguendo la [guida ai provider](/docs/providers) -2. Se il problema persiste, prova a cancellare la configurazione salvata: - - ```bash - rm -rf ~/.local/share/opencode - ``` - - Su Windows, premi `WIN+R` ed elimina: `%USERPROFILE%\.local\share\opencode` - -3. Riautenticati con il provider usando il comando `/connect` nella TUI. - ---- - -### AI_APICallError e problemi dei pacchetti provider - -Se incontri errori nelle chiamate API, potrebbe dipendere da pacchetti provider non aggiornati. opencode installa dinamicamente i pacchetti provider (OpenAI, Anthropic, Google, ecc.) quando servono e li mette in cache localmente. - -Per risolvere problemi coi pacchetti provider: - -1. Svuota la cache dei pacchetti provider: - - ```bash - rm -rf ~/.cache/opencode - ``` - - Su Windows, premi `WIN+R` ed elimina: `%USERPROFILE%\.cache\opencode` - -2. Riavvia opencode per reinstallare i pacchetti provider piu recenti - -Questo forzera opencode a scaricare le versioni piu recenti dei pacchetti provider, cosa che spesso risolve problemi di compatibilita con parametri dei modelli e cambiamenti delle API. - ---- - -### Copia/incolla non funziona su Linux - -Su Linux e necessario avere installata una delle seguenti utility per gli appunti affinche copia/incolla funzioni: - -**Per sistemi X11:** - -```bash -apt install -y xclip -# or -apt install -y xsel -``` - -**Per sistemi Wayland:** - -```bash -apt install -y wl-clipboard -``` - -**Per ambienti headless:** - -```bash -apt install -y xvfb -# and run: -Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & -export DISPLAY=:99.0 -``` - -opencode rilevera se stai usando Wayland e preferira `wl-clipboard`; altrimenti provera a trovare gli strumenti per gli appunti nell'ordine: `xclip` e `xsel`. diff --git a/packages/web/src/content/docs/it/tui.mdx b/packages/web/src/content/docs/it/tui.mdx deleted file mode 100644 index 93ef1a86d5..0000000000 --- a/packages/web/src/content/docs/it/tui.mdx +++ /dev/null @@ -1,426 +0,0 @@ ---- -title: TUI -description: Usa l'interfaccia utente da terminale (TUI) di OpenCode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode fornisce un'interfaccia interattiva da terminale (TUI) per lavorare sui tuoi progetti con un LLM. - -Eseguire OpenCode avvia la TUI per la directory corrente. - -```bash -opencode -``` - -Oppure puoi avviarla per una specifica working directory. - -```bash -opencode /path/to/project -``` - -Una volta nella TUI, puoi inviare un messaggio come prompt. - -```text -Give me a quick summary of the codebase. -``` - ---- - -## Riferimenti ai file - -Puoi riferirti ai file nei messaggi usando `@`. Questo esegue una ricerca fuzzy dei file nella working directory corrente. - -:::tip -Puoi anche usare `@` per riferirti ai file nei messaggi. -::: - -```text "@packages/functions/src/api/index.ts" -How is auth handled in @packages/functions/src/api/index.ts? -``` - -Il contenuto del file viene aggiunto automaticamente alla conversazione. - ---- - -## Comandi bash - -Inizia un messaggio con `!` per eseguire un comando shell. - -```bash frame="none" -!ls -la -``` - -L'output del comando viene aggiunto alla conversazione come risultato di uno strumento. - ---- - -## Comandi - -Quando usi la TUI di OpenCode, puoi digitare `/` seguito dal nome di un comando per eseguire rapidamente azioni. Per esempio: - -```bash frame="none" -/help -``` - -Molti comandi hanno anche una scorciatoia da tastiera che usa `ctrl+x` come tasto leader (predefinito). [Scopri di più](/docs/keybinds). - -Ecco tutti i comandi slash disponibili: - ---- - -### connetti - -Aggiunge un provider a OpenCode. Ti permette di selezionare tra i provider disponibili e aggiungere le relative chiavi API. - -```bash frame="none" -/connect -``` - ---- - -### compatta - -Compatta la sessione corrente. _Alias_: `/summarize` - -```bash frame="none" -/compact -``` - -**Scorciatoia:** `ctrl+x c` - ---- - -### dettagli - -Attiva/disattiva i dettagli di esecuzione degli strumenti. - -```bash frame="none" -/details -``` - -**Scorciatoia:** `ctrl+x d` - ---- - -### editor - -Apre un editor esterno per comporre messaggi. Usa l'editor impostato nella variabile d'ambiente `EDITOR`. [Scopri di più](#editor-setup). - -```bash frame="none" -/editor -``` - -**Scorciatoia:** `ctrl+x e` - ---- - -### esci - -Esce da OpenCode. _Alias_: `/quit`, `/q` - -```bash frame="none" -/exit -``` - -**Scorciatoia:** `ctrl+x q` - ---- - -### esporta - -Esporta la conversazione corrente in Markdown e la apre nell'editor predefinito. Usa l'editor impostato nella variabile d'ambiente `EDITOR`. [Scopri di più](#editor-setup). - -```bash frame="none" -/export -``` - -**Scorciatoia:** `ctrl+x x` - ---- - -### aiuto - -Mostra la finestra di aiuto. - -```bash frame="none" -/help -``` - -**Scorciatoia:** `ctrl+x h` - ---- - -### inizializza - -Crea o aggiorna il file `AGENTS.md`. [Scopri di più](/docs/rules). - -```bash frame="none" -/init -``` - -**Scorciatoia:** `ctrl+x i` - ---- - -### modelli - -Elenca i modelli disponibili. - -```bash frame="none" -/models -``` - -**Scorciatoia:** `ctrl+x m` - ---- - -### nuovo - -Avvia una nuova sessione. _Alias_: `/clear` - -```bash frame="none" -/new -``` - -**Scorciatoia:** `ctrl+x n` - ---- - -### rifai - -Rifai un messaggio precedentemente annullato. Disponibile solo dopo aver usato `/undo`. - -:::tip -Vengono ripristinate anche eventuali modifiche ai file. -::: - -Internamente usa Git per gestire le modifiche ai file. Quindi il progetto **deve essere un repository Git**. - -```bash frame="none" -/redo -``` - -**Scorciatoia:** `ctrl+x r` - ---- - -### sessioni - -Elenca e passa tra le sessioni. _Alias_: `/resume`, `/continue` - -```bash frame="none" -/sessions -``` - -**Scorciatoia:** `ctrl+x l` - ---- - -### condividi - -Condivide la sessione corrente. [Scopri di più](/docs/share). - -```bash frame="none" -/share -``` - -**Scorciatoia:** `ctrl+x s` - ---- - -### temi - -Elenca i temi disponibili. - -```bash frame="none" -/themes -``` - -**Scorciatoia:** `ctrl+x t` - ---- - -### ragionamento - -Attiva/disattiva la visibilità dei blocchi thinking/reasoning nella conversazione. Quando abilitato, puoi vedere il ragionamento del modello per i modelli che supportano extended thinking. - -:::note -Questo comando controlla solo se i blocchi di thinking vengono **mostrati**: non abilita o disabilita le capacità di ragionamento del modello. Per cambiare le capacità di ragionamento effettive, usa `ctrl+t` per ciclare tra le varianti del modello. -::: - -```bash frame="none" -/thinking -``` - ---- - -### annulla - -Annulla l'ultimo messaggio nella conversazione. Rimuove l'ultimo messaggio utente, tutte le risposte successive e qualsiasi modifica ai file. - -:::tip -Vengono annullate anche eventuali modifiche ai file. -::: - -Internamente usa Git per gestire le modifiche ai file. Quindi il progetto **deve essere un repository Git**. - -```bash frame="none" -/undo -``` - -**Scorciatoia:** `ctrl+x u` - ---- - -### annulla condivisione - -Annulla la condivisione della sessione corrente. [Scopri di più](/docs/share#un-sharing). - -```bash frame="none" -/unshare -``` - ---- - -## Configurazione dell'editor - -Sia `/editor` sia `/export` usano l'editor specificato nella variabile d'ambiente `EDITOR`. - - - - ```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" - ``` - - Per renderlo permanente, aggiungilo al profilo della shell; - `~/.bashrc`, `~/.zshrc`, ecc. - - - - - ```bash - set EDITOR=notepad - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - set EDITOR=code --wait - ``` - - Per renderlo permanente, usa **System Properties** > **Environment Variables**. - - - - - ```powershell - $env:EDITOR = "notepad" - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - $env:EDITOR = "code --wait" - ``` - - Per renderlo permanente, aggiungilo al profilo PowerShell. - - - - -Opzioni comuni per l'editor includono: - -- `code` - Visual Studio Code -- `cursor` - Cursor -- `windsurf` - Windsurf -- `nvim` - Neovim editor -- `vim` - Vim editor -- `nano` - Nano editor -- `notepad` - Windows Notepad -- `subl` - Sublime Text - -:::note -Alcuni editor come VS Code devono essere avviati con il flag `--wait`. -::: - -Alcuni editor richiedono argomenti da riga di comando per funzionare in modalità bloccante. Il flag `--wait` fa sì che il processo dell'editor resti in attesa finché non viene chiuso. - ---- - -## Configurazione - -Puoi personalizzare il comportamento della TUI tramite `tui.json` (o `tui.jsonc`). - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -Questo è separato da `opencode.json`, che configura il comportamento di server/runtime. - -`keybinds` viene unito ai valori predefiniti integrati, quindi devi configurare solo le scorciatoie che vuoi modificare. - -### Opzioni - -- `theme` - Imposta il tema della UI. [Scopri di più](/docs/themes). -- `keybinds` - Personalizza le scorciatoie da tastiera. [Scopri di più](/docs/keybinds). -- `leader_timeout` - Controlla per quanto tempo OpenCode attende dopo il leader key. Default: `2000`. -- `scroll_acceleration.enabled` - Abilita l'accelerazione di scroll in stile macOS per uno scorrimento fluido e naturale. Quando abilitata, la velocità aumenta con gesture rapide e resta precisa con movimenti lenti. **Questa impostazione ha precedenza su `scroll_speed` e lo sovrascrive quando attiva.** -- `scroll_speed` - Controlla la velocità di scorrimento della TUI quando usi i comandi di scroll (minimo: `0.001`, supporta valori decimali). Default: `3`. **Nota: viene ignorata se `scroll_acceleration.enabled` è impostato a `true`.** -- `diff_style` - Controlla il rendering delle diff. `"auto"` si adatta alla larghezza del terminale, `"stacked"` mostra sempre un layout a colonna singola. -- `mouse` - Abilita o disabilita la cattura del mouse nella TUI (default: `true`). Quando è disabilitata, il comportamento nativo del terminale per selezione e scorrimento con il mouse viene preservato. -- `attention` - Configura notifiche desktop e suoni della TUI. Disabilitato per impostazione predefinita. - -Usa `OPENCODE_TUI_CONFIG` per caricare un path di configurazione TUI personalizzato. - -### Attention - -Attention permette alla TUI di avvisarti quando OpenCode aspetta una risposta, richiede l'approvazione di un permesso, incontra un errore di sessione o completa una sessione. Abilitala con `attention.enabled`; gli eventi integrati riproducono un suono quando si verificano. Le notifiche desktop vengono inviate solo quando la finestra del terminale non è in primo piano e non vengono usate per gli eventi subagent. - -- `enabled` - Abilita tutte le notifiche e i suoni di Attention. Default: `false`. -- `notifications` - Quando Attention è abilitato, consente alla TUI di inviare notifiche desktop tramite il terminale. Default: `true`. -- `sound` - Quando Attention è abilitato, consente di riprodurre suoni di avviso. Default: `true`. -- `volume` - Volume predefinito dei suoni, da `0` a `1`. Default: `0.4`. -- `sound_pack` - ID del sound pack da usare. Default: `opencode.default`. -- `sounds` - Imposta file audio personalizzati per `default`, `question`, `permission`, `error`, `done` o `subagent_done`. I percorsi possono essere assoluti, URL `file://` o relativi a `tui.json`. - ---- - -## Personalizzazione - -Puoi personalizzare vari aspetti della vista TUI usando la palette dei comandi (`ctrl+x h` o `/help`). Queste impostazioni persistono tra i riavvii. - ---- - -#### Visualizzazione nome utente - -Attiva/disattiva se lo username appare nei messaggi della chat. Puoi farlo da: - -- Palette comandi: cerca "username" o "hide username" -- L'impostazione viene salvata automaticamente e ricordata tra le sessioni TUI diff --git a/packages/web/src/content/docs/it/web.mdx b/packages/web/src/content/docs/it/web.mdx deleted file mode 100644 index 2ec48e8e93..0000000000 --- a/packages/web/src/content/docs/it/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Web -description: Usa OpenCode nel browser. ---- - -OpenCode puo funzionare come applicazione web nel browser, offrendo la stessa potente esperienza di coding AI senza bisogno di un terminale. - -![OpenCode Web - Nuova sessione](../../../assets/web/web-homepage-new-session.png) - -## Per iniziare - -Avvia l'interfaccia web eseguendo: - -```bash -opencode web -``` - -Questo avvia un server locale su `127.0.0.1` con una porta disponibile scelta a caso e apre automaticamente OpenCode nel browser predefinito. - -:::caution -Se `OPENCODE_SERVER_PASSWORD` non e impostata, il server non sara protetto. Va bene per l'uso locale, ma va impostata per l'accesso in rete. -::: - -:::tip[Utenti Windows] -Per la migliore esperienza, esegui `opencode web` da [WSL](/docs/windows-wsl) invece che da PowerShell. Questo garantisce accesso corretto al file system e integrazione col terminale. -::: - ---- - -## Configurazione - -Puoi configurare il server web con i flag della riga di comando o nel tuo [file di config](/docs/config). - -### Porta - -Per impostazione predefinita, OpenCode sceglie una porta disponibile. Puoi specificare una porta: - -```bash -opencode web --port 4096 -``` - -### Nome host - -Per impostazione predefinita, il server si lega a `127.0.0.1` (solo localhost). Per rendere OpenCode accessibile sulla rete: - -```bash -opencode web --hostname 0.0.0.0 -``` - -Usando `0.0.0.0`, OpenCode mostrera sia l'indirizzo locale sia quello di rete: - -``` - Local access: http://localhost:4096 - Network access: http://192.168.1.100:4096 -``` - -### Scoperta mDNS - -Abilita mDNS per rendere il server individuabile sulla rete locale: - -```bash -opencode web --mdns -``` - -Questo imposta automaticamente l'hostname a `0.0.0.0` e pubblicizza il server come `opencode.local`. - -Puoi personalizzare il nome di dominio mDNS per eseguire piu istanze sulla stessa rete: - -```bash -opencode web --mdns --mdns-domain myproject.local -``` - -### CORS - -Per consentire domini aggiuntivi per CORS (utile per frontend personalizzati): - -```bash -opencode web --cors https://example.com -``` - -### Autenticazione - -Per proteggere l'accesso, imposta una password usando la variabile d'ambiente `OPENCODE_SERVER_PASSWORD`: - -```bash -OPENCODE_SERVER_PASSWORD=secret opencode web -``` - -Lo username predefinito e `opencode`, ma puo essere cambiato con `OPENCODE_SERVER_USERNAME`. - ---- - -## Usa l'interfaccia web - -Una volta avviata, l'interfaccia web ti da accesso alle tue sessioni OpenCode. - -### Sessioni - -Visualizza e gestisci le sessioni dalla homepage. Puoi vedere le sessioni attive e avviarne di nuove. - -![OpenCode Web - Sessione attiva](../../../assets/web/web-homepage-active-session.png) - -### Stato del server - -Fai clic su "See Servers" per vedere i server connessi e il loro stato. - -![OpenCode Web - See Servers](../../../assets/web/web-homepage-see-servers.png) - ---- - -## Collegare un terminale - -Puoi collegare una TUI da terminale a un server web gia in esecuzione: - -```bash -# Avvia il web server -opencode web --port 4096 - -# In un altro terminale, collega la TUI -opencode attach http://localhost:4096 -``` - -Questo ti permette di usare contemporaneamente interfaccia web e terminale, condividendo le stesse sessioni e lo stesso stato. - ---- - -## File di configurazione - -Puoi anche configurare le impostazioni del server nel file di config `opencode.json`: - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -I flag della riga di comando hanno precedenza sulle impostazioni del file di config. diff --git a/packages/web/src/content/docs/it/windows-wsl.mdx b/packages/web/src/content/docs/it/windows-wsl.mdx deleted file mode 100644 index a1a7aa4efc..0000000000 --- a/packages/web/src/content/docs/it/windows-wsl.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Windows (WSL) -description: Esegui OpenCode su Windows con WSL per la migliore esperienza. ---- - -import { Steps } from "@astrojs/starlight/components" - -Anche se OpenCode puo essere eseguito direttamente su Windows, consigliamo di usare [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) per la migliore esperienza. WSL fornisce un ambiente Linux che funziona in modo ottimale con le funzionalita di OpenCode. - -:::tip[Perche WSL?] -WSL offre prestazioni migliori del file system, supporto completo del terminale e compatibilita con gli strumenti di sviluppo su cui OpenCode fa affidamento. -::: - ---- - -## Configurazione - - - -1. **Installa WSL** - - Se non l'hai ancora fatto, [installa WSL](https://learn.microsoft.com/en-us/windows/wsl/install) seguendo la guida ufficiale Microsoft. - -2. **Installa OpenCode in WSL** - - Dopo aver configurato WSL, apri il terminale WSL e installa OpenCode usando uno dei [metodi di installazione](/docs/). - - ```bash - curl -fsSL https://opencode.ai/install | bash - ``` - -3. **Usa OpenCode da WSL** - - Vai nella directory del progetto (accedi ai file Windows tramite `/mnt/c/`, `/mnt/d/`, ecc.) ed esegui OpenCode. - - ```bash - cd /mnt/c/Users/YourName/project - opencode - ``` - - - ---- - -## App desktop + server WSL - -Se preferisci usare l'app desktop di OpenCode ma vuoi eseguire il server in WSL: - -1. **Avvia il server in WSL** con `--hostname 0.0.0.0` per consentire connessioni esterne: - - ```bash - opencode serve --hostname 0.0.0.0 --port 4096 - ``` - -2. **Collega l'app desktop** a `http://localhost:4096` - -:::note -Se `localhost` non funziona nella tua configurazione, usa l'indirizzo IP di WSL (da WSL: `hostname -I`) e collega `http://:4096`. -::: - -:::caution -Quando usi `--hostname 0.0.0.0`, imposta `OPENCODE_SERVER_PASSWORD` per proteggere il server. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0 -``` - -::: - ---- - -## Client web + WSL - -Per la migliore esperienza web su Windows: - -1. **Esegui `opencode web` nel terminale WSL** invece che in PowerShell: - - ```bash - opencode web --hostname 0.0.0.0 - ``` - -2. **Accedi dal browser Windows** su `http://localhost:` (OpenCode stampa l'URL) - -Eseguire `opencode web` da WSL garantisce accesso corretto al file system e integrazione del terminale, restando comunque accessibile dal browser Windows. - ---- - -## Accesso ai file Windows - -WSL puo accedere a tutti i file Windows tramite la directory `/mnt/`: - -- Unita `C:` → `/mnt/c/` -- Unita `D:` → `/mnt/d/` -- E cosi via... - -Esempio: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -Per un'esperienza piu fluida, valuta di clonare o copiare il repository nel file system di WSL (per esempio in `~/code/`) ed eseguire OpenCode li. -::: - ---- - -## Suggerimenti - -- Tieni OpenCode in esecuzione su WSL per i progetti salvati su unita Windows: l'accesso ai file e immediato -- Usa l'[estensione WSL di VS Code](https://code.visualstudio.com/docs/remote/wsl) insieme a OpenCode per un flusso di lavoro integrato -- Configurazione e sessioni di OpenCode sono salvate nell'ambiente WSL in `~/.local/share/opencode/` diff --git a/packages/web/src/content/docs/it/zen.mdx b/packages/web/src/content/docs/it/zen.mdx deleted file mode 100644 index 77f019d43a..0000000000 --- a/packages/web/src/content/docs/it/zen.mdx +++ /dev/null @@ -1,319 +0,0 @@ ---- -title: Zen -description: Lista curata di modelli fornita da OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen è un elenco di modelli testati e verificati forniti dal team di OpenCode. - -Zen funziona come qualsiasi altro provider in OpenCode. Accedi a OpenCode Zen e ottieni -la tua chiave API. È **completamente opzionale** e non ti serve usarlo per usare -OpenCode. - ---- - -## Contesto - -Esiste un gran numero di modelli, ma solo pochi di -questi modelli funzionano bene come agenti di coding. Inoltre, la maggior parte dei provider è -configurata in modo molto diverso; quindi ottieni prestazioni e qualità molto diverse. - -:::tip -Abbiamo testato un gruppo selezionato di modelli e provider che funzionano bene con OpenCode. -::: - -Quindi, se usi un modello tramite qualcosa come OpenRouter, non puoi mai essere -sicuro di ottenere la migliore versione del modello che vuoi. - -Per risolvere questo problema, abbiamo fatto un paio di cose: - -1. Abbiamo testato un gruppo selezionato di modelli e parlato con i loro team di come - farli funzionare al meglio. -2. Poi abbiamo collaborato con alcuni provider per assicurarci che fossero serviti - correttamente. -3. Infine, abbiamo fatto benchmark della combinazione modello/provider e creato - un elenco che ci sentiamo di raccomandare. - -OpenCode Zen è un gateway AI che ti dà accesso a questi modelli. - ---- - -## Come funziona - -OpenCode Zen funziona come qualsiasi altro provider in OpenCode. - -1. Accedi a **OpenCode Zen**, aggiungi i dettagli di fatturazione, - e copia la tua chiave API. -2. Esegui il comando `/connect` nella TUI, seleziona OpenCode Zen, e incolla la tua chiave API. -3. Esegui `/models` nella TUI per vedere l'elenco dei modelli che raccomandiamo. - -Ti viene addebitato ogni richiesta e puoi aggiungere credito al tuo account. - ---- - -## Endpoint - -Puoi anche accedere ai nostri modelli tramite i seguenti endpoint API. - -| Modello | Model ID | Endpoint | Pacchetto 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -Il [model id](/docs/config/#models) nella config di OpenCode -usa il formato `opencode/`. Per esempio, per GPT 5.5, useresti -`opencode/gpt-5.5` nella tua config. - ---- - -### Modelli - -Puoi recuperare l'elenco completo dei modelli disponibili e i relativi metadati da: - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## Prezzi - -Supportiamo un modello pay-as-you-go. Qui sotto trovi i prezzi **per 1M token**. - -| Modello | Input | Output | Cached Read | Cached Write | -| --------------------------------- | ------ | ------- | ----------- | ------------ | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -Potresti notare _Claude Haiku 3.5_ nella cronologia di utilizzo. È un [modello a basso costo](/docs/config/#models) usato per generare i titoli delle tue sessioni. - -:::note -Le commissioni della carta di credito vengono trasferite al costo (4.4% + $0.30 per transazione); non addebitiamo nulla oltre a questo. -::: - -I modelli gratuiti: - -- DeepSeek V4 Flash Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. -- MiMo-V2.5 Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. -- North Mini Code Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. -- Nemotron 3 Ultra Free è disponibile su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. -- Big Pickle è un modello stealth che è gratuito su OpenCode per un periodo limitato. Il team usa questo periodo per raccogliere feedback e migliorare il modello. - -Contattaci se hai domande. - ---- - -### Ricarica automatica - -Se il tuo saldo scende sotto $5, Zen ricarica automaticamente $20. - -Puoi modificare l'importo della ricarica automatica. Puoi anche disabilitare completamente la ricarica automatica. - ---- - -### Limiti mensili - -Puoi anche impostare un limite di utilizzo mensile per l'intero workspace e per ogni -membro del tuo team. - -Per esempio, supponiamo che tu imposti un limite di utilizzo mensile di $20, Zen non userà -più di $20 in un mese. Ma se hai la ricarica automatica abilitata, Zen potrebbe finire -per addebitarti più di $20 se il tuo saldo scende sotto $5. - ---- - -### Modelli deprecati - -| Modello | Data di deprecazione | -| ------------------ | -------------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## Privacy - -Tutti i nostri modelli sono ospitati negli US. I nostri provider seguono una policy di zero-retention e non usano i tuoi dati per l'addestramento dei modelli, con le seguenti eccezioni: - -- Big Pickle: durante il periodo gratuito, i dati raccolti possono essere usati per migliorare il modello. -- DeepSeek V4 Flash Free: durante il periodo gratuito, i dati raccolti possono essere usati per migliorare il modello. -- MiMo-V2.5 Free: durante il periodo gratuito, i dati raccolti possono essere usati per migliorare il modello. -- North Mini Code Free: Durante il periodo gratuito, i dati raccolti possono essere conservati e utilizzati per migliorare il modello. Non inviare dati personali o riservati. Consulta i nostri [Termini di utilizzo](https://cohere.com/terms-of-use) e la nostra [Informativa sulla privacy](https://cohere.com/privacy). -- Nemotron 3 Ultra Free (endpoint NVIDIA gratuiti): solo per uso di prova — non inviare dati personali o riservati. Il tuo utilizzo viene registrato per finalità di sicurezza e per migliorare i prodotti e i servizi di NVIDIA. I dati di sessione registrati a fini di miglioramento non sono collegati alla tua identità né ad alcun identificatore persistente. Per maggiori informazioni sulle nostre pratiche di trattamento dei dati, consulta la nostra [Informativa sulla privacy](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Interagendo con questo endpoint, acconsenti alla nostra raccolta, registrazione e utilizzo di tali informazioni e ai [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). -- OpenAI APIs: le richieste vengono conservate per 30 giorni in conformità con [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). -- Anthropic APIs: le richieste vengono conservate per 30 giorni in conformità con [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). - ---- - -## Per i team - -Zen funziona benissimo anche per i team. Puoi invitare compagni di squadra, assegnare ruoli, curare -i modelli che il tuo team usa, e altro ancora. - -:::note -I workspace sono attualmente gratuiti per i team come parte della beta. -::: - -La gestione del tuo workspace è attualmente gratuita per i team come parte della beta. Condivideremo presto -più dettagli sui prezzi. - ---- - -### Ruoli - -Puoi invitare compagni di squadra nel tuo workspace e assegnare ruoli: - -- **Admin**: Gestisce modelli, membri, chiavi API, e fatturazione -- **Member**: Gestisce solo le proprie chiavi API - -Gli admin possono anche impostare limiti di spesa mensili per ogni membro per tenere i costi sotto controllo. - ---- - -### Accesso ai modelli - -Gli admin possono abilitare o disabilitare modelli specifici per il workspace. Le richieste fatte a un modello disabilitato restituiranno un errore. - -Questo è utile nei casi in cui vuoi disabilitare l'uso di un modello che -raccoglie dati. - ---- - -### Porta la tua chiave - -Puoi usare le tue chiavi API OpenAI o Anthropic continuando ad accedere agli altri modelli in Zen. - -Quando usi le tue chiavi, i token vengono fatturati direttamente dal provider, non da Zen. - -Per esempio, la tua organizzazione potrebbe avere già una chiave per OpenAI o Anthropic -e vuoi usare quella invece di quella fornita da Zen. - ---- - -## Obiettivi - -Abbiamo creato OpenCode Zen per: - -1. Fare **benchmark** dei migliori modelli/provider per agenti di coding. -2. Avere accesso alle opzioni di **massima qualità** e non degradare le prestazioni né instradare verso provider più economici. -3. Trasferire eventuali **riduzioni di prezzo** vendendo al costo; quindi l'unico markup serve a coprire le nostre commissioni di elaborazione. -4. Non avere **lock-in** permettendoti di usarlo con qualsiasi altro agente di coding. E permettendoti sempre di usare anche qualsiasi altro provider con OpenCode. diff --git a/packages/web/src/content/docs/ja/acp.mdx b/packages/web/src/content/docs/ja/acp.mdx deleted file mode 100644 index f7b995bf39..0000000000 --- a/packages/web/src/content/docs/ja/acp.mdx +++ /dev/null @@ -1,155 +0,0 @@ ---- -title: ACP サポート -description: ACP 互換エディターで OpenCode を使用します。 ---- - -OpenCode は [Agent Client Protocol](https://agentclientprotocol.com) または (ACP) をサポートしているため、互換性のあるエディターや IDE で直接使用できます。 - -:::tip -ACP をサポートするエディターとツールのリストについては、[ACP progress report](https://zed.dev/blog/acp-progress-report#available-now) を参照してください。 -::: -ACP は、コードエディターと AI コーディングエージェント間の通信を標準化するオープンプロトコルです。 - ---- - -## 設定 - -ACP 経由で OpenCode を使用するには、`opencode acp` コマンドを実行するようにエディタを設定します。 - -このコマンドは、stdio 経由で JSON-RPC 経由でエディターと通信する ACP 互換のサブプロセスとして OpenCode を開始します。 - -以下は、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` アクションを使用します。 - -`keymap.json` を編集してキーボードショートカットをバインドすることもできます。 - -```json title="keymap.json" -[ - { - "bindings": { - "cmd-alt-o": [ - "agent::NewExternalAgentThread", - { - "agent": { - "custom": { - "name": "OpenCode", - "command": { - "command": "opencode", - "args": ["acp"] - } - } - } - } - ] - } - } -] -``` - ---- - -### JetBrains IDE - -[documentation](https://www.jetbrains.com/help/ai-assistant/acp.html) に従って、[JetBrains IDE](https://www.jetbrains.com/) acp.json に追加します: - -```json title="acp.json" -{ - "agent_servers": { - "OpenCode": { - "command": "/absolute/path/bin/opencode", - "args": ["acp"] - } - } -} -``` - -これを開くには、AI Chat エージェントセレクターで新しい「OpenCode」エージェントを使用します。 - ---- - -### 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 - -[CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim) で OpenCode を ACP エージェントとして使用するには、以下を Neovim 構成に追加します。 - -```lua -require("codecompanion").setup({ - interactions = { - chat = { - adapter = { - name = "opencode", - model = "claude-sonnet-4", - }, - }, - }, -}) -``` - -この構成は、OpenCode をチャットの ACP エージェントとして使用するように CodeCompanion をセットアップします。 - -環境変数 (`OPENCODE_API_KEY` など) を渡す必要がある場合、詳細については、CodeCompanion.nvim ドキュメントの「[アダプターの構成: 環境変数](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key)」を参照してください。 - -## サポート - -OpenCode は、ACP 経由でもターミナル内で動作するのと同じように動作します。すべての機能がサポートされています。 - -:::note -`/undo` や `/redo` などの一部の組み込みスラッシュコマンドは現在サポートされていません。 -::: - -- 組み込みツール (ファイル操作、ターミナルコマンドなど) -- カスタムツールとスラッシュコマンド -- OpenCode 設定で構成された MCP サーバー -- `AGENTS.md` のプロジェクト固有のルール -- カスタムフォーマッタとリンター -- エージェントと権限システム diff --git a/packages/web/src/content/docs/ja/agents.mdx b/packages/web/src/content/docs/ja/agents.mdx deleted file mode 100644 index 539d30faf8..0000000000 --- a/packages/web/src/content/docs/ja/agents.mdx +++ /dev/null @@ -1,751 +0,0 @@ ---- -title: エージェント -description: 特殊なエージェントを構成して使用します。 ---- - -エージェントは、特定のタスクやワークフロー向けに構成できる特殊な AI アシスタントです。これらを使用すると、カスタムプロンプト、モデル、ツールアクセスを備えた焦点を絞ったツールを作成できます。 - -:::tip -Plan エージェントを使用すると、コードを変更せずにコードを分析し、提案を確認できます。 -::: - -セッション中にエージェントを切り替えたり、`@` メンションでエージェントを呼び出したりできます。 - ---- - -## 種類 - -OpenCode には 2 種類のエージェントがあります。プライマリエージェントとサブエージェント。 - ---- - -### プライマリエージェント - -プライマリエージェントは、直接対話する主要なアシスタントです。 **Tab** キー、または設定した `switch_agent` キーバインドを使用して、それらを切り替えることができます。これらのエージェントが主な会話を処理します。ツールへのアクセスは権限によって構成されます。たとえば、Build ではすべてのツールが有効になっていますが、Plan は制限されています。 - -:::tip -**Tab** キーを使用して、セッション中にプライマリエージェントを切り替えることができます。 -::: - -OpenCode には、**Build** と **Plan** という 2 つの組み込みプライマリエージェントが付属しています。これらについて以下で説明します。 - ---- - -### サブエージェント - -サブエージェントは、プライマリエージェントが特定のタスクのために呼び出すことができる特殊なアシスタントです。メッセージ内で **@ メンション**することで、手動で呼び出すこともできます。 - -OpenCode には、**General**、**Explore**、**Scout** という 3 つの組み込みサブエージェントが付属しています。これについては以下で見ていきます。 - ---- - -## 組み込み - -OpenCode には、2 つの組み込みプライマリエージェントと 3 つの組み込みサブエージェントが付属しています。 - ---- - -### Build - -_モード_: `primary` - -Build は、すべてのツールが有効になっている **デフォルト** プライマリエージェントです。これは、ファイル操作やシステムコマンドへの完全なアクセスが必要な開発作業用の標準エージェントです。 - ---- - -### Plan - -_モード_: `primary` - -計画と分析のために設計された制限付きエージェント。より詳細な制御を提供し、意図しない変更を防ぐために、許可システムを使用しています。 -デフォルトでは、次のすべてが `ask` に設定されます。 - -- `file edits`: すべての書き込み、パッチ、および編集 -- `bash`: すべての bash コマンド - -このエージェントは、コードベースに実際の変更を加えずに LLM にコードの分析、変更の提案、または計画の作成を行わせたい場合に役立ちます。 - ---- - -### General - -_モード_: `subagent` - -複雑な質問を調査し、複数ステップのタスクを実行するための汎用エージェント。完全なツールアクセス権 (todo を除く) があるため、必要に応じてファイルを変更できます。これを使用して、複数の作業単位を並行して実行します。 - ---- - -### Explore - -_モード_: `subagent` - -コードベースを探索するための高速な読み取り専用エージェント。ファイルを変更できません。これは、パターンでファイルをすばやく検索したり、コードでキーワードを検索したり、コードベースに関する質問に答えたりする必要がある場合に使用します。 - ---- - -### Scout - -_モード_: `subagent` - -外部ドキュメントや依存関係の調査を行うための読み取り専用エージェントです。依存関係のリポジトリを OpenCode の管理キャッシュにクローンしたいとき、ライブラリのソースコードを調べたいとき、あるいはワークスペースを変更せずにローカルコードを upstream の実装と突き合わせたいときに使用します。 - ---- - -### Compact - -_モード_: `primary` - -長いコンテキストを小さな要約に圧縮する隠しシステムエージェント。これは必要に応じて自動的に実行され、UI では選択できません。 - ---- - -### Title - -_モード_: `primary` - -短いセッションタイトルを生成する非表示のシステムエージェント。これは自動的に実行され、UI では選択できません。 - ---- - -### Summary - -_モード_: `primary` - -セッション概要を作成する非表示のシステムエージェント。これは自動的に実行され、UI では選択できません。 - ---- - -## 使用法 - -1. プライマリエージェントの場合は、セッション中に **Tab** キーを使用してエージェントを切り替えます。設定した `switch_agent` キーバインドを使用することもできます。 - -2. サブエージェントは次のように呼び出すことができます。 - - プライマリエージェントによって、説明に基づいて特殊なタスクを **自動的に** 実行されます。 - - メッセージ内でサブエージェントを **@ メンション**することで手動で実行できます。例えば。 - - ```txt frame="none" - @general help me search for this function - ``` - -3. **セッション間のナビゲーション**: サブエージェントが独自の子セッションを作成する場合、以下を使用して親セッションとすべての子セッションの間を移動できます。 - - **\+Right** (または設定した `session_child_cycle` キーバインド) で、親 → 子 1 → 子 2 → ... → 親と順に循環します。 - - **\+Left** (または設定した `session_child_cycle_reverse` キーバインド) で、親 ← 子 1 ← 子 2 ← ... ← 親を逆方向に循環します。 - -これにより、メインの会話と専門的なサブエージェントの作業をシームレスに切り替えることができます。 - ---- - -## 設定 - -組み込みエージェントをカスタマイズしたり、構成を通じて独自のエージェントを作成したりできます。エージェントは次の 2 つの方法で構成できます。 - ---- - -### 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" - } - } -} -``` - -これは**必須**の設定オプションです。 - ---- - -### 温度 - -`temperature` 設定を使用して、LLM の応答のランダム性と創造性を制御します。 - -値が低いほど、応答はより集中的かつ決定的になりますが、値が高いほど、創造性と変動性が高まります。 - -```json title="opencode.json" -{ - "agent": { - "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" -{ - "agent": { - "analyze": { - "temperature": 0.1, - "prompt": "{file:./prompts/analysis.txt}" - }, - "build": { - "temperature": 0.3 - }, - "brainstorm": { - "temperature": 0.7, - "prompt": "{file:./prompts/creative.txt}" - } - } -} -``` - -温度が指定されていない場合、OpenCode はモデル固有のデフォルトを使用します。通常、ほとんどのモデルでは 0、Qwen モデルでは 0.55 です。 - ---- - -### ステップ数 - -エージェントが強制的にテキストのみで応答するまでに実行できるエージェントの反復の最大数を制御します。これにより、コストを管理したいユーザーは、エージェントのアクションに制限を設定できます。 - -これが設定されていない場合、エージェントは、モデルが停止を選択するか、ユーザーがセッションを中断するまで反復を続けます。 - -```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` 設定を使用して、このエージェントのモデルをオーバーライドします。さまざまなタスクに最適化されたさまざまなモデルを使用する場合に役立ちます。たとえば、計画にはより高速なモデルを、実装にはより有能なモデルを使用します。 - -:::tip -モデルを指定しない場合、プライマリエージェントは [グローバルに設定されたモデル](/docs/config#models) を使用し、サブエージェントはサブエージェントを呼び出したプライマリエージェントのモデルを使用します。 -::: - -```json title="opencode.json" -{ - "agent": { - "plan": { - "model": "anthropic/claude-haiku-4-20250514" - } - } -} -``` - -OpenCode 設定内のモデル ID は、`provider/model-id` という形式を使用します。たとえば、[OpenCode Zen](/docs/zen) を使用している場合、GPT 5.1 Codex には `opencode/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 -エージェント固有の設定はグローバル設定をオーバーライドします。 -::: -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" - } - } - } - } -} -``` - -これにはグロブパターンを使用できます。 - -```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` オートコンプリートメニューからサブエージェントを非表示にします。他のエージェントによってタスクツールを介してプログラム的にのみ呼び出す必要がある内部サブエージェントに役立ちます。 - -```json title="opencode.json" -{ - "agent": { - "internal-helper": { - "mode": "subagent", - "hidden": true - } - } -} -``` - -これは、オートコンプリートメニューでのユーザーの表示にのみ影響します。権限が許可されていれば、非表示のエージェントをタスクツール経由でモデルから呼び出すことができます。 - -:::note -`mode: subagent` エージェントにのみ適用されます。 -::: - ---- - -### タスクの権限 - -`permission.task` を使用して、エージェントがタスクツール経由でどのサブエージェントを呼び出すことができるかを制御します。柔軟なマッチングのためにグロブパターンを使用します。 - -```json title="opencode.json" -{ - "agent": { - "orchestrator": { - "mode": "primary", - "permission": { - "task": { - "*": "deny", - "orchestrator-*": "allow", - "code-reviewer": "ask" - } - } - } - } -} -``` - -`deny` に設定すると、サブエージェントはタスクツールの説明から完全に削除されるため、モデルはそれを呼び出そうとしません。 - -:::tip -ルールは順番に評価され、**最後に一致したルールが優先されます**。上記の例では、`orchestrator-planner` は `*` (拒否) と `orchestrator-*` (許可) の両方に一致しますが、`orchestrator-*` は `*` の後に来るため、結果は `allow` になります。 -:::tip -ユーザーは、エージェントのタスク権限が拒否する場合でも、`@` オートコンプリートメニューを介して、いつでもサブエージェントを直接呼び出すことができます。 -::: - ---- - -### 色 - -`color` オプションを使用して、UI でのエージェントの外観をカスタマイズします。これは、インターフェイスでのエージェントの表示方法に影響します。 - -有効な 16 進カラー (例: `#FF5733`) またはテーマカラー: `primary`、`secondary`、`accent`、`success`、`warning`、`error`、`info` を使用します。 - -```json title="opencode.json" -{ - "agent": { - "creative": { - "color": "#ff6b6b" - }, - "code-reviewer": { - "color": "accent" - } - } -} -``` - ---- - -### Top P - -`top_p` オプションで応答の多様性を制御します。ランダム性を制御するための温度の代替手段。 - -```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. エージェントを保存する場所を尋ねます。グローバルまたはプロジェクト固有。 -2. エージェントが行うべきことの説明。 -3. 適切なシステムプロンプトと識別子を生成します。 -4. エージェントがアクセスできるツールを選択できます。 -5. 最後に、エージェント設定を含む Markdown ファイルを作成します。 - ---- - -## ユースケース - -さまざまなエージェントの一般的な使用例をいくつか示します。 - -- **ビルドエージェント**: すべてのツールを有効にした完全な開発作業 -- **計画エージェント**: 変更を加えずに分析および計画を立てる -- **レビューエージェント**: 読み取り専用アクセスとドキュメントツールを備えたコードレビュー -- **デバッグエージェント**: bash および読み取りツールを有効にして調査に重点を置きます -- **ドキュメントエージェント**: ファイル操作を使用してドキュメントを作成しますが、システムコマンドは使用しません - ---- - -## 例 - -以下に、役立つと思われるエージェントの例をいくつか示します。 - -:::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 -``` diff --git a/packages/web/src/content/docs/ja/cli.mdx b/packages/web/src/content/docs/ja/cli.mdx deleted file mode 100644 index 755b856fc7..0000000000 --- a/packages/web/src/content/docs/ja/cli.mdx +++ /dev/null @@ -1,616 +0,0 @@ ---- -title: CLI -description: OpenCode CLI のオプションとコマンド。 ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode CLI は、引数なしで実行すると、デフォルトで [TUI](/docs/tui) を開始します。 - -```bash -opencode -``` - -ただし、このページに記載されているようにコマンドも受け入れます。これにより、OpenCode をプログラム的に操作できるようになります。 - -```bash -opencode run "Explain how closures work in JavaScript" -``` - ---- - -### tui - -OpenCode ターミナルユーザーインターフェイスを開始します。 - -```bash -opencode [project] -``` - -#### フラグ - -| フラグ | ショート | 説明 | -| ---------------------------------------- | --------------------------------------- | ---------------------------------------------------------- | -| {"--continue"} | `-c` | 最後のセッションを続行 | -| {"--session"} | | 続行時にセッションをフォーク (`-s` または `--fork` と併用) | -| {"--continue"} | {"--session"} | 続行するセッション ID | -| {"--prompt"} | | 使用のプロンプト | -| {"--model"} | `-m` | プロバイダー/モデルの形式で使用するモデル | -| {"--agent"} | | 使用するエージェント | -| {"--port"} | | リッスンするポート | -| {"--hostname"} | | リッスンするホスト名 | - ---- - -## コマンド - -OpenCode CLI には次のコマンドもあります。 - ---- - -### agent - -OpenCode のエージェントを管理します。 - -```bash -opencode agent [command] -``` - ---- - -### attach - -`serve` または `web` コマンドを使用して起動された、すでに実行中の OpenCode バックエンドサーバーにターミナルを接続します。 - -```bash -opencode attach [url] -``` - -これにより、リモート OpenCode バックエンドで TUI を使用できるようになります。例えば: - -```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 -``` - -#### フラグ - -| フラグ | ショート | 説明 | -| ---------------------------------------- | -------- | --------------------------------------------------------------------------------- | -| {"--dir"} | | TUI を開始する作業ディレクトリ | -| {"--continue"} | `-c` | 最後のセッションを続行 | -| {"--session"} | `-s` | 続行するセッション ID | -| {"--fork"} | | 続行時にセッションをフォーク(`--continue` または `--session` と使用) | -| {"--password"} | `-p` | Basic 認証パスワード(デフォルトは `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Basic 認証ユーザー名(デフォルトは `OPENCODE_SERVER_USERNAME` または `opencode`) | - ---- - -#### 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 - -モデルコンテキストプロトコルサーバーを管理します。 - -```bash -opencode mcp [command] -``` - ---- - -#### add - -MCP サーバーを構成に追加します。 - -```bash -opencode mcp add -``` - -このコマンドは、ローカルまたはリモートの MCP サーバーを追加する手順を示します。 - ---- - -#### list - -構成されているすべての MCP サーバーとその接続ステータスをリストします。 - -```bash -opencode mcp list -``` - -または、短いバージョンを使用してください。 - -```bash -opencode mcp ls -``` - ---- - -#### auth - -OAuth 対応の MCP サーバーで認証します。 - -```bash -opencode mcp auth [name] -``` - -サーバー名を指定しない場合は、利用可能な OAuth 対応サーバーから選択するように求められます。 - -OAuth 対応サーバーとその認証ステータスを一覧表示することもできます。 - -```bash -opencode mcp auth list -``` - -または、短いバージョンを使用してください。 - -```bash -opencode mcp auth ls -``` - ---- - -#### logout - -MCP サーバーの OAuth 資格情報を削除します。 - -```bash -opencode mcp logout [name] -``` - ---- - -#### debug - -MCP サーバーの OAuth 接続の問題をデバッグします。 - -```bash -opencode mcp debug -``` - ---- - -### models - -構成されたプロバイダーから利用可能なすべてのモデルをリストします。 - -```bash -opencode models [provider] -``` - -このコマンドは、構成されたプロバイダー全体で利用可能なすべてのモデルを `provider/model` の形式で表示します。 - -これは、[設定](/docs/config/) で使用する正確なモデル名を把握するのに役立ちます。 - -オプションでプロバイダー ID を渡して、そのプロバイダーによってモデルをフィルターできます。 - -```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 -# 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" -``` - -#### フラグ - -| フラグ | ショート | 説明 | -| ---------------------------------------- | -------- | ----------------------------------------------------------------------------------------- | -| {"--command"} | | 実行するコマンド。引数には message を使用します。 | -| {"--continue"} | `-c` | 最後のセッションを続行 | -| {"--session"} | `-s` | 続行するセッション ID | -| {"--fork"} | | 続行時にセッションをフォーク (`--continue` または `--session` と併用) | -| {"--share"} | | セッションを共有する | -| {"--model"} | `-m` | プロバイダー/モデルの形式で使用するモデル | -| {"--agent"} | | 使用するエージェント | -| {"--file"} | `-f` | メッセージに添付するファイル | -| {"--format"} | | 形式: デフォルト (フォーマット済み) または json (生の JSON イベント) | -| {"--title"} | | セッションのタイトル (値が指定されていない場合は、切り詰められたプロンプトが使用されます) | -| {"--attach"} | | 実行中の opencode サーバー (http://localhost:4096 など) に接続します。 | -| {"--password"} | `-p` | Basic 認証パスワード(デフォルトは `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Basic 認証ユーザー名(デフォルトは `OPENCODE_SERVER_USERNAME` または `opencode`) | -| {"--dir"} | | 実行ディレクトリ、またはアタッチ時のリモートサーバー上のパス | -| {"--variant"} | | モデルバリアント(プロバイダー固有の推論レベル) | -| {"--thinking"} | | 思考ブロックを表示 | -| {"--port"} | | ローカルサーバーのポート (デフォルトはランダムポート) | - ---- - -### serve - -API アクセスのためにヘッドレス OpenCode サーバーを起動します。完全な HTTP インターフェイスについては、[サーバーのドキュメント](/docs/server) を確認してください。 - -```bash -opencode serve -``` - -これにより、TUI インターフェイスを使用せずに opencode 機能への API アクセスを提供する HTTP サーバーが起動します。 `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"} | | 出力形式: テーブルまたは json (テーブル) | - ---- - -### stats - -OpenCode セッションのトークンの使用状況とコストの統計を表示します。 - -```bash -opencode stats -``` - -#### フラグ - -| フラグ | 説明 | -| --------------------------------------- | ------------------------------------------------------------------------------------------ | -| {"--days"} | 過去 N 日間の統計を表示 (全期間) | -| {"--tools"} | 表示するツールの数 (すべて) | -| {"--models"} | モデルの使用状況の内訳を表示 (デフォルトでは非表示)。上位 N 件を表示するには数値を渡します | -| {"--project"} | プロジェクトでフィルタリング (全プロジェクト、空文字列: 現在のプロジェクト) | - ---- - -### export - -セッションデータを JSON としてエクスポートします。 - -```bash -opencode export [sessionID] -``` - -セッション ID を指定しない場合は、利用可能なセッションから選択するように求められます。 - ---- - -### import - -JSON ファイルまたは OpenCode 共有 URL からセッションデータをインポートします。 - -```bash -opencode import -``` - -ローカルファイルまたは OpenCode 共有 URL からインポートできます。 - -```bash -opencode import session.json -opencode import https://opncd.ai/s/abc123 -``` - ---- - -### web - -Web インターフェイスを使用してヘッドレス OpenCode サーバーを起動します。 - -```bash -opencode web -``` - -これにより、HTTP サーバーが起動し、Web ブラウザが開き、Web インターフェイスを通じて OpenCode にアクセスします。 `OPENCODE_SERVER_PASSWORD` を設定して HTTP 基本認証を有効にします (ユーザー名のデフォルトは `opencode`)。 - -#### フラグ - -| フラグ | 説明 | -| ---------------------------------------- | --------------------------------------- | -| {"--port"} | リッスンするポート | -| {"--hostname"} | リッスンするホスト名 | -| {"--mdns"} | mDNS 検出を有効にする | -| {"--cors"} | CORS を許可する追加のブラウザーオリジン | - ---- - -### acp - -ACP (エージェントクライアントプロトコル) サーバーを起動します。 - -```bash -opencode acp -``` - -このコマンドは、nd-JSON を使用して stdin/stdout 経由で通信する ACP サーバーを起動します。 - -#### フラグ - -| フラグ | 説明 | -| ---------------------------------------- | -------------------- | -| {"--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 CLI は次のグローバルフラグを受け取ります。 - -| フラグ | ショート | 説明 | -| ------------------------------------------ | -------- | ------------------------------------- | -| {"--help"} | `-h` | ヘルプを表示 | -| {"--version"} | `-v` | バージョン番号を出力 | -| {"--print-logs"} | | ログを標準エラー出力に出力 | -| {"--log-level"} | | ログレベル (DEBUG、INFO、WARN、ERROR) | - ---- - -## 環境変数 - -OpenCode は環境変数を使用して構成できます。 - -| 変数 | タイプ | 説明 | -| ------------------------------------- | -------- | ------------------------------------------------------------------- | -| `OPENCODE_AUTO_SHARE` | ブール値 | セッションを自動的に共有する | -| `OPENCODE_GIT_BASH_PATH` | 文字列 | Windows 上で実行可能な Git Bash へのパス | -| `OPENCODE_CONFIG` | 文字列 | 構成ファイルへのパス | -| `OPENCODE_CONFIG_DIR` | 文字列 | config ディレクトリへのパス | -| `OPENCODE_CONFIG_CONTENT` | 文字列 | インライン JSON 構成コンテンツ | -| `OPENCODE_DISABLE_AUTOUPDATE` | ブール値 | 自動更新チェックを無効にする | -| `OPENCODE_DISABLE_PRUNE` | ブール値 | 古いデータのプルーニングを無効にする | -| `OPENCODE_DISABLE_TERMINAL_TITLE` | ブール値 | ターミナルタイトルの自動更新を無効にする | -| `OPENCODE_PERMISSION` | 文字列 | インライン化された json 権限設定 | -| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | ブール値 | デフォルトのプラグインを無効にする | -| `OPENCODE_DISABLE_LSP_DOWNLOAD` | ブール値 | LSP サーバーの自動ダウンロードを無効にする | -| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | ブール値 | 実験モデルを有効にする | -| `OPENCODE_DISABLE_AUTOCOMPACT` | ブール値 | 自動コンテキスト圧縮を無効にする | -| `OPENCODE_DISABLE_CLAUDE_CODE` | ブール値 | `.claude` からの読み取りを無効にする (プロンプト + スキル) | -| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | ブール値 | `~/.claude/CLAUDE.md` の読み取りを無効にする | -| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | ブール値 | `.claude/skills` のロードを無効にする | -| `OPENCODE_DISABLE_MODELS_FETCH` | ブール値 | リモートソースからのモデルの取得を無効にする | -| `OPENCODE_FAKE_VCS` | 文字列 | テスト目的の偽の VCS プロバイダー | -| `OPENCODE_CLIENT` | 文字列 | クライアント識別子 (デフォルトは `cli`) | -| `OPENCODE_ENABLE_EXA` | ブール値 | Exa Web 検索ツールを有効にする | -| `OPENCODE_SERVER_PASSWORD` | 文字列 | `serve`/`web` の基本認証を有効にする | -| `OPENCODE_SERVER_USERNAME` | 文字列 | 基本認証ユーザー名 (デフォルト `opencode`) をオーバーライドします。 | -| `OPENCODE_MODELS_URL` | 文字列 | モデル設定を取得するためのカスタム URL | - ---- - -### 実験的 - -これらの環境変数により、変更または削除される可能性のある実験的な機能が有効になります。 - -| 変数 | タイプ | 説明 | -| ----------------------------------------------- | -------- | ------------------------------------------------ | -| `OPENCODE_EXPERIMENTAL` | ブール値 | アンブレラフラグ配下の実験的機能を有効にする | -| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | ブール値 | アイコン検出を有効にする | -| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | ブール値 | TUI で選択時のコピーを無効にする | -| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | 数値 | bash コマンドのデフォルトのタイムアウト (ミリ秒) | -| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | 数値 | LLM 応答の最大出力トークン | -| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | ブール値 | ディレクトリ全体のファイル監視を有効にする | -| `OPENCODE_EXPERIMENTAL_OXFMT` | ブール値 | oxfmt フォーマッタを有効にする | -| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | ブール値 | 実験的な LSP ツールを有効にする | -| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | ブール値 | ファイルウォッチャーを無効にする | -| `OPENCODE_EXPERIMENTAL_EXA` | ブール値 | 実験的な Exa 機能を有効にする | -| `OPENCODE_EXPERIMENTAL_LSP_TY` | ブール値 | python ファイルの TY LSP を有効にする | -| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | ブール値 | プランモードを有効にする | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | ブール値 | バックグラウンド subagent タスクを有効にする | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | ブール値 | 実験的なイベントシステムを有効にする | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | ブール値 | ネイティブ LLM リクエスト経路を有効にする | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | ブール値 | 並列 Web 検索実行を有効にする | -| `OPENCODE_EXPERIMENTAL_SCOUT` | ブール値 | Scout subagent を有効にする | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | ブール値 | ワークスペースサポートを有効にする | diff --git a/packages/web/src/content/docs/ja/commands.mdx b/packages/web/src/content/docs/ja/commands.mdx deleted file mode 100644 index bd2913a043..0000000000 --- a/packages/web/src/content/docs/ja/commands.mdx +++ /dev/null @@ -1,322 +0,0 @@ ---- -title: コマンド -description: 反復的なタスク用のカスタムコマンドを作成します。 ---- - -カスタムコマンドを使用すると、TUI でコマンドを実行するときに実行するプロンプトを指定できます。 - -```bash frame="none" -/my-command -``` - -カスタムコマンドは、`/init`、`/undo`、`/redo`、`/share`、`/help` などの組み込みコマンドに追加されます。 [詳細はこちら](/docs/tui#commands)。 - ---- - -## コマンドファイルの作成 - -カスタムコマンドを定義するには、`commands/` ディレクトリに Markdown ファイルを作成します。 - -`.opencode/commands/test.md` を作成します。 - -```md title=".opencode/commands/test.md" ---- -description: Run tests with coverage -agent: build -model: anthropic/claude-3-5-sonnet-20241022 ---- - -Run the full test suite with coverage report and show any failures. -Focus on the failing tests and suggest fixes. -``` - -フロントマターはコマンドのプロパティを定義します。内容がテンプレートとなります。 - -`/` に続けてコマンド名を入力して、コマンドを使用します。 - -```bash frame="none" -"/test" -``` - ---- - -## 設定 - -カスタムコマンドは、OpenCode 設定を通じて、または `commands/` ディレクトリに Markdown ファイルを作成することによって追加できます。 - ---- - -### JSON - -OpenCode [設定](/docs/config)で `command` オプションを使用します: - -```json title="opencode.jsonc" {4-12} -{ - "$schema": "https://opencode.ai/config.json", - "command": { - // This becomes the name of the command - "test": { - // This is the prompt that will be sent to the LLM - "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.", - // This is shown as the description in the TUI - "description": "Run tests with coverage", - "agent": "build", - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -これで、TUI で次のコマンドを実行できるようになります。 - -```bash frame="none" -/test -``` - ---- - -### Markdown - -Markdown ファイルを使用してコマンドを定義することもできます。それらを次の場所に置きます。 - -- グローバル: `~/.config/opencode/commands/` -- プロジェクトごと: `.opencode/commands/` - -```markdown title="~/.config/opencode/commands/test.md" ---- -description: Run tests with coverage -agent: build -model: anthropic/claude-3-5-sonnet-20241022 ---- - -Run the full test suite with coverage report and show any failures. -Focus on the failing tests and suggest fixes. -``` - -Markdown ファイル名がコマンド名になります。たとえば、`test.md` を使用すると、 -あなたは実行します: - -```bash frame="none" -/test -``` - ---- - -## プロンプト構成 - -カスタムコマンドのプロンプトは、いくつかの特別なプレースホルダーと構文をサポートしています。 - ---- - -### 引数 - -`$ARGUMENTS` プレースホルダーを使用してコマンドに引数を渡します。 - -```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` - 2 番目の引数 -- `$3` - 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" }` - ---- - -### シェル出力 - -_!`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` オプションは、コマンドの実行時に 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` オプションを使用して、コマンドの動作の簡単な説明を入力します。 - -```json title="opencode.json" -{ - "command": { - "test": { - "description": "Run tests with coverage" - } - } -} -``` - -これは、コマンドを入力すると TUI に説明として表示されます。 - ---- - -### エージェント - -オプションで、`agent` 設定を使用して、このコマンドを実行する [agent](/docs/agents) を指定します。 -これが [subagent](/docs/agents/#subagents) の場合、コマンドはデフォルトでサブエージェントの呼び出しをトリガーします。 -この動作を無効にするには、`subtask` を `false` に設定します。 - -```json title="opencode.json" -{ - "command": { - "review": { - "agent": "plan" - } - } -} -``` - -これは**オプション**の設定オプションです。指定しない場合、デフォルトで現在のエージェントが使用されます。 - ---- - -### サブタスク - -`subtask` ブール値を使用して、コマンドが [subagent](/docs/agents/#subagents) 呼び出しを強制的にトリガーします。 -これは、コマンドがプライマリコンテキストを汚染せず、エージェントがサブエージェントとして動作するように**強制**する場合に便利です。 -[agent](/docs/agents) 設定で `mode` が `primary` に設定されている場合でも。 - -```json title="opencode.json" -{ - "command": { - "analyze": { - "subtask": true - } - } -} -``` - -これは**オプション**の設定オプションです。 - ---- - -### モデル - -`model` 設定を使用して、このコマンドのデフォルトモデルをオーバーライドします。 - -```json title="opencode.json" -{ - "command": { - "analyze": { - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -これは**オプション**の設定オプションです。 - ---- - -## 組み込み - -OpenCode には、`/init`、`/undo`、`/redo`、`/share`、`/help` などのいくつかの組み込みコマンドが含まれています。 [詳細はこちら](/docs/tui#commands)。 - -:::note -カスタムコマンドは組み込みコマンドをオーバーライドできます。 -::: -同じ名前のカスタムコマンドを定義すると、組み込みコマンドがオーバーライドされます。 diff --git a/packages/web/src/content/docs/ja/config.mdx b/packages/web/src/content/docs/ja/config.mdx deleted file mode 100644 index 44661009c1..0000000000 --- a/packages/web/src/content/docs/ja/config.mdx +++ /dev/null @@ -1,684 +0,0 @@ ---- -title: 設定 -description: OpenCode JSON 設定を使用します。 ---- - -JSON 設定ファイルを使用して OpenCode を構成できます。 - ---- - -## 形式 - -OpenCode は、**JSON** と **JSONC** (コメント付きの JSON) 形式の両方をサポートしています。 - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-5", - "autoupdate": true, - "server": { - "port": 4096, - }, -} -``` - ---- - -## ファイルの場所 - -設定をいくつかの異なる場所に配置できます。それらは異なる優先順位を持ちます。 - -:::note -設定ファイルは置き換えられるのではなく、**マージ**されます。 -::: - -設定ファイルは結合され、置き換えられません。次の構成場所からの設定が結合されます。競合するキーに対してのみ、後の設定が前の設定を上書きします。すべての構成からの競合しない設定は保持されます。 - -たとえば、グローバル設定で `autoupdate: true` を設定し、プロジェクト設定で `model: "anthropic/claude-sonnet-4-5"` を設定した場合、最終的な構成には両方の設定が含まれます。 - ---- - -### 優先順位 - -設定ソースは次の順序でロードされます (後のソースは前のソースをオーバーライドします)。 - -1. **リモート設定** (`.well-known/opencode` から) - 組織のデフォルト -2. **グローバル設定** (`~/.config/opencode/opencode.json`) - ユーザー設定 -3. **カスタム設定** (`OPENCODE_CONFIG` 環境変数) - カスタムオーバーライド -4. **プロジェクト設定** (プロジェクト内の `opencode.json`) - プロジェクト固有の設定 -5. **`.opencode` ディレクトリ** - エージェント、コマンド、プラグイン -6. **インライン設定** (`OPENCODE_CONFIG_CONTENT` 環境変数) - ランタイムオーバーライド - -つまり、プロジェクト設定はグローバルのデフォルトをオーバーライドでき、グローバル設定はリモート組織のデフォルトをオーバーライドできます。 - -:::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` に配置します。プロバイダー、モデル、権限などのユーザー全体の設定にはグローバル設定を使用します。 - -TUI 固有の設定には、`~/.config/opencode/tui.json` を使用します。 - -グローバル設定はリモート組織のデフォルトをオーバーライドします。 - ---- - -### プロジェクトごと - -プロジェクトのルートに `opencode.json` を追加します。プロジェクト設定は、標準設定ファイルの中で最も高い優先順位を持ち、グローバル設定とリモート設定の両方をオーバーライドします。 - -プロジェクト固有の TUI 設定については、その横に `tui.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" -``` - -カスタムディレクトリはグローバル config ディレクトリと `.opencode` ディレクトリの後にロードされるため、それらの設定を**オーバーライド**できます。 - ---- - -## スキーマ - -サーバー/ランタイム構成スキーマは [**`opencode.ai/config.json`**](https://opencode.ai/config.json) で定義されています。 - -TUI 設定は [**`opencode.ai/tui.json`**](https://opencode.ai/tui.json) を使用します。 - -エディターはスキーマに基づいて検証し、オートコンプリートできる必要があります。 - ---- - -### TUI - -TUI 固有の設定には、専用の `tui.json` (または `tui.jsonc`) ファイルを使用します。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": true - }, - "diff_style": "auto" -} -``` - -カスタム TUI 設定ファイルを指定するには、`OPENCODE_TUI_CONFIG` を使用します。 - -`opencode.json` 内の従来の `theme`、`keybinds`、および `tui` キーは非推奨となり、可能であれば自動的に移行されます。 - -[TUI の設定の詳細については、こちら](/docs/tui#configure) をご覧ください。 - ---- - -### サーバー - -`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` - ブラウザベースのクライアントから HTTP サーバーを使用するときに CORS を許可する追加のオリジン。値は完全なオリジン (スキーム + ホスト + オプションのポート) である必要があります (例: `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)。 - ---- - -### モデル - -`provider`、`model`、および `small_model` オプションを使用して、OpenCode 設定で使用するプロバイダーとモデルを構成できます。 - -```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` - Bedrock の AWS リージョン (デフォルトは `AWS_REGION` 環境変数または `us-east-1`) -- `profile` - `~/.aws/credentials` からの AWS 名前付きプロファイル (デフォルトは `AWS_PROFILE` 環境変数) -- `endpoint` - VPC エンドポイントのカスタムエンドポイント URL。これは、AWS 固有の用語を使用した汎用 `baseURL` オプションのエイリアスです。両方を指定した場合は、`endpoint` が優先されます。 - -:::note -ベアラー トークン (`AWS_BEARER_TOKEN_BEDROCK` または `/connect`) は、プロファイルベースの認証より優先されます。詳細については、「[認証優先順位](/docs/providers#authentication-precedence)」を参照してください。 -::: - -[Amazon Bedrock 設定](/docs/providers#amazon-bedrock) の詳細をご覧ください。 - ---- - -### テーマ - -UI テーマを `tui.json` で設定します。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - -[詳細はこちら](/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": { - // Disable file modification tools for review-only agent - "write": false, - "edit": false, - }, - }, - }, -} -``` - -`~/.config/opencode/agents/` または `.opencode/agents/` の Markdown ファイルを使用してエージェントを定義することもできます。 [詳細はこちら](/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` オプションを使用して [share](/docs/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", - }, - }, -} -``` - -`~/.config/opencode/commands/` または `.opencode/commands/` の Markdown ファイルを使用してコマンドを定義することもできます。 [詳細はこちら](/docs/commands)。 - ---- - -### キーバインド - -`tui.json` でキーバインドをカスタマイズします。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.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": false - } -} -``` - -- `auto` - コンテキストがいっぱいのときにセッションを自動的に圧縮します (デフォルト: `true`)。 -- `prune` - 古いツールの出力を削除してトークンを保存します (デフォルト: `false`)。 - ---- - -### ウォッチャー - -`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)。 - ---- - -### プラグイン - -[Plugins](/docs/plugins) は、カスタムツール、フック、統合を使用して OpenCode を拡張します。 - -プラグインファイルを `.opencode/plugins/` または `~/.config/opencode/plugins/` に配置します。 `plugin` オプションを使用して npm からプラグインをロードすることもできます。 - -```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"] -} -``` - -これは、指示ファイルへのパスとグロブパターンの配列を受け取ります。 [ルールについて詳しくはこちら](/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` オプションは、プロバイダー ID の配列を受け入れます。プロバイダーが無効になっている場合: - -- 環境変数を設定してもロードされません。 -- `/connect` コマンドで API キーを設定してもロードされません。 -- プロバイダーのモデルはモデル選択リストに表示されません。 - ---- - -### 有効なプロバイダー - -`enabled_providers` オプションを使用してプロバイダーの許可リストを指定できます。設定すると、指定されたプロバイダーのみが有効になり、その他はすべて無視されます。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "enabled_providers": ["anthropic", "openai"] -} -``` - -これは、OpenCode を 1 つずつ無効にするのではなく、特定のプロバイダーのみを使用するように制限したい場合に便利です。 - -:::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 キーなどの機密データを別のファイルに保存します。 -- 設定を乱雑にすることなく、大きな指示ファイルを含めることができます。 -- 複数の設定ファイル間で共通の設定スニペットを共有します。 diff --git a/packages/web/src/content/docs/ja/custom-tools.mdx b/packages/web/src/content/docs/ja/custom-tools.mdx deleted file mode 100644 index 2377fc7730..0000000000 --- a/packages/web/src/content/docs/ja/custom-tools.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: カスタムツール -description: LLM が OpenCode で呼び出すことができるツールを作成します。 ---- - -カスタムツールは、会話中に LLM が呼び出すことができる作成した関数です。これらは、OpenCode の[組み込みツール](/docs/tools) (`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` ツールが作成されます。 - ---- - -#### ファイルごとに複数のツール - -単一のファイルから複数のツールをエクスポートすることもできます。各エクスポートは **`_`** という名前の **別のツール** になります。 - -```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` という 2 つのツールが作成されます。 - ---- - -#### 組み込みツールとの名前の衝突 - -カスタムツールはツール名でキー設定されます。カスタムツールが組み込みツールと同じ名前を使用する場合、カスタムツールが優先されます。 - -たとえば、このファイルは組み込みの `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` を使用します。 -git ワークツリーのルートには `context.worktree` を使用します。 - ---- - -## 例 - -### Python でのツールの作成 - -ツールは任意の言語で作成できます。以下は、Python を使用して 2 つの数値を加算する例です。 - -まず、ツールを 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 スクリプトを実行しています。 diff --git a/packages/web/src/content/docs/ja/ecosystem.mdx b/packages/web/src/content/docs/ja/ecosystem.mdx deleted file mode 100644 index 02f3b76411..0000000000 --- a/packages/web/src/content/docs/ja/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -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) | git sync とライブプレビューを使用して、隔離された Daytona サンドボックスで OpenCode セッションを自動的に実行します。 | -| [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) | API クレジットの代わりに ChatGPT Plus/Pro サブスクリプションを使用する | -| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | API 課金の代わりに既存の Gemini プランを使用する | -| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | API 課金の代わりに Antigravity の無料モデルを使用する | -| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | 浅いクローンと自動割り当てポートを使用したマルチブランチ devcontainer の分離 | -| [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) | LLM 呼び出しの前にシークレット/PII を VibeGuard スタイルのプレースホルダーに編集し、ローカルで復元する | -| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Google ベースのスタイルでサポートされているプロバイダーにネイティブ Web 検索サポートを追加 | -| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | AI エージェントが PTY でバックグラウンドプロセスを実行し、インタラクティブな入力を送信できるようにします。 | -| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | 非対話型シェルコマンドの手順 - TTY に依存する操作によるハングの防止 | -| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | wakatime で OpenCode の使用状況を追跡する | -| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | LLM によって生成された Markdown テーブルをクリーンアップする | -| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | Morph による Fast Apply 編集、WarpGrep コードベース検索、コンテキスト圧縮 | -| [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) | OpenCode コンテキストに基づいた AI による自動 Zellij セッション命名 | -| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | OpenCode エージェントがスキルの検出と挿入を使用してオンデマンドでプロンプトを遅延ロードできるようにする | -| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | スーパーメモリを使用したセッション間での永続メモリ | -| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | 視覚的な注釈とプライベート/オフライン共有による対話型の計画レビュー | -| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | OpenCode/コマンドをきめ細かいフロー制御を備えた強力なオーケストレーションシステムに拡張 | -| [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) | 複数の質問フォームを使用した AI ブレインストーミング用のインタラクティブなブラウザ UI | -| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | 非同期委任とコンテキスト永続性を備えた Claude Code スタイルのバックグラウンドエージェント | -| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | OpenCode のネイティブ OS 通知 – タスクがいつ完了したかを知る | -| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | バンドルされたマルチエージェントオーケストレーションハーネス – 16 コンポーネント、1 回のインストール | -| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | OpenCode 用のゼロフリクション Git ワークツリー | -| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | Sentry AI Monitoring を使用して AI エージェントをトレースおよびデバッグする | - ---- - -## プロジェクト - -| 名前 | 説明 | -| ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------- | -| [kimaki](https://github.com/remorses/kimaki) | SDK 上に構築された OpenCode セッションを制御する Discord ボット | -| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | API に基づいて構築された、エディター対応プロンプト用の Neovim プラグイン | -| [portal](https://github.com/hosenur/portal) | Tailscale/VPN 上の OpenCode 向けモバイルファースト Web UI | -| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | OpenCode プラグインを構築するためのテンプレート | -| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Neovim OpenCode用フロントエンド - ターミナルベースの AI コーディングエージェント | -| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | @opencode-ai/sdk 経由で OpenCode を使用するための Vercel AI SDK プロバイダー | -| [OpenChamber](https://github.com/btriapitsyn/openchamber) | OpenCode 用の Web/デスクトップアプリと VS Code 拡張機能 | -| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Obsidian の UI に OpenCode を埋め込む Obsidian プラグイン | -| [OpenWork](https://github.com/different-ai/openwork) | OpenCode を利用した、Claude Cowork に代わるオープンソース | -| [ocx](https://github.com/kdcokenny/ocx) | 移植可能な独立したプロファイルを備えた OpenCode 拡張機能マネージャー。 | -| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | OpenCode 用のデスクトップ、Web、モバイル、およびリモートクライアントアプリ | - ---- - -## エージェント - -| 名前 | 説明 | -| ----------------------------------------------------------------- | ------------------------------------------------------------------------------ | -| [Agentic](https://github.com/Cluster444/agentic) | 構造化開発のためのモジュール型 AI エージェントとコマンド | -| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | 強化されたワークフローのための構成、プロンプト、エージェント、およびプラグイン | diff --git a/packages/web/src/content/docs/ja/enterprise.mdx b/packages/web/src/content/docs/ja/enterprise.mdx deleted file mode 100644 index d5144072ff..0000000000 --- a/packages/web/src/content/docs/ja/enterprise.mdx +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: エンタープライズ -description: 組織内で OpenCode を安全に使用します。 ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -OpenCode Enterprise は、コードとデータがインフラストラクチャから決して流出しないようにしたい組織を対象としています。これは、SSO および内部 AI ゲートウェイと統合された一元化された設定を使用することで実現できます。 - -:::note -OpenCode は、コードやコンテキストデータを一切保存しません。 -::: -OpenCode Enterprise を始めるには: - -1. チーム内でトライアルを実施してください。 -2. 価格や実装オプションについては、**お問い合わせ**ください。 - ---- - -## トライアル - -OpenCode はオープンソースであり、コードやコンテキストデータは一切保存されないため、開発者は簡単に開始してトライアルを実行できます。 - ---- - -### データの取り扱い - -**OpenCode はコードやコンテキストデータを保存しません。** すべての処理はローカルで、または AI プロバイダーへの直接 API 呼び出しを通じて行われます。 - -つまり、信頼できるプロバイダー、または内部 AI ゲートウェイを使用している限り、OpenCode を安全に利用できます。 - -ここでの唯一の注意点は、オプションの `/share` 機能です。 - ---- - -#### 会話を共有する - -ユーザーが `/share` 機能を有効にすると、会話とそれに関連付けられたデータが、opencode.ai でこれらの共有ページをホストするために使用されるサービスに送信されます。 - -現在、データは CDN のエッジネットワークを通じて提供され、ユーザーの近くのエッジにキャッシュされます。 - -試用版ではこれを無効にすることをお勧めします。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -[sharing](/docs/share) について詳しくはこちらをご覧ください。 - ---- - -### コードの所有権 - -**OpenCode によって生成されたすべてのコードはお客様が所有します。** ライセンスの制限や所有権の主張はありません。 - ---- - -## 価格 - -OpenCode Enterprise ではシートごとのモデルを使用します。独自の LLM ゲートウェイをお持ちの場合、使用されたトークンに対して料金はかかりません。価格と実装オプションの詳細については、**お問い合わせください**。 - ---- - -## 導入 - -トライアルが完了し、OpenCode を組織で使用する準備が整ったら、 -**お問い合わせ**して価格設定と実装オプションについてご相談ください。 - ---- - -### 中央設定 - -組織全体で単一の中央設定を使用するように OpenCode をセットアップできます。 - -この一元化された設定は SSO プロバイダーと統合でき、すべてのユーザーが内部 AI ゲートウェイのみにアクセスできるようにします。 - ---- - -### SSO統合 - -中央の設定を通じて、OpenCode は認証のために組織の SSO プロバイダーと統合できます。 - -これにより、OpenCode は既存の ID 管理システムを通じて内部 AI ゲートウェイの認証情報を取得できるようになります。 - ---- - -### 内部AIゲートウェイ - -中央設定を使用すると、内部 AI ゲートウェイのみを使用するように OpenCode を構成することもできます。 - -他のすべての AI プロバイダーを無効にして、すべてのリクエストが組織の承認されたインフラストラクチャを通過するようにすることもできます。 - ---- - -### セルフホスティング - -データが流出しないように共有ページを無効にすることをお勧めします。 -貴社のインフラストラクチャ上でセルフホストすることもお手伝いします。 - -これは現在ロードマップに載っています。ご興味がございましたら、**お知らせください**。 - ---- - -## よくある質問 - -

-OpenCode Enterpriseとは何ですか? - -OpenCode Enterprise は、コードとデータがインフラストラクチャから決して流出しないようにしたい組織を対象としています。これは、SSO および内部 AI ゲートウェイと統合された一元化された設定を使用することで実現できます。 - -
- -
-OpenCode Enterpriseを始めるにはどうすればよいですか? - -まずはチームの内部トライアルから始めてください。 OpenCode はデフォルトでコードやコンテキストデータを保存しないため、簡単に開始できます。 - -その後、**お問い合わせ**いただき、価格や実装オプションについてご相談ください。 - -
- -
-エンタープライズの価格設定はどのようになっていますか? - -エンタープライズ価格はシートごとに提供されます。独自の LLM ゲートウェイをお持ちの場合、使用されたトークンに対して料金はかかりません。詳細については、組織のニーズに基づいたカスタム見積もりをご希望の場合は、**お問い合わせください**。 - -
- -
-OpenCode Enterpriseでデータは安全ですか? - -はい。 OpenCode はコードやコンテキストデータを保存しません。すべての処理はローカルで、または AI プロバイダーへの直接 API 呼び出しを通じて行われます。一元的な設定と SSO の統合により、データは組織のインフラストラクチャ内で安全に保たれます。 - -
- -
-独自のプライベートnpmレジストリを使用できますか? - -OpenCode は、Bun のネイティブ `.npmrc` ファイルサポートを通じてプライベート npm レジストリをサポートします。組織が 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 を実行する前にプライベートレジストリにログインする必要があります。 - -
diff --git a/packages/web/src/content/docs/ja/formatters.mdx b/packages/web/src/content/docs/ja/formatters.mdx deleted file mode 100644 index 8769b9760d..0000000000 --- a/packages/web/src/content/docs/ja/formatters.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: フォーマッタ -description: OpenCode は言語固有のフォーマッタを使用します。 ---- - -OpenCode は、言語固有のフォーマッタを使用してファイルを作成または編集した後、ファイルを自動的にフォーマットします。これにより、生成されるコードがプロジェクトのコードスタイルに従っていることが保証されます。 - ---- - -## 組み込み - -OpenCode には、一般的な言語およびフレームワーク用のいくつかの組み込みフォーマッタが付属しています。以下は、フォーマッタ、サポートされているファイル拡張子、および必要なコマンドまたは構成オプションのリストです。 - -| Formatter | Extensions | Requirements | -| -------------------- | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| air | .R | `air` command available | -| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, and [more](https://biomejs.dev/) | `biome.json(c)` config file | -| cargofmt | .rs | `cargo fmt` command available | -| clang-format | .c, .cpp, .h, .hpp, .ino, and [more](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` config file | -| cljfmt | .clj, .cljs, .cljc, .edn | `cljfmt` command available | -| dart | .dart | `dart` command available | -| dfmt | .d | `dfmt` command available | -| gleam | .gleam | `gleam` command available | -| gofmt | .go | `gofmt` command available | -| htmlbeautifier | .erb, .html.erb | `htmlbeautifier` command available | -| ktlint | .kt, .kts | `ktlint` command available | -| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | `mix` command available | -| nixfmt | .nix | `nixfmt` command available | -| ocamlformat | .ml, .mli | `ocamlformat` command available and `.ocamlformat` config file | -| ormolu | .hs | `ormolu` command available | -| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | `oxfmt` dependency in `package.json` and an [experimental env variable flag](/docs/cli/#experimental) | -| pint | .php | `laravel/pint` dependency in `composer.json` | -| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, and [more](https://prettier.io/docs/en/index.html) | `prettier` dependency in `package.json` | -| rubocop | .rb, .rake, .gemspec, .ru | `rubocop` command available | -| ruff | .py, .pyi | `ruff` command available with config | -| rustfmt | .rs | `rustfmt` command available | -| shfmt | .sh, .bash | `shfmt` command available | -| standardrb | .rb, .rake, .gemspec, .ru | `standardrb` command available | -| terraform | .tf, .tfvars | `terraform` command available | -| uv | .py, .pyi | `uv` command available | -| zig | .zig, .zon | `zig` command available | - -したがって、プロジェクトの `prettier` に `package.json` が含まれている場合、OpenCode は自動的にそれを使用します。 - ---- - -## 仕組み - -OpenCode がファイルを書き込んだり編集したりすると、次のことが行われます。 - -1. 有効なすべてのフォーマッタに対してファイル拡張子をチェックします。 -2. ファイルに対して適切なフォーマッタコマンドを実行します。 -3. 書式の変更を自動的に適用します。 - -このプロセスはバックグラウンドで実行されるため、手動の手順を行わなくてもコードスタイルが維持されます。 - ---- - -## 設定 - -OpenCode 設定の `formatter` セクションを通じてフォーマッタをカスタマイズできます。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "formatter": {} -} -``` - -各フォーマッタ設定は以下をサポートします。 - -| プロパティ | タイプ | 説明 | -| ------------- | ------------ | ---------------------------------------------------------- | -| `disabled` | ブール値 | フォーマッタを無効にするには、これを `true` に設定します。 | -| `command` | 文字列[] | フォーマットのために実行するコマンド | -| `environment` | オブジェクト | フォーマッタの実行時に設定する環境変数 | -| `extensions` | 文字列[] | このフォーマッタが処理するファイル拡張子 | - -いくつかの例を見てみましょう。 - ---- - -### フォーマッタの無効化 - -**すべて**のフォーマッタをグローバルに無効にするには、`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` プレースホルダー** は、フォーマットされるファイルへのパスに置き換えられます。 diff --git a/packages/web/src/content/docs/ja/github.mdx b/packages/web/src/content/docs/ja/github.mdx deleted file mode 100644 index d587094dc8..0000000000 --- a/packages/web/src/content/docs/ja/github.mdx +++ /dev/null @@ -1,322 +0,0 @@ ---- -title: GitHub -description: GitHub の問題とプルリクエストで OpenCode を使用します。 ---- - -OpenCode は GitHub ワークフローと統合します。コメントで `/opencode` または `/oc` に言及すると、OpenCode が GitHub Actions ランナー内でタスクを実行します。 - ---- - -## 機能 - -- **問題のトリアージ**: OpenCode に問題を調べて説明してもらいます。 -- **修正と実装**: OpenCode に問題の修正または機能の実装を依頼します。そして、新しいブランチで動作し、すべての変更を含む PR を送信します。 -- **安全**: OpenCode は GitHub のランナー内で実行されます。 - ---- - -## インストール - -GitHub リポジトリにあるプロジェクトで次のコマンドを実行します。 - -```bash -opencode github install -``` - -ここでは、GitHub アプリのインストール、ワークフローの作成、シークレットの設定について説明します。 - ---- - -### 手動セットアップ - -または、手動で設定することもできます。 - -1. **GitHub アプリをインストールします** - -[**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent) にアクセスしてください。ターゲットリポジトリにインストールされていることを確認してください。 - -2. **ワークフローを追加** - -次のワークフローファイルをリポジトリの `.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 キーをシークレットに保存する** - -組織またはプロジェクトの**設定**で、左側の**シークレットと変数**を展開し、**アクション**を選択します。そして、必要な API キーを追加します。 - ---- - -## 設定 - -- `model`: OpenCode で使用するモデル。 `provider/model` の形式をとります。これは**必須**です。 -- `agent`: 使用するエージェント。プライマリエージェントである必要があります。見つからない場合は、設定から `default_agent` にフォールバックするか、`"build"` にフォールバックします。 -- `share`: OpenCode セッションを共有するかどうか。パブリックリポジトリのデフォルトは **true** です。 -- `prompt`: デフォルトの動作をオーバーライドするためのオプションのカスタムプロンプト。これを使用して、OpenCode がリクエストを処理する方法をカスタマイズします。 -- `token`: コメントの作成、変更のコミット、プルリクエストのオープンなどの操作を実行するためのオプションの GitHub アクセストークン。デフォルトでは、OpenCode は OpenCode GitHub アプリからのインストールアクセストークンを使用するため、コミット、コメント、プルリクエストはアプリからのものとして表示されます。 - -あるいは、OpenCode GitHub アプリをインストールせずに、GitHub Action ランナーの [組み込み `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) を使用することもできます。ワークフローで必要な権限を必ず付与してください。 - -```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` | 問題または PR についてコメントする | コメントで `/opencode` または `/oc` について言及してください。 OpenCode はコンテキストを読み取り、ブランチを作成したり、PR を開いたり、返信したりできます。 | -| `pull_request_review_comment` | PR 内の特定のコード行にコメントする | コードをレビューするときに、`/opencode` または `/oc` について言及します。 OpenCode は、ファイルパス、行番号、および diff コンテキストを受け取ります。 | -| `issues` | 問題がオープンまたは編集されました | 問題が作成または変更されると、OpenCode が自動的にトリガーされます。 `prompt` 入力が必要です。 | -| `pull_request` | PR がオープンまたは更新されました | PR が開かれる、同期される、または再度開かれるときに、OpenCode を自動的にトリガーします。自動レビューに役立ちます。 | -| `schedule` | Cron ベースのスケジュール | スケジュールに従って OpenCode を実行します。 `prompt` 入力が必要です。出力はログと PR に送られます (コメントする問題はありません)。 | -| `workflow_dispatch` | GitHub UI からの手動トリガー | [アクション] タブから OpenCode をオンデマンドでトリガーします。 `prompt` 入力が必要です。出力はログと PR に送られます。 | - -### スケジュールの例 - -スケジュールに従って 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. -``` - -スケジュールされたイベントの場合、指示を抽出するためのコメントがないため、`prompt` 入力は **必須** です。スケジュールされたワークフローは、権限チェックのためのユーザーコンテキストなしで実行されるため、OpenCode がブランチまたは PR を作成することが予想される場合、ワークフローは `contents: write` および `pull-requests: write` を付与する必要があります。 - ---- - -### プルリクエストの例 - -PR が開かれるか更新されるときに、PR を自動的にレビューします。 - -```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 はデフォルトでプルリクエストをレビューします。 - ---- - -### Issueのトリアージの例 - -新しい問題を自動的に優先順位付けします。この例では、スパムを減らすために 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 の動作をカスタマイズします。 - -```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 -``` - -これは、プロジェクトに関連する特定のレビュー基準、コーディング標準、または重点分野を強制するのに役立ちます。 - ---- - -## 例 - -GitHub で OpenCode を使用する方法の例をいくつか示します。 - -- **Issueの説明** - -このコメントを GitHub の問題に追加します。 - -``` - /opencode explain this issue -``` - -OpenCode は、すべてのコメントを含むスレッド全体を読み取り、明確な説明を返信します。 - -- **Issueの修正** - -GitHub の問題で次のように言います。 - -``` - /opencode fix this -``` - -そして、OpenCode は新しいブランチを作成し、変更を実装し、変更を含む PR を開きます。 - -- **PR をレビューして変更を加える** - -GitHub PR に次のコメントを残してください。 - -``` - Delete the attachment from S3 when the note is removed /oc -``` - -OpenCode は要求された変更を実装し、同じ PR にコミットします。 - -- **特定のコード行のレビュー** - -PR の「ファイル」タブのコード行に直接コメントを残します。 OpenCode は、ファイル、行番号、および diff コンテキストを自動的に検出して、正確な応答を提供します。 - -``` - [Comment on specific lines in Files tab] - /oc add error handling here -``` - -特定の行にコメントすると、OpenCode は以下を受け取ります。 - -- レビューされている正確なファイル -- コードの特定の行 -- 周囲の差分コンテキスト -- 行番号情報 - -これにより、ファイルパスや行番号を手動で指定する必要がなく、よりターゲットを絞ったリクエストが可能になります。 diff --git a/packages/web/src/content/docs/ja/gitlab.mdx b/packages/web/src/content/docs/ja/gitlab.mdx deleted file mode 100644 index 8560c95038..0000000000 --- a/packages/web/src/content/docs/ja/gitlab.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: GitLab -description: GitLab の問題とマージリクエストで OpenCode を使用します。 ---- - -OpenCode は、GitLab CI/CD パイプラインまたは GitLab Duo を通じて GitLab ワークフローと統合します。 - -どちらの場合も、OpenCode は GitLab ランナー上で実行されます。 - ---- - -## GitLab CI - -OpenCode は通常の GitLab パイプラインで動作します。 [CI コンポーネント](https://docs.gitlab.com/ee/ci/components/) としてパイプラインに組み込むことができます。 - -ここでは、コミュニティが作成した OpenCode 用の CI/CD コンポーネント — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode). - ---- - -### 機能 - -- **ジョブごとにカスタム設定を使用する**: カスタム設定ディレクトリ (`./config/#custom-directory` など) を使用して OpenCode を構成し、OpenCode の呼び出しごとに機能を有効または無効にします。 -- **最小限のセットアップ**: CI コンポーネントはバックグラウンドで OpenCode をセットアップします。必要なのは、OpenCode 設定と初期プロンプトを作成することだけです。 -- **柔軟性**: CI コンポーネントは、動作をカスタマイズするための複数の入力をサポートしています。 - ---- - -### 設定 - -1. OpenCode 認証 JSON をファイルタイプ CI 環境変数として [**設定**] > [**CI/CD**] > [**変数**] に保存します。必ず「マスクして非表示」としてマークしてください。 -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. AI モデルプロバイダー API キーを取得する -4. サービスアカウントを作成する -5. CI/CD変数を構成する -6. フロー設定ファイルを作成します。例を次に示します。 - -
- - フロー設定 - - ```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. - - - 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. - - " - - 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 - ``` - -
- -詳細な手順については、[GitLab CLI エージェント docs](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/)を参照してください。 - ---- - -### 例 - -GitLab で OpenCode を使用する方法の例をいくつか示します。 - -:::tip -`@opencode` とは異なるトリガーフレーズを使用するように設定できます。 -::: - -- **問題の説明** - -このコメントを GitLab の問題に追加します。 - -``` - @opencode explain this issue -``` - -OpenCode は問題を読み、明確な説明を返信します。 - -- **問題を修正** - -GitLab の問題では、次のように言います。 - -``` - @opencode fix this -``` - -OpenCode は新しいブランチを作成し、変更を実装し、変更を含むマージリクエストを開きます。 - -- **マージリクエストを確認する** - -GitLab マージリクエストに次のコメントを残してください。 - -``` - @opencode review this merge request -``` - -OpenCode はマージリクエストをレビューし、フィードバックを提供します。 diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx deleted file mode 100644 index 313f67fd1f..0000000000 --- a/packages/web/src/content/docs/ja/go.mdx +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: Go -description: オープンなコーディングモデルを利用するための低価格サブスクリプション。 ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Goは低価格のサブスクリプションで、**初月は5ドル**、その後は**月額10ドル**で、人気のオープンなコーディングモデルに安定してアクセスできます。 - -GoはOpenCodeの他のプロバイダーと同様に機能します。OpenCode GoをサブスクライブしてAPIキーを取得します。これは**完全に任意**であり、OpenCodeを使用するために必須ではありません。 - -主に海外ユーザー向けに設計されており、世界中で安定してアクセスできるよう、モデルは米国、EU、シンガポールでホストされています。 - ---- - -## 背景 - -オープンモデルは非常に優れています。現在では、コーディングタスクにおいてプロプライエタリ(独自)モデルに近いパフォーマンスを達成しています。そして、多くのプロバイダーが競争力を持って提供できるため、通常ははるかに安価です。 - -しかし、これらのモデルに安定して低遅延でアクセスすることは困難な場合があります。プロバイダーによって品質や可用性が異なります。 - -:::tip -OpenCodeでうまく動作する一部のモデルとプロバイダーをテストしました。 -::: - -この問題を解決するために、私たちはいくつかの取り組みを行いました: - -1. 一部のオープンモデルをテストし、それらを最適に実行する方法について、そのチームと話し合いました。 -2. 次に、これらが正しく提供されていることを確認するために、いくつかのプロバイダーと協力しました。 -3. 最後に、モデルとプロバイダーの組み合わせをベンチマークし、自信を持ってお勧めできるリストを作成しました。 - -OpenCode Goを使用すると、これらのモデルに**初月は5ドル**、その後は**月額10ドル**でアクセスできます。 - ---- - -## 仕組み - -OpenCode Goは、OpenCodeの他のプロバイダーと同様に機能します。 - -1. **OpenCode Zen**にサインインし、GoをサブスクライブしてAPIキーをコピーします。 -2. TUIで`/connect`コマンドを実行し、`OpenCode Go`を選択して、APIキーを貼り付けます。 -3. TUIで`/models`を実行すると、Goを通じて利用可能なモデルのリストが表示されます。 - -:::note -OpenCode Goをサブスクライブできるのは、1つのワークスペースにつき1メンバーのみです。 -::: - -現在のモデルリストには以下が含まれます: - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -新しいモデルをテストして追加するにつれて、モデルのリストは変更される場合があります。 - ---- - -## 利用制限 - -OpenCode Goには以下の制限が含まれています: - -- **5時間の制限** — 12ドル分の利用 -- **週間の制限** — 30ドル分の利用 -- **月間の制限** — 60ドル分の利用 - -制限はドル単位で定義されています。つまり、実際のリクエスト数は使用するモデルによって異なります。DeepSeek V4 Flashのような安価なモデルではより多くのリクエストが可能ですが、GLM-5.2のような高コストのモデルではリクエスト数が少なくなります。 - -以下の表は、一般的なGoの利用パターンに基づいた推定リクエスト数を示しています: - -| Model | 5時間あたりのリクエスト数 | 週間リクエスト数 | 月間リクエスト数 | -| ----------------- | ------------------------- | ---------------- | ---------------- | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -推定値は、観測された平均的なリクエストパターンに基づいています: - -- GLM-5.2/5.1 — リクエストあたり 入力 700トークン、キャッシュ 52,000トークン、出力 150トークン -- Kimi K2.7 Code/K2.6 — リクエストあたり 入力 870トークン、キャッシュ 55,000トークン、出力 200トークン -- DeepSeek V4 Pro — リクエストあたり 入力 750トークン、キャッシュ 82,000トークン、出力 290トークン -- DeepSeek V4 Flash — リクエストあたり 入力 790トークン、キャッシュ 68,000トークン、出力 280トークン -- MiniMax M3 — リクエストあたり 入力 510トークン、キャッシュ 56,000トークン、出力 190トークン -- MiniMax M2.7 — リクエストあたり 入力 300トークン、キャッシュ 55,000トークン、出力 125トークン -- Qwen3.7 Max — リクエストあたり 入力 420トークン、キャッシュ 66,000トークン、出力 200トークン -- Qwen3.7 Plus — リクエストあたり 入力 500トークン、キャッシュ 57,000トークン、出力 190トークン -- Qwen3.6 Plus — リクエストあたり 入力 500トークン、キャッシュ 57,000トークン、出力 190トークン -- MiMo-V2.5 — リクエストあたり 入力 830トークン、キャッシュ 71,500トークン、出力 295トークン -- MiMo-V2.5-Pro — リクエストあたり 入力 790トークン、キャッシュ 86,000トークン、出力 305トークン - -推定値は、100万トークンあたりの以下の価格にも基づいています: - -| Model | Input | Output | Cached Read | Cached Write | -| ---------------------------- | ----- | ------ | ----------- | ------------ | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -現在の利用状況は**コンソール**で追跡できます。 - -:::tip -利用制限に達した場合でも、無料モデルを引き続き使用できます。 -::: - -初期の利用状況やフィードバックから学ぶにつれて、利用制限は変更される場合があります。 - ---- - -### 制限を超えた利用 - -Zen残高にクレジットがある場合は、コンソールで**Use balance**オプションを有効にすることができます。有効にすると、利用制限に達した後、リクエストをブロックする代わりに、GoはZen残高から利用するようになります。 - ---- - -## エンドポイント - -以下のAPIエンドポイントを通じて、Goモデルにアクセスすることもできます。 - -| Model | Model ID | Endpoint | AI SDK Package | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -OpenCode設定の[model id](/docs/config/#models)は、`opencode-go/`という形式を使用します。たとえば、Kimi K2.7 Codeの場合は、設定で`opencode-go/kimi-k2.7-code`を使用します。 - ---- - -### モデル - -利用可能なモデルとそのメタデータの完全な一覧は、次から取得できます。 - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## プライバシー - -このプランは主に海外ユーザー向けに設計されており、安定したグローバルアクセスのため、モデルは US、EU、Singapore でホストされています。各プロバイダーはデータを保持しないポリシーに従っており、お客様のデータをモデルのトレーニングに使用することはありません。 - ---- - -## 目標 - -OpenCode Goを作成した目的は以下の通りです: - -1. 低価格のサブスクリプションで、より多くの人がAIコーディングを**利用しやすく**する。 -2. 最高のオープンなコーディングモデルに**安定した**アクセスを提供する。 -3. コーディングエージェントの利用向けに**テストおよびベンチマークされた**モデルを厳選する。 -4. OpenCodeで他のプロバイダーも使用できるようにすることで、**ベンダーロックインをなくす**。 diff --git a/packages/web/src/content/docs/ja/ide.mdx b/packages/web/src/content/docs/ja/ide.mdx deleted file mode 100644 index 6003f6412c..0000000000 --- a/packages/web/src/content/docs/ja/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: IDE -description: VS Code、Cursor、およびその他の IDE 用の OpenCode 拡張機能 ---- - -OpenCode は、VS Code、Cursor、またはターミナルをサポートする任意の IDE と統合します。開始するには、ターミナルで `opencode` を実行するだけです。 - ---- - -## 使用法 - -- **クイック起動**: `Cmd+Esc` (Mac) または `Ctrl+Esc` (Windows/Linux) を使用して、分割ターミナルビューで OpenCode を開くか、既存のターミナルセッションが既に実行されている場合はそれにフォーカスします。 -- **新しいセッション**: すでに開いている場合でも、`Cmd+Shift+Esc` (Mac) または `Ctrl+Shift+Esc` (Windows/Linux) を使用して、新しい OpenCode ターミナルセッションを開始します。 UI の [OpenCode] ボタンをクリックすることもできます。 -- **コンテキスト認識**: 現在の選択またはタブを OpenCode と自動的に共有します。 -- **ファイル参照のショートカット**: ファイル参照を挿入するには、`Cmd+Option+K` (Mac) または `Alt+Ctrl+K` (Linux/Windows) を使用します。たとえば、`@File#L37-42`。 - ---- - -## インストール - -OpenCode を VS Code および Cursor、Windsurf、VSCodium などの一般的なフォークにインストールするには: - -1. VS Code を開く -2. 統合ターミナルを開きます -3. `opencode` を実行します - 拡張機能は自動的にインストールされます - -一方、TUI から `/editor` または `/export` を実行するときに独自の IDE を使用したい場合は、`export EDITOR="code --wait"` を設定する必要があります。 [詳細はこちら](/docs/tui/#editor-setup)。 - ---- - -### 手動インストール - -Extension Marketplace で **OpenCode** を検索し、**インストール** をクリックします。 - ---- - -### トラブルシューティング - -拡張機能が自動的にインストールされない場合: - -- 統合ターミナルで `opencode` を実行していることを確認してください。 -- IDE の CLI がインストールされていることを確認します。 - - 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 に拡張機能をインストールする権限があることを確認してください diff --git a/packages/web/src/content/docs/ja/index.mdx b/packages/web/src/content/docs/ja/index.mdx deleted file mode 100644 index e4e84d7b1c..0000000000 --- a/packages/web/src/content/docs/ja/index.mdx +++ /dev/null @@ -1,350 +0,0 @@ ---- -title: はじめに -description: OpenCode を始めましょう。 ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" -import config from "../../../../config.mjs" -export const console = config.console - -[**OpenCode**](/) は、オープンソースの AI コーディングエージェントです。これは、ターミナルベースのインターフェイス、デスクトップアプリ、または IDE 拡張機能として利用できます。 - -![opencodeテーマ](../../../assets/lander/screenshot.png)を使用したOpenCode TUI - -始めましょう。 - ---- - -#### 前提条件 - -ターミナルで OpenCode を使用するには、次のものが必要です。 - -1. 次のような最新のターミナルエミュレータ: - - [WezTerm](https://wezterm.org)、クロスプラットフォーム - - [Alacritty](https://alacritty.org)、クロスプラットフォーム - - [Ghostty](https://ghostty.org)、Linux および macOS - - [Kitty](https://sw.kovidgoyal.net/kitty/)、Linux および macOS - -2. 使用する LLM プロバイダーの API キー。 - ---- - -## インストール - -OpenCode をインストールする最も簡単な方法は、インストールスクリプトを使用することです。 - -```bash -curl -fsSL https://opencode.ai/install | bash -``` - -次のコマンドを使用してインストールすることもできます。 - -- **Node.js の使用** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **macOS および Linux での Homebrew の使用** - - ```bash - brew install anomalyco/tap/opencode - ``` - - > 最新のリリースには OpenCode タップを使用することをお勧めします。公式の `brew install opencode` 式は Homebrew チームによって維持されており、更新頻度は低くなります。 - -- **Arch Linux での Paru の使用** - - ```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 - ``` - -Bun を使用して Windows に OpenCode をインストールするためのサポートは現在進行中です。 - -[Releases](https://github.com/anomalyco/opencode/releases). - ---- - -## 設定 - -OpenCode を使用すると、API キーを構成することで任意の LLM プロバイダーを使用できます。 - -LLM プロバイダーを初めて使用する場合は、[OpenCode Zen](/docs/zen) をお勧めします。 -これは、OpenCode チームによってテストおよび検証されたモデルの厳選されたリストです。 - -1. TUI で `/connect` コマンドを実行し、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 -プロジェクトの `AGENTS.md` ファイルを Git にコミットする必要があります。 -::: - -これは、OpenCode がプロジェクトの構造と使用されているコーディングパターンを理解するのに役立ちます。 - ---- - -## 使用法 - -これで、OpenCode を使用してプロジェクトに取り組む準備が整いました。何でもお気軽にお尋ねください! - -AI コーディングエージェントを初めて使用する場合は、次の例を参考にしてください。 - ---- - -### 質問する - -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 mode_ があり、 -代わりに、その機能を*どのように*実装するかを提案します。 - -**Tab** キーを使用してそれに切り替えます。右下隅にこれを示すインジケーターが表示されます。 - -```bash frame="none" title="Switch to Plan mode" - -``` - -では、何をしたいのかを説明しましょう。 - -```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 -画像をターミナルにドラッグアンドドロップして、プロンプトに追加します。 -::: - -OpenCode は、指定された画像をスキャンしてプロンプトに追加できます。 -画像をターミナルにドラッグアンドドロップしてこれを行うことができます。 - -3. **機能を構築する** - -計画に慣れたら、*Build mode*に戻ります。 -**Tab** キーをもう一度押します。 - -```bash frame="none" - -``` - -そして変更を加えるように依頼します。 - -```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? -``` - -ここからプロンプトを調整し、OpenCode に再試行を依頼できます。 - -:::tip -`/undo` を複数回実行すると、複数の変更を元に戻すことができます。 -::: - -または、`/redo` コマンドを使用して変更を**やり直す**こともできます。 - -```bash frame="none" -/redo -``` - ---- - -## 共有 - -OpenCode との会話は [他のチームメンバーと共有できます](/docs/share)。 - -```bash frame="none" -/share -``` - -これにより、現在の会話へのリンクが作成され、クリップボードにコピーされます。 - -:::note -会話はデフォルトでは共有されません。 -::: - -これは [OpenCode を使用した会話 ](https://opencode.ai/s/4XP1fce5) の例です。 - ---- - -## カスタマイズ - -それで終わりです!これであなたは OpenCode の使い方のプロになりました。 - -独自のものにするには、[テーマ](/docs/themes) を選択する、[キーバインドをカスタマイズする](/docs/keybinds)、[コードフォーマッタ](/docs/formatters) を設定する、[カスタムコマンド](/docs/commands) を作成する、または [OpenCode設定](/docs/config) を試してみることをお勧めします。 diff --git a/packages/web/src/content/docs/ja/keybinds.mdx b/packages/web/src/content/docs/ja/keybinds.mdx deleted file mode 100644 index 8d2de3ba95..0000000000 --- a/packages/web/src/content/docs/ja/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: キーバインド -description: キーバインドをカスタマイズします。 ---- - -OpenCode には、`tui.json` を通じてカスタマイズできるキーバインドのリストがあります。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "h", - "display_thinking": "none" - } -} -``` - ---- - -## リーダーキー - -OpenCode は、ほとんどのキーバインドに `leader` キーを使用します。これにより、ターミナルでの競合が回避されます。 - -デフォルトでは、`ctrl+x` がリーダーキーであり、ほとんどの操作では、最初にリーダーキーを押してからショートカットを押す必要があります。たとえば、新しいセッションを開始するには、まず `ctrl+x` を押してから、`n` を押します。 - -キーバインドにリーダーキーを使用する必要はありませんが、そうすることをお勧めします。 - ---- - -## キーバインドを無効にする - -キーバインドを無効にするには、値「none」を指定してキーを `tui.json` に追加します。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "session_compact": "none" - } -} -``` - ---- - -## デスクトッププロンプトのショートカット - -OpenCode デスクトップアプリのプロンプト入力は、テキストを編集するための一般的な Readline/Emacs スタイルのショートカットをサポートしています。これらは組み込みであり、現在 `opencode.json` を介して構成することはできません。 - -| ショートカット | アクション | -| -------------- | ------------------------------------------------- | -| `ctrl+a` | 現在の行の先頭に移動 | -| `ctrl+e` | 現在の行の末尾に移動 | -| `ctrl+b` | カーソルを 1 文字前に移動 | -| `ctrl+f` | カーソルを 1 文字後に移動 | -| `alt+b` | カーソルを 1 単語前に移動 | -| `alt+f` | カーソルを 1 単語後に移動 | -| `ctrl+d` | カーソル下の文字を削除 | -| `ctrl+k` | 行末まで強制終了 | -| `ctrl+u` | 行の先頭までキル | -| `ctrl+w` | 前の単語を削除 | -| `alt+d` | 次の単語を削除 | -| `ctrl+t` | 文字を入れ替える | -| `ctrl+g` | ポップオーバーをキャンセル/実行中の応答を中止する | - ---- - -## Shift+Enter - -一部のターミナルでは、デフォルトでは Enter キーを使用して修飾キーを送信しません。エスケープシーケンスとして `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 を再起動するか、新しいタブを開きます。 diff --git a/packages/web/src/content/docs/ja/lsp.mdx b/packages/web/src/content/docs/ja/lsp.mdx deleted file mode 100644 index dfcda179bf..0000000000 --- a/packages/web/src/content/docs/ja/lsp.mdx +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: LSPサーバー -description: OpenCode は LSP サーバーと統合します。 ---- - -OpenCode は Language Server Protocol (LSP) サーバーと統合し、診断を agent へのフィードバックとして使用できます。 - ---- - -## 組み込み - -OpenCode には、一般的な言語用のいくつかの組み込み LSP サーバーが付属しています。 - -| LSP Server | Extensions | Requirements | -| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------ | -| astro | .astro | Auto-installs for Astro projects | -| bash | .sh, .bash, .zsh, .ksh | Auto-installs bash-language-server | -| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Auto-installs for C/C++ projects | -| csharp | .cs | `.NET SDK` installed | -| clojure-lsp | .clj, .cljs, .cljc, .edn | `clojure-lsp` command available | -| dart | .dart | `dart` command available | -| deno | .ts, .tsx, .js, .jsx, .mjs | `deno` command available (auto-detects deno.json/deno.jsonc) | -| elixir-ls | .ex, .exs | `elixir` command available | -| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | `eslint` dependency in project | -| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` installed | -| gleam | .gleam | `gleam` command available | -| gopls | .go | `go` command available | -| hls | .hs, .lhs | `haskell-language-server-wrapper` command available | -| jdtls | .java | `Java SDK (version 21+)` installed | -| julials | .jl | `julia` and `LanguageServer.jl` installed | -| kotlin-ls | .kt, .kts | Auto-installs for Kotlin projects | -| lua-ls | .lua | Auto-installs for Lua projects | -| nixd | .nix | `nixd` command available | -| ocaml-lsp | .ml, .mli | `ocamllsp` command available | -| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | `oxlint` dependency in project | -| php intelephense | .php | Auto-installs for PHP projects | -| prisma | .prisma | `prisma` command available | -| pyright | .py, .pyi | `pyright` dependency installed | -| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | `ruby` and `gem` commands available | -| rust | .rs | `rust-analyzer` command available | -| sourcekit-lsp | .swift, .objc, .objcpp | `swift` installed (`xcode` on macOS) | -| svelte | .svelte | Auto-installs for Svelte projects | -| terraform | .tf, .tfvars | Auto-installs from GitHub releases | -| tinymist | .typ, .typc | Auto-installs from GitHub releases | -| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | `typescript` dependency in project | -| vue | .vue | Auto-installs for Vue projects | -| yaml-ls | .yaml, .yml | Auto-installs Red Hat yaml-language-server | -| zls | .zig, .zon | `zig` command available | - -LSP はデフォルトで無効です。有効にすると、上記のファイル拡張子のいずれかが検出され、要件が満たされた場合にサーバーが起動します。 - -:::note -`OPENCODE_DISABLE_LSP_DOWNLOAD` 環境変数を `true` に設定すると、LSP サーバーの自動ダウンロードを無効にできます。 -::: - ---- - -## 仕組み - -LSP が有効で OpenCode がファイルを開くと、次のようになります。 - -1. 有効なすべての LSP サーバーに対してファイル拡張子をチェックします。 -2. 適切な LSP サーバーがまだ実行されていない場合は開始します。 - ---- - -## ベストプラクティス - -LSP は、言語サーバーの診断を提供することで、agent が問題を見つけて修正する助けになります。これは一部のプロジェクトで有用ですが、常に明確な利点になるとは限りません。 - -言語サーバーは同期が外れたり、多くのメモリを使用したり、バージョンやプロジェクトによって挙動が変わったり、agent のワークフローを遅くすることがあります。多くのプロジェクトでは、agent に lint、typecheck、その他の診断用 CLI ツールを直接実行させる方が適しています。これにより、これらのトレードオフを避けながら、エラーを agent のループに戻せます。これらのコマンドを `AGENTS.md` や skills などの instruction files に記載し、agent が何を実行すべきか分かるようにしてください。追加の言語サーバーフィードバックが有効な場合に LSP を有効にしてください。 - ---- - -## 設定 - -OpenCode 設定の `lsp` セクションを通じて LSP サーバーを有効化し、カスタマイズできます。 - -すべての組み込み LSP サーバーを有効にするには、`lsp` を `true` に設定します。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -オブジェクトを使用すると、組み込みサーバーを有効にしたまま、上書き設定やカスタムサーバーを設定できます。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": {} -} -``` - -各 LSP サーバーは以下をサポートします。 - -| プロパティ | タイプ | 説明 | -| ---------------- | ------------ | ---------------------------------------------------------- | -| `disabled` | ブール値 | LSP サーバーを無効にするには、これを `true` に設定します。 | -| `command` | 文字列[] | LSP サーバーを起動するコマンド | -| `extensions` | 文字列[] | この LSP サーバーが処理するファイル拡張子 | -| `env` | オブジェクト | サーバーの起動時に設定する環境変数 | -| `initialization` | オブジェクト | LSP サーバーに送信する初期化オプション | - -いくつかの例を見てみましょう。 - ---- - -### 環境変数 - -LSP サーバーの起動時に `env` プロパティを使用して環境変数を設定します。 - -```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 サーバーは無効になります。別の設定で有効化されたすべての 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` - -ファイルにはライセンスキーのみが含まれており、追加のコンテンツは含まれていません。 diff --git a/packages/web/src/content/docs/ja/mcp-servers.mdx b/packages/web/src/content/docs/ja/mcp-servers.mdx deleted file mode 100644 index 3ac9edc811..0000000000 --- a/packages/web/src/content/docs/ja/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -title: MCPサーバー -description: ローカルおよびリモートの MCP ツールを追加します。 ---- - -_Model Context Protocol_ (MCP) を使用して、OpenCode に外部ツールを追加できます。 OpenCode は、ローカルサーバーとリモートサーバーの両方をサポートします。 - -MCP ツールを追加すると、組み込みツールとともに LLM で自動的に使用できるようになります。 - ---- - -#### 注意事項 - -MCP サーバーを使用すると、コンテキストが追加されます。多くのツールがある場合、これはすぐに増加する可能性があります。したがって、使用する MCP サーバーには注意することをお勧めします。 - -:::tip -MCP サーバーはコンテキストに追加されるため、どのサーバーを有効にするかには注意してください。 -::: - -特定の MCP サーバー (GitHub MCP サーバーなど) は、大量のトークンを追加する傾向があり、コンテキスト制限を簡単に超える可能性があります。 - ---- - -## 有効化 - -MCP サーバーは、`mcp` の下の [OpenCode 設定](https://opencode.ai/docs/config/) で定義できます。各 MCP を一意の名前で追加します。 LLM にプロンプ​​トを表示するときに、その MCP を名前で参照できます。 - -```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` に設定してサーバーを無効にすることもできます。これは、サーバーを設定から削除せずに一時的に無効にする場合に便利です。 - ---- - -### リモートのデフォルトを上書きする - -組織は、`.well-known/opencode` エンドポイント経由でデフォルトの MCP サーバーを提供できます。これらのサーバーはデフォルトで無効になっている場合があり、ユーザーは必要なサーバーにオプトインできます。 - -組織のリモート設定から特定のサーバーを有効にするには、`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", - }, - }, - }, -} -``` - -このコマンドは、ローカル MCP サーバーの起動方法を示します。環境変数のリストを渡すこともできます。 - -たとえば、テスト [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP サーバーを追加する方法は次のとおりです。 - -```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` | 文字列 | Y | MCP サーバー接続のタイプは、`"local"` である必要があります。 | -| `command` | 配列 | Y | MCP サーバーを実行するためのコマンドと引数。 | -| `environment` | オブジェクト | | サーバーの実行時に設定する環境変数。 | -| `enabled` | ブール値 | | 起動時に MCP サーバーを有効または無効にします。 | -| `timeout` | 数値 | | MCP サーバーからツールを取得する際のタイムアウト (ミリ秒)。デフォルトは 5000 (5 秒) です。 | - ---- - -## リモート - -`type` を `"remote"` に設定して、リモート MCP サーバーを追加します。 - -```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` はリモート MCP サーバーの URL で、`headers` オプションを使用するとヘッダーのリストを渡すことができます。 - ---- - -#### オプション - -| オプション | タイプ | 必須 | 説明 | -| ---------- | ------------ | ---- | ------------------------------------------------------------------------------------------ | -| `type` | 文字列 | Y | MCP サーバー接続のタイプは、`"remote"` である必要があります。 | -| `url` | 文字列 | Y | リモート MCP サーバーの URL。 | -| `enabled` | ブール値 | | 起動時に MCP サーバーを有効または無効にします。 | -| `headers` | オブジェクト | | リクエストとともに送信するヘッダー。 | -| `oauth` | オブジェクト | | OAuth 認証設定。以下の「[OAuth](#oauth)」セクションを参照してください。 | -| `timeout` | 数値 | | MCP サーバーからツールを取得する際のタイムアウト (ミリ秒)。デフォルトは 5000 (5 秒) です。 | - ---- - -## OAuth - -OpenCode は、リモート MCP サーバーの OAuth 認証を自動的に処理します。サーバーが認証を必要とする場合、OpenCode は次のことを行います。 - -1. 401 応答を検出し、OAuth フローを開始します。 -2. サーバーでサポートされている場合は **動的クライアント登録 (RFC 7591)** を使用します -3. 今後のリクエストに備えてトークンを安全に保管する - ---- - -### 自動 - -ほとんどの OAuth 対応 MCP サーバーでは、特別な構成は必要ありません。リモートサーバーを設定するだけです。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "my-oauth-server": { - "type": "remote", - "url": "https://mcp.example.com/mcp" - } - } -} -``` - -サーバーが認証を必要とする場合、OpenCode を初めて使用しようとすると、認証を求めるプロンプトが表示されます。そうでない場合は、`opencode mcp auth ` を使用して [flow](#authenticating) を手動でトリガーできます。 - ---- - -### 事前登録済み - -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の無効化 - -サーバー (代わりに API キーを使用するサーバーなど) の自動 OAuth を無効にする場合は、`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 config object, or `false` to disable OAuth auto-detection. | -| `clientId` | String | OAuth client ID. If not provided, dynamic client registration will be attempted. | -| `clientSecret` | String | OAuth client secret, if required by the authorization server. | -| `scope` | String | OAuth scopes to request during authorization. | - -#### デバッグ - -リモート MCP サーバーが認証に失敗した場合は、次の方法で問題を診断できます。 - -```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 -``` - -`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 - } -} -``` - -グロブパターンを使用して、一致するすべての 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 - } -} -``` - -ここでは、グロブパターン `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 - } - } - } -} -``` - ---- - -#### グロブパターン - -グロブパターンでは、単純な正規表現のグロブパターンを使用します。 - -- `*` は 0 個以上の任意の文字に一致します (例: `"my-mcp*"` は `my-mcp_search`、`my-mcp_list` などに一致します)。 -- `?` は 1 つの文字に正確に一致します -- 他のすべての文字は文字通り一致します - -:::note -MCP サーバーツールはサーバー名をプレフィックスとして登録されているため、サーバーのすべてのツールを無効にするには、次のコマンドを使用するだけです。 - -``` -"mymcpservername_*": false -``` - -::: - ---- - -## 例 - -以下に、一般的な MCP サーバーの例をいくつか示します。他のサーバーを文書化したい場合は、PR を送信できます。 - ---- - -### Sentry - -[Sentry MCP サーバー](https://mcp.sentry.dev) を追加して、Sentry プロジェクトや問題と対話します。 - -```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 - -ドキュメントを検索するために [Context7 MCP server](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` 環境変数が設定されていることを前提としています。 - -Context7 MCP サーバーを使用するには、プロンプトに `use 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 - -GitHub 上のコードスニペットを検索するには、[Grep by Vercel](https://grep.app) MCP サーバーを追加します。 - -```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. -``` diff --git a/packages/web/src/content/docs/ja/models.mdx b/packages/web/src/content/docs/ja/models.mdx deleted file mode 100644 index caa7b81795..0000000000 --- a/packages/web/src/content/docs/ja/models.mdx +++ /dev/null @@ -1,221 +0,0 @@ ---- -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 で適切に動作するいくつかのモデルを順不同で示します。 (これは完全なリストではなく、必ずしも最新であるとは限りません): - -- GPT5.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" -} -``` - -ここでの完全な ID は `provider_id/model_id` です。たとえば、[OpenCode Zen](/docs/zen) を使用している場合、GPT 5.1 Codex には `opencode/gpt-5.1-codex` を使用します。 - -[カスタムプロバイダー](/docs/providers#custom) を構成している場合、`provider_id` は構成の `provider` 部分のキーであり、`model_id` は `provider.models` のキーです。 - ---- - -## モデルの設定 - -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, - }, - }, - }, - }, - }, - }, -} -``` - -ここでは、2 つの組み込みモデル (`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. `--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. 内部優先順位に基づく最初のモデル。 diff --git a/packages/web/src/content/docs/ja/network.mdx b/packages/web/src/content/docs/ja/network.mdx deleted file mode 100644 index fc9eb3ff05..0000000000 --- a/packages/web/src/content/docs/ja/network.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: ネットワーク -description: プロキシとカスタム証明書を構成します。 ---- - -OpenCode は、エンタープライズネットワーク環境の標準プロキシ環境変数とカスタム証明書をサポートしています。 - ---- - -## プロキシ - -OpenCode は標準のプロキシ環境変数を尊重します。 - -```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 はローカル HTTP サーバーと通信します。ルーティングループを防ぐには、この接続のプロキシをバイパスする必要があります。 -::: -[CLI フラグ](/docs/cli#run) を使用して、サーバーのポートとホスト名を構成できます。 - ---- - -### 認証 - -プロキシで基本認証が必要な場合は、URL に認証情報を含めます。 - -```bash -export HTTPS_PROXY=http://username:password@proxy.example.com:8080 -``` - -:::caution -パスワードのハードコーディングは避けてください。環境変数または安全な認証情報ストレージを使用します。 -::: -NTLM や Kerberos などの高度な認証を必要とするプロキシの場合は、認証方法をサポートする LLM ゲートウェイの使用を検討してください。 - ---- - -## カスタム証明書 - -企業が HTTPS 接続にカスタム CA を使用している場合は、それらを信頼するように OpenCode を構成します。 - -```bash -export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem -``` - -これは、プロキシ接続と直接 API アクセスの両方で機能します。 diff --git a/packages/web/src/content/docs/ja/permissions.mdx b/packages/web/src/content/docs/ja/permissions.mdx deleted file mode 100644 index 6b8c06a0a9..0000000000 --- a/packages/web/src/content/docs/ja/permissions.mdx +++ /dev/null @@ -1,282 +0,0 @@ ---- -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" - } - } -} -``` - -ルールはパターンマッチによって評価され、**最後に一致したルールが優先されます**。一般的なパターンは、キャッチオール `"*"` ルールを最初に置き、その後により具体的なルールを置くことです。 - -### ワイルドカード - -許可パターンでは、単純なワイルドカードマッチングを使用します。 - -- `*` は 0 個以上の任意の文字と一致します -- `?` は 1 つの文字に正確に一致します -- 他のすべての文字は文字通り一致します - -### ホームディレクトリの展開 - -パターンの先頭で `~` または `$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" - } - } -} -``` - -信頼できるパスに重点を置いたリストを維持し、他のツール (`bash` など) の必要に応じて追加の許可または拒否ルールを追加します。 - ---- - -## 利用可能な権限 - -OpenCode の権限は、ツール名に加えて、いくつかの安全対策によってキー化されます。 - -- `read` — ファイルの読み取り (ファイルパスと一致) -- `edit` — すべてのファイル変更 (`edit`、`write`、`patch` をカバー) -- `glob` — ファイルのグロビング (グロブパターンと一致) -- `grep` — コンテンツ検索 (正規表現パターンと一致) -- `bash` — シェルコマンドの実行 (`git status --porcelain` などの解析されたコマンドと一致します) -- `task` — サブエージェントの起動 (サブエージェントのタイプと一致) -- `skill` — スキルをロードしています(スキル名と一致します) -- `lsp` — LSP クエリの実行 (現在は非細分性) -- `webfetch` — URL を取得します (URL と一致します) -- `websearch` — Web検索 (クエリと一致) -- `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" - } - } -} -``` - ---- - -## 承認の要求 - -OpenCode が承認を求めるプロンプトを表示すると、UI は 3 つの結果を提供します。 - -- `once` — このリクエストのみを承認します -- `always` — 提案されたパターンに一致する今後のリクエストを承認します(現在の OpenCode セッションの残りの部分) -- `reject` — リクエストを拒否します - -`always` が承認するパターンのセットは、ツールによって提供されます (たとえば、bash の承認では通常、`git status*` のような安全なコマンドプレフィックスがホワイトリストに登録されます)。 - ---- - -## エージェント - -エージェントごとに権限をオーバーライドできます。エージェントの権限はグローバル設定とマージされ、エージェントルールが優先されます。 [エージェントの権限について詳しくは、](/docs/agents#permissions) をご覧ください。 - -:::note -パターンマッチングの詳細な例については、上記の[詳細なルール (オブジェクト構文)](#detailed-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 *"` など) が必要です。 -::: - -```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 *"` など) が必要です。 -::: diff --git a/packages/web/src/content/docs/ja/plugins.mdx b/packages/web/src/content/docs/ja/plugins.mdx deleted file mode 100644 index 06a0dca9ad..0000000000 --- a/packages/web/src/content/docs/ja/plugins.mdx +++ /dev/null @@ -1,461 +0,0 @@ ---- -title: プラグイン -description: OpenCode を拡張する独自のプラグインを作成します。 ---- - -プラグインを使用すると、さまざまなイベントにフックして動作をカスタマイズすることで OpenCode を拡張できます。プラグインを作成して、新しい機能を追加したり、外部サービスと統合したり、OpenCode のデフォルトの動作を変更したりできます。 - -たとえば、コミュニティによって作成された [plugins](/docs/ecosystem#plugins) をチェックしてください。 - ---- - -## プラグインの使用 - -プラグインをロードするには 2 つの方法があります。 - ---- - -### ローカルファイルから - -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 パッケージとスコープ指定された npm パッケージの両方がサポートされています。 - -[ecosystem](/docs/ecosystem#plugins). - ---- - -### プラグインのインストール - -**npm プラグイン** は、起動時に Bun を使用して自動的にインストールされます。パッケージとその依存関係は `~/.cache/opencode/node_modules/` にキャッシュされます。 - -**ローカルプラグイン**は、プラグインディレクトリから直接ロードされます。外部パッケージを使用するには、config ディレクトリ内に `package.json` を作成するか ([Dependency](#dependencies) を参照)、プラグインを npm に公開して [config](/docs/config#plugins) に追加する必要があります。 - ---- - -### ロード順序 - -プラグインはすべてのソースからロードされ、すべてのフックが順番に実行されます。ロード順序は次のとおりです。 - -1. グローバル設定 (`~/.config/opencode/opencode.json`) -2. プロジェクト設定 (`opencode.json`) -3. グローバルプラグインディレクトリ (`~/.config/opencode/plugins/`) -4. プロジェクトプラグインディレクトリ (`.opencode/plugins/`) - -同じ名前とバージョンを持つ重複した npm パッケージは 1 回ロードされます。ただし、似た名前のローカルプラグインと npm プラグインは両方とも別々にロードされます。 - ---- - -## プラグインを作成する - -プラグインは、1 つ以上のプラグインをエクスポートする **JavaScript/TypeScript モジュール**です。 -各関数はコンテキストオブジェクトを受け取り、フックオブジェクトを返します。 - ---- - -### 依存関係 - -ローカルプラグインとカスタムツールは外部の npm パッケージを使用できます。必要な依存関係を含む `package.json` を config ディレクトリに追加します。 - -```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 ワークツリーのパス。 -- `client`: AI と対話するための OpenCode SDK クライアント。 -- `$`: Bun の [コマンドを実行するためのシェル API](https://bun.com/docs/runtime/shell)。 - ---- - -### 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.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"'` - } - }, - } -} -``` - -macOS 上で AppleScript を実行するために `osascript` を使用しています。ここでは通知を送信するために使用しています。 - -:::note -組み込みツールと同じ名前のプラグインツールを使用すると、プラグインツールが優先されます。 -::: - ---- - -### ロギング - -構造化ログには `console.log` の代わりに `client.app.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` 配列は無視されます。 - ---- - -### .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") - } - }, - } -} -``` - ---- - -### 環境変数を挿入する - -すべてのシェル実行 (AI ツールとユーザーターミナル) に環境変数を挿入します。 - -```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` 配列は無視されます。 diff --git a/packages/web/src/content/docs/ja/providers.mdx b/packages/web/src/content/docs/ja/providers.mdx deleted file mode 100644 index c969c6d4a0..0000000000 --- a/packages/web/src/content/docs/ja/providers.mdx +++ /dev/null @@ -1,1998 +0,0 @@ ---- -title: プロバイダー -description: OpenCode で LLM プロバイダーを使用する。 ---- - -import config from "../../../../config.mjs" -export const console = config.console - -OpenCode は [AI SDK](https://ai-sdk.dev/) および [Models.dev](https://models.dev) を使用して **75 以上の LLM プロバイダー** をサポートし、ローカルモデルの実行をサポートします。 - -プロバイダーを追加するには、次のことを行う必要があります。 - -1. `/connect` コマンドを使用して、プロバイダーの API キーを追加します。 -2. OpenCode 設定でプロバイダーを構成します。 - ---- - -### 認証情報 - -`/connect` コマンドを使用してプロバイダーの API キーを追加すると、それらは保存されます -`~/.local/share/opencode/auth.json`で。 - ---- - -### 設定 - -OpenCode の `provider` セクションを通じてプロバイダーをカスタマイズできます。 -config. - ---- - -#### Base URL - -`baseURL` オプションを設定することで、任意のプロバイダーのベース URL をカスタマイズできます。これは、プロキシサービスまたはカスタムエンドポイントを使用する場合に便利です。 - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen は、OpenCode チームが提供するモデルのリストです。 -OpenCode で適切に動作することがテストおよび検証されています。 [詳細はこちら](/docs/zen)。 - -:::tip -初めての方は、OpenCode Zen から始めることをお勧めします。 -::: - -1. TUI で `/connect` コマンドを実行し、`OpenCode Zen` を選択して、[opencode.ai/zen](https://opencode.ai/zen) にアクセスします。 - - ```txt - /connect - ``` - -2. サインインし、お支払いの詳細を追加し、API キーをコピーします。 - -3. API キーを貼り付けます。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. TUI で `/models` を実行すると、推奨されるモデルのリストが表示されます。 - - ```txt - /models - ``` - -これは OpenCode の他のプロバイダーと同様に機能し、使用は完全にオプションです。 - ---- - -## OpenCode Go - -OpenCode Go は、OpenCode チームによって提供される、人気のあるオープンコーディングモデルへの信頼性の高いアクセスを提供する低コストのサブスクリプションプランです。これらは OpenCode でうまく機能することがテストおよび検証されています。 - -1. TUI で `/connect` コマンドを実行し、`OpenCode Go` を選択して、[opencode.ai/zen](https://opencode.ai/zen) にアクセスします。 - - ```txt - /connect - ``` - -2. サインインし、お支払いの詳細を追加し、API キーをコピーします。 - -3. API キーを貼り付けます。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. TUI で `/models` を実行すると、推奨されるモデルのリストが表示されます。 - - ```txt - /models - ``` - -これは OpenCode の他のプロバイダーと同様に機能し、使用は完全にオプションです。 - ---- - -## ディレクトリ - -いくつかのプロバイダーを詳しく見てみましょう。プロバイダーを追加したい場合は、 -リストにある場合は、お気軽に PR を開いてください。 - -:::note -ここにプロバイダーが表示されない場合は、 PRを送信してください。 -::: - ---- - -### 302.AI - -1. [302.AI console](https://302.ai/) に移動し、アカウントを作成し、API キーを生成します。 - -2. `/connect` コマンドを実行し、**302.AI** を検索します。 - - ```txt - /connect - ``` - -3. 302.AI API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行してモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -OpenCode で Amazon Bedrock を使用するには: - -1. Amazon Bedrock コンソールの **モデルカタログ** に移動し、必要なモデルへのアクセスをリクエストします。 - - :::tip - Amazon Bedrock で必要なモデルにアクセスできる必要があります。 - ::: - -2. **次のいずれかの方法を使用して認証を構成します**: - - *** - - #### 環境変数 (クイックスタート) - - opencode の実行中に次の環境変数のいずれかを設定します。 - - ```bash - # オプション 1: AWS アクセスキーの使用 - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # オプション 2: 名前付き AWS プロファイルの使用 - AWS_PROFILE=my-profile opencode - - # オプション 3: Bedrock ベアラートークンの使用 - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - または、それらを bash プロファイルに追加します。 - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - *** - - #### 設定ファイル (推奨) - - プロジェクト固有の設定または永続的な設定の場合は、`opencode.json` を使用します。 - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **利用可能なオプション:** - - `region` - AWS リージョン (例: `us-east-1`、`eu-west-1`) - - `profile` - `~/.aws/credentials` からの AWS 名前付きプロファイル - - `endpoint` - VPC エンドポイントのカスタムエンドポイント URL (汎用 `baseURL` オプションのエイリアス) - - :::tip - 設定ファイルのオプションは環境変数より優先されます。 - ::: - - *** - - #### 上級: VPC エンドポイント - - Bedrock の VPC エンドポイントを使用している場合: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } - } - ``` - - :::note - `endpoint` オプションは、AWS 固有の用語を使用した汎用の `baseURL` オプションのエイリアスです。 `endpoint` と `baseURL` の両方が指定された場合は、`endpoint` が優先されます。 - ::: - - *** - - #### 認証方法 - - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: IAM ユーザーを作成し、AWS コンソールでアクセスキーを生成します - - **`AWS_PROFILE`**: `~/.aws/credentials` の名前付きプロファイルを使用します。最初に `aws configure --profile my-profile` または `aws sso login` を設定します - - **`AWS_BEARER_TOKEN_BEDROCK`**: Amazon Bedrock コンソールから長期 API キーを生成します - - **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**: EKS IRSA (サービスアカウントの IAM ロール) または OIDC フェデレーションを備えた他の Kubernetes 環境の場合。これらの環境変数は、サービスアカウントアノテーションを使用するときに Kubernetes によって自動的に挿入されます。 - - *** - - #### 認証の優先順位 - - Amazon Bedrock は次の認証優先度を使用します。 - 1. **ベアラー トークン** - `AWS_BEARER_TOKEN_BEDROCK` 環境変数または `/connect` コマンドからのトークン - 2. **AWS 認証情報チェーン** - プロファイル、アクセスキー、共有認証情報、IAM ロール、Web ID トークン (EKS IRSA)、インスタンスメタデータ - - :::note - ベアラー トークンが (`/connect` または `AWS_BEARER_TOKEN_BEDROCK` 経由で) 設定されると、設定されたプロファイルを含むすべての AWS 認証情報方法よりも優先されます。 - ::: - -3. `/models` コマンドを実行して、必要なモデルを選択します。 - - ```txt - /models - ``` - -:::note -カスタム推論プロファイルの場合、キーでモデルとプロバイダー名を使用し、`id` プロパティを arn に設定します。これにより、正しいキャッシュが保証されます。 -::: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - ---- - -### Anthropic - -1. サインアップしたら、`/connect` コマンドを実行し、[Anthropic] を選択します。 - - ```txt - /connect - ``` - -2. ここで **Claude Pro/Max** オプションを選択すると、ブラウザが開きます - そして認証を求められます。 - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. これで、`/models` コマンドを使用すると、すべての Anthropic モデルが利用できるようになります。 - - ```txt - /models - ``` - -:::info -OpenCode での Claude Pro/Max サブスクリプションの使用は、[Anthropic](https://anthropic.com) によって正式に許可されていませんが、一般的に機能します。 -::: - -##### APIキーの使用 - -Pro/Max サブスクリプションをお持ちでない場合は、[**API キーの作成**] を選択することもできます。また、ブラウザが開き、Anthropic にログインするよう求められ、ターミナルに貼り付けるコードが表示されます。 - -または、すでに API キーをお持ちの場合は、[**API キーを手動で入力**] を選択してターミナルに貼り付けることができます。 - ---- - -### Atomic Chat - -opencode は、OpenAI 互換の API サーバーの背後でローカル LLM を実行するデスクトップアプリケーション [Atomic Chat](https://atomic.chat) 経由でローカルモデルを使うように設定できます(デフォルトのエンドポイントは `http://127.0.0.1:1337/v1`)。 - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -この例では: - -- `atomic-chat` はカスタムプロバイダー ID です。任意の文字列を指定できます。 -- `npm` はこのプロバイダーに使用するパッケージを指定します。ここでは、任意の OpenAI 互換 API に対して `@ai-sdk/openai-compatible` を使用しています。 -- `name` は UI に表示されるプロバイダー名です。 -- `options.baseURL` はローカルサーバーのエンドポイントです。Atomic Chat のセットアップに合わせてホストとポートを変更してください。 -- `models` はモデル ID と表示名のマップです。各 ID は `GET /v1/models` が返す `id` と一致する必要があります。Atomic Chat に現在ロードされている ID の一覧は `curl http://127.0.0.1:1337/v1/models` を実行して確認できます。 - -:::tip -ツール呼び出しがうまく動作しない場合は、ツール呼び出しに強いロード済みモデル(例えば Qwen-Coder や DeepSeek-Coder のバリアント)を選択してください。 -::: - ---- - -### Azure OpenAI - -:::note -「申し訳ありませんが、そのリクエストには対応できません」エラーが発生した場合は、Azure リソースのコンテンツフィルターを **DefaultV2** から **Default** に変更してみてください。 -::: - -1. [Azure portal](https://portal.azure.com/) に移動し、**Azure OpenAI** リソースを作成します。必要なものは次のとおりです。 - - **リソース名**: これは API エンドポイント (`https://RESOURCE_NAME.openai.azure.com/`) の一部になります。 - - **API キー**: リソースの `KEY 1` または `KEY 2` のいずれか - -2. [Azure AI Foundry](https://ai.azure.com/) に移動し、モデルをデプロイします。 - -:::note -OpenCode が正しく動作するには、デプロイメント名がモデル名と一致する必要があります。 -::: - -3. `/connect` コマンドを実行し、**Azure** を検索します。 - - ```txt - /connect - ``` - -4. API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. リソース名を環境変数として設定します。 - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - -または、bash プロファイルに追加します。 - -```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX -``` - -6. `/models` コマンドを実行して、デプロイされたモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. [Azure portal](https://portal.azure.com/) に移動し、**Azure OpenAI** リソースを作成します。必要なものは次のとおりです。 - - **リソース名**: これは API エンドポイント (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) の一部になります。 - - **API キー**: リソースの `KEY 1` または `KEY 2` のいずれか - -2. [Azure AI Foundry](https://ai.azure.com/) に移動し、モデルをデプロイします。 - -:::note -OpenCode が正しく動作するには、デプロイメント名がモデル名と一致する必要があります。 -::: - -3. `/connect` コマンドを実行し、**Azure Cognitive Services** を検索します。 - - ```txt - /connect - ``` - -4. API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. リソース名を環境変数として設定します。 - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - -または、bash プロファイルに追加します。 - -```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX -``` - -6. `/models` コマンドを実行して、デプロイされたモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Baseten - -1. [Baseten](https://app.baseten.co/) に移動し、アカウントを作成し、API キーを生成します。 - -2. `/connect` コマンドを実行し、**Baseten** を検索します。 - - ```txt - /connect - ``` - -3. Baseten API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行してモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Cerebras - -1. [Cerebras console](https://inference.cerebras.ai/) に移動し、アカウントを作成し、API キーを生成します。 - -2. `/connect` コマンドを実行し、**Cerebras** を検索します。 - - ```txt - /connect - ``` - -3. Cerebras API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_Qwen 3 Coder 480B_ のようなモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -Cloudflare AI Gatewayを使用すると、統合エンドポイントを通じてOpenAI、Anthropic、Workers AIなどのモデルにアクセスできます。 [Unified Billing](https://developers.cloudflare.com/ai-gateway/features/unified-billing/) を使用すると、プロバイダーごとに個別の API キーは必要ありません。 - -1. [Cloudflare ダッシュボード ](https://dash.cloudflare.com/) に移動し、**AI** > **AI ゲートウェイ** に移動し、新しいゲートウェイを作成します。 - -2. アカウント ID とゲートウェイ ID を環境変数として設定します。 - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. `/connect` コマンドを実行し、**Cloudflare AI Gateway** を検索します。 - - ```txt - /connect - ``` - -4. Cloudflare API トークンを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -または環境変数として設定します。 - -```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token -``` - -5. `/models` コマンドを実行してモデルを選択します。 - - ```txt - /models - ``` - -OpenCode 設定を通じてモデルを追加することもできます。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } -} -``` - ---- - -### Cortecs - -1. [Cortecs console](https://cortecs.ai/) に移動し、アカウントを作成し、API キーを生成します。 - -2. `/connect` コマンドを実行し、**Cortecs** を検索します。 - - ```txt - /connect - ``` - -3. Cortecs API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_Kimi K2 Instruct_ のようなモデルを選択します。 - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. [DeepSeek コンソール ](https://platform.deepseek.com/) に移動し、アカウントを作成し、**新しい API キーの作成** をクリックします。 - -2. `/connect` コマンドを実行し、**DeepSeek** を検索します。 - - ```txt - /connect - ``` - -3. DeepSeek API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_DeepSeek V4 Pro_ のような DeepSeek モデルを選択します。 - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. [Deep Infra ダッシュボード](https://deepinfra.com/dash) に移動し、アカウントを作成し、API キーを生成します。 - -2. `/connect` コマンドを実行し、**Deep Infra** を検索します。 - - ```txt - /connect - ``` - -3. Deep Infra API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行してモデルを選択します。 - - ```txt - /models - ``` - ---- - -### FrogBot - -1. [ファームウェアダッシュボード](https://app.frogbot.ai/signup) に移動し、アカウントを作成し、API キーを生成します。 - -2. `/connect` コマンドを実行し、**ファームウェア**を検索します。 - - ```txt - /connect - ``` - -3. ファームウェア API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行してモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. [Fireworks AI コンソール ](https://app.fireworks.ai/) に移動し、アカウントを作成し、**API キーの作成** をクリックします。 - -2. `/connect` コマンドを実行し、**Fireworks AI** を検索します。 - - ```txt - /connect - ``` - -3. Fireworks AI API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_Kimi K2 Instruct_ のようなモデルを選択します。 - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo は、GitLab の Anthropic プロキシを介したネイティブツール呼び出し機能を備えた AI を活用したエージェントチャットを提供します。 - -1. `/connect` コマンドを実行し、GitLab を選択します。 - - ```txt - /connect - ``` - -2. 認証方法を選択してください: - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### OAuthの使用(推奨) - -**OAuth** を選択すると、認証のためにブラウザが開きます。 - -#### パーソナルアクセストークンの使用 - -1. [GitLab ユーザー設定 > アクセス Tokens](https://gitlab.com/-/user_settings/personal_access_tokens) に移動します。 -2. **新しいトークンを追加** をクリックします -3. 名前: `OpenCode`、スコープ: `api` -4. トークンをコピーします(`glpat-`で始まる) -5. ターミナルに入力してください - -6. `/models` コマンドを実行して、利用可能なモデルを確認します。 - -```txt -/models -``` - ---- - -### STACKIT - -STACKIT AI Model Serving は、Llama、Mistral、Qwen などの LLM に焦点を当て、ヨーロッパのインフラストラクチャでの最大限のデータ主権を備えた、AI モデル用の完全に管理された主権ホスティング環境を提供します。 - -1. [STACKIT Portal](https://portal.stackit.cloud) に移動し、**AI Model Serving** に移動して、プロジェクトの認証トークンを作成します。 - - :::tip - 認証トークンを作成する前に、STACKIT 顧客アカウント、ユーザーアカウント、およびプロジェクトが必要です。 - ::: - -2. `/connect` コマンドを実行し、**STACKIT** を検索します。 - - ```txt - /connect - ``` - -3. STACKIT AI Model Serving 認証トークンを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_Qwen3-VL 235B_ や _Llama 3.3 70B_ などの利用可能なモデルから選択します。 - - ```txt - /models - ``` - -3 つの Claude ベースのモデルが利用可能です。 - -- **duo-chat-haiku-4-5** (デフォルト) - 素早いタスクに対する素早い応答 -- **duo-chat-sonnet-4-5** - ほとんどのワークフローでバランスの取れたパフォーマンス -- **duo-chat-opus-4-5** - 複雑な分析に最も適した能力 - -:::note -必要がない場合は、「GITLAB_TOKEN」環境変数を指定することもできます。 -トークンを OpenCode 認証ストレージに保存します。 -::: - -##### 自己ホスト型 GitLab - -:::note[コンプライアンスメモ] -OpenCode は、セッションタイトルの生成などの一部の AI タスクに小規模なモデルを使用します。 -デフォルトでは、Zen によってホストされる gpt-5-nano を使用するように構成されています。 OpenCode をロックするには -自分の GitLab でホストされているインスタンスのみを使用するには、次の行を -`opencode.json` ファイル。セッション共有を無効にすることもお勧めします。 - -```json -{ - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -セルフホスト型 GitLab インスタンスの場合: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -インスタンスがカスタム AI ゲートウェイを実行している場合: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -または、bash プロファイルに追加します。 - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -GitLab 管理者は以下を有効にする必要があります。 - -1. [Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) (ユーザー、グループ、またはインスタンス用) -2. 機能フラグ (Rails コンソール経由): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### セルフホスト型インスタンスの OAuth - -自己ホスト型インスタンスで Oauth を機能させるには、以下を作成する必要があります。 -新しいアプリケーション ([設定] → [アプリケーション]) で、 -コールバック URL `http://127.0.0.1:8080/callback` と次のスコープ: - -- api (あなたの代わりに API にアクセスします) -- read_user (個人情報の読み取り) -- read_repository (リポジトリへの読み取り専用アクセスを許可します) - -次に、アプリケーション ID を環境変数として公開します。 - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -詳細については、[opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth) ホームページ。 - -##### 設定 - -`opencode.json` を通じてカスタマイズします。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### GitLab API ツール (オプションですが強く推奨) - -GitLab ツール (マージリクエスト、問題、パイプライン、CI/CD など) にアクセスするには: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -このプラグインは、MR レビュー、問題追跡、パイプライン監視などを含む、包括的な GitLab リポジトリ管理機能を提供します。 - ---- - -### GitHub Copilot - -GitHub Copilot サブスクリプションを OpenCode で使用するには: - -:::note -一部のモデルでは [Pro+] が必要になる場合があります。 -subscription](https://github.com/features/copilot/plans) を使用します。 - -一部のモデルは、[GitHub Copilot settings](https://docs.github.com/en/copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use) で構成する必要があります。 -::: - -1. `/connect` コマンドを実行し、GitHub Copilot を検索します。 - - ```txt - /connect - ``` - -2. [github.com/login/device](https://github.com/login/device) に移動し、コードを入力します。 - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - │ - └ Waiting for authorization... - ``` - -3. 次に、`/models` コマンドを実行して、必要なモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -OpenCode で Google Vertex AI を使用するには: - -1. Google Cloud Console の **Model Garden** に移動し、 - お住まいの地域で利用可能なモデル。 - -:::note -Vertex AI API が有効になっている Google Cloud プロジェクトが必要です。 -::: - -2. 必要な環境変数を設定します。 - - `GOOGLE_CLOUD_PROJECT`: Google Cloud プロジェクト ID - - `VERTEX_LOCATION` (オプション): Vertex AI の領域 (デフォルトは `global`) - - 認証 (1 つ選択): - - `GOOGLE_APPLICATION_CREDENTIALS`: サービスアカウントの JSON キーファイルへのパス - - gcloud CLI を使用して認証する: `gcloud auth application-default login` - -opencode の実行中に設定します。 - -```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode -``` - -または、それらを bash プロファイルに追加します。 - -```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global -``` - -:::tip -`global` 領域は、追加コストなしで可用性を向上させ、エラーを削減します。データ常駐要件には、リージョンエンドポイント (`us-central1` など) を使用します。 [詳細はこちら](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. `/models` コマンドを実行して、必要なモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Groq - -1. [Groq console](https://console.groq.com/) に移動し、[**API キーの作成**] をクリックして、キーをコピーします。 - -2. `/connect` コマンドを実行し、Groq を検索します。 - - ```txt - /connect - ``` - -3. プロバイダーの API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、必要なものを選択します。 - - ```txt - /models - ``` - ---- - -### Hugging Face - -[Hugging Face Inference Provider](https://huggingface.co/docs/inference-providers) は、17 を超えるプロバイダーがサポートするオープンモデルへのアクセスを提供します。 - -1. [Hugging Face settings](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained) に移動して、推論プロバイダーを呼び出す権限を持つトークンを作成します。 - -2. `/connect` コマンドを実行し、**Hugging Face** を検索します。 - - ```txt - /connect - ``` - -3. Hugging Face トークンを入力してください。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_Kimi-K2-Instruct_ や _GLM-4.6_ などのモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) は、AI アプリケーションのロギング、監視、分析を提供する LLM 可観測性プラットフォームです。 Helicone AI ゲートウェイは、モデルに基づいてリクエストを適切なプロバイダーに自動的にルーティングします。 - -1. [Helicone](https://helicone.ai) に移動し、アカウントを作成し、ダッシュボードから API キーを生成します。 - -2. `/connect` コマンドを実行し、**Helicone** を検索します。 - - ```txt - /connect - ``` - -3. Helicone API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行してモデルを選択します。 - - ```txt - /models - ``` - -その他のプロバイダーや、キャッシュやレート制限などの高度な機能については、[Helicone ドキュメント](https://docs.helicone.ai). - -#### オプションの設定 - -OpenCode を通じて自動的に構成されていない Helicone の機能またはモデルを見つけた場合は、いつでも自分で構成できます。 - -これは [Helicone のモデルディレクトリ](https://helicone.ai/models) です。追加するモデルの ID を取得するためにこれが必要になります。 - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250929": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### カスタムヘッダー - -Helicone は、キャッシュ、ユーザー追跡、セッション管理などの機能のカスタムヘッダーをサポートしています。 `options.headers` を使用してプロバイダー設定に追加します。 - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### セッション追跡 - -Helicone の [Sessions](https://docs.helicone.ai/features/sessions) 機能を使用すると、関連する LLM リクエストをグループ化できます。 [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) プラグインを使用して、各 OpenCode 会話を Helicone のセッションとして自動的に記録します。 - -```bash -npm install -g opencode-helicone-session -``` - -それを設定に追加します。 - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -プラグインは、リクエストに `Helicone-Session-Id` ヘッダーと `Helicone-Session-Name` ヘッダーを挿入します。 Helicone のセッションページでは、OpenCode の各会話が個別のセッションとしてリストされています。 - -##### 一般的なヘリコーンヘッダー - -| ヘッダー | 説明 | -| -------------------------- | ---------------------------------------------------------------------- | -| `Helicone-Cache-Enabled` | 応答キャッシュを有効にする (`true`/`false`) | -| `Helicone-User-Id` | ユーザーごとにメトリクスを追跡する | -| `Helicone-Property-[Name]` | カスタムプロパティを追加します (例: `Helicone-Property-Environment`)。 | -| `Helicone-Prompt-Id` | リクエストをプロンプトバージョンに関連付ける | - -利用可能なすべてのヘッダーについては、[Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory) を参照してください。 - ---- - -### llama.cpp - -[llama.cpp の s](https://github.com/ggml-org/llama.cpp) llama-server ユーティリティ] を通じて、ローカルモデルを使用するように opencode を構成できます。 - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -この例では: - -- `llama.cpp` はカスタムプロバイダー ID です。これには任意の文字列を指定できます。 -- `npm` は、このプロバイダーに使用するパッケージを指定します。ここで、`@ai-sdk/openai-compatible` は OpenAI 互換 API に使用されます。 -- `name` は、UI でのプロバイダーの表示名です。 -- `options.baseURL` はローカルサーバーのエンドポイントです。 -- `models` は、モデル ID とその設定のマップです。機種選択リストに機種名が表示されます。 - ---- - -### IO.NET - -IO.NET は、さまざまなユースケースに最適化された 17 のモデルを提供します。 - -1. [IO.NET console](https://ai.io.net/) に移動し、アカウントを作成し、API キーを生成します。 - -2. `/connect` コマンドを実行し、**IO.NET** を検索します。 - - ```txt - /connect - ``` - -3. IO.NET API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行してモデルを選択します。 - - ```txt - /models - ``` - ---- - -### LM Studio - -LM Studio を通じてローカルモデルを使用するように opencode を構成できます。 - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -この例では: - -- `lmstudio` はカスタムプロバイダー ID です。これには任意の文字列を指定できます。 -- `npm` は、このプロバイダーに使用するパッケージを指定します。ここで、`@ai-sdk/openai-compatible` は OpenAI 互換 API に使用されます。 -- `name` は、UI でのプロバイダーの表示名です。 -- `options.baseURL` はローカルサーバーのエンドポイントです。 -- `models` は、モデル ID とその設定のマップです。機種選択リストに機種名が表示されます。 - ---- - -### Moonshot AI - -Moonshot AI の Kim K2 を使用するには: - -1. [Moonshot AI console](https://platform.moonshot.ai/console) に移動し、アカウントを作成し、[**API キーの作成**] をクリックします。 - -2. `/connect` コマンドを実行し、**Moonshot AI** を検索します。 - - ```txt - /connect - ``` - -3. Moonshot API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_Kimi K2_ を選択します。 - - ```txt - /models - ``` - ---- - -### MiniMax - -1. [MiniMax API Console](https://platform.minimax.io/login) に移動し、アカウントを作成し、API キーを生成します。 - -2. `/connect` コマンドを実行し、**MiniMax** を検索します。 - - ```txt - /connect - ``` - -3. MiniMax API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_M2.1_ のようなモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. [Nebius Token Factory console](https://tokenfactory.nebius.com/) に移動し、アカウントを作成し、[**キーの追加**] をクリックします。 - -2. `/connect` コマンドを実行し、**Nebius Token Factory** を検索します。 - - ```txt - /connect - ``` - -3. Nebius Token Factory API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_Kimi K2 Instruct_ のようなモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Ollama - -Ollama を通じてローカルモデルを使用するように opencode を構成できます。 - -:::tip -Ollama は OpenCode 用に自動的に構成できます。詳細については、[Ollama 統合 docs](https://docs.ollama.com/integrations/opencode)」を参照してください。 -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -この例では: - -- `ollama` はカスタムプロバイダー ID です。これには任意の文字列を指定できます。 -- `npm` は、このプロバイダーに使用するパッケージを指定します。ここで、`@ai-sdk/openai-compatible` は OpenAI 互換 API に使用されます。 -- `name` は、UI でのプロバイダーの表示名です。 -- `options.baseURL` はローカルサーバーのエンドポイントです。 -- `models` は、モデル ID とその設定のマップです。機種選択リストに機種名が表示されます。 - -:::tip -ツール呼び出しが機能しない場合は、Ollama の `num_ctx` を増やしてみてください。 16k〜32kあたりから始めてください。 -::: - ---- - -### Ollama Cloud - -OpenCode で Ollama Cloud を使用するには: - -1. [https://ollama.com/](https://ollama.com/) にアクセスしてサインインするか、アカウントを作成します。 - -2. [**設定**] > [キー**] に移動し、[**API キーの追加**] をクリックして新しい API キーを生成します。 - -3. OpenCode で使用するために API キーをコピーします。 - -4. `/connect` コマンドを実行し、**Ollama Cloud** を検索します。 - - ```txt - /connect - ``` - -5. Ollama Cloud API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **重要**: OpenCode でクラウドモデルを使用する前に、モデル情報をローカルに取得する必要があります。 - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. `/models` コマンドを実行して、Ollama Cloud モデルを選択します。 - - ```txt - /models - ``` - ---- - -### OpenAI - -[ChatGPT Plus または Pro](https://chatgpt.com/pricing) にサインアップすることをお勧めします。 - -1. サインアップしたら、`/connect` コマンドを実行し、OpenAI を選択します。 - - ```txt - /connect - ``` - -2. ここで **ChatGPT Plus/Pro** オプションを選択すると、ブラウザが開きます。 - そして認証を求められます。 - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. これで、`/models` コマンドを使用すると、すべての OpenAI モデルが利用できるようになります。 - - ```txt - /models - ``` - -##### APIキーの使用 - -すでに API キーをお持ちの場合は、**API キーを手動で入力** を選択し、ターミナルに貼り付けることができます。 - ---- - -### OpenCode Zen - -OpenCode Zen は、OpenCode チームによって提供される、テストおよび検証されたモデルのリストです。 [詳細はこちら](/docs/zen)。 - -1. **OpenCode Zen** にサインインし、**API キーの作成** をクリックします。 - -2. `/connect` コマンドを実行し、**OpenCode Zen** を検索します。 - - ```txt - /connect - ``` - -3. OpenCode API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_Qwen 3 Coder 480B_ のようなモデルを選択します。 - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. [OpenRouter ダッシュボード](https://openrouter.ai/settings/keys) に移動し、[**API キーの作成**] をクリックして、キーをコピーします。 - -2. `/connect` コマンドを実行し、OpenRouter を検索します。 - - ```txt - /connect - ``` - -3. プロバイダーの API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 多くの OpenRouter モデルはデフォルトでプリロードされており、`/models` コマンドを実行して必要なモデルを選択します。 - - ```txt - /models - ``` - -OpenCode 設定を通じて追加のモデルを追加することもできます。 - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } -} -``` - -5. OpenCode 設定を通じてカスタマイズすることもできます。プロバイダーを指定する例を次に示します。 - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI コアは、統合プラットフォームを通じて、OpenAI、Anthropic、Google、Amazon、Meta、Mistral、AI21 の 40 以上のモデルへのアクセスを提供します。 - -1. [SAP BTP Cockpit](https://account.hana.ondemand.com/) に移動し、SAP AI コアサービスインスタンスに移動して、サービスキーを作成します。 - -:::tip -サービスキーは、`clientid`、`clientsecret`、`url`、および `serviceurls.AI_API_URL` を含む JSON オブジェクトです。 AI コアインスタンスは、BTP コックピットの **サービス** > **インスタンスとサブスクリプション** で見つかります。 -::: - -2. `/connect` コマンドを実行し、**SAP AI Core** を検索します。 - - ```txt - /connect - ``` - -3. サービスキーの JSON を入力します。 - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - -または、`AICORE_SERVICE_KEY` 環境変数を設定します。 - -```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode -``` - -または、bash プロファイルに追加します。 - -```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' -``` - -4. 必要に応じて、デプロイメント ID とリソースグループを設定します。 - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - -:::note -これらの設定はオプションであり、SAP AI コアのセットアップに従って構成する必要があります。 -::: - -5. `/models` コマンドを実行して、40 以上の利用可能なモデルから選択します。 - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. [OVHcloud パネル](https://ovh.com/manager) に移動します。 `Public Cloud` セクション、`AI & Machine Learning` > `AI Endpoints` に移動し、`API Keys` タブで **新しい API キーの作成** をクリックします。 - -2. `/connect` コマンドを実行し、**OVHcloud AI エンドポイント**を検索します。 - - ```txt - /connect - ``` - -3. OVHcloud AI エンドポイント API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_gpt-oss-120b_ のようなモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Scaleway - -[Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/) を Opencode で使用するには: - -1. [Scaleway Console IAM settings](https://console.scaleway.com/iam/api-keys) に移動して、新しい API キーを生成します。 - -2. `/connect` コマンドを実行し、**Scaleway** を検索します。 - - ```txt - /connect - ``` - -3. Scaleway API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_devstral-2-123b-instruct-2512_ や _gpt-oss-120b_ などのモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Together AI - -1. [Together AI console](https://api.together.ai) に移動し、アカウントを作成し、[**キーの追加**] をクリックします。 - -2. `/connect` コマンドを実行し、**Together AI** を検索します。 - - ```txt - /connect - ``` - -3. Together AI API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_Kimi K2 Instruct_ のようなモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Venice AI - -1. [Venice AI console](https://venice.ai) に移動し、アカウントを作成し、API キーを生成します。 - -2. `/connect` コマンドを実行し、**Venice AI** を検索します。 - - ```txt - /connect - ``` - -3. Venice AI API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_Llama 3.3 70B_ のようなモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -Vercel AI Gateway を使用すると、統合エンドポイントを通じて OpenAI、Anthropic、Google、xAI などのモデルにアクセスできます。モデルは値上げなしの定価で提供されます。 - -1. [Vercel ダッシュボード ](https://vercel.com/) に移動し、**AI ゲートウェイ** タブに移動し、**API キー** をクリックして新しい API キーを作成します。 - -2. `/connect` コマンドを実行し、**Vercel AI Gateway** を検索します。 - - ```txt - /connect - ``` - -3. Vercel AI Gateway API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行してモデルを選択します。 - - ```txt - /models - ``` - -OpenCode 設定を通じてモデルをカスタマイズすることもできます。プロバイダーのルーティング順序を指定する例を次に示します。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -いくつかの便利なルーティングオプション: - -| オプション | 説明 | -| ------------------- | ---------------------------------------------------- | -| `order` | 試行するプロバイダーシーケンス | -| `only` | 特定のプロバイダーに制限する | -| `zeroDataRetention` | データ保持ポリシーがゼロのプロバイダーのみを使用する | - ---- - -### xAI - -1. [xAI console](https://console.x.ai/) に移動し、アカウントを作成し、API キーを生成します。 - -2. `/connect` コマンドを実行し、**xAI** を検索します。 - - ```txt - /connect - ``` - -3. xAI API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_Grok Beta_ のようなモデルを選択します。 - - ```txt - /models - ``` - ---- - -### Z.AI - -1. [Z.AI API コンソール ](https://z.ai/manage-apikey/apikey-list) に移動し、アカウントを作成し、**新しい API キーの作成** をクリックします。 - -2. `/connect` コマンドを実行し、**Z.AI** を検索します。 - - ```txt - /connect - ``` - -**GLM コーディングプラン**に加入している場合は、**Z.AI コーディングプラン**を選択します。 - -3. Z.AI API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` コマンドを実行して、_GLM-4.7_ のようなモデルを選択します。 - - ```txt - /models - ``` - ---- - -### ZenMux - -1. [ZenMux ダッシュボード](https://zenmux.ai/settings/keys) に移動し、[**API キーの作成**] をクリックして、キーをコピーします。 - -2. `/connect` コマンドを実行し、ZenMux を検索します。 - - ```txt - /connect - ``` - -3. プロバイダーの API キーを入力します。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 多くの ZenMux モデルはデフォルトでプリロードされており、`/models` コマンドを実行して必要なモデルを選択します。 - - ```txt - /models - ``` - -OpenCode 設定を通じて追加のモデルを追加することもできます。 - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } -} -``` - ---- - -## カスタムプロバイダー - -`/connect` コマンドにリストされていない **OpenAI 互換**プロバイダーを追加するには: - -:::tip -OpenAI と互換性のある任意のプロバイダーを OpenCode で使用できます。最新の AI プロバイダーのほとんどは、OpenAI 互換の API を提供しています。 -::: - -1. `/connect` コマンドを実行し、**その他**まで下にスクロールします。 - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. プロバイダーの一意の ID を入力します。 - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - -:::note -覚えやすい ID を選択してください。これを設定ファイルで使用します。 -::: - -3. プロバイダーの API キーを入力します。 - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. プロジェクトディレクトリで `opencode.json` ファイルを作成または更新します。 - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - -構成オプションは次のとおりです。 - -- **npm**: 使用する AI SDK パッケージ、OpenAI 互換プロバイダーの場合は `@ai-sdk/openai-compatible` -- **name**: UI での表示名。 -- **models**: 利用可能なモデル。 -- **options.baseURL**: API エンドポイント URL。 -- **options.apiKey**: 認証を使用しない場合は、オプションで API キーを設定します。 -- **options.headers**: 必要に応じてカスタムヘッダーを設定します。 - -詳細オプションの詳細については、以下の例を参照してください。 - -5. `/models` コマンドを実行すると、カスタムプロバイダーとモデルが選択リストに表示されます。 - ---- - -##### 例 - -次に、`apiKey`、`headers`、およびモデル `limit` オプションを設定する例を示します。 - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -設定の詳細: - -- **apiKey**: `env` 変数構文を使用して設定します。[詳細については ](/docs/config#env-vars). -- **headers**: 各リクエストとともに送信されるカスタムヘッダー。 -- **limit.context**: モデルが受け入れる最大入力トークン。 -- **limit.output**: モデルが生成できる最大出力トークン。 - -`limit` フィールドを使用すると、OpenCode はコンテキストがどのくらい残っているかを理解できます。標準プロバイダーは、これらを models.dev から自動的に取得します。 - ---- - -## トラブルシューティング - -プロバイダーの設定で問題が発生した場合は、次の点を確認してください。 - -1. **認証設定を確認します**: `opencode auth list` を実行して、資格情報が正しいかどうかを確認します。 - プロバイダー用のものが設定に追加されます。 - -これは、認証に環境変数に依存する Amazon Bedrock のようなプロバイダーには当てはまりません。 - -2. カスタムプロバイダーの場合は、OpenCode 設定を確認し、次のことを行います。 - - `/connect` コマンドで使用されるプロバイダー ID が、OpenCode 設定内の ID と一致することを確認してください。 - - プロバイダーには適切な npm パッケージが使用されます。たとえば、Cerebras には `@ai-sdk/cerebras` を使用します。他のすべての OpenAI 互換プロバイダーの場合は、`@ai-sdk/openai-compatible` を使用します。 - - `options.baseURL` フィールドで正しい API エンドポイントが使用されていることを確認してください。 diff --git a/packages/web/src/content/docs/ja/rules.mdx b/packages/web/src/content/docs/ja/rules.mdx deleted file mode 100644 index 0333850c08..0000000000 --- a/packages/web/src/content/docs/ja/rules.mdx +++ /dev/null @@ -1,179 +0,0 @@ ---- -title: ルール -description: OpenCode のカスタム命令を設定します。 ---- - -`AGENTS.md` ファイルを作成することで、OpenCode にカスタム命令を提供できます。これは Cursor のルールと似ています。これには、特定のプロジェクトに合わせて LLM の動作をカスタマイズするために LLM のコンテキストに含まれる命令が含まれています。 - ---- - -## 初期化 - -新しい `AGENTS.md` ファイルを作成するには、OpenCode で `/init` コマンドを実行します。 - -:::tip -プロジェクトの `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 セッションに適用されます。 - -これは Git にコミットされておらず、チームと共有されていないため、LLM が従うべき個人ルールを指定するためにこれを使用することをお勧めします。 - -### 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 を使用して Web から命令をロードすることもできます。 - -```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` のファイル参照を自動的に解析しませんが、次の 2 つの方法で同様の機能を実現できます。 - -### `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 の手動指示 - -`AGENTS.md` で明示的な命令を指定することで、OpenCode に外部ファイルを読み取るように教えることができます。実際の例を次に示します。 - -```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. -``` - -このアプローチにより、次のことが可能になります。 - -- モジュール式の再利用可能なルールファイルを作成する -- シンボリックリンクまたは git サブモジュールを介してプロジェクト間でルールを共有する -- 詳細なガイドラインを参照しながら、AGENTS.md を簡潔に保ちます -- OpenCode が特定のタスクに必要な場合にのみファイルをロードするようにする - -:::tip -モノリポジトリまたは共有標準を使用するプロジェクトの場合、グロブパターン (`opencode.json` など) で `packages/*/AGENTS.md` を使用する方が、手動で指示するよりも保守しやすくなります。 -::: diff --git a/packages/web/src/content/docs/ja/sdk.mdx b/packages/web/src/content/docs/ja/sdk.mdx deleted file mode 100644 index 5afaeb4a13..0000000000 --- a/packages/web/src/content/docs/ja/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: SDK -description: OpenCode サーバー用の型安全な JS クライアント。 ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -OpenCode JS/TS SDK は、サーバーと対話するための型安全なクライアントを提供します。 -これを使用して、統合を構築し、OpenCode をプログラムで制御します。 - -[サーバーの仕組みについての詳細](/docs/server) をご覧ください。たとえば、コミュニティによって構築された [projects](/docs/ecosystem#projects) をチェックしてください。 - ---- - -## インストール - -npm から SDK をインストールします。 - -```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` | カスタムフェッチの実装 | `globalThis.fetch` | -| `parseAs` | `string` | 応答解析方法 | `auto` | -| `responseStyle` | `string` | 戻り値のスタイル: `data` または `fields` | `fields` | -| `throwOnError` | `boolean` | 返す代わりにエラーをスローする | `false` | - ---- - -## 型定義 - -SDK には、すべての API タイプの TypeScript 定義が含まれています。それらを直接インポートします。 - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -すべてのタイプはサーバーの OpenAPI 仕様から生成され、タイプファイル で使用できます。 - ---- - -## エラー - -SDK は、キャッチして処理できるエラーをスローできます。 - -```typescript -try { - await client.session.get({ path: { id: "invalid-id" } }) -} catch (error) { - console.error("Failed to get session:", (error as Error).message) -} -``` - ---- - -## 構造化出力 - -`format` を JSON スキーマで指定することで、モデルから構造化された 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` を設定する**: 複雑なスキーマの場合は増やし、単純なスキーマの場合は減らします - ---- - -## API - -SDK は、型安全なクライアントを通じてすべてのサーバー API を公開します。 - ---- - -### 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()` | 利用可能なすべてのエージェントをリストする | Agent[] | - ---- - -#### 例 - -```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()` | すべてのプロジェクトをリストする | Project[] | -| `project.current()` | 現在のプロジェクトを取得 | Project | - ---- - -#### 例 - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### Path - -| メソッド | 説明 | 戻り値 | -| ------------ | ---------------- | ---------------------------------------- | -| `path.get()` | 現在のパスを取得 | Path | - ---- - -#### 例 - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### Config - -| メソッド | 説明 | 戻り値 | -| -------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | 設定情報を取得する | Config | -| `config.providers()` | プロバイダーとデフォルトのモデルをリストする | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### 例 - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### Sessions - -| メソッド | 説明 | 詳細 | -| ---------------------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `session.list()` | セッションをリストする | 戻り値 Session[] | -| `session.get({ path })` | セッションを取得 | 戻り値 Session | -| `session.children({ path })` | 子セッションをリストする | 戻り値 Session[] | -| `session.create({ body })` | セッションの作成 | 戻り値 Session | -| `session.delete({ path })` | セッションを削除 | 戻り値 `boolean` | -| `session.update({ path, body })` | セッションのプロパティを更新する | 戻り値 Session | -| `session.init({ path, body })` | アプリを分析して `AGENTS.md` を作成する | 戻り値 `boolean` | -| `session.abort({ path })` | 実行中のセッションを中止する | 戻り値 `boolean` | -| `session.share({ path })` | セッションを共有する | 戻り値 Session | -| `session.unshare({ path })` | セッションの共有を解除 | 戻り値 Session | -| `session.summarize({ path, body })` | セッションを要約する | 戻り値 `boolean` | -| `session.messages({ path })` | セッション内のメッセージをリストする | 戻り値 `{ info: `Message`, parts: `Part[]`}[]` | -| `session.message({ path })` | メッセージの詳細を取得する | 戻り値 `{ info: `Message`, parts: `Part[]`}` | -| `session.prompt({ path, body })` | プロンプトメッセージを送信する | `body.noReply: true` は UserMessage (コンテキストのみ) を返します。デフォルトでは、AI 応答を含む AssistantMessage を返します。[構造化出力](#構造化出力) のための `body.outputFormat` をサポートします。 | -| `session.command({ path, body })` | コマンドをセッションに送信 | 戻り値 `{ info: `AssistantMessage`, parts: `Part[]`}` | -| `session.shell({ path, body })` | シェルコマンドを実行する | 戻り値 AssistantMessage | -| `session.revert({ path, body })` | メッセージを元に戻す | 戻り値 Session | -| `session.unrevert({ path })` | 元に戻したメッセージを復元する | 戻り値 Session | -| `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." }], - }, -}) -``` - ---- - -### Files - -| メソッド | 説明 | 戻り値 | -| ------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------- | -| `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 | Symbol[] | -| `file.read({ query })` | Read a file | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | Get status for tracked files | File[] | - -`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.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 })` | トースト通知を表示 | `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" }, -}) -``` - ---- - -### Events - -| メソッド | 説明 | 戻り値 | -| ------------------- | ------------------------------ | ------------------------------ | -| `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) -} -``` diff --git a/packages/web/src/content/docs/ja/server.mdx b/packages/web/src/content/docs/ja/server.mdx deleted file mode 100644 index cbea87083e..0000000000 --- a/packages/web/src/content/docs/ja/server.mdx +++ /dev/null @@ -1,282 +0,0 @@ ---- -title: サーバー -description: HTTP 経由で OpenCode サーバーと通信します。 ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -`opencode serve` コマンドは、OpenCode クライアントが使用できる OpenAPI エンドポイントを公開するヘッドレス HTTP サーバーを実行します。 - ---- - -### 使用法 - -```bash -opencode serve [--port ] [--hostname ] [--cors ] -``` - -#### オプション - -| フラグ | 説明 | デフォルト | -| --------------- | --------------------------------- | ---------------- | -| `--port` | リッスンするポート | `4096` | -| `--hostname` | リッスンするホスト名 | `127.0.0.1` | -| `--mdns` | mDNS 検出を有効にする | `false` | -| `--mdns-domain` | mDNS サービスのカスタムドメイン名 | `opencode.local` | -| `--cors` | 許可する追加のブラウザーオリジン | `[]` | - -`--cors` は複数回渡すことができます。 - -```bash -opencode serve --cors http://localhost:5173 --cors https://app.example.com -``` - ---- - -### 認証 - -HTTP 基本認証でサーバーを保護するには、`OPENCODE_SERVER_PASSWORD` を設定します。ユーザー名はデフォルトで `opencode` になるか、`OPENCODE_SERVER_USERNAME` を設定してオーバーライドします。これは、`opencode serve` と `opencode web` の両方に当てはまります。 - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve -``` - ---- - -### 仕組み - -`opencode` を実行すると、TUI とサーバーが起動します。 TUI はサーバーと通信するクライアントです。サーバーは OpenAPI 3.1 仕様のエンドポイントを公開します。このエンドポイントは、[SDK](/docs/sdk) を使用してアクセスできます。 - -:::tip -OpenCode サーバーを使用して、プログラムで OpenCode と対話します。 -::: - -`opencode serve` を実行してスタンドアロンサーバーを起動できます。すでに OpenCode TUI を実行している場合でも、`opencode serve` は新しいサーバーを起動します。 - ---- - -#### 既存のサーバーに接続する - -TUI を起動すると、ポートとホスト名がランダムに割り当てられます。代わりに、`--hostname` と `--port` [フラグ](/docs/cli) を使用して固定できます。次に、これを使用してサーバーに接続します。 - -[`/tui`](#tui) エンドポイントは、サーバー経由で TUI を駆動するために使用できます。たとえば、プロンプトを事前入力したり、実行したりできます。この設定は、OpenCode [IDE](/docs/ide) プラグインによって使用されます。 - ---- - -## 仕様 - -サーバーは、次の場所で閲覧できる OpenAPI 3.1 仕様を公開しています。 - -``` -http://:/doc -``` - -たとえば、`http://localhost:4096/doc`。この仕様を使用して、クライアントを生成したり、要求と応答のタイプを検査したりできます。または、Swagger エクスプローラーで表示します。 - ---- - -## API - -OpenCode サーバーは次の API を公開します。 - ---- - -### Global - -| メソッド | パス | 説明 | レスポンス | -| -------- | ---------------- | ----------------------------------------- | ------------------------------------ | -| `GET` | `/global/health` | サーバーの健全性とバージョンを取得する | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | グローバルイベントの取得 (SSE ストリーム) | イベントストリーム | - ---- - -### Project - -| メソッド | パス | 説明 | レスポンス | -| -------- | ------------------ | -------------------------------- | --------------------------------------------- | -| `GET` | `/project` | すべてのプロジェクトをリストする | Project[] | -| `GET` | `/project/current` | 現在のプロジェクトを取得 | Project | - ---- - -### Path and VCS - -| メソッド | パス | 説明 | レスポンス | -| -------- | ------- | --------------------------------------- | ------------------------------------------- | -| `GET` | `/path` | 現在のパスを取得する | Path | -| `GET` | `/vcs` | 現在のプロジェクトの VCS 情報を取得する | VcsInfo | - ---- - -### Instance - -| メソッド | パス | 説明 | レスポンス | -| -------- | ------------------- | ---------------------------- | ---------- | -| `POST` | `/instance/dispose` | 現在のインスタンスを破棄する | void | - ---- - -### Config - -| メソッド | パス | 説明 | レスポンス | -| -------- | ------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `GET` | `/config` | 設定情報を取得する | Config | -| `PATCH` | `/config` | 設定を更新する | Config | -| `GET` | `/config/providers` | プロバイダーとデフォルトのモデルをリストする | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -### プロバイダー - -| メソッド | パス | 説明 | レスポンス | -| -------- | -------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------ | -| `GET` | `/provider` | すべてのプロバイダーをリストする | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | プロバイダーの認証方法を取得する | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | OAuth を使用してプロバイダーを認証する | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | プロバイダーの OAuth コールバックを処理する | void | - ---- - -### Session - -| メソッド | パス | 説明 | 詳細 | -| -------- | ---------------------------------------- | -------------------------------------------------- | --------------------------------------------------------------------------------------- | -| `GET` | `/session` | すべてのセッションをリストする | 戻り値 Session[] | -| `POST` | `/session` | 新しいセッションを作成する | 本文: `{ parentID?, title? }`、Session を返します。 | -| `GET` | `/session/status` | すべてのセッションのセッションステータスを取得する | 戻り値 `{ [sessionID: string]: `SessionStatus` }` | -| `GET` | `/session/:id` | セッションの詳細を取得する | 戻り値 Session | -| `DELETE` | `/session/:id` | セッションとそのすべてのデータを削除する | 戻り値 `boolean` | -| `PATCH` | `/session/:id` | セッションのプロパティを更新する | 本文: `{ title? }`、Session を返します。 | -| `GET` | `/session/:id/children` | セッションの子セッションを取得する | 戻り値 Session[] | -| `GET` | `/session/:id/todo` | セッションの ToDo リストを取得する | 戻り値 Todo[] | -| `POST` | `/session/:id/init` | アプリを分析して `AGENTS.md` を作成する | 本文: `{ messageID, providerID, modelID }`、`boolean` を返します。 | -| `POST` | `/session/:id/fork` | メッセージで既存のセッションをフォークする | 本文: `{ messageID? }`、Session を返します。 | -| `POST` | `/session/:id/abort` | 実行中のセッションを中止する | 戻り値 `boolean` | -| `POST` | `/session/:id/share` | セッションを共有する | 戻り値 Session | -| `DELETE` | `/session/:id/share` | セッションの共有を解除する | 戻り値 Session | -| `GET` | `/session/:id/diff` | このセッションの差分を取得する | クエリ: `messageID?`、FileDiff[] を返します。 | -| `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` を返します。 | - ---- - -### Message - -| メソッド | パス | 説明 | 詳細 | -| -------- | --------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `GET` | `/session/:id/message` | セッション内のメッセージをリストする | クエリ: `limit?`、`{ info: `Message`, parts: `Part[]`}[]` を返します。 | -| `POST` | `/session/:id/message` | メッセージを送信して応答を待ちます | 本文: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`、`{ info: `Message`, parts: `Part[]`}` を返します | -| `GET` | `/session/:id/message/:messageID` | メッセージの詳細を取得する | 戻り値 `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/prompt_async` | メッセージを非同期に送信する (待機なし) | body: `/session/:id/message` と同じ、`204 No Content` を返します。 | -| `POST` | `/session/:id/command` | スラッシュコマンドを実行します | 本文: `{ messageID?, agent?, model?, command, arguments }`、`{ info: `Message`, parts: `Part[]`}` を返します | -| `POST` | `/session/:id/shell` | シェルコマンドを実行する | 本文: `{ agent, model?, command }`、`{ info: `Message`, parts: `Part[]`}` を返します | - ---- - -### Command - -| メソッド | パス | 説明 | レスポンス | -| -------- | ---------- | ---------------------------- | --------------------------------------------- | -| `GET` | `/command` | すべてのコマンドをリストする | Command[] | - ---- - -### File - -| メソッド | パス | 説明 | レスポンス | -| -------- | ------------------------ | ---------------------------------------- | -------------------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | ファイル内のテキストを検索 | `path`、`lines`、`line_number`、`absolute_offset`、`submatches` と一致するオブジェクトの配列 | -| `GET` | `/find/file?query=` | ファイルとディレクトリを名前で検索する | `string[]` (パス) | -| `GET` | `/find/symbol?query=` | ワークスペースのシンボルを検索する | Symbol[] | -| `GET` | `/file?path=` | ファイルとディレクトリをリストする | FileNode[] | -| `GET` | `/file/content?path=

` | ファイルを読む | FileContent | -| `GET` | `/file/status` | 追跡されたファイルのステータスを取得する | File[] | - -#### `/find/file` クエリパラメータ - -- `query` (必須) — 検索文字列 (あいまい一致) -- `type` (オプション) — 結果を `"file"` または `"directory"` に制限します -- `directory` (オプション) — 検索用のプロジェクトルートをオーバーライドします。 -- `limit` (オプション) — 最大結果 (1 ~ 200) -- `dirs` (オプション) — 従来のフラグ (`"false"` はファイルのみを返します) - ---- - -### Tool (Experimental) - -| メソッド | パス | 説明 | レスポンス | -| -------- | ------------------------------------------- | ---------------------------------------------- | -------------------------------------------- | -| `GET` | `/experimental/tool/ids` | すべてのツール ID をリストする | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | モデルの JSON スキーマを含むツールをリストする | ToolList | - ---- - -### LSP, Formatter, MCP - -| メソッド | パス | 説明 | レスポンス | -| -------- | ------------ | ---------------------------------- | --------------------------------------------------------------------- | -| `GET` | `/lsp` | LSP サーバーのステータスを取得 | LSPStatus[] | -| `GET` | `/formatter` | フォーマッタのステータスを取得する | FormatterStatus[] | -| `GET` | `/mcp` | MCP サーバーのステータスを取得する | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | MCP サーバーを動的に追加する | 本文: `{ name, config }`、MCP ステータスオブジェクトを返します。 | - ---- - -### Agent - -| メソッド | パス | 説明 | レスポンス | -| -------- | -------- | ------------------------------------------ | ------------------------------------------- | -| `GET` | `/agent` | 利用可能なすべてのエージェントをリストする | Agent[] | - ---- - -### Logging - -| メソッド | パス | 説明 | レスポンス | -| -------- | ------ | ---------------------------------------------------------------------- | ---------- | -| `POST` | `/log` | ログエントリを書き込みます。本体:`{ service, level, message, extra? }` | void | - ---- - -### TUI - -| メソッド | パス | 説明 | レスポンス | -| -------- | ----------------------- | ----------------------------------------------- | -------------------------- | -| `POST` | `/tui/append-prompt` | プロンプトにテキストを追加します | void | -| `POST` | `/tui/open-help` | ヘルプダイアログを開く | void | -| `POST` | `/tui/open-sessions` | セッションセレクターを開く | void | -| `POST` | `/tui/open-themes` | テーマセレクターを開く | void | -| `POST` | `/tui/open-models` | モデルセレクターを開く | void | -| `POST` | `/tui/submit-prompt` | 現在のプロンプトを送信します | void | -| `POST` | `/tui/clear-prompt` | プロンプトをクリア | void | -| `POST` | `/tui/execute-command` | コマンドを実行する (`{ command }`) | void | -| `POST` | `/tui/show-toast` | トーストを表示 (`{ title?, message, variant }`) | void | -| `GET` | `/tui/control/next` | 次の制御リクエストを待ちます | 制御リクエストオブジェクト | -| `POST` | `/tui/control/response` | 制御リクエストに応答する (`{ body }`) | void | - ---- - -### Auth - -| メソッド | パス | 説明 | レスポンス | -| -------- | ----------- | ------------------------------------------------------------------------------ | ---------- | -| `PUT` | `/auth/:id` | 認証資格情報を設定します。本文はプロバイダーのスキーマと一致する必要があります | void | - ---- - -### Event - -| メソッド | パス | 説明 | レスポンス | -| -------- | -------- | ------------------------------------------------------------------------------------- | ------------------------------ | -| `GET` | `/event` | サーバー送信イベントストリーム。最初のイベントは `server.connected`、次にバスイベント | サーバー送信イベントストリーム | - ---- - -### Documentation - -| メソッド | パス | 説明 | レスポンス | -| -------- | ------ | ---------------- | -------------------------------- | -| `GET` | `/doc` | OpenAPI 3.1 仕様 | OpenAPI 仕様を備えた HTML ページ | diff --git a/packages/web/src/content/docs/ja/share.mdx b/packages/web/src/content/docs/ja/share.mdx deleted file mode 100644 index 606e807dc8..0000000000 --- a/packages/web/src/content/docs/ja/share.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: 共有 -description: OpenCode での会話を共有します。 ---- - -OpenCode の共有機能を使用すると、OpenCode の会話への公開リンクを作成できるため、チームメイトと共同作業したり、他の人から助けを得ることができます。 - -:::note -共有された会話は、リンクを知っている人なら誰でも公開してアクセスできます。 -::: - ---- - -## 仕組み - -会話を共有するとき、OpenCode は次のことを行います。 - -1. セッション用の一意のパブリック URL を作成します -2. 会話履歴をサーバーに同期します -3. 共有可能なリンク — `opncd.ai/s/` を介して会話にアクセスできるようにします - ---- - -## 共有 - -OpenCode は、会話の共有方法を制御する 3 つの共有モードをサポートしています。 - ---- - -### 手動(デフォルト) - -デフォルトでは、OpenCode は手動共有モードを使用します。セッションは自動的には共有されませんが、`/share` コマンドを使用して手動で共有できます。 - -``` -/share -``` - -これにより、クリップボードにコピーされる一意の URL が生成されます。 - -[設定ファイル](/docs/config): で手動モードを明示的に設定するには: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - ---- - -### 自動共有 - -[設定ファイル](/docs/config): で `share` オプションを `"auto"` に設定することで、すべての新しい会話の自動共有を有効にできます。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "auto" -} -``` - -自動共有を有効にすると、すべての新しい会話が自動的に共有され、リンクが生成されます。 - ---- - -### 無効 - -[設定ファイル](/docs/config): で `share` オプションを `"disabled"` に設定することで、共有を完全に無効にすることができます。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -これを特定のプロジェクトのチーム全体に強制するには、それをプロジェクトの `opencode.json` に追加し、Git にチェックインします。 - ---- - -## 共有の解除 - -会話の共有を停止し、パブリックアクセスから削除するには: - -``` -/unshare -``` - -これにより、共有リンクが削除され、会話に関連するデータが削除されます。 - ---- - -## プライバシー - -会話を共有する際には、留意すべき点がいくつかあります。 - ---- - -### データの保持 - -共有された会話は、明示的に共有を解除するまでアクセス可能なままになります。これ -以下が含まれます: - -- 完全な会話履歴 -- すべてのメッセージと応答 -- セッションメタデータ - ---- - -### 推奨事項 - -- 機密情報を含まない会話のみを共有してください。 -- 共有する前に会話の内容を確認してください。 -- コラボレーションが完了したら、会話の共有を解除します。 -- 独自のコードや機密データを含む会話を共有することは避けてください。 -- 機密性の高いプロジェクトの場合は、共有を完全に無効にします。 - ---- - -## 企業向け - -エンタープライズ展開の場合、共有機能は次のようになります。 - -- **セキュリティコンプライアンスのため完全に無効** -- **SSO を通じて認証されたユーザーのみに制限** -- 独自のインフラストラクチャで **セルフホスト** - -[組織内での OpenCode の使用について詳しくは、](/docs/enterprise) をご覧ください。 diff --git a/packages/web/src/content/docs/ja/skills.mdx b/packages/web/src/content/docs/ja/skills.mdx deleted file mode 100644 index 6e5bae6c75..0000000000 --- a/packages/web/src/content/docs/ja/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: エージェントスキル -description: SKILL.md 定義による再利用可能な動作の定義 ---- - -エージェントスキルにより、OpenCode はリポジトリまたはホームディレクトリから再利用可能な命令を検出できます。 -スキルはネイティブの `skill` ツールを介してオンデマンドでロードされます。エージェントは利用可能なスキルを確認し、必要に応じて完全なコンテンツをロードできます。 - ---- - -## ファイルの配置 - -スキル名ごとにフォルダーを 1 つ作成し、その中に `SKILL.md` を置きます。 -OpenCode は次の場所を検索します。 - -- プロジェクト設定: `.opencode/skills//SKILL.md` -- グローバル設定: `~/.config/opencode/skills//SKILL.md` -- プロジェクト Claude 互換: `.claude/skills//SKILL.md` -- グローバル Claude 互換: `~/.claude/skills//SKILL.md` -- プロジェクトエージェント互換: `.agents/skills//SKILL.md` -- グローバルエージェント互換: `~/.agents/skills//SKILL.md` - ---- - -## 検出の仕組み - -プロジェクトのローカルパスの場合、OpenCode は現在の作業ディレクトリから git ワークツリーに到達するまで進みます。 -途中で、一致する `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` からもロードされます。 - ---- - -## フロントマターの記述 - -各 `SKILL.md` は YAML フロントマターで始まる必要があります。 -次のフィールドのみが認識されます。 - -- `name` (必須) -- `description` (必須) -- `license` (オプション) -- `compatibility` (オプション) -- `metadata` (オプション、文字列間のマップ) - -不明なフロントマターフィールドは無視されます。 - ---- - -## 名前の検証 - -`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 - - - git-release - Create consistent releases and changelogs - - -``` - -エージェントはツールを呼び出してスキルをロードします。 - -``` -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` などに一致します。 - ---- - -## エージェントごとの上書き - -特定のエージェントにグローバルのデフォルトとは異なる権限を与えます。 - -**カスタムエージェントの場合** (エージェントフロントマター内): - -```yaml ---- -permission: - skill: - "documents-*": "allow" ---- -``` - -**組み込みエージェントの場合** (`opencode.json` 内): - -```json -{ - "agent": { - "plan": { - "permission": { - "skill": { - "internal-*": "allow" - } - } - } - } -} -``` - ---- - -## スキルツールの無効化 - -スキルを使用すべきではないエージェントのスキルを完全に無効にします。 - -**カスタムエージェントの場合**: - -```yaml ---- -tools: - skill: false ---- -``` - -**組み込みエージェントの場合**: - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -無効にすると、`` セクションが完全に省略されます。 - ---- - -## 読み込みのトラブルシューティング - -スキルが表示されない場合: - -1. `SKILL.md` のスペルがすべて大文字であることを確認してください -2. フロントマターに `name` と `description` が含まれていることを確認します -3. スキル名がすべての場所で一意であることを確認する -4. 権限を確認してください - `deny` のスキルはエージェントから非表示になります diff --git a/packages/web/src/content/docs/ja/themes.mdx b/packages/web/src/content/docs/ja/themes.mdx deleted file mode 100644 index 1e4bf42180..0000000000 --- a/packages/web/src/content/docs/ja/themes.mdx +++ /dev/null @@ -1,667 +0,0 @@ ---- -title: テーマ -description: 組み込みのテーマを選択するか、独自のテーマを定義します。 ---- - -OpenCode を使用すると、いくつかの組み込みテーマから 1 つを選択したり、ターミナルのテーマに適合するテーマを使用したり、独自のカスタムテーマを定義したりできます。 - -デフォルトでは、OpenCode は独自の `opencode` テーマを使用します。 - ---- - -## ターミナル要件 - -テーマをフルカラーパレットで正しく表示するには、ターミナルが **Truecolor** (24 ビットカラー) をサポートしている必要があります。最新のターミナルのほとんどはデフォルトでこれをサポートしていますが、有効にする必要がある場合があります。 - -- **サポートを確認してください**: `echo $COLORTERM` を実行します - `truecolor` または `24bit` が出力されるはずです -- **Truecolor を有効にする**: シェルプロファイルで環境変数 `COLORTERM=truecolor` を設定します。 -- **ターミナルの互換性**: ターミナルエミュレータが 24 ビットカラーをサポートしていることを確認してください (iTerm2、Alacritty、Kitty、Windows Terminal、および GNOME Terminal の最新バージョンなどのほとんどの最新のターミナルはサポートしています)。 - -Truecolor のサポートがないと、テーマの色の精度が低下したり、最も近い 256 色の近似値に戻ったりする可能性があります。 - ---- - -## 組み込みのテーマ - -OpenCode にはいくつかの組み込みテーマが付属しています。 - -| Name | Description | -| ---------------------- | ---------------------------------------------------------------------------- | -| `system` | Adapts to your terminal’s background color | -| `tokyonight` | Based on the [Tokyonight](https://github.com/folke/tokyonight.nvim) theme | -| `everforest` | Based on the [Everforest](https://github.com/sainnhe/everforest) theme | -| `ayu` | Based on the [Ayu](https://github.com/ayu-theme) dark theme | -| `catppuccin` | Based on the [Catppuccin](https://github.com/catppuccin) theme | -| `catppuccin-macchiato` | Based on the [Catppuccin](https://github.com/catppuccin) theme | -| `gruvbox` | Based on the [Gruvbox](https://github.com/morhetz/gruvbox) theme | -| `kanagawa` | Based on the [Kanagawa](https://github.com/rebelot/kanagawa.nvim) theme | -| `nord` | Based on the [Nord](https://github.com/nordtheme/nord) theme | -| `matrix` | Hacker-style green on black theme | -| `one-dark` | Based on the [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) Dark theme | - -さらに、新しいテーマも常に追加されています。 - ---- - -## システムテーマ - -`system` テーマは、ターミナルのカラースキームに自動的に適応するように設計されています。固定色を使用する従来のテーマとは異なり、_system_ テーマは次のようになります。 - -- **グレースケールを生成**: ターミナルの背景色に基づいてカスタムグレースケールを作成し、最適なコントラストを確保します。 -- **ANSI カラーを使用**: 構文の強調表示と UI 要素に標準の ANSI カラー (0 ~ 15) を利用し、ターミナルのカラーパレットを尊重します。 -- **ターミナルのデフォルトを維持**: テキストと背景の色に `none` を使用して、ターミナルのネイティブの外観を維持します。 - -システムテーマは、次のようなユーザーを対象としています。 - -- OpenCode をターミナルの外観と一致させたい -- カスタムターミナルのカラースキームを使用する -- すべてのターミナルアプリケーションにわたって一貫した外観を好む - ---- - -## テーマの使用 - -テーマを選択するには、`/theme` コマンドでテーマ選択を表示します。または、`tui.json` で指定することもできます。 - -```json title="tui.json" {3} -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - ---- - -## カスタムテーマ - -OpenCode は、ユーザーがテーマを簡単に作成およびカスタマイズできる柔軟な JSON ベースのテーマシステムをサポートしています。 - ---- - -### 優先順位 - -テーマは複数のディレクトリから次の順序でロードされ、後のディレクトリが前のディレクトリをオーバーライドします。 - -1. **組み込みテーマ** - これらはバイナリに埋め込まれています -2. **ユーザー設定ディレクトリ** - `~/.config/opencode/themes/*.json` または `$XDG_CONFIG_HOME/opencode/themes/*.json` で定義されます -3. **プロジェクトのルートディレクトリ** - `/.opencode/themes/*.json` で定義されます。 -4. **現在の作業ディレクトリ** - `./.opencode/themes/*.json` で定義 - -複数のディレクトリに同じ名前のテーマが含まれている場合は、優先度の高いディレクトリのテーマが使用されます。 - ---- - -### テーマの作成 - -カスタムテーマを作成するには、テーマディレクトリの 1 つに 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 形式を使用します。 - -- **16 進数の色**: `"#ffffff"` -- **ANSI カラー**: `3` (0-255) -- **色の参照**: `"primary"` またはカスタム定義 -- **ダーク/ライトのバリエーション**: `{"dark": "#000", "light": "#fff"}` -- **色なし**: `"none"` - ターミナルのデフォルトの色または透明を使用します。 - ---- - -### 色の定義 - -`defs` セクションはオプションであり、テーマ内で参照できる再利用可能な色を定義できます。 - ---- - -### ターミナルのデフォルト - -特別な値 `"none"` を任意の色に使用して、ターミナルのデフォルトの色を継承できます。これは、ターミナルの配色とシームレスに融合するテーマを作成する場合に特に便利です。 - -- `"text": "none"` - ターミナルのデフォルトの前景色を使用します -- `"background": "none"` - ターミナルのデフォルトの背景色を使用します - ---- - -### 例 - -カスタムテーマの例を次に示します。 - -```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" - } - } -} -``` - ---- - -## カスタムテーマ - -OpenCode は、ユーザーがテーマを簡単に作成およびカスタマイズできる柔軟な JSON ベースのテーマ システムをサポートしています。 - ---- - -### 階層 - -テーマは複数のディレクトリから次の順序でロードされ、後のディレクトリが前のディレクトリをオーバーライドします。 - -1. **組み込みテーマ** - これらはバイナリに埋め込まれています -2. **ユーザー設定ディレクトリ** - `~/.config/opencode/themes/*.json` または `$XDG_CONFIG_HOME/opencode/themes/*.json` で定義されます -3. **プロジェクトのルート ディレクトリ** - `/.opencode/themes/*.json` で定義されます。 -4. **現在の作業ディレクトリ** - `./.opencode/themes/*.json` で定義 - -複数のディレクトリに同じ名前のテーマが含まれている場合は、優先度の高いディレクトリのテーマが使用されます。 - ---- - -### テーマの作成 - -カスタム テーマを作成するには、テーマ ディレクトリの 1 つに 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 形式を使用します。 - -- **16 進数の色**: `"#ffffff"` -- **ANSI カラー**: `3` (0-255) -- **色の参照**: `"primary"` またはカスタム定義 -- **ダーク/ライトのバリエーション**: `{"dark": "#000", "light": "#fff"}` -- **色なし**: `"none"` - terminal のデフォルトの色または透明を使用します。 - ---- - -### 色の定義 - -`defs` セクションはオプションであり、テーマ内で参照できる再利用可能な色を定義できます。 - ---- - -### ターミナルのデフォルト - -特別な値 `"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" - } - } -} -``` diff --git a/packages/web/src/content/docs/ja/tools.mdx b/packages/web/src/content/docs/ja/tools.mdx deleted file mode 100644 index 1473a0b360..0000000000 --- a/packages/web/src/content/docs/ja/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -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 - -プロジェクト環境でシェルコマンドを実行します。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "bash": "allow" - } -} -``` - -このツールを使用すると、LLM は `npm install`、`git status`、またはその他のシェルコマンドなどのターミナルコマンドを実行できます。 - ---- - -### 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`、`write`、`patch`) をカバーする `edit` 権限によって制御されます。 -::: - ---- - -### read - -コードベースからファイルの内容を読み取ります。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "read": "allow" - } -} -``` - -このツールはファイルを読み取り、その内容を返します。大きなファイルの特定の行範囲の読み取りをサポートします。 - ---- - -### grep - -正規表現を使用してファイルの内容を検索します。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "grep": "allow" - } -} -``` - -コードベース全体での高速コンテンツ検索。完全な正規表現構文とファイルパターンフィルタリングをサポートします。 - ---- - -### glob - -パターンマッチングによりファイルを検索します。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "glob": "allow" - } -} -``` - -`**/*.js` や `src/**/*.ts` などの glob パターンを使用してファイルを検索します。一致するファイルパスを変更時間順に並べて返します。 - ---- - -### lsp (実験的) - -構成された 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 Servers](/docs/lsp). - ---- - -### patch - -ファイルにパッチを適用します。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -このツールは、コードベースにパッチファイルを適用します。さまざまなソースからの差分やパッチを適用するのに役立ちます。 - -:::note -`patch` ツールは、すべてのファイル変更 (`edit`、`write`、`patch`) をカバーする `edit` 権限によって制御されます。 -::: - ---- - -### skill - -[skill](/docs/skills) (`SKILL.md` ファイル) をロードし、会話でその内容を返します。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "skill": "allow" - } -} -``` - ---- - -### todowrite - -コーディングセッション中に ToDo リストを管理します。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "todowrite": "allow" - } -} -``` - -タスクリストを作成および更新して、複雑な操作中の進行状況を追跡します。 LLM はこれを使用して、複数ステップのタスクを整理します。 - -:::note -このツールはデフォルトではサブエージェントに対して無効になっていますが、手動で有効にすることができます。 [詳細はこちら](/docs/agents/#permissions) -::: - ---- - -### webfetch - -Web コンテンツを取得します。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "webfetch": "allow" - } -} -``` - -LLM が Web ページをフェッチして読み取ることを許可します。ドキュメントの検索やオンラインリソースの調査に役立ちます。 - ---- - -### 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 を使用して Web 検索を実行し、オンラインで関連情報を見つけます。トピックの調査、最新のイベントの検索、またはトレーニングデータのカットオフを超えた情報の収集に役立ちます。 - -API キーは必要ありません。ツールは認証なしで Exa AI のホストされた MCP サービスに直接接続します。 - -:::tip -情報を見つける必要がある場合 (検出)、`websearch` を使用し、特定の URL からコンテンツを取得する必要がある場合 (取得) は `webfetch` を使用します。 -::: - ---- - -### 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 統合、サードパーティサービスが含まれます。 - -[MCP サーバーの設定について詳しくは、](/docs/mcp-servers) をご覧ください。 - ---- - -## 内部動作 - -内部的には、`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` ディレクトリ内を検索できます。 diff --git a/packages/web/src/content/docs/ja/troubleshooting.mdx b/packages/web/src/content/docs/ja/troubleshooting.mdx deleted file mode 100644 index e58818da6f..0000000000 --- a/packages/web/src/content/docs/ja/troubleshooting.mdx +++ /dev/null @@ -1,300 +0,0 @@ ---- -title: トラブルシューティング -description: よくある問題とその解決方法。 ---- - -OpenCode の問題をデバッグするには、まず、ディスク上に保存されているログとローカルデータを確認します。 - ---- - -## ログ - -ログファイルは次の場所に書き込まれます。 - -- **macOS/Linux**: `~/.local/share/opencode/log/` -- **Windows**: `WIN+R` を押して `%USERPROFILE%\.local\share\opencode\log` を貼り付けます - -ログファイルにはタイムスタンプ付きの名前が付けられ (例: `2025-01-09T123456.log`)、最新の 10 個のログファイルが保存されます。 - -`--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 リポジトリ内にある場合は、`.//storage/` に保存されます - - Git リポジトリではない場合は、`./global/storage/` に保存されます - ---- - -## デスクトップアプリ - -OpenCode Desktop は、ローカル OpenCode サーバー (`opencode-cli` サイドカー) をバックグラウンドで実行します。ほとんどの問題は、誤動作しているプラグイン、破損したキャッシュ、または不正なサーバー設定によって発生します。 - -### クイックチェック - -- アプリを完全に終了して再起動します。 -- アプリにエラー画面が表示された場合は、**再起動** をクリックしてエラーの詳細をコピーします。 -- macOS のみ: `OpenCode` メニュー -> **Webview をリロード** (UI が空白またはフリーズしている場合に役立ちます)。 - ---- - -### プラグインを無効にする - -デスクトップアプリが起動時にクラッシュしたり、ハングしたり、異常な動作をしたりする場合は、まずプラグインを無効にしてください。 - -#### グローバル設定の確認 - -グローバル設定ファイルを開き、`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` を貼り付けます -- **プロジェクトプラグイン** (プロジェクトごとの構成を使用する場合のみ) - - `/.opencode/plugins/` - -アプリが再び動作し始めた場合は、プラグインを 1 つずつ再度有効にして、問題の原因となっているプラ​​グインを特定します。 - ---- - -### キャッシュをクリアする - -プラグインを無効にしても解決しない場合 (またはプラグインのインストールが停止した場合)、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 デスクトップを再起動します。 - ---- - -### サーバー接続の問題の修正 - -OpenCode Desktop は、独自のローカルサーバー (デフォルト) を起動することも、構成したサーバー URL に接続することもできます。 - -**「接続に失敗しました」** ダイアログが表示された場合 (またはアプリがスプラッシュ画面を通過できない場合)、カスタムサーバー URL を確認してください。 - -#### デスクトップのデフォルトのサーバー URL をクリアします - -ホーム画面でサーバー名 (ステータスドット付き) をクリックしてサーバーピッカーを開きます。 [**デフォルトサーバー**] セクションで、[**クリア**] をクリックします。 - -#### 設定から `server.port` / `server.hostname` を削除します - -`opencode.json(c)` に `server` セクションが含まれている場合は、それを一時的に削除し、デスクトップアプリを再起動します。 - -#### 環境変数を確認する - -環境に `OPENCODE_PORT` が設定されている場合、デスクトップアプリはローカルサーバーにそのポートを使用しようとします。 - -- `OPENCODE_PORT` の設定を解除して (または空きポートを選択して)、再起動します。 - ---- - -### Linux: Wayland / X11 の問題 - -Linux では、一部の Wayland セットアップにより、空白のウィンドウやコンポジターエラーが発生する可能性があります。 - -- Wayland を使用していて、アプリが空白またはクラッシュしている場合は、`OC_ALLOW_WAYLAND=1` で起動してみてください。 -- これにより状況が悪化する場合は、それを削除し、代わりに X11 セッションで起動してみてください。 - ---- - -### Windows: WebView2 ランタイム - -Windows では、OpenCode Desktop には Microsoft Edge **WebView2 ランタイム**が必要です。アプリが空白のウィンドウで開くか、起動しない場合は、WebView2 をインストールまたは更新して、もう一度試してください。 - ---- - -### Windows: 一般的なパフォーマンスの問題 - -Windows でパフォーマンスの低下、ファイルアクセスの問題、またはターミナルの問題が発生している場合は、[WSL (Windows Subsystem for Linux)](/docs/windows-wsl) を使用してみてください。 WSL は、OpenCode の機能とよりシームレスに連携する Linux 環境を提供します。 - ---- - -### 通知が表示されない - -OpenCode Desktop では、次の場合にのみシステム通知が表示されます。 - -- OS 設定で OpenCode の通知が有効になっており、 -- アプリウィンドウにフォーカスがありません。 - ---- - -### デスクトップアプリのストレージのリセット (最後の手段) - -アプリが起動せず、UI 内から設定をクリアできない場合は、デスクトップアプリの保存された状態をリセットします。 - -1. OpenCode デスクトップを終了します。 -2. これらのファイルを見つけて削除します (これらのファイルは OpenCode デスクトップアプリのデータディレクトリにあります)。 - -- `opencode.settings.dat` (デスクトップのデフォルトサーバー URL) -- `opencode.global.dat` および `opencode.workspace.*.dat` (最近のサーバー/プロジェクトなどの UI 状態) - -ディレクトリをすばやく見つけるには: - -- **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` で実行して、ターミナルに出力を確認してください。 -3. `opencode upgrade` を含む最新バージョンを使用していることを確認してください - ---- - -### 認証の問題 - -1. TUI で `/connect` コマンドを使用して再認証を試みます -2. API キーが有効であることを確認してください -3. ネットワークでプロバイダーの API への接続が許可されていることを確認してください - ---- - -### モデルが見つからない - -1. プロバイダーで認証されていることを確認してください -2. 構成内のモデル名が正しいことを確認してください -3. 一部のモデルでは、特定のアクセスまたはサブスクリプションが必要な場合があります - -`ProviderModelNotFoundError` が表示された場合は、間違いがある可能性が高くなります。 -どこかのモデルを参照しています。 -モデルは次のように参照する必要があります: `/` - -例: - -- `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. TUI の `/connect` コマンドを使用して、プロバイダーで再認証します。 - ---- - -### 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 -``` - -**ヘッドレス環境の場合:** - -```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` の順序でクリップボードツールを検索しようとします。 diff --git a/packages/web/src/content/docs/ja/tui.mdx b/packages/web/src/content/docs/ja/tui.mdx deleted file mode 100644 index a3e11cc1b5..0000000000 --- a/packages/web/src/content/docs/ja/tui.mdx +++ /dev/null @@ -1,423 +0,0 @@ ---- -title: TUI -description: OpenCode ターミナルユーザーインターフェイスの使用。 ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode は、LLM を使用してプロジェクトを作業するための対話型ターミナルインターフェイスまたは TUI を提供します。 - -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 コマンド - -メッセージを `!` で開始して、シェルコマンドを実行します。 - -```bash frame="none" -!ls -la -``` - -コマンドの出力は、ツールの結果として会話に追加されます。 - ---- - -## コマンド - -OpenCode TUI を使用する場合、「`/`」に続いてコマンド名を入力すると、アクションをすばやく実行できます。例えば: - -```bash frame="none" -/help -``` - -ほとんどのコマンドには、`ctrl+x` をリーダーキーとして使用するキーバインドもあります。`ctrl+x` がデフォルトのリーダーキーです。 [詳細はこちら](/docs/keybinds)。 - -利用可能なすべてのスラッシュコマンドは次のとおりです。 - ---- - -### 接続 - -OpenCode にプロバイダーを追加します。利用可能なプロバイダーから選択し、その API キーを追加できます。 - -```bash frame="none" -/connect -``` - ---- - -### コンパクト - -現在のセッションを圧縮します。 _別名_: `/summarize` - -```bash frame="none" -/compact -``` - -**キーバインド:** `ctrl+x c` - ---- - -### 詳細 - -ツール実行の詳細を切り替えます。 - -```bash frame="none" -/details -``` - -**キーバインド:** `ctrl+x d` - ---- - -### エディタ - -メッセージを作成するために外部エディタを開きます。 `EDITOR` 環境変数に設定されたエディタを使用します。 [詳細はこちら](#editor-setup)。 - -```bash frame="none" -/editor -``` - -**キーバインド:** `ctrl+x e` - ---- - -### 終了 - -OpenCode を終了します。 _エイリアス_: `/quit`、`/q` - -```bash frame="none" -/exit -``` - -**キーバインド:** `ctrl+x q` - ---- - -### エクスポート - -現在の会話を Markdown にエクスポートし、デフォルトのエディターで開きます。 `EDITOR` 環境変数に設定されたエディタを使用します。 [詳細はこちら](#editor-setup)。 - -```bash frame="none" -/export -``` - -**キーバインド:** `ctrl+x x` - ---- - -### ヘルプ - -ヘルプダイアログを表示します。 - -```bash frame="none" -/help -``` - -**キーバインド:** `ctrl+x h` - ---- - -### 初期化 - -`AGENTS.md` ファイルを作成または更新します。 [詳細はこちら](/docs/rules)。 - -```bash frame="none" -/init -``` - -**キーバインド:** `ctrl+x i` - ---- - -### モデル - -利用可能なモデルをリストします。 - -```bash frame="none" -/models -``` - -**キーバインド:** `ctrl+x m` - ---- - -### 新規セッション - -新しいセッションを開始します。 _別名_: `/clear` - -```bash frame="none" -/new -``` - -**キーバインド:** `ctrl+x n` - ---- - -### やり直し - -以前に取り消したメッセージをやり直します。 `/undo` を使用した後にのみ使用できます。 - -:::tip -ファイルの変更も復元されます。 -::: -内部的には、`undo` を使用してファイルの変更を管理します。したがって、あなたのプロジェクトは **Git リポジトリ** である必要があります。 - -```bash frame="none" -/redo -``` - -**キーバインド:** `ctrl+x r` - ---- - -### セッション - -セッションを一覧表示して切り替えます。 _エイリアス_: `/resume`、`/continue` - -```bash frame="none" -/sessions -``` - -**キーバインド:** `ctrl+x l` - ---- - -### 共有 - -現在のセッションを共有します。 [詳細はこちら](/docs/share)。 - -```bash frame="none" -/share -``` - -**キーバインド:** `ctrl+x s` - ---- - -### テーマ - -利用可能なテーマをリストします。 - -```bash frame="none" -/theme -``` - -**キーバインド:** `ctrl+x t` - ---- - -### 思考 - -会話内の思考/推論ブロックの表示を切り替えます。有効にすると、拡張思考をサポートするモデルの推論プロセスを確認できます。 - -:::note -このコマンドは、思考ブロックを**表示**するかどうかのみを制御します。モデルの推論機能を有効または無効にすることはありません。実際の推論機能を切り替えるには、`ctrl+t` を使用してモデルバリアントを循環させます。 -::: - -```bash frame="none" -/thinking -``` - ---- - -### 元に戻す - -会話の最後のメッセージを元に戻します。最新のユーザーメッセージ、その後のすべての応答、およびファイルの変更を削除します。 - -:::tip -加えられたファイルの変更も元に戻されます。 -::: -内部的には、`undo` を使用してファイルの変更を管理します。したがって、あなたのプロジェクトは **Git リポジトリ** である必要があります。 - -```bash frame="none" -/undo -``` - -**キーバインド:** `ctrl+x u` - ---- - -### 共有の解除 - -現在のセッションの共有を解除します。 [詳細はこちら](/docs/share#un-sharing)。 - -```bash frame="none" -/unshare -``` - ---- - -## エディタのセットアップ - -`/editor` および `/export` コマンドはどちらも、`EDITOR` 環境変数で指定されたエディターを使用します。 - - - - ```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" - ``` - -これを永続的にするには、これをシェルプロファイルに追加します。 -`~/.bashrc`、`~/.zshrc`など - - - - - ```bash - set EDITOR=notepad - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - set EDITOR=code --wait - ``` - -これを永続的にするには、**システムプロパティ** > **環境変数**を使用します。 - - - - - ```powershell - $env:EDITOR = "notepad" - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - $env:EDITOR = "code --wait" - ``` - -これを永続的にするには、これを PowerShell プロファイルに追加します。 - - - - -一般的なエディターオプションには次のものがあります。 - -- `code` - VS Code -- `cursor` - Cursor -- `windsurf` - Windsurf -- `nvim` - Neovim エディター -- `vim` - Vim エディター -- `nano` - ナノエディター -- `notepad` - Windows メモ帳 -- `subl` - Sublime Text - -:::note -VS Code などの一部のエディターは、`--wait` フラグを使用して起動する必要があります。 -::: -一部のモードでは実行にコマンドライン引数が必要です。`--wait` フラグを使うと、エディターが閉じるまでプロセスが待機します。 - ---- - -## 設定 - -`tui.json` (または `tui.jsonc`) ファイルを通じて TUI の動作をカスタマイズできます。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -これは、サーバー/ランタイムの動作を構成する `opencode.json` とは別です。 - -`keybinds` は組み込みのデフォルトとマージされるため、変更したいショートカットだけを設定すれば十分です。 - -### オプション - -- `theme` - UI テーマを設定します。[詳細はこちら](/docs/themes)。 -- `keybinds` - キーボードショートカットをカスタマイズします。[詳細はこちら](/docs/keybinds)。 -- `leader_timeout` - leader key を押したあと、OpenCode が次のキー入力を待つ時間を制御します。デフォルトは `2000` です。 -- `scroll_acceleration.enabled` - macOS スタイルのスクロールアクセラレーションを有効にして、スムーズで自然なスクロールを実現します。有効にすると、高速スクロールジェスチャではスクロール速度が向上し、ゆっくりとした動きでは正確なままになります。 **この設定は `scroll_speed` よりも優先され、有効になっている場合は上書きされます。** -- `scroll_speed` - スクロールコマンドを使用するときに TUI がスクロールする速度を制御します (最小: `0.001`、小数をサポート)。デフォルトは `3` です。 **注: `scroll_acceleration.enabled` が `true` に設定されている場合、これは無視されます。** -- `diff_style` - 差分レンダリングを制御します。 `"auto"` はターミナルの幅に適応し、`"stacked"` は常に 1 列のレイアウトを表示します。 -- `mouse` - TUI でのマウスキャプチャを有効または無効にします (デフォルト: `true`)。無効にすると、ターミナル本来のマウス選択/スクロール動作が維持されます。 -- `attention` - TUI のデスクトップ通知とサウンドを設定します。デフォルトでは無効です。 - -カスタム TUI 設定パスをロードするには、`OPENCODE_TUI_CONFIG` を使用します。 - -### Attention - -Attention を有効にすると、OpenCode が回答待ち、権限の承認待ち、セッションエラー、またはセッション完了を知らせたいときに、TUI がサウンドやデスクトップ通知で知らせます。`attention.enabled` で有効化します。組み込みイベントは発生時にサウンドを再生します。デスクトップ通知はターミナルウィンドウにフォーカスがない場合にのみ送信され、subagent イベントには使われません。 - -- `enabled` - Attention のすべての通知とサウンドを有効にします。デフォルトは `false` です。 -- `notifications` - Attention が有効なとき、TUI がターミナル経由でデスクトップ通知を送信できるようにします。デフォルトは `true` です。 -- `sound` - Attention が有効なとき、通知音の再生を許可します。デフォルトは `true` です。 -- `volume` - 通知音のデフォルト音量を `0` から `1` で指定します。デフォルトは `0.4` です。 -- `sound_pack` - 使用する sound pack ID です。デフォルトは `opencode.default` です。 -- `sounds` - `default`、`question`、`permission`、`error`、`done`、または `subagent_done` に使うカスタムサウンドファイルを指定します。パスは絶対パス、`file://` URL、または `tui.json` からの相対パスにできます。 - ---- - -## カスタマイズ - -コマンドパレット (`ctrl+x h` または `/help`) を使用して、TUI ビューのさまざまな側面をカスタマイズできます。これらの設定は再起動後も維持されます。 - ---- - -#### ユーザー名の表示 - -チャットメッセージにユーザー名を表示するかどうかを切り替えます。これには次の方法でアクセスします。 - -- コマンドパレット:「ユーザー名」または「ユーザー名を隠す」を検索します。 -- 設定は自動的に保持され、TUI セッション全体で記憶されます。 diff --git a/packages/web/src/content/docs/ja/web.mdx b/packages/web/src/content/docs/ja/web.mdx deleted file mode 100644 index 77095dac75..0000000000 --- a/packages/web/src/content/docs/ja/web.mdx +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: ウェブ -description: ブラウザで OpenCode を使用する。 ---- - -OpenCode はブラウザで Web アプリケーションとして実行でき、ターミナルを必要とせずに同じ強力な AI コーディングエクスペリエンスを提供します。 - -![OpenCode Web - 新しいセッション](../../../assets/web/web-homepage-new-session.png) - ---- - -## はじめる - -以下を実行して Web インターフェースを開始します。 - -```bash -opencode web -``` - -これにより、利用可能なランダムなポートを使用して `127.0.0.1` でローカルサーバーが起動され、デフォルトのブラウザで OpenCode が自動的に開きます。 - -:::caution -`OPENCODE_SERVER_PASSWORD` が設定されていない場合、サーバーは保護されません。これはローカルで使用する場合には問題ありませんが、ネットワークアクセス用に設定する必要があります。 -::: -:::tip[Windows ユーザー] -最高のエクスペリエンスを得るには、PowerShell ではなく [WSL](/docs/windows-wsl) から `opencode web` を実行します。これにより、ファイルシステムへの適切なアクセスとターミナルの統合が保証されます。 -::: - ---- - -## 設定 - -コマンドラインフラグを使用するか、[設定ファイル](/docs/config)で Web サーバーを設定できます。 - -### ポート - -デフォルトでは、OpenCode は使用可能なポートを選択します。ポートを指定できます。 - -```bash -opencode web --port 4096 -``` - -### ホスト名 - -デフォルトでは、サーバーは `127.0.0.1` (localhost のみ) にバインドされます。ネットワーク上で 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` で変更できます。 - ---- - -## Web インターフェースの使用 - -開始すると、Web インターフェイスから OpenCode セッションにアクセスできるようになります。 - -### セッション - -ホームページからセッションを表示および管理します。アクティブなセッションを確認したり、新しいセッションを開始したりできます。 - -![OpenCode Web - アクティブなセッション](../../../assets/web/web-homepage-active-session.png) - -### サーバーステータス - -「サーバーを表示」をクリックすると、接続されているサーバーとそのステータスが表示されます。 - -![OpenCode Web - サーバー](../../../assets/web/web-homepage-see-servers.png) - ---- - -## ターミナルの接続 - -実行中の Web サーバーにターミナル TUI を接続できます。 - -```bash -# Start the web server -opencode web --port 4096 - -# In another terminal, attach the TUI -opencode attach http://localhost:4096 -``` - -これにより、Web インターフェイスとターミナルの両方を同時に使用し、同じセッションと状態を共有できるようになります。 - ---- - -## 設定ファイル - -`opencode.json` 設定ファイルでサーバー設定を構成することもできます。 - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -コマンドラインフラグは、設定ファイルの設定よりも優先されます。 diff --git a/packages/web/src/content/docs/ja/windows-wsl.mdx b/packages/web/src/content/docs/ja/windows-wsl.mdx deleted file mode 100644 index f5a09f2708..0000000000 --- a/packages/web/src/content/docs/ja/windows-wsl.mdx +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: Windows (WSL) -description: WSL を使って Windows で OpenCode を使う。 ---- - -import { Steps } from "@astrojs/starlight/components" - -OpenCode は Windows で直接実行できますが、より快適に使うには [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) の利用をおすすめします。WSL は OpenCode の機能とスムーズに連携する Linux 環境を提供します。 - -:::tip[WSL を使う理由] -WSL を使うと、ファイルシステム性能、ターミナルサポート、OpenCode が依存する開発ツールとの互換性が向上します。 -::: - ---- - -## セットアップ - - - -1. **WSL をインストールする** - - まだの場合は、Microsoft 公式ガイドを使って [WSL をインストール](https://learn.microsoft.com/en-us/windows/wsl/install) します。 - -2. **WSL で OpenCode をインストールする** - - WSL の準備ができたら WSL のターミナルを開き、[インストール方法](/docs/) のいずれかで OpenCode をインストールします。 - - ```bash - curl -fsSL https://opencode.ai/install | bash - ``` - -3. **WSL から OpenCode を使う** - - プロジェクトディレクトリに移動し(Windows ファイルは `/mnt/c/` や `/mnt/d/` などからアクセス)、OpenCode を実行します。 - - ```bash - cd /mnt/c/Users/YourName/project - opencode - ``` - - - ---- - -## デスクトップアプリ + 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` が使えない場合は、WSL 側で `hostname -I` を実行して IP アドレスを確認し、`http://:4096` に接続してください。 -::: -:::caution -`--hostname 0.0.0.0` を使う場合は、`OPENCODE_SERVER_PASSWORD` を設定してサーバーを保護してください。 - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0 -``` - -::: - -## Web クライアント + WSL - -Windows で Web 利用を快適にするには: - -1. **PowerShell ではなく WSL ターミナルで `opencode web` を実行する** - - ```bash - opencode web --hostname 0.0.0.0 - ``` - -2. **Windows のブラウザからアクセスする** - - `http://localhost:` にアクセスします(URL は OpenCode が表示します)。 - -WSL から `opencode web` を実行すると、適切なファイルシステムアクセスとターミナル統合を維持したまま、Windows ブラウザから利用できます。 - ---- - -## Windows ファイルへのアクセス - -WSL からは `/mnt/` ディレクトリ経由で Windows ファイルにアクセスできます。 - -- `C:` drive → `/mnt/c/` -- `D:` drive → `/mnt/d/` -- そのほかのドライブも同様です - -例: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -よりスムーズに使うには、リポジトリを WSL のファイルシステム(例: `~/code/`)にクローンまたはコピーして、そこで OpenCode を実行することをおすすめします。 -::: - ---- - -## ヒント - -- Windows ドライブ上のプロジェクトでも、OpenCode は WSL で実行するとファイルアクセスがスムーズです -- OpenCode と一緒に VS Code の [WSL 拡張機能](https://code.visualstudio.com/docs/remote/wsl) を使うと統合的な開発フローを構築できます -- OpenCode の設定とセッションは WSL 環境内の `~/.local/share/opencode/` に保存されます diff --git a/packages/web/src/content/docs/ja/zen.mdx b/packages/web/src/content/docs/ja/zen.mdx deleted file mode 100644 index 72df27be4c..0000000000 --- a/packages/web/src/content/docs/ja/zen.mdx +++ /dev/null @@ -1,301 +0,0 @@ ---- -title: OpenCode Zen -description: OpenCode によって提供されるモデルの厳選されたリスト。 ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen は、OpenCode チームが提供する、テスト済みかつ検証済みのモデルの一覧です。 - -Zen は OpenCode のほかのプロバイダーと同じように動作します。OpenCode Zen にログインして API キーを取得できます。これは **完全にオプション** であり、OpenCode を使うために必須ではありません。 - ---- - -## 背景 - -世の中には非常に多くのモデルがありますが、コーディングエージェントとして十分に機能するものはごく一部です。さらに、ほとんどのプロバイダーは設定が大きく異なるため、得られるパフォーマンスや品質にも大きな差が出ます。 - -:::tip -OpenCode でうまく動作する、厳選したモデルとプロバイダーの組み合わせをテストしました。 -::: - -そのため、OpenRouter のようなものを通じてモデルを使っている場合、欲しいモデルの最適なバージョンを本当に使えているかを判断するのは困難です。 - -これを解決するために、私たちはいくつかのことを行いました。 - -1. 厳選したモデル群をテストし、それぞれのチームと、最適な動かし方について話し合いました。 -2. そのうえで、いくつかのプロバイダーと連携し、それらが正しく提供されるようにしました。 -3. 最後に、モデルとプロバイダーの組み合わせをベンチマークし、自信を持っておすすめできる一覧を作成しました。 - -OpenCode Zen は、これらのモデルにアクセスできる AI ゲートウェイです。 - ---- - -## 仕組み - -OpenCode Zen は、OpenCode のほかのプロバイダーと同じように動作します。 - -1. **OpenCode Zen** にサインインし、請求情報を追加して、API キーをコピーします。 -2. TUI で `/connect` コマンドを実行し、OpenCode Zen を選んで API キーを貼り付けます。 -3. TUI で `/models` を実行すると、私たちがおすすめするモデルの一覧を確認できます。 - -料金はリクエストごとに発生し、アカウントにクレジットを追加できます。 - ---- - -## エンドポイント - -以下の API エンドポイントを通じて、私たちのモデルにアクセスすることもできます。 - -| 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -OpenCode 設定で使う [model id](/docs/config/#models) は `opencode/` 形式です。たとえば、GPT 5.5 では設定に `opencode/gpt-5.5` を使用します。 - ---- - -### モデル - -利用可能なモデルとそのメタデータの完全な一覧は、次から取得できます。 - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## 価格 - -従量課金制をサポートしています。以下は **100万トークンあたり** の価格です。 - -| Model | Input | Output | Cached Read | Cached Write | -| --------------------------------- | ------ | ------- | ----------- | ------------ | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -使用履歴に _Claude Haiku 3.5_ が表示されることがあります。これはセッションのタイトル生成に使われる [low cost model](/docs/config/#models) です。 - -:::note -クレジットカード手数料は実費で転嫁されます(各取引につき 4.4% + $0.30)。それ以外の上乗せはありません。 -::: - -無料モデル: - -- DeepSeek V4 Flash Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 -- MiMo-V2.5 Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 -- North Mini Code Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 -- Nemotron 3 Ultra Free は期間限定で OpenCode で利用できます。チームはこの期間中にフィードバックを集め、モデルを改善しています。 -- Big Pickle はステルスモデルで、期間限定で OpenCode で無料提供されています。チームはこの期間中にフィードバックを集め、モデルを改善しています。 - -ご不明な点があれば、お問い合わせください。 - ---- - -### 自動リロード - -残高が $5 を下回ると、Zen は自動的に $20 をリロードします。 - -自動リロード額は変更できます。また、自動リロード自体を完全に無効化することもできます。 - ---- - -### 月次上限 - -ワークスペース全体とチームの各メンバーに対して、月ごとの利用上限を設定することもできます。 - -たとえば、月次利用上限を $20 に設定した場合、Zen は 1 か月で $20 を超えて使われることはありません。ただし、自動リロードが有効になっていると、残高が $5 を下回った時点で Zen が $20 を自動チャージするため、結果として $20 を超えて請求される可能性があります。 - ---- - -### 非推奨モデル - -| Model | Deprecation date | -| ------------------ | ----------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## プライバシー - -すべてのモデルは米国でホストされています。私たちのプロバイダーはゼロ保持ポリシーに従っており、以下の例外を除き、モデル学習にあなたのデータを使用しません。 - -- Big Pickle: 無料提供期間中、収集されたデータがモデル改善に使われる場合があります。 -- DeepSeek V4 Flash Free: 無料提供期間中、収集されたデータがモデル改善に使われる場合があります。 -- MiMo-V2.5 Free: 無料提供期間中、収集されたデータがモデル改善に使われる場合があります。 -- North Mini Code Free: 無料提供期間中、収集されたデータは保持され、モデルの改善に使用される場合があります。個人情報や機密情報を送信しないでください。詳しくは、[利用規約](https://cohere.com/terms-of-use)および[プライバシーポリシー](https://cohere.com/privacy)をご覧ください。 -- Nemotron 3 Ultra Free(NVIDIA の無料エンドポイント): 試用専用です — 個人情報や機密データは送信しないでください。お客様の利用は、セキュリティ目的および NVIDIA の製品とサービスの改善のために記録されます。改善目的で記録されたセッションデータは、お客様の身元や永続的な識別子とは関連付けられません。当社のデータ処理慣行の詳細については、[プライバシーポリシー](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)をご覧ください。このエンドポイントを利用することで、お客様はそのような情報の当社による収集、記録、利用、および [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) に同意したものとみなされます。 -- OpenAI APIs: リクエストは [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) に従って 30 日間保持されます。 -- Anthropic APIs: リクエストは [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage) に従って 30 日間保持されます。 - ---- - -## チーム向け - -Zen はチームでも非常に便利です。チームメイトを招待し、ロールを割り当て、チームで使うモデルを厳選するなど、さまざまなことができます。 - -:::note -ワークスペースは現在、ベータの一環としてチーム向けに無料です。 -::: - -ワークスペース管理は現在、ベータの一環としてチーム向けに無料です。価格についての詳細は近日中に共有します。 - ---- - -### ロール - -チームメイトをワークスペースに招待し、ロールを割り当てられます。 - -- **Admin**: モデル、メンバー、API キー、請求を管理できます -- **Member**: 自分自身の API キーのみ管理できます - -Admin は、コストを抑えるために各メンバーの月次支出上限を設定することもできます。 - ---- - -### モデルアクセス - -Admin は、ワークスペースで特定のモデルを有効化または無効化できます。無効化されたモデルへのリクエストはエラーになります。 - -これは、データを収集するモデルの利用を無効にしたい場合に便利です。 - ---- - -### Bring your own key - -Zen のほかのモデルにアクセスしながら、自分の OpenAI または Anthropic API キーを使うこともできます。 - -自分のキーを使う場合、トークン料金は Zen ではなくプロバイダーから直接請求されます。 - -たとえば、あなたの組織がすでに OpenAI や Anthropic のキーを持っていて、Zen が提供するものではなくそちらを使いたい場合があります。 - ---- - -## 目標 - -私たちが OpenCode Zen を作った目的は次のとおりです。 - -1. コーディングエージェントに最適なモデル/プロバイダーを **Benchmark** すること。 -2. **highest quality** の選択肢にアクセスできるようにし、性能を落としたり、より安価なプロバイダーへルーティングされたりしないこと。 -3. 原価で提供することで **price drops** をそのまま反映し、上乗せは処理手数料のカバー分だけにすること。 -4. ほかのコーディングエージェントでも使えるようにして **no lock-in** を実現し、さらに OpenCode では常にほかのプロバイダーも使えるようにすること。 diff --git a/packages/web/src/content/docs/ko/acp.mdx b/packages/web/src/content/docs/ko/acp.mdx deleted file mode 100644 index a9842f2709..0000000000 --- a/packages/web/src/content/docs/ko/acp.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: ACP Support -description: Use OpenCode in any ACP-compatible editor. ---- - -OpenCode는 [Agent Client Protocol](https://agentclientprotocol.com)(ACP)을 지원하므로, ACP 호환 편집기와 IDE에서 OpenCode를 직접 사용할 수 있습니다. - -:::tip -ACP를 지원하는 편집기와 tool 목록은 [ACP progress report](https://zed.dev/blog/acp-progress-report#available-now)에서 확인하세요. -::: - -ACP는 코드 편집기와 AI 코딩 에이전트 간의 통신을 표준화하는 개방형 프로토콜입니다. - ---- - -## 구성 - -ACP로 OpenCode를 사용하려면, 편집기에서 `opencode acp` 명령을 실행하도록 config를 설정하세요. - -이 명령은 OpenCode를 ACP 호환 subprocess로 시작하며, stdio 기반 JSON-RPC를 통해 편집기와 통신합니다. - -아래는 ACP를 지원하는 주요 편집기 예시입니다. - ---- - -### Zed - -[Zed](https://zed.dev) config(`~/.config/zed/settings.json`)에 다음을 추가하세요. - -```json title="~/.config/zed/settings.json" -{ - "agent_servers": { - "OpenCode": { - "command": "opencode", - "args": ["acp"] - } - } -} -``` - -열려면 **Command Palette**에서 `agent: new thread` action을 사용하세요. - -`keymap.json`을 수정해 키보드 단축키를 바인딩할 수도 있습니다. - -```json title="keymap.json" -[ - { - "bindings": { - "cmd-alt-o": [ - "agent::NewExternalAgentThread", - { - "agent": { - "custom": { - "name": "OpenCode", - "command": { - "command": "opencode", - "args": ["acp"] - } - } - } - } - ] - } - } -] -``` - ---- - -### JetBrains IDEs - -[JetBrains IDE](https://www.jetbrains.com/)에서는 [documentation](https://www.jetbrains.com/help/ai-assistant/acp.html)에 따라 `acp.json`에 다음을 추가하세요. - -```json title="acp.json" -{ - "agent_servers": { - "OpenCode": { - "command": "/absolute/path/bin/opencode", - "args": ["acp"] - } - } -} -``` - -열려면 AI Chat agent selector에서 새 `OpenCode` agent를 선택하세요. - ---- - -### Avante.nvim - -[Avante.nvim](https://github.com/yetone/avante.nvim) config에 다음을 추가하세요. - -```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 - -[CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim)에서 OpenCode를 ACP agent로 사용하려면 Neovim config에 다음을 추가하세요. - -```lua -require("codecompanion").setup({ - interactions = { - chat = { - adapter = { - name = "opencode", - model = "claude-sonnet-4", - }, - }, - }, -}) -``` - -이 config는 chat에서 OpenCode를 ACP agent로 사용하도록 CodeCompanion을 설정합니다. - -환경 변수(`OPENCODE_API_KEY` 등)를 전달해야 한다면 CodeCompanion.nvim documentation의 [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key)를 참고하세요. - -## 지원 - -OpenCode는 ACP를 통해서도 터미널과 동일하게 동작합니다. 다음 기능을 모두 지원합니다. - -:::note -`/undo` 및 `/redo`와 같은 일부 내장 슬래시 명령은 현재 지원되지 않습니다. -::: - -- 내장 tool(파일 작업, terminal 명령 등) -- 사용자 정의 tool과 slash command -- OpenCode config에 설정한 MCP 서버 -- `AGENTS.md`의 프로젝트별 규칙 -- 사용자 정의 formatter와 linter -- agent 및 권한 시스템 diff --git a/packages/web/src/content/docs/ko/agents.mdx b/packages/web/src/content/docs/ko/agents.mdx deleted file mode 100644 index 02f31c5b62..0000000000 --- a/packages/web/src/content/docs/ko/agents.mdx +++ /dev/null @@ -1,754 +0,0 @@ ---- -title: Agents -description: Configure and use specialized agents. ---- - -agent는 특정 작업과 워크플로에 맞게 설정할 수 있는 전문 AI assistant입니다. custom prompt, model, tool 접근 권한을 조합해 목적에 맞는 agent를 만들 수 있습니다. - -:::tip -코드를 수정하지 않고 분석과 제안 검토만 하고 싶다면 plan agent를 사용하세요. -::: - -세션 중에 agent를 전환하거나 `@` mention으로 호출할 수 있습니다. - ---- - -## 유형 - -OpenCode의 agent는 primary agent와 subagent, 두 가지 유형으로 나뉩니다. - ---- - -### Primary agents - -primary agent는 사용자가 직접 상호작용하는 메인 assistant입니다. **Tab** 키 또는 설정한 `switch_agent` keybind로 순환 전환할 수 있습니다. primary agent는 메인 대화를 처리하며, tool 접근은 permission으로 제어합니다. 예를 들어 Build는 모든 tool이 활성화되어 있고 Plan은 제한되어 있습니다. - -:::tip -세션 중 **Tab** 키로 primary agent를 빠르게 전환할 수 있습니다. -::: - -OpenCode에는 기본 제공 primary agent인 **Build**와 **Plan**이 포함되어 있습니다. 아래에서 각각 살펴보겠습니다. - ---- - -### Subagents - -subagent는 primary agent가 특정 작업을 위해 호출하는 전문 assistant입니다. 메시지에서 **@ mention**으로 직접 호출할 수도 있습니다. - -OpenCode에는 기본 제공 subagent인 **General**, **Explore**, **Scout**가 포함되어 있습니다. 아래에서 살펴보겠습니다. - ---- - -## 기본 제공 - -OpenCode는 기본적으로 primary agent 2개와 subagent 3개를 제공합니다. - ---- - -### Use build - -_Mode_: `primary` - -Build는 모든 tool이 활성화된 **default** primary agent입니다. 파일 작업과 시스템 명령에 대한 전체 접근이 필요한 일반적인 개발 작업에 사용하는 표준 agent입니다. - ---- - -### Use plan - -_Mode_: `primary` - -Plan은 계획과 분석에 특화된 제한형 agent입니다. 더 높은 제어력과 의도치 않은 변경 방지를 위해 permission 시스템을 사용합니다. -기본값으로 아래 항목은 모두 `ask`로 설정됩니다. - -- `file edits`: 모든 write, patch, edit -- `bash`: 모든 bash 명령 - -코드베이스를 실제로 수정하지 않고 LLM 분석, 변경 제안, 계획 수립만 진행하고 싶을 때 유용합니다. - ---- - -### Use general - -_Mode_: `subagent` - -복잡한 질문을 조사하고 다단계 작업을 수행하기 위한 범용 agent입니다. todo를 제외한 모든 tool 접근이 가능하므로 필요하면 파일 수정도 할 수 있습니다. 여러 작업 단위를 병렬로 처리할 때 사용하세요. - ---- - -### Use explore - -_Mode_: `subagent` - -코드베이스 탐색에 최적화된 빠른 읽기 전용 agent입니다. 파일을 수정할 수 없습니다. 패턴 기반 파일 탐색, 키워드 검색, 코드베이스 관련 질의 응답을 빠르게 처리할 때 사용하세요. - ---- - -### Use Scout - -_Mode_: `subagent` - -외부 docs와 dependency 리서치를 위한 읽기 전용 agent입니다. dependency repository를 OpenCode의 관리형 cache에 clone하거나, 라이브러리 소스를 살펴보거나, workspace를 수정하지 않고 로컬 코드를 upstream 구현과 교차 확인해야 할 때 사용하세요. - ---- - -### Use compaction - -_Mode_: `primary` - -긴 context를 더 짧은 요약으로 압축하는 숨겨진 시스템 agent입니다. 필요할 때 자동으로 실행되며 UI에서 직접 선택할 수 없습니다. - ---- - -### Use title - -_Mode_: `primary` - -짧은 세션 제목을 생성하는 숨겨진 시스템 agent입니다. 자동으로 실행되며 UI에서 직접 선택할 수 없습니다. - ---- - -### Use summary - -_Mode_: `primary` - -세션 요약을 생성하는 숨겨진 시스템 agent입니다. 자동으로 실행되며 UI에서 직접 선택할 수 없습니다. - ---- - -## 사용법 - -1. primary agent는 세션 중 **Tab** 키로 순환 전환할 수 있습니다. 설정한 `switch_agent` keybind를 사용할 수도 있습니다. - -2. subagent 호출 방법: - - **Automatically**: primary agent가 설명(description)을 바탕으로 특화 작업에 자동 호출합니다. - - 수동 호출: 메시지에서 subagent를 **@ mention**하여 호출합니다. 예: - - ```txt frame="none" - @general help me search for this function - ``` - -3. **세션 간 이동**: subagent가 child session을 만들면 아래 키로 parent session과 child session 사이를 이동할 수 있습니다. - - **\+Right** (또는 설정한 `session_child_cycle` keybind): parent → child1 → child2 → ... → parent 순방향 순환 - - **\+Left** (또는 설정한 `session_child_cycle_reverse` keybind): parent ← child1 ← child2 ← ... ← parent 역방향 순환 - - 이를 통해 메인 대화와 특화 subagent 작업 사이를 자연스럽게 오갈 수 있습니다. - ---- - -## 구성 - -기본 제공 agent를 커스터마이즈하거나 config를 통해 직접 agent를 만들 수 있습니다. agent는 두 가지 방식으로 설정합니다. - ---- - -### JSON - -`opencode.json` config 파일에서 agent를 설정합니다. - -```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 파일로도 agent를 정의할 수 있습니다. 다음 위치에 두세요. - -- 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 -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 파일명은 agent 이름이 됩니다. 예를 들어 `review.md`는 `review` agent를 만듭니다. - ---- - -## 옵션 - -각 config 옵션을 자세히 살펴보겠습니다. - ---- - -### Description - -`description` 옵션으로 agent의 역할과 사용 시점을 간단히 설명하세요. - -```json title="opencode.json" -{ - "agent": { - "review": { - "description": "Reviews code for best practices and potential issues" - } - } -} -``` - -이 옵션은 **필수** config 항목입니다. - ---- - -### Temperature - -`temperature` config로 LLM 응답의 무작위성과 창의성을 제어합니다. - -값이 낮을수록 응답이 더 집중되고 결정적이며, 값이 높을수록 창의성과 다양성이 커집니다. - -```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는 model별 기본값을 사용합니다. 일반적으로 대부분의 model은 0, Qwen model은 0.55를 사용합니다. - ---- - -### Max steps - -agent가 텍스트 응답만 하도록 강제되기 전까지 수행할 수 있는 agentic iteration의 최대 횟수를 제어합니다. 비용을 관리하려는 사용자에게 agentic action 제한을 제공하기 위한 옵션입니다. - -이 값을 설정하지 않으면 model이 중단을 선택하거나 사용자가 세션을 중단할 때까지 agent는 계속 반복합니다. - -```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 - } - } -} -``` - -제한에 도달하면 agent는 작업 요약과 남은 권장 작업을 응답하도록 지시하는 특수 시스템 prompt를 받습니다. - -:::caution -레거시 `maxSteps` 필드는 deprecated입니다. 대신 `steps`를 사용하세요. -::: - ---- - -### Disable - -`true`로 설정하면 agent를 비활성화합니다. - -```json title="opencode.json" -{ - "agent": { - "review": { - "disable": true - } - } -} -``` - ---- - -### Prompt - -`prompt` config로 해당 agent의 custom 시스템 prompt 파일을 지정합니다. prompt 파일에는 agent 목적에 맞는 지시사항을 작성하세요. - -```json title="opencode.json" -{ - "agent": { - "review": { - "prompt": "{file:./prompts/code-review.txt}" - } - } -} -``` - -이 경로는 config 파일 위치 기준의 상대 경로입니다. 따라서 전역 OpenCode config와 프로젝트별 config 모두에서 동일하게 동작합니다. - ---- - -### Model - -`model` config로 해당 agent의 model을 override할 수 있습니다. 작업 특성에 맞춰 model을 달리 쓸 때 유용합니다. 예를 들어 계획에는 더 빠른 model, 구현에는 더 강력한 model을 사용할 수 있습니다. - -:::tip -model을 지정하지 않으면 primary agent는 [전역으로 설정한 model](/docs/config#models)을 사용하고, subagent는 해당 subagent를 호출한 primary agent의 model을 사용합니다. -::: - -```json title="opencode.json" -{ - "agent": { - "plan": { - "model": "anthropic/claude-haiku-4-20250514" - } - } -} -``` - -OpenCode config의 model ID는 `provider/model-id` 형식을 사용합니다. 예를 들어 [OpenCode Zen](/docs/zen)을 사용한다면 GPT 5.1 Codex에 `opencode/gpt-5.1-codex`를 사용합니다. - ---- - -### Tools - -`tools` config로 agent에서 사용할 tool을 제어합니다. 각 tool을 `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 -agent별 config는 전역 config를 override합니다. -::: - -와일드카드를 사용하면 여러 tool을 한 번에 제어할 수 있습니다. 예를 들어 MCP 서버의 모든 tool을 비활성화하려면 다음과 같이 설정합니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "readonly": { - "tools": { - "mymcp_*": false, - "write": false, - "edit": false - } - } - } -} -``` - -[tool에 대해 더 알아보기](/docs/tools). - ---- - -### Permissions - -permission을 설정해 agent가 수행할 수 있는 action을 제어할 수 있습니다. 현재 `edit`, `bash`, `webfetch` tool의 permission은 다음 값으로 설정할 수 있습니다. - -- `"ask"` — tool 실행 전에 승인 요청 -- `"allow"` — 승인 없이 모든 작업 허용 -- `"deny"` — tool 비활성화 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - } -} -``` - -이 permission은 agent별로 override할 수 있습니다. - -```json title="opencode.json" {3-5,8-10} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - }, - "agent": { - "build": { - "permission": { - "edit": "ask" - } - } - } -} -``` - -Markdown agent에서도 permission을 설정할 수 있습니다. - -```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 명령에 대해서도 permission을 설정할 수 있습니다. - -```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" - } - } - } - } -} -``` - -또한 `*` 와일드카드로 모든 명령의 permission을 제어할 수 있습니다. -마지막으로 일치한 규칙이 우선하므로 `*` 와일드카드를 먼저 두고, 구체적인 규칙을 뒤에 두세요. - -```json title="opencode.json" {8} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "*": "ask", - "git status *": "allow" - } - } - } - } -} -``` - -[permission에 대해 더 알아보기](/docs/permissions). - ---- - -### Mode - -`mode` config로 agent 모드를 제어합니다. `mode` 옵션은 agent를 어떤 방식으로 사용할지 결정합니다. - -```json title="opencode.json" -{ - "agent": { - "review": { - "mode": "subagent" - } - } -} -``` - -`mode`는 `primary`, `subagent`, `all` 중 하나로 설정할 수 있습니다. 설정하지 않으면 기본값은 `all`입니다. - ---- - -### Hidden - -`hidden: true`를 설정하면 `@` 자동완성 메뉴에서 subagent를 숨길 수 있습니다. 다른 agent가 Task tool을 통해 programmatic으로만 호출해야 하는 내부 subagent에 유용합니다. - -```json title="opencode.json" -{ - "agent": { - "internal-helper": { - "mode": "subagent", - "hidden": true - } - } -} -``` - -이 설정은 자동완성 메뉴에서의 사용자 가시성에만 영향을 줍니다. permission이 허용되면 hidden agent도 모델이 Task tool을 통해 호출할 수 있습니다. - -:::note -`mode: subagent` agent에만 적용됩니다. -::: - ---- - -### Task permissions - -`permission.task`로 Task tool을 통해 해당 agent가 호출할 수 있는 subagent 범위를 제어합니다. 유연한 매칭을 위해 glob 패턴을 사용합니다. - -```json title="opencode.json" -{ - "agent": { - "orchestrator": { - "mode": "primary", - "permission": { - "task": { - "*": "deny", - "orchestrator-*": "allow", - "code-reviewer": "ask" - } - } - } - } -} -``` - -`deny`로 설정되면 해당 subagent는 Task tool 설명에서 완전히 제거되므로 모델이 호출을 시도하지 않습니다. - -:::tip -규칙은 선언 순서대로 평가되며, **마지막으로 일치한 규칙이 승리합니다**. 위 예시에서 `orchestrator-planner`는 `*`(deny)와 `orchestrator-*`(allow) 모두에 일치하지만, `orchestrator-*`가 뒤에 있으므로 결과는 `allow`입니다. -::: - -:::tip -사용자는 agent의 task permission이 deny여도 `@` 자동완성 메뉴를 통해 어떤 subagent든 직접 호출할 수 있습니다. -::: - ---- - -### Color - -`color` 옵션으로 UI에서 agent의 시각 스타일을 지정할 수 있습니다. 인터페이스에서 agent가 표시되는 방식에 영향을 줍니다. - -유효한 hex 색상(예: `#FF5733`) 또는 theme 색상(`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입니다. 값이 낮을수록 집중되고, 높을수록 다양해집니다. - ---- - -### Additional - -agent config에 지정한 나머지 옵션은 모델 옵션으로 provider에 **그대로 전달(pass through)** 됩니다. 이를 통해 provider별 기능과 파라미터를 활용할 수 있습니다. - -예를 들어 OpenAI reasoning model에서는 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" - } - } -} -``` - -이 추가 옵션은 model 및 provider마다 다릅니다. 사용 가능한 파라미터는 provider 문서를 확인하세요. - -:::tip -사용 가능한 model 목록은 `opencode models` 명령으로 확인할 수 있습니다. -::: - ---- - -## 에이전트 생성 - -아래 명령으로 새 agent를 만들 수 있습니다. - -```bash -opencode agent create -``` - -이 인터랙티브 명령은 다음을 수행합니다. - -1. agent 저장 위치를 묻습니다(전역/프로젝트). -2. agent가 수행할 작업의 설명을 받습니다. -3. 적절한 시스템 prompt와 식별자를 생성합니다. -4. agent가 접근할 tool을 선택하게 합니다. -5. 마지막으로 agent config가 담긴 Markdown 파일을 생성합니다. - ---- - -## 사용 사례 - -서로 다른 agent의 대표적인 사용 사례는 다음과 같습니다. - -- **Build agent**: 모든 tool을 활성화한 전체 개발 작업 -- **Plan agent**: 코드 변경 없이 분석과 계획 수행 -- **Review agent**: 읽기 전용 접근 + 문서화 tool 기반 코드 리뷰 -- **Debug agent**: bash/read tool 중심의 조사 작업 -- **Docs agent**: 파일 작업은 가능하지만 시스템 명령은 없는 문서 작성 작업 - ---- - -## 예시 - -실제로 유용하게 쓸 수 있는 예시 agent를 소개합니다. - -:::tip -공유하고 싶은 agent가 있나요? [PR 제출하기](https://github.com/anomalyco/opencode). -::: - ---- - -### Documentation 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 -``` - ---- - -### Security auditor - -```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 -``` diff --git a/packages/web/src/content/docs/ko/cli.mdx b/packages/web/src/content/docs/ko/cli.mdx deleted file mode 100644 index e6ee7e1f02..0000000000 --- a/packages/web/src/content/docs/ko/cli.mdx +++ /dev/null @@ -1,616 +0,0 @@ ---- -title: CLI -description: opencode CLI 옵션과 명령어. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -opencode CLI는 인수 없이 실행하면 기본적으로 [TUI](/docs/tui)를 시작합니다. - -```bash -opencode -``` - -이 페이지에 나온 것처럼 명령을 함께 전달할 수도 있습니다. 이를 통해 opencode를 프로그래밍 방식으로 사용할 수 있습니다. - -```bash -opencode run "Explain how closures work in JavaScript" -``` - ---- - -### tui - -OpenCode 터미널 사용자 인터페이스를 시작합니다. - -```bash -opencode [project] -``` - -#### 플래그 - -| 플래그 | 축약 | 설명 | -| ---------------------------------------- | ---- | ---------------------------------------------------------------------- | -| {"--continue"} | `-c` | 마지막 세션 이어서 실행 | -| {"--session"} | `-s` | 이어서 실행할 세션 ID | -| {"--fork"} | | 세션을 이어갈 때 포크 생성 (`--continue` 또는 `--session`과 함께 사용) | -| {"--prompt"} | | 사용할 프롬프트 | -| {"--model"} | `-m` | 사용할 모델 (`provider/model` 형식) | -| {"--agent"} | | 사용할 에이전트 | -| {"--port"} | | 수신 포트 | -| {"--hostname"} | | 수신 호스트명 | - ---- - -## 명령어 - -opencode CLI는 아래 명령들도 제공합니다. - ---- - -### agent - -opencode용 에이전트를 관리합니다. - -```bash -opencode agent [command] -``` - ---- - -### attach - -`serve` 또는 `web` 명령으로 이미 실행 중인 opencode 백엔드 서버에 터미널을 연결합니다. - -```bash -opencode attach [url] -``` - -원격 opencode 백엔드와 TUI를 연결해 사용할 수 있습니다. 예: - -```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 -``` - -#### 플래그 - -| 플래그 | 축약 | 설명 | -| ---------------------------------------- | ---- | -------------------------------------------------------------------------- | -| {"--dir"} | | TUI를 시작할 작업 디렉터리 | -| {"--continue"} | `-c` | 마지막 세션 이어서 실행 | -| {"--session"} | `-s` | 이어서 실행할 세션 ID | -| {"--fork"} | | 이어서 실행할 때 세션 포크 (`--continue` 또는 `--session`과 함께 사용) | -| {"--password"} | `-p` | 기본 인증 비밀번호 (기본값: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | 기본 인증 사용자 이름 (기본값: `OPENCODE_SERVER_USERNAME` 또는 `opencode`) | - ---- - -#### create - -커스텀 설정으로 새 에이전트를 만듭니다. - -```bash -opencode agent create -``` - -이 명령은 커스텀 시스템 프롬프트와 도구 설정을 사용해 새 에이전트를 만드는 과정을 안내합니다. - ---- - -#### list - -사용 가능한 모든 에이전트를 표시합니다. - -```bash -opencode agent list -``` - ---- - -### auth - -provider 인증 정보와 로그인을 관리합니다. - -```bash -opencode auth [command] -``` - ---- - -#### login - -OpenCode는 [Models.dev](https://models.dev)의 provider 목록을 기반으로 동작하므로, `opencode auth login`으로 원하는 provider의 API 키를 설정할 수 있습니다. 인증 정보는 `~/.local/share/opencode/auth.json`에 저장됩니다. - -```bash -opencode auth login -``` - -OpenCode 시작 시 인증 파일에서 provider 정보를 불러오며, 시스템 환경 변수나 프로젝트의 `.env`에 정의된 키도 함께 로드합니다. - ---- - -#### list - -인증 파일에 저장된 provider 목록을 표시합니다. - -```bash -opencode auth list -``` - -축약형도 사용할 수 있습니다. - -```bash -opencode auth ls -``` - ---- - -#### logout - -인증 파일에서 provider 정보를 제거해 로그아웃합니다. - -```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 - -OAuth를 지원하는 MCP 서버를 인증합니다. - -```bash -opencode mcp auth [name] -``` - -서버 이름을 입력하지 않으면 OAuth 지원 서버 목록에서 선택하라는 안내가 표시됩니다. - -OAuth 지원 서버와 인증 상태를 목록으로 볼 수도 있습니다. - -```bash -opencode mcp auth list -``` - -축약형도 사용할 수 있습니다. - -```bash -opencode mcp auth ls -``` - ---- - -#### logout - -MCP 서버의 OAuth 인증 정보를 제거합니다. - -```bash -opencode mcp logout [name] -``` - ---- - -#### debug - -MCP 서버의 OAuth 연결 문제를 디버그합니다. - -```bash -opencode mcp debug -``` - ---- - -### models - -구성된 provider에서 사용 가능한 모델 목록을 표시합니다. - -```bash -opencode models [provider] -``` - -이 명령은 구성된 provider 전체에서 사용 가능한 모델을 `provider/model` 형식으로 출력합니다. - -[config](/docs/config/)에 지정할 정확한 모델명을 확인할 때 유용합니다. - -특정 provider ID를 넘겨 해당 provider의 모델만 필터링할 수도 있습니다. - -```bash -opencode models anthropic -``` - -#### 플래그 - -| 플래그 | 설명 | -| --------------------------------------- | ------------------------------------------------- | -| {"--refresh"} | models.dev에서 모델 캐시 새로고침 | -| {"--verbose"} | 더 자세한 모델 출력 사용(비용 등 메타데이터 포함) | - -`--refresh` 플래그를 사용하면 캐시된 모델 목록을 갱신할 수 있습니다. provider에 새 모델이 추가된 뒤 OpenCode에서 바로 확인하고 싶을 때 유용합니다. - -```bash -opencode models --refresh -``` - ---- - -### run - -프롬프트를 직접 전달해 비대화형 모드로 opencode를 실행합니다. - -```bash -opencode run [message..] -``` - -스크립트, 자동화, 또는 전체 TUI를 띄우지 않고 빠른 응답이 필요할 때 유용합니다. 예: - -```bash "opencode run" -opencode run Explain the use of context in Go -``` - -매번 MCP 서버 콜드 부트가 발생하지 않도록, 실행 중인 `opencode serve` 인스턴스에 붙어서 실행할 수도 있습니다. - -```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" -``` - -#### 플래그 - -| 플래그 | 축약 | 설명 | -| ---------------------------------------- | ---- | -------------------------------------------------------------------------- | -| {"--command"} | | 실행할 명령(인수는 message로 전달) | -| {"--continue"} | `-c` | 마지막 세션 이어서 실행 | -| {"--session"} | `-s` | 이어서 실행할 세션 ID | -| {"--fork"} | | 세션을 이어갈 때 포크 생성 (`--continue` 또는 `--session`과 함께 사용) | -| {"--share"} | | 세션 공유 | -| {"--model"} | `-m` | 사용할 모델 (`provider/model` 형식) | -| {"--agent"} | | 사용할 에이전트 | -| {"--file"} | `-f` | 메시지에 첨부할 파일 | -| {"--format"} | | 출력 형식: default(포맷됨) 또는 json(원시 JSON 이벤트) | -| {"--title"} | | 세션 제목(값이 없으면 프롬프트를 잘라 자동 생성) | -| {"--attach"} | | 실행 중인 opencode 서버에 연결(예: http://localhost:4096) | -| {"--password"} | `-p` | 기본 인증 비밀번호 (기본값: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | 기본 인증 사용자 이름 (기본값: `OPENCODE_SERVER_USERNAME` 또는 `opencode`) | -| {"--dir"} | | 실행할 디렉터리, 또는 연결 시 원격 서버 경로 | -| {"--variant"} | | 모델 변형 (제공자별 추론 수준) | -| {"--thinking"} | | 사고 블록 표시 | -| {"--port"} | | 로컬 서버 포트(기본값: 랜덤 포트) | - ---- - -### serve - -API 접근용 headless OpenCode 서버를 시작합니다. 전체 HTTP 인터페이스는 [server docs](/docs/server)를 참고하세요. - -```bash -opencode serve -``` - -이 명령은 TUI 없이 opencode 기능에 접근할 수 있는 HTTP 서버를 시작합니다. `OPENCODE_SERVER_PASSWORD`를 설정하면 HTTP basic auth가 활성화됩니다(기본 사용자명: `opencode`). - -#### 플래그 - -| 플래그 | 설명 | -| ---------------------------------------- | --------------------------------- | -| {"--port"} | 수신 포트 | -| {"--hostname"} | 수신 호스트명 | -| {"--mdns"} | mDNS 검색 활성화 | -| {"--cors"} | 허용할 추가 브라우저 origin(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] -``` - -세션 ID를 지정하지 않으면 사용 가능한 세션에서 선택하라는 안내가 표시됩니다. - ---- - -### import - -JSON 파일 또는 OpenCode 공유 URL에서 세션 데이터를 가져옵니다. - -```bash -opencode import -``` - -로컬 파일이나 OpenCode 공유 URL에서 가져올 수 있습니다. - -```bash -opencode import session.json -opencode import https://opncd.ai/s/abc123 -``` - ---- - -### web - -웹 인터페이스를 포함한 headless OpenCode 서버를 시작합니다. - -```bash -opencode web -``` - -이 명령은 HTTP 서버를 시작하고 웹 브라우저를 열어 웹 인터페이스로 OpenCode에 접속합니다. `OPENCODE_SERVER_PASSWORD`를 설정하면 HTTP basic auth가 활성화됩니다(기본 사용자명: `opencode`). - -#### 플래그 - -| 플래그 | 설명 | -| ---------------------------------------- | --------------------------------- | -| {"--port"} | 수신 포트 | -| {"--hostname"} | 수신 호스트명 | -| {"--mdns"} | mDNS 검색 활성화 | -| {"--cors"} | 허용할 추가 브라우저 origin(CORS) | - ---- - -### acp - -ACP(Agent Client Protocol) 서버를 시작합니다. - -```bash -opencode acp -``` - -이 명령은 nd-JSON 형식으로 stdin/stdout을 통해 통신하는 ACP 서버를 시작합니다. - -#### 플래그 - -| 플래그 | 설명 | -| ---------------------------------------- | ------------- | -| {"--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 CLI는 아래 전역 플래그를 지원합니다. - -| 플래그 | 축약 | 설명 | -| ------------------------------------------ | ---- | ----------------------------------- | -| {"--help"} | `-h` | 도움말 표시 | -| {"--version"} | `-v` | 버전 출력 | -| {"--print-logs"} | | 로그를 stderr로 출력 | -| {"--log-level"} | | 로그 레벨(DEBUG, INFO, WARN, ERROR) | - ---- - -## 환경 변수 - -OpenCode는 환경 변수로도 구성할 수 있습니다. - -| 변수 | 타입 | 설명 | -| ------------------------------------- | ------- | ---------------------------------------------- | -| `OPENCODE_AUTO_SHARE` | boolean | 세션 자동 공유 | -| `OPENCODE_GIT_BASH_PATH` | string | Windows에서 Git Bash 실행 파일 경로 | -| `OPENCODE_CONFIG` | string | 설정 파일 경로 | -| `OPENCODE_CONFIG_DIR` | string | 설정 디렉터리 경로 | -| `OPENCODE_CONFIG_CONTENT` | string | 인라인 JSON 설정 내용 | -| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | 자동 업데이트 확인 비활성화 | -| `OPENCODE_DISABLE_PRUNE` | boolean | 오래된 데이터 정리(prune) 비활성화 | -| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | 터미널 제목 자동 업데이트 비활성화 | -| `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 provider | -| `OPENCODE_CLIENT` | string | 클라이언트 식별자(기본값: `cli`) | -| `OPENCODE_ENABLE_EXA` | boolean | Exa 웹 검색 도구 활성화 | -| `OPENCODE_SERVER_PASSWORD` | string | `serve`/`web` 기본 인증 활성화 | -| `OPENCODE_SERVER_USERNAME` | string | 기본 인증 사용자명 오버라이드(기본 `opencode`) | -| `OPENCODE_MODELS_URL` | string | 모델 설정을 가져올 사용자 지정 URL | - ---- - -### 실험적 기능 - -아래 환경 변수는 변경되거나 제거될 수 있는 실험 기능을 활성화합니다. - -| 변수 | 타입 | 설명 | -| ----------------------------------------------- | ------- | ------------------------------------------- | -| `OPENCODE_EXPERIMENTAL` | boolean | 엄브렐라 플래그로 제어되는 실험 기능 활성화 | -| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | 아이콘 탐색 활성화 | -| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | TUI에서 선택 시 복사 비활성화 | -| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | bash 명령 기본 타임아웃(ms) | -| `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 | python 파일에 대해 TY LSP 활성화 | -| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | Plan mode 활성화 | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | boolean | 백그라운드 subagent 작업 활성화 | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | boolean | 실험적 이벤트 시스템 활성화 | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | boolean | 네이티브 LLM 요청 경로 활성화 | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | boolean | 병렬 웹 검색 실행 활성화 | -| `OPENCODE_EXPERIMENTAL_SCOUT` | boolean | Scout subagent 활성화 | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | boolean | workspace 지원 활성화 | diff --git a/packages/web/src/content/docs/ko/commands.mdx b/packages/web/src/content/docs/ko/commands.mdx deleted file mode 100644 index c477cb12fb..0000000000 --- a/packages/web/src/content/docs/ko/commands.mdx +++ /dev/null @@ -1,323 +0,0 @@ ---- -title: 명령어 -description: 반복적인 작업을 위한 커스텀 명령을 만드세요. ---- - -커스텀 명령을 사용하면 TUI에서 해당 명령이 실행될 때 사용할 프롬프트를 미리 정의할 수 있습니다. - -```bash frame="none" -/my-command -``` - ---- - -커스텀 명령은 `/init`, `/undo`, `/redo`, `/share`, `/help` 같은 내장 명령과 별도로 추가됩니다. [더 알아보기](/docs/tui#commands). - ---- - -## 명령 파일 만들기 - -커스텀 명령은 `commands/` 디렉터리에 Markdown 파일을 만들어 정의합니다. - -예: `.opencode/commands/test.md` - -```md title=".opencode/commands/test.md" ---- -description: Run tests with coverage -agent: build -model: anthropic/claude-3-5-sonnet-20241022 ---- - -Run the full test suite with coverage report and show any failures. -Focus on the failing tests and suggest fixes. -``` - -프런트매터(frontmatter)에는 명령 속성을 정의하고, 본문은 템플릿 프롬프트가 됩니다. - -명령 이름 앞에 `/`를 붙여 실행합니다. - -```bash frame="none" -"/test" -``` - ---- - -## 구성 - -커스텀 명령은 OpenCode 설정으로 추가하거나, `commands/` 디렉터리에 Markdown 파일을 만들어 추가할 수 있습니다. - ---- - -### JSON - -OpenCode [config](/docs/config)의 `command` 옵션을 사용합니다. - -```json title="opencode.jsonc" {4-12} -{ - "$schema": "https://opencode.ai/config.json", - "command": { - // This becomes the name of the command - "test": { - // This is the prompt that will be sent to the LLM - "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.", - // This is shown as the description in the TUI - "description": "Run tests with coverage", - "agent": "build", - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -이제 TUI에서 다음처럼 실행할 수 있습니다. - -```bash frame="none" -/test -``` - ---- - -### Markdown - -Markdown 파일로도 명령을 정의할 수 있습니다. 아래 경로 중 하나에 두면 됩니다. - -- 전역: `~/.config/opencode/commands/` -- 프로젝트별: `.opencode/commands/` - -```markdown title="~/.config/opencode/commands/test.md" ---- -description: Run tests with coverage -agent: build -model: anthropic/claude-3-5-sonnet-20241022 ---- - -Run the full test suite with coverage report and show any failures. -Focus on the failing tests and suggest fixes. -``` - -Markdown 파일명이 명령 이름이 됩니다. 예를 들어 `test.md`라면 아래처럼 실행합니다. - -```bash frame="none" -/test -``` - ---- - -## 프롬프트 구성 - -커스텀 명령 프롬프트는 몇 가지 특수 플레이스홀더(placeholder)와 문법을 지원합니다. - ---- - -### 인수 - -`$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" }` - ---- - -### 셸 출력 - -_!`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` 옵션은 명령 실행 시 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` 옵션으로 명령의 짧은 설명을 추가할 수 있습니다. - -```json title="opencode.json" -{ - "command": { - "test": { - "description": "Run tests with coverage" - } - } -} -``` - -이 설명은 TUI에서 명령을 입력할 때 표시됩니다. - ---- - -### 에이전트 - -`agent` 설정으로 이 명령을 실행할 [agent](/docs/agents)를 지정할 수 있습니다. -지정한 값이 [subagent](/docs/agents/#subagents)면 기본적으로 subagent 호출이 실행됩니다. -이 동작을 끄려면 `subtask`를 `false`로 설정하세요. - -```json title="opencode.json" -{ - "command": { - "review": { - "agent": "plan" - } - } -} -``` - -이 옵션은 **선택**입니다. 지정하지 않으면 현재 에이전트가 기본값으로 사용됩니다. - ---- - -### 서브태스크 - -`subtask` 불리언(boolean)을 사용하면 명령이 [subagent](/docs/agents/#subagents) 호출을 강제로 트리거합니다. -주 컨텍스트를 오염시키고 싶지 않을 때 유용하며, [agent](/docs/agents) 설정의 `mode`가 `primary`여도 subagent로 실행합니다. - -```json title="opencode.json" -{ - "command": { - "analyze": { - "subtask": true - } - } -} -``` - -이 옵션은 **선택**입니다. - ---- - -### 모델 - -`model` 설정으로 이 명령의 기본 모델을 오버라이드할 수 있습니다. - -```json title="opencode.json" -{ - "command": { - "analyze": { - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -이 옵션은 **선택**입니다. - ---- - -## 내장 명령 - -OpenCode는 `/init`, `/undo`, `/redo`, `/share`, `/help` 등 여러 내장 명령을 제공합니다. [더 알아보기](/docs/tui#commands). - -:::note -커스텀 명령은 내장 명령을 덮어쓸 수 있습니다. -::: - -같은 이름으로 커스텀 명령을 정의하면 내장 명령보다 커스텀 명령이 우선합니다. diff --git a/packages/web/src/content/docs/ko/config.mdx b/packages/web/src/content/docs/ko/config.mdx deleted file mode 100644 index 3455b05b5c..0000000000 --- a/packages/web/src/content/docs/ko/config.mdx +++ /dev/null @@ -1,685 +0,0 @@ ---- -title: Config -description: Using the OpenCode JSON config. ---- - -JSON config 파일로 OpenCode를 설정할 수 있습니다. - ---- - -## 형식 - -OpenCode는 **JSON**과 **JSONC**(주석이 포함된 JSON) 형식을 모두 지원합니다. - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-5", - "autoupdate": true, - "server": { - "port": 4096, - }, -} -``` - ---- - -## 위치 - -config 파일은 여러 위치에 둘 수 있으며, 각 위치에는 우선순위가 있습니다. - -:::note -config 파일은 **교체되지 않고 병합**됩니다. -::: - -config 파일은 서로 대체되는 방식이 아니라 병합됩니다. 아래 config 위치의 설정이 결합되며, 충돌하는 key에 대해서만 나중에 로드된 config가 앞선 값을 override합니다. 충돌하지 않는 설정은 모두 유지됩니다. - -예를 들어, 전역 config에 `autoupdate: true`가 있고 프로젝트 config에 `model: "anthropic/claude-sonnet-4-5"`가 있으면 최종 config에는 이 설정이 모두 포함됩니다. - ---- - -### 우선순위 - -config source는 다음 순서로 로드됩니다(나중 source가 앞선 source를 override). - -1. **Remote config**(`.well-known/opencode`) - 조직 기본값 -2. **Global config**(`~/.config/opencode/opencode.json`) - 사용자 기본 설정 -3. **Custom config**(`OPENCODE_CONFIG` env var) - custom override -4. **Project config**(프로젝트의 `opencode.json`) - 프로젝트별 설정 -5. **`.opencode` directories** - agents, commands, plugins -6. **Inline config**(`OPENCODE_CONFIG_CONTENT` env var) - 런타임 override - -즉, 프로젝트 config는 전역 기본값을 override할 수 있고, 전역 config는 조직의 Remote 기본값을 override할 수 있습니다. - -:::note -`.opencode` 및 `~/.config/opencode` 디렉토리는 하위 디렉토리에 **복수형 이름**을 사용합니다: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/`, `themes/`. 단수형 이름(예: `agent/`)도 하위 호환성을 위해 지원합니다. -::: - ---- - -### Remote - -조직은 `.well-known/opencode` endpoint로 기본 config를 제공할 수 있습니다. 이를 지원하는 provider로 인증하면 자동으로 가져옵니다. - -Remote config는 가장 먼저 로드되어 기본 레이어 역할을 합니다. 이후의 모든 config source(전역, 프로젝트)는 이 기본값을 override할 수 있습니다. - -예를 들어, 조직에서 기본 비활성화된 MCP 서버를 제공하는 경우: - -```json title="Remote config from .well-known/opencode" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": false - } - } -} -``` - -로컬 config에서 특정 서버를 활성화할 수 있습니다. - -```json title="opencode.json" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - ---- - -### Global - -전역 OpenCode config는 `~/.config/opencode/opencode.json`에 두세요. provider, model, permissions 같은 사용자 전체 기본 설정은 전역 config로 관리하세요. - -TUI 관련 설정은 `~/.config/opencode/tui.json`을 사용하세요. - -전역 config는 조직의 Remote 기본값을 override합니다. - ---- - -### Per project - -프로젝트 루트에 `opencode.json`을 추가하세요. 프로젝트 config는 표준 config 파일 중 우선순위가 가장 높아 전역 및 Remote config를 모두 override합니다. - -프로젝트별 TUI 설정은 `tui.json`을 함께 추가하세요. - -:::tip -프로젝트별 config는 프로젝트 루트에 두세요. -::: - -OpenCode 시작 시 현재 디렉토리에서 config 파일을 찾고, 없으면 가장 가까운 Git 디렉토리까지 상위로 탐색합니다. - -이 파일은 Git에 커밋해도 안전하며 전역 config와 동일한 schema를 사용합니다. - ---- - -### Custom path - -`OPENCODE_CONFIG` 환경 변수로 custom config 파일 경로를 지정하세요. - -```bash -export OPENCODE_CONFIG=/path/to/my/custom-config.json -opencode run "Hello world" -``` - -Custom config는 우선순위상 전역 config와 프로젝트 config 사이에서 로드됩니다. - ---- - -### Custom directory - -`OPENCODE_CONFIG_DIR` 환경 변수로 custom config 디렉토리를 지정할 수 있습니다. 이 디렉토리는 표준 `.opencode` 디렉토리와 동일하게 agents, commands, modes, plugins를 검색하며, 동일한 구조를 따라야 합니다. - -```bash -export OPENCODE_CONFIG_DIR=/path/to/my/config-directory -opencode run "Hello world" -``` - -custom 디렉토리는 전역 config와 `.opencode` 디렉토리 뒤에 로드되므로 해당 설정을 **override할 수 있습니다**. - ---- - -## Schema - -server/runtime config schema는 [**`opencode.ai/config.json`**](https://opencode.ai/config.json)에 정의되어 있습니다. - -TUI config는 [**`opencode.ai/tui.json`**](https://opencode.ai/tui.json)을 사용합니다. - -편집기에서 이 schema를 기반으로 validation과 autocomplete를 사용할 수 있습니다. - ---- - -### TUI - -TUI 관련 설정에는 전용 `tui.json` (또는 `tui.jsonc`) 파일을 사용하세요. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": true - }, - "diff_style": "auto" -} -``` - -`OPENCODE_TUI_CONFIG`를 사용하여 사용자 지정 TUI 설정 파일을 가리킬 수 있습니다. - -`opencode.json`의 기존 `theme`, `keybinds`, `tui` 키는 더 이상 사용되지 않으며(deprecated) 가능한 경우 자동으로 마이그레이션됩니다. - -[TUI 구성에 대해 더 알아보기](/docs/tui#configure). - ---- - -### Server - -`server` 옵션으로 `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`가 활성화되어 있고 hostname이 없으면 기본값은 `0.0.0.0`입니다. -- `mdns` - mDNS service discovery를 활성화합니다. 네트워크 내 다른 기기에서 OpenCode server를 찾을 수 있습니다. -- `mdnsDomain` - mDNS service의 custom 도메인 이름입니다. 기본값은 `opencode.local`입니다. 같은 네트워크에서 여러 인스턴스를 실행할 때 유용합니다. -- `cors` - 브라우저 기반 client에서 HTTP server를 사용할 때 허용할 추가 CORS origin입니다. 값은 전체 origin(scheme + host + optional port) 형식이어야 하며, 예: `https://app.example.com`. - -[server에 대해 더 알아보기](/docs/server). - ---- - -### Tools - -`tools` 옵션으로 LLM이 사용할 수 있는 tool을 관리할 수 있습니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "tools": { - "write": false, - "bash": false - } -} -``` - -[tool에 대해 더 알아보기](/docs/tools). - ---- - -### Models - -OpenCode config의 `provider`, `model`, `small_model` 옵션으로 사용할 provider와 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`은 제목 생성 같은 경량 작업에 사용할 별도 model을 설정합니다. 기본적으로 OpenCode는 provider에서 더 저렴한 model을 사용할 수 있으면 우선 사용하고, 없으면 메인 model로 fallback합니다. - -provider 옵션에는 `timeout`, `setCacheKey`를 포함할 수 있습니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "timeout": 600000, - "setCacheKey": true - } - } - } -} -``` - -- `timeout` - 요청 timeout(밀리초, 기본값: 300000). `false`로 비활성화할 수 있습니다. -- `setCacheKey` - 지정된 provider에 대해 cache key가 항상 설정되도록 보장합니다. - -[local model](/docs/models#local)도 설정할 수 있습니다. [더 알아보기](/docs/models). - ---- - -#### Provider-Specific Options - -일부 provider는 공통 옵션인 `timeout`, `apiKey` 외에 추가 config 옵션을 지원합니다. - -##### Amazon Bedrock - -Amazon Bedrock은 AWS 전용 config를 지원합니다. - -```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` - Bedrock용 AWS 리전(`AWS_REGION` env var 또는 기본값 `us-east-1`) -- `profile` - `~/.aws/credentials`의 AWS named profile(기본값: `AWS_PROFILE` env var) -- `endpoint` - VPC endpoint용 custom endpoint URL입니다. AWS 용어를 사용한 일반 `baseURL` 옵션의 별칭(alias)입니다. 둘 다 지정하면 `endpoint`가 우선합니다. - -:::note -Bearer token(`AWS_BEARER_TOKEN_BEDROCK` 또는 `/connect`)은 profile 기반 인증보다 우선합니다. 자세한 내용은 [authentication precedence](/docs/providers#authentication-precedence)를 참고하세요. -::: - -[Amazon Bedrock config 더 알아보기](/docs/providers#amazon-bedrock). - ---- - -### Themes - -`tui.json`에서 UI 테마를 설정하세요. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - -[더 알아보기](/docs/themes). - ---- - -### Agents - -`agent` 옵션으로 특정 작업용 전문 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, - }, - }, - }, -} -``` - -`~/.config/opencode/agents/` 또는 `.opencode/agents/`의 Markdown 파일로 agent를 정의할 수도 있습니다. [더 알아보기](/docs/agents). - ---- - -### Default agent - -`default_agent` 옵션으로 기본 agent를 설정할 수 있습니다. 별도 지정이 없을 때 어떤 agent를 사용할지 결정합니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "default_agent": "plan" -} -``` - -기본 agent는 primary agent여야 합니다(subagent 불가). `"build"`, `"plan"` 같은 내장 agent나 직접 정의한 [custom agent](/docs/agents)를 지정할 수 있습니다. 지정한 agent가 없거나 subagent이면 OpenCode는 경고와 함께 `"build"`로 fallback합니다. - -이 설정은 TUI, CLI(`opencode run`), 데스크톱 앱, GitHub Action 등 모든 인터페이스에 적용됩니다. - ---- - -### Sharing - -`share` 옵션으로 [share](/docs/share) 기능을 설정할 수 있습니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - -허용 값: - -- `"manual"` - 명령으로 수동 공유 허용(기본값) -- `"auto"` - 새 대화를 자동 공유 -- `"disabled"` - 공유 기능 완전 비활성화 - -기본값은 manual 모드이며, `/share` 명령으로 명시적으로 공유해야 합니다. - ---- - -### Commands - -`command` 옵션으로 반복 작업용 custom 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", - }, - }, -} -``` - -`~/.config/opencode/commands/` 또는 `.opencode/commands/`의 Markdown 파일로 command를 정의할 수도 있습니다. [더 알아보기](/docs/commands). - ---- - -### Keybinds - -`tui.json`에서 단축키를 사용자 지정하세요. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": {} -} -``` - -[더 알아보기](/docs/keybinds). - ---- - -### Autoupdate - -OpenCode는 시작 시 새 업데이트를 자동으로 다운로드합니다. `autoupdate` 옵션으로 비활성화할 수 있습니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "autoupdate": false -} -``` - -업데이트를 자동 적용하지 않고 새 버전 알림만 받고 싶다면 `autoupdate`를 `"notify"`로 설정하세요. -이 옵션은 Homebrew 같은 패키지 매니저로 설치하지 않은 경우에만 동작합니다. - ---- - -### Formatters - -`formatter` 옵션으로 코드 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"] - } - } -} -``` - -[formatter에 대해 더 알아보기](/docs/formatters). - ---- - -### Permissions - -기본적으로 OpenCode는 **명시적 승인 없이 모든 작업을 허용**합니다. `permission` 옵션으로 이 동작을 바꿀 수 있습니다. - -예를 들어 `edit`, `bash` tool이 사용자 승인을 요구하게 하려면: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "ask", - "bash": "ask" - } -} -``` - -[permission에 대해 더 알아보기](/docs/permissions). - ---- - -### Compaction - -`compaction` 옵션으로 context compaction 동작을 제어할 수 있습니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "compaction": { - "auto": true, - "prune": false, - "reserved": 10000 - } -} -``` - -- `auto` - context가 가득 찼을 때 세션을 자동 compact합니다(기본값: `true`). -- `prune` - token 절약을 위해 오래된 tool 출력을 제거합니다(기본값: `false`). -- `reserved` - compaction용 token buffer입니다. compaction 중 overflow가 나지 않도록 충분한 window를 남깁니다. - ---- - -### Watcher - -`watcher` 옵션으로 파일 watcher ignore 패턴을 설정할 수 있습니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "watcher": { - "ignore": ["node_modules/**", "dist/**", ".git/**"] - } -} -``` - -패턴은 glob 문법을 따릅니다. 파일 감시에서 노이즈가 많은 디렉토리를 제외할 때 유용합니다. - ---- - -### MCP servers - -`mcp` 옵션으로 사용할 MCP server를 설정할 수 있습니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": {} -} -``` - -[더 알아보기](/docs/mcp-servers). - ---- - -### Plugins - -[Plugins](/docs/plugins)는 custom tool, hook, integration으로 OpenCode를 확장합니다. - -plugin 파일은 `.opencode/plugins/` 또는 `~/.config/opencode/plugins/`에 두세요. `plugin` 옵션으로 npm plugin을 로드할 수도 있습니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "@my-org/custom-plugin"] -} -``` - -[더 알아보기](/docs/plugins). - ---- - -### Instructions - -`instructions` 옵션으로 사용 중인 model에 제공할 지침 파일을 설정할 수 있습니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -이 옵션은 지침 파일 경로 및 glob 패턴 배열을 받습니다. [rules에 대해 더 알아보기](/docs/rules). - ---- - -### Disabled providers - -`disabled_providers` 옵션으로 자동 로드되는 provider를 비활성화할 수 있습니다. credential이 있어도 특정 provider를 로드하지 않게 하고 싶을 때 유용합니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "disabled_providers": ["openai", "gemini"] -} -``` - -:::note -`disabled_providers`는 `enabled_providers`보다 우선합니다. -::: - -`disabled_providers`는 provider ID 배열을 받습니다. provider가 비활성화되면: - -- 환경 변수가 설정되어 있어도 로드되지 않습니다. -- `/connect` 명령으로 API key를 설정해도 로드되지 않습니다. -- 해당 provider의 model은 model 선택 목록에 표시되지 않습니다. - ---- - -### Enabled providers - -`enabled_providers` 옵션으로 provider allowlist를 지정할 수 있습니다. 이 값을 설정하면 지정한 provider만 활성화되고 나머지는 무시됩니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "enabled_providers": ["anthropic", "openai"] -} -``` - -provider를 하나씩 비활성화하는 대신, OpenCode가 특정 provider만 사용하도록 제한하고 싶을 때 유용합니다. - -:::note -`disabled_providers`는 `enabled_providers`보다 우선합니다. -::: - -동일 provider가 `enabled_providers`와 `disabled_providers`에 모두 있으면 하위 호환성을 위해 `disabled_providers`가 우선합니다. - ---- - -### Experimental - -`experimental` key에는 현재 활발히 개발 중인 옵션이 포함됩니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "experimental": {} -} -``` - -:::caution -experimental 옵션은 안정적이지 않습니다. 예고 없이 변경되거나 제거될 수 있습니다. -::: - ---- - -## Variables - -config 파일에서 환경 변수와 파일 내용을 참조할 수 있도록 변수 치환을 사용할 수 있습니다. - ---- - -### Env vars - -`{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}" - } - } - } -} -``` - -환경 변수가 설정되지 않았으면 빈 문자열로 치환됩니다. - ---- - -### Files - -`{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}" - } - } - } -} -``` - -파일 경로는 다음을 지원합니다. - -- config 파일 디렉토리 기준 상대 경로 -- `/` 또는 `~`로 시작하는 절대 경로 - -이 기능은 다음 상황에 유용합니다. - -- API key 같은 민감 정보를 별도 파일로 분리 -- 큰 지침 파일을 config를 복잡하게 만들지 않고 포함 -- 여러 config 파일에서 공통 설정 스니펫 재사용 diff --git a/packages/web/src/content/docs/ko/custom-tools.mdx b/packages/web/src/content/docs/ko/custom-tools.mdx deleted file mode 100644 index c90db16f1d..0000000000 --- a/packages/web/src/content/docs/ko/custom-tools.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: Custom Tools -description: Create tools the LLM can call in OpenCode. ---- - -custom tool은 대화 중 LLM이 호출할 수 있도록 사용자가 직접 만든 함수입니다. `read`, `write`, `bash` 같은 OpenCode의 [built-in tools](/docs/tools)와 함께 동작합니다. - ---- - -## 도구 만들기 - -tool은 **TypeScript** 또는 **JavaScript** 파일로 정의합니다. 다만 tool 정의에서 호출하는 스크립트는 **어떤 언어든** 사용할 수 있습니다. 즉, TypeScript/JavaScript는 tool 정의 자체에만 필요합니다. - ---- - -### 위치 - -tool은 다음 위치에 둘 수 있습니다. - -- 프로젝트의 `.opencode/tools/` 디렉토리(로컬) -- `~/.config/opencode/tools/` 디렉토리(전역) - ---- - -### 구조 - -tool을 가장 쉽게 만드는 방법은 타입 안정성과 validation을 제공하는 `tool()` helper를 사용하는 것입니다. - -```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}` - }, -}) -``` - -**파일 이름**이 **tool 이름**이 됩니다. 위 예시는 `database` tool을 생성합니다. - ---- - -#### 파일 하나에 여러 tool 정의 - -하나의 파일에서 여러 tool을 export할 수도 있습니다. 각 export는 **별도의 tool**이 되며 이름은 **`_`** 형식을 사용합니다. - -```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` 두 tool이 생성됩니다. - ---- - -#### 기본 도구와 이름 충돌 - -커스텀 도구는 도구 이름으로 식별됩니다. 커스텀 도구가 기본 도구와 같은 이름을 사용하면 커스텀 도구가 우선순위를 갖습니다. - -예를 들어, 이 파일은 기본 `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 -의도적으로 기본 도구를 대체하려는 경우가 아니라면 고유한 이름을 사용하는 것이 좋습니다. 도구를 오버라이드하지 않고 비활성화만 하려면 [permissions](/docs/permissions)를 사용하세요. -::: - ---- - -### 인자 - -인자 타입은 `tool.schema`로 정의할 수 있습니다. `tool.schema`는 [Zod](https://zod.dev) 기반입니다. - -```ts "tool.schema" -args: { - query: tool.schema.string().describe("SQL query to execute") -} -``` - -[Zod](https://zod.dev)를 직접 import해서 일반 객체를 반환하는 방식도 사용할 수 있습니다. - -```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 - -tool은 현재 세션의 context 정보를 전달받습니다. - -```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`를 사용하세요. -git worktree 루트는 `context.worktree`를 사용하세요. - ---- - -## 예시 - -### Python으로 tool 작성 - -tool은 원하는 언어로 작성할 수 있습니다. 아래는 Python으로 두 숫자를 더하는 예시입니다. - -먼저 Python 스크립트로 tool을 만듭니다. - -```python title=".opencode/tools/add.py" -import sys - -a = int(sys.argv[1]) -b = int(sys.argv[2]) -print(a + b) -``` - -그다음 이 스크립트를 호출하는 tool 정의를 만듭니다. - -```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() - }, -}) -``` - -여기서는 Python 스크립트를 실행하기 위해 [`Bun.$`](https://bun.com/docs/runtime/shell) 유틸리티를 사용합니다. diff --git a/packages/web/src/content/docs/ko/ecosystem.mdx b/packages/web/src/content/docs/ko/ecosystem.mdx deleted file mode 100644 index 546d7af31a..0000000000 --- a/packages/web/src/content/docs/ko/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: 생태계 -description: OpenCode로 구축된 프로젝트와 통합. ---- - -OpenCode를 기반으로 만들어진 커뮤니티 프로젝트 모음입니다. - -:::note -이 목록에 OpenCode 관련 프로젝트를 추가하고 싶다면 PR을 제출하세요. -::: - -[awesome-opencode](https://github.com/awesome-opencode/awesome-opencode)와 [opencode.cafe](https://opencode.cafe)도 함께 확인해 보세요. ecosystem과 community 정보를 한곳에 모아볼 수 있습니다. - ---- - -## 플러그인 - -| 이름 | 설명 | -| -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | -| [opencode-daytona](https://github.com/daytonaio/daytona/tree/main/libs/opencode-plugin) | git sync와 live preview를 지원하는 격리된 Daytona sandbox에서 OpenCode 세션을 자동 실행합니다. | -| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | 요청을 그룹화할 수 있도록 Helicone session header를 자동으로 주입합니다. | -| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | 조회 tool과 함께 TypeScript/Svelte 타입 정보를 파일 읽기에 자동 주입합니다. | -| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | API 크레딧 대신 ChatGPT Plus/Pro 구독을 사용할 수 있습니다. | -| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | API 과금 대신 기존 Gemini 플랜을 사용할 수 있습니다. | -| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | API 과금 대신 Antigravity의 무료 model을 사용할 수 있습니다. | -| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | shallow clone과 자동 포트 할당을 기반으로 multi-branch devcontainer 격리를 제공합니다. | -| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Google Search 지원과 견고한 API 처리를 제공하는 Google Antigravity OAuth Plugin입니다. | -| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | 오래된 tool output을 정리해 token 사용량을 최적화합니다. | -| [opencode-vibeguard](https://github.com/inkdust2021/opencode-vibeguard) | LLM 호출 전에 secrets/PII를 VibeGuard 스타일 placeholder로 가리고, 로컬에서 복원합니다. | -| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | 지원 provider에서 Google grounded 스타일의 네이티브 websearch를 추가합니다. | -| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | AI agent가 PTY에서 백그라운드 프로세스를 실행하고 대화형 입력을 보낼 수 있게 합니다. | -| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | 비대화형 shell 명령 실행 지침을 제공해 TTY 의존 작업으로 인한 멈춤을 방지합니다. | -| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Wakatime으로 OpenCode 사용량을 추적합니다. | -| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | LLM이 생성한 markdown 표를 정리합니다. | -| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | Morph를 통한 Fast Apply 편집, WarpGrep 코드베이스 검색 및 컨텍스트 압축 | -| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | background agent, 사전 구성된 LSP/AST/MCP tool, curated agent, Claude Code 호환성을 제공합니다. | -| [opencode-notificator](https://github.com/panta82/opencode-notificator) | OpenCode 세션에 데스크톱 알림과 사운드 알림을 제공합니다. | -| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | permission, 완료, 오류 이벤트에 대한 데스크톱 알림과 사운드 알림을 제공합니다. | -| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | OpenCode 맥락을 기반으로 Zellij session 이름을 AI로 자동 지정합니다. | -| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | skill 탐색과 주입을 통해 OpenCode agent가 필요 시 prompt를 lazy load하도록 합니다. | -| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Supermemory를 사용해 세션 간 persistent memory를 제공합니다. | -| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | 시각 주석과 private/offline 공유를 포함한 인터랙티브 계획 리뷰를 제공합니다. | -| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | 세밀한 flow control로 opencode /commands를 강력한 orchestration 시스템으로 확장합니다. | -| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | cron 문법을 사용해 launchd(Mac) 또는 systemd(Linux) 기반 반복 작업을 예약합니다. | -| [micode](https://github.com/vtemian/micode) | Structured Brainstorm → Plan → Implement 워크플로를 session continuity와 함께 제공합니다. | -| [octto](https://github.com/vtemian/octto) | 다중 질문 폼 기반의 AI 브레인스토밍용 인터랙티브 브라우저 UI를 제공합니다. | -| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Claude Code 스타일의 background agent를 async delegation과 context persistence로 제공합니다. | -| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | OpenCode 작업 완료 시점을 native OS 알림으로 알려줍니다. | -| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | 16개 구성요소를 한 번에 설치하는 bundled multi-agent orchestration harness를 제공합니다. | -| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | OpenCode용 git worktree를 손쉽게 사용할 수 있도록 돕습니다. | -| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | Sentry AI 모니터링으로 AI 에이전트를 추적하고 디버그합니다. | - ---- - -## 프로젝트 - -| 이름 | 설명 | -| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | -| [kimaki](https://github.com/remorses/kimaki) | SDK 기반으로 OpenCode 세션을 제어하는 Discord bot입니다. | -| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | API 기반 editor-aware prompt를 제공하는 Neovim plugin입니다. | -| [portal](https://github.com/hosenur/portal) | Tailscale/VPN 환경에서 OpenCode를 쓰기 위한 mobile-first 웹 UI입니다. | -| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | OpenCode plugin 개발을 위한 템플릿입니다. | -| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | terminal 기반 AI 코딩 agent인 opencode용 Neovim frontend입니다. | -| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | `@opencode-ai/sdk`로 OpenCode를 사용하는 Vercel AI SDK provider입니다. | -| [OpenChamber](https://github.com/btriapitsyn/openchamber) | OpenCode용 Web/Desktop App 및 VS Code Extension입니다. | -| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Obsidian UI에 OpenCode를 내장하는 Obsidian plugin입니다. | -| [OpenWork](https://github.com/different-ai/openwork) | OpenCode 기반의 Claude Cowork 대체 오픈소스 프로젝트입니다. | -| [ocx](https://github.com/kdcokenny/ocx) | 휴대형 격리 프로필을 지원하는 OpenCode extension manager입니다. | -| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | OpenCode용 Desktop/Web/Mobile/Remote client app입니다. | - ---- - -## 에이전트 - -| 이름 | 설명 | -| ----------------------------------------------------------------- | ---------------------------------------------------------------- | -| [Agentic](https://github.com/Cluster444/agentic) | 구조화된 개발을 위한 모듈형 AI agent와 command를 제공합니다. | -| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | 향상된 워크플로를 위한 config, prompt, agent, plugin 모음입니다. | diff --git a/packages/web/src/content/docs/ko/enterprise.mdx b/packages/web/src/content/docs/ko/enterprise.mdx deleted file mode 100644 index c86431ba95..0000000000 --- a/packages/web/src/content/docs/ko/enterprise.mdx +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: 엔터프라이즈 -description: 조직에서 OpenCode를 안전하게 사용하는 방법입니다. ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -OpenCode Enterprise는 코드와 데이터가 조직의 인프라 밖으로 나가지 않도록 보장하려는 조직을 위한 기능입니다. SSO 및 내부 AI gateway와 연동되는 중앙 config를 사용해 이를 구현할 수 있습니다. - -:::note -OpenCode는 코드나 context 데이터를 저장하지 않습니다. -::: - -OpenCode Enterprise를 시작하려면 다음 단계를 진행하세요. - -1. 팀 내부에서 trial을 먼저 진행하세요. -2. 가격 및 도입 옵션을 논의하려면 **문의해 주세요**. - ---- - -## Trial - -OpenCode는 오픈소스이며 코드나 context 데이터를 저장하지 않으므로, 개발자는 바로 [시작하기](/docs/)를 참고해 trial을 진행할 수 있습니다. - ---- - -### Data handling - -**OpenCode는 코드나 context 데이터를 저장하지 않습니다.** 모든 처리는 로컬 환경 또는 AI provider로의 직접 API 호출로 이루어집니다. - -따라서 신뢰할 수 있는 provider 또는 내부 AI gateway를 사용한다면 OpenCode를 안전하게 사용할 수 있습니다. - -주의할 점은 선택 기능인 `/share`입니다. - ---- - -#### Sharing conversations - -사용자가 `/share` 기능을 활성화하면, 대화와 관련 데이터가 opencode.ai의 share 페이지 호스팅 서비스로 전송됩니다. - -현재 이 데이터는 CDN edge network를 통해 제공되며, 사용자와 가까운 edge에 캐시됩니다. - -trial 단계에서는 이 기능을 비활성화할 것을 권장합니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -[sharing에 대해 더 알아보기](/docs/share). - ---- - -### Code ownership - -**OpenCode가 생성한 코드는 모두 사용자에게 소유권이 있습니다.** 라이선스 제한이나 소유권 주장도 없습니다. - ---- - -## Pricing - -OpenCode Enterprise는 seat당 과금 모델을 사용합니다. 자체 LLM gateway를 사용하는 경우에는 사용 token에 대해 별도 과금하지 않습니다. 가격 및 도입 옵션의 자세한 내용은 **문의해 주세요**. - ---- - -## Deployment - -trial을 마치고 조직에서 OpenCode를 본격적으로 사용하려면, 가격 및 도입 옵션 논의를 위해 **문의해 주세요**. - ---- - -### Central Config - -조직 전체에서 단일 중앙 config를 사용하도록 OpenCode를 설정할 수 있습니다. - -이 중앙 config는 SSO provider와 연동할 수 있으며, 모든 사용자가 내부 AI gateway만 사용하도록 보장합니다. - ---- - -### SSO integration - -중앙 config를 통해 OpenCode는 조직의 SSO provider와 인증 연동을 구성할 수 있습니다. - -이를 통해 기존 ID 관리 시스템으로 내부 AI gateway credential을 안전하게 획득할 수 있습니다. - ---- - -### Internal AI gateway - -중앙 config를 사용하면 OpenCode를 내부 AI gateway만 사용하도록 설정할 수 있습니다. - -또한 다른 AI provider를 모두 비활성화해, 모든 요청이 조직에서 승인한 인프라만 통과하도록 구성할 수 있습니다. - ---- - -### Self-hosting - -데이터가 조직 외부로 나가지 않도록 share 페이지 비활성화를 권장하지만, 원하시면 해당 페이지를 조직 인프라에 self-hosting하는 방식도 지원할 수 있습니다. - -이 기능은 현재 로드맵에 있으며, 관심이 있다면 **문의해 주세요**. - ---- - -## FAQ - -

-OpenCode Enterprise란 무엇인가요? - -OpenCode Enterprise는 코드와 데이터가 조직 인프라 밖으로 나가지 않도록 보장하려는 조직을 위한 기능입니다. SSO 및 내부 AI gateway와 연동되는 중앙 config를 사용해 이를 구현할 수 있습니다. - -
- -
-OpenCode Enterprise는 어떻게 시작하나요? - -먼저 팀 내부 trial부터 시작하세요. OpenCode는 기본적으로 코드나 context 데이터를 저장하지 않으므로 도입을 빠르게 시작할 수 있습니다. - -그다음 가격 및 도입 옵션 논의를 위해 **문의해 주세요**. - -
- -
-엔터프라이즈 가격 정책은 어떻게 되나요? - -seat당 과금 방식의 엔터프라이즈 요금제를 제공합니다. 자체 LLM gateway를 사용하면 token 사용량에 대한 별도 과금은 없습니다. 자세한 내용은 **문의해 주세요**. 조직 상황에 맞는 맞춤 견적을 안내해 드립니다. - -
- -
-OpenCode Enterprise에서 데이터는 안전한가요? - -네. OpenCode는 코드나 context 데이터를 저장하지 않습니다. 모든 처리는 로컬 또는 AI provider로의 직접 API 호출로 이루어집니다. 중앙 config와 SSO integration을 함께 사용하면 데이터는 조직 인프라 내부에서 안전하게 유지됩니다. - -
- -
-사내 private NPM registry를 사용할 수 있나요? - -OpenCode는 Bun의 기본 `.npmrc` 지원을 통해 private npm registry를 사용할 수 있습니다. 조직에서 JFrog Artifactory, Nexus 등 private registry를 사용한다면 OpenCode 실행 전에 개발자 인증을 완료하세요. - -private registry 인증 예시는 다음과 같습니다. - -```bash -npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/ -``` - -이 명령은 인증 정보가 포함된 `~/.npmrc`를 생성하며, OpenCode는 이를 자동으로 인식합니다. - -:::caution -OpenCode 실행 전에 private registry 로그인 상태여야 합니다. -::: - -또는 `.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} -``` - -엔터프라이즈 registry에서 패키지를 정상 설치하려면, 개발자는 OpenCode 실행 전에 private registry 인증을 완료해야 합니다. - -
diff --git a/packages/web/src/content/docs/ko/formatters.mdx b/packages/web/src/content/docs/ko/formatters.mdx deleted file mode 100644 index d2b2142353..0000000000 --- a/packages/web/src/content/docs/ko/formatters.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: 포매터 -description: OpenCode는 언어별 포매터를 사용합니다. ---- - -OpenCode는 파일을 write하거나 edit한 뒤, 언어별 포매터를 사용해 자동으로 포맷합니다. 이를 통해 생성된 코드가 프로젝트의 코드 스타일을 따르도록 보장합니다. - ---- - -## 내장 - -OpenCode는 주요 언어와 프레임워크를 위한 여러 내장 포매터를 제공합니다. 아래는 포매터 목록, 지원 확장자, 필요한 명령 또는 config 옵션입니다. - -| 포매터 | 확장자 | 요구 사항 | -| -------------------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| air | .R | `air` 명령 사용 가능 | -| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, [기타](https://biomejs.dev/) | `biome.json(c)` config 파일 | -| cargofmt | .rs | `cargo fmt` 명령 사용 가능 | -| clang-format | .c, .cpp, .h, .hpp, .ino, [기타](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` config 파일 | -| cljfmt | .clj, .cljs, .cljc, .edn | `cljfmt` 명령 사용 가능 | -| dart | .dart | `dart` 명령 사용 가능 | -| dfmt | .d | `dfmt` 명령 사용 가능 | -| gleam | .gleam | `gleam` 명령 사용 가능 | -| gofmt | .go | `gofmt` 명령 사용 가능 | -| htmlbeautifier | .erb, .html.erb | `htmlbeautifier` 명령 사용 가능 | -| ktlint | .kt, .kts | `ktlint` 명령 사용 가능 | -| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | `mix` 명령 사용 가능 | -| nixfmt | .nix | `nixfmt` 명령 사용 가능 | -| ocamlformat | .ml, .mli | `ocamlformat` 명령 사용 가능 및 `.ocamlformat` config 파일 필요 | -| ormolu | .hs | `ormolu` 명령 사용 가능 | -| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | `package.json`에 `oxfmt` dependency 필요 및 [experimental env variable flag](/docs/cli/#experimental) | -| pint | .php | `composer.json`에 `laravel/pint` dependency 필요 | -| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, [기타](https://prettier.io/docs/en/index.html) | `package.json`에 `prettier` dependency 필요 | -| rubocop | .rb, .rake, .gemspec, .ru | `rubocop` 명령 사용 가능 | -| ruff | .py, .pyi | `ruff` 명령 사용 가능 및 관련 config 필요 | -| rustfmt | .rs | `rustfmt` 명령 사용 가능 | -| shfmt | .sh, .bash | `shfmt` 명령 사용 가능 | -| standardrb | .rb, .rake, .gemspec, .ru | `standardrb` 명령 사용 가능 | -| terraform | .tf, .tfvars | `terraform` 명령 사용 가능 | -| uv | .py, .pyi | `uv` 명령 사용 가능 | -| zig | .zig, .zon | `zig` 명령 사용 가능 | - -예를 들어 프로젝트 `package.json`에 `prettier`가 있으면 OpenCode가 자동으로 해당 포매터를 사용합니다. - ---- - -## 작동 방식 - -OpenCode가 파일을 write하거나 edit할 때 다음 순서로 동작합니다. - -1. 활성화된 모든 포매터와 파일 확장자를 대조합니다. -2. 파일에 맞는 포매터 명령을 실행합니다. -3. 포맷 변경 사항을 자동으로 적용합니다. - -이 과정은 background에서 실행되며, 수동 작업 없이 코드 스타일이 유지됩니다. - ---- - -## 구성 - -OpenCode config의 `formatter` 섹션에서 포매터를 커스터마이즈할 수 있습니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "formatter": {} -} -``` - -각 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 - } - } -} -``` - ---- - -### 사용자 정의 포매터 - -명령, 환경 변수, 파일 확장자를 지정해 내장 포매터를 override하거나 새 포매터를 추가할 수 있습니다. - -```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` placeholder**는 포맷 대상 파일 경로로 치환됩니다. diff --git a/packages/web/src/content/docs/ko/github.mdx b/packages/web/src/content/docs/ko/github.mdx deleted file mode 100644 index 1f7ea672fa..0000000000 --- a/packages/web/src/content/docs/ko/github.mdx +++ /dev/null @@ -1,321 +0,0 @@ ---- -title: GitHub -description: GitHub issue와 pull request에서 OpenCode를 사용하세요. ---- - -OpenCode는 GitHub 워크플로와 통합됩니다. 댓글에 `/opencode` 또는 `/oc`를 mention하면 OpenCode가 GitHub Actions runner 안에서 작업을 실행합니다. - ---- - -## 기능 - -- **Issue triage**: OpenCode에게 issue를 분석하고 내용을 설명하도록 요청할 수 있습니다. -- **Fix and implement**: OpenCode에게 issue 수정이나 기능 구현을 요청할 수 있습니다. 새 branch에서 작업한 뒤 변경 사항을 담은 PR을 생성합니다. -- **Secure**: OpenCode는 GitHub runner 내부에서 실행됩니다. - ---- - -## 설치 - -GitHub repo에 연결된 프로젝트에서 아래 명령을 실행하세요. - -```bash -opencode github install -``` - -이 명령은 GitHub app 설치, workflow 생성, secrets 설정 과정을 안내합니다. - ---- - -### Manual Setup - -원하면 수동으로도 설정할 수 있습니다. - -1. **Install the GitHub app** - - [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent)로 이동하세요. 대상 repo에 app이 설치되어 있는지 확인하세요. - -2. **Add the workflow** - - 아래 workflow 파일을 repo의 `.github/workflows/opencode.yml`에 추가하세요. `env`에는 필요한 API key를 넣고, `model`은 환경에 맞게 설정하세요. - - ```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. **Store the API keys in secrets** - - 조직 또는 프로젝트 **Settings**에서 왼쪽의 **Secrets and variables**를 펼친 뒤 **Actions**를 선택하세요. 필요한 API key를 추가하면 됩니다. - ---- - -## 구성 - -- `model`: OpenCode에서 사용할 model입니다. `provider/model` 형식이며 **필수**입니다. -- `agent`: 사용할 agent입니다. primary agent여야 합니다. 찾지 못하면 config의 `default_agent`를 사용하고, 그것도 없으면 `"build"`로 fallback합니다. -- `share`: OpenCode 세션 공유 여부입니다. public repo에서는 기본값이 **true**입니다. -- `prompt`: 기본 동작을 override하는 선택형 custom prompt입니다. OpenCode의 요청 처리 방식을 조정할 때 사용합니다. -- `token`: 댓글 생성, 커밋, PR 생성 같은 작업을 수행할 때 사용하는 선택형 GitHub access token입니다. 기본적으로 OpenCode는 OpenCode GitHub App의 installation access token을 사용하므로, 커밋/댓글/PR 작성 주체가 app으로 표시됩니다. - - 또는 OpenCode GitHub App을 설치하지 않고도 GitHub Action runner의 [기본 제공 `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token)을 사용할 수 있습니다. 이 경우 workflow에 필요한 permission을 반드시 부여하세요. - - ```yaml - permissions: - id-token: write - contents: write - pull-requests: write - issues: write - ``` - - 필요하면 [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT)도 사용할 수 있습니다. - ---- - -## Supported Events - -OpenCode는 아래 GitHub event로 트리거할 수 있습니다. - -| Event Type | Triggered By | Details | -| ----------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| `issue_comment` | issue 또는 PR 댓글 | 댓글에 `/opencode` 또는 `/oc`를 mention하세요. OpenCode가 맥락을 읽고 branch 생성, PR 생성, 답변을 수행할 수 있습니다. | -| `pull_request_review_comment` | PR의 특정 코드 줄 댓글 | 코드 리뷰 중 `/opencode` 또는 `/oc`를 mention하세요. OpenCode가 파일 경로, 라인 번호, diff 맥락을 받습니다. | -| `issues` | issue 생성 또는 수정 | issue가 생성/수정될 때 OpenCode를 자동 트리거합니다. `prompt` 입력이 필요합니다. | -| `pull_request` | PR 생성 또는 업데이트 | PR open/synchronize/reopen 시 OpenCode를 자동 트리거합니다. 자동 리뷰에 유용합니다. | -| `schedule` | cron 기반 스케줄 | 스케줄에 따라 OpenCode를 실행합니다. `prompt` 입력이 필요합니다. 출력은 로그와 PR로 남습니다(issue 댓글 대상 없음). | -| `workflow_dispatch` | GitHub UI에서 수동 실행 | Actions 탭에서 필요 시 OpenCode를 실행합니다. `prompt` 입력이 필요하며 출력은 로그와 PR로 남습니다. | - -### Schedule Example - -자동화 작업을 위해 스케줄 기반으로 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 event는 지시를 추출할 댓글이 없기 때문에 `prompt` 입력이 **필수**입니다. 또한 schedule workflow는 permission 체크용 사용자 맥락 없이 실행되므로, OpenCode가 branch나 PR을 만들게 하려면 `contents: write`와 `pull-requests: write`를 부여해야 합니다. - ---- - -### Pull Request Example - -PR이 열리거나 업데이트될 때 자동 리뷰를 수행할 수 있습니다. - -```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` event에서 `prompt`를 지정하지 않으면 OpenCode는 pull request 리뷰를 기본 동작으로 수행합니다. - ---- - -### Issues Triage Example - -새로운 issue를 자동으로 triage할 수 있습니다. 아래 예시는 스팸을 줄이기 위해 계정 생성 후 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` event 역시 지시를 추출할 댓글이 없기 때문에 `prompt` 입력이 **필수**입니다. - ---- - -## Custom prompts - -기본 prompt를 override해 워크플로에 맞게 OpenCode 동작을 커스터마이즈할 수 있습니다. - -```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 -``` - -이 방식은 프로젝트별 리뷰 기준, 코딩 표준, 중점 점검 항목을 강제할 때 유용합니다. - ---- - -## 예시 - -아래는 GitHub에서 OpenCode를 활용하는 대표 예시입니다. - -- **Issue 설명 요청** - - GitHub issue에 아래 댓글을 남기세요. - - ``` - /opencode explain this issue - ``` - - OpenCode는 전체 스레드와 모든 댓글을 읽고 명확한 설명으로 답변합니다. - -- **Issue 수정 요청** - - GitHub issue에서 아래처럼 요청하세요. - - ``` - /opencode fix this - ``` - - OpenCode가 새 branch를 만들고 변경을 구현한 뒤, 변경 사항이 담긴 PR을 생성합니다. - -- **PR 리뷰 중 변경 요청** - - GitHub PR에 아래 댓글을 남기세요. - - ``` - Delete the attachment from S3 when the note is removed /oc - ``` - - OpenCode가 요청한 변경을 구현하고 같은 PR에 커밋합니다. - -- **특정 코드 줄 리뷰 요청** - - PR의 "Files" 탭에서 코드 줄에 직접 댓글을 남기세요. OpenCode는 파일, 줄 번호, diff 맥락을 자동으로 인식해 더 정확한 응답을 제공합니다. - - ``` - [Comment on specific lines in Files tab] - /oc add error handling here - ``` - - 특정 줄 댓글에서는 OpenCode가 다음 정보를 함께 받습니다. - - 검토 중인 정확한 파일 - - 해당 코드 줄 - - 주변 diff 맥락 - - 라인 번호 정보 - - 따라서 파일 경로나 라인 번호를 직접 적지 않아도 더 정밀하게 요청할 수 있습니다. diff --git a/packages/web/src/content/docs/ko/gitlab.mdx b/packages/web/src/content/docs/ko/gitlab.mdx deleted file mode 100644 index 850cd62258..0000000000 --- a/packages/web/src/content/docs/ko/gitlab.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: GitLab -description: GitLab 이슈와 merge request에서 OpenCode를 사용하세요. ---- - -OpenCode는 GitLab CI/CD 파이프라인 또는 GitLab Duo를 통해 GitLab 워크플로에 통합됩니다. - -두 경우 모두 OpenCode는 GitLab runner에서 실행됩니다. - ---- - -## GitLab CI - -OpenCode는 일반 GitLab 파이프라인에서 작동합니다. [CI component](https://docs.gitlab.com/ee/ci/components/)로 파이프라인에 통합할 수 있습니다. - -여기서는 OpenCode용 커뮤니티 제작 CI/CD component인 [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode)를 사용합니다. - ---- - -### 기능 - -- **job별 custom config 사용**: custom config 디렉터리(예: `./config/#custom-directory`)를 사용해 OpenCode를 각 실행 단위로 설정하고 기능을 켜거나 끌 수 있습니다. -- **최소 설정**: CI component가 백그라운드에서 OpenCode를 설정하므로 OpenCode config와 초기 prompt만 만들면 됩니다. -- **유연함**: CI component는 동작을 사용자화할 수 있도록 여러 입력값을 지원합니다. - ---- - -### Setup - -1. OpenCode 인증 JSON을 **Settings** > **CI/CD** > **Variables** 아래의 File 타입 CI 환경 변수로 저장하세요. 반드시 "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" - ``` - -더 많은 입력값과 사용 사례는 이 component의 [docs](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode)에서 확인하세요. - ---- - -## GitLab Duo - -OpenCode는 GitLab 워크플로에 통합됩니다. -댓글에서 `@opencode`를 멘션하면 OpenCode가 GitLab CI 파이프라인 안에서 작업을 실행합니다. - ---- - -### 기능 - -- **이슈 분류**: OpenCode에 이슈를 살펴보고 설명해 달라고 요청할 수 있습니다. -- **수정 및 구현**: OpenCode에 이슈를 수정하거나 기능을 구현해 달라고 요청할 수 있습니다. - OpenCode는 새 브랜치를 만들고 변경 사항이 담긴 merge request를 생성합니다. -- **보안**: OpenCode는 GitLab runner에서 실행됩니다. - ---- - -### Setup - -OpenCode는 GitLab CI/CD 파이프라인에서 실행되며, 설정에 필요한 항목은 다음과 같습니다. - -:::tip -[최신 안내는 **GitLab docs**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/)를 확인하세요. -::: - -1. GitLab 환경을 설정합니다. -2. CI/CD를 설정합니다. -3. AI model provider API 키를 준비합니다. -4. 서비스 계정을 생성합니다. -5. CI/CD 변수를 설정합니다. -6. flow config 파일을 생성합니다. 예시는 다음과 같습니다. - -
- - Flow configuration - - ```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. - - - 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. - - " - - 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 - ``` - -
- -[GitLab CLI agents docs](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/)에서 자세한 안내를 확인할 수 있습니다. - ---- - -### 예제 - -다음은 GitLab에서 OpenCode를 사용하는 몇 가지 예시입니다. - -:::tip -`@opencode` 대신 다른 trigger phrase를 사용하도록 설정할 수 있습니다. -::: - -- **이슈 설명** - -GitLab 이슈에 아래 댓글을 남기세요. - -``` - @opencode explain this issue -``` - -OpenCode가 이슈를 읽고 명확한 설명으로 답변합니다. - -- **이슈 해결** - -GitLab 이슈에서 다음과 같이 요청하세요. - -``` - @opencode fix this -``` - -OpenCode가 새 브랜치를 만들고 변경 사항을 구현한 뒤, 해당 변경 사항으로 merge request를 엽니다. - -- **머지 리퀘스트 검토** - -GitLab merge request에 아래 댓글을 남기세요. - -``` - @opencode review this merge request -``` - -OpenCode가 merge request를 검토하고 피드백을 제공합니다. diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx deleted file mode 100644 index 9a19e1e39e..0000000000 --- a/packages/web/src/content/docs/ko/go.mdx +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: Go -description: 오픈 코딩 모델을 위한 저비용 구독 서비스입니다. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Go는 인기 있는 오픈 코딩 모델에 안정적으로 액세스할 수 있게 해주는 저비용 구독 서비스입니다. **첫 달은 $5**, 이후에는 **월 $10**입니다. - -Go는 OpenCode의 다른 제공자와 똑같이 작동합니다. OpenCode Go를 구독하고 API 키를 발급받으면 됩니다. 이는 **완전히 선택 사항**이며, OpenCode를 사용하기 위해 꼭 필요하지는 않습니다. - -주로 해외 사용자를 위해 설계되었으며, 안정적인 전 세계 액세스를 위해 모델은 미국, EU, 싱가포르에 호스팅됩니다. - ---- - -## 배경 - -오픈 모델은 정말 많이 발전했습니다. 이제는 코딩 작업에서 독점 모델에 가까운 성능을 보여줍니다. 그리고 많은 제공자가 경쟁력 있게 서비스를 제공할 수 있기 때문에, 보통 훨씬 더 저렴합니다. - -하지만 이런 모델에 안정적이고 낮은 지연 시간으로 액세스하는 일은 쉽지 않을 수 있습니다. 제공자마다 품질과 가용성이 다르기 때문입니다. - -:::tip -OpenCode와 잘 맞는 선별된 모델과 제공자 그룹을 테스트했습니다. -::: - -이를 해결하기 위해, 저희는 몇 가지를 진행했습니다. - -1. 선별된 오픈 모델 그룹을 테스트하고, 각 팀과 가장 잘 운영하는 방법에 대해 논의했습니다. -2. 그런 다음 몇몇 제공자와 협력해, 이 모델들이 올바르게 서비스되도록 했습니다. -3. 마지막으로 모델/제공자 조합을 벤치마킹해, 자신 있게 추천할 수 있는 목록을 만들었습니다. - -OpenCode Go를 사용하면 **첫 달은 $5**, 이후에는 **월 $10**으로 이러한 모델에 액세스할 수 있습니다. - ---- - -## 작동 방식 - -OpenCode Go는 OpenCode의 다른 제공자와 똑같이 작동합니다. - -1. **OpenCode Zen**에 로그인해 Go를 구독하고 API 키를 복사합니다. -2. TUI에서 `/connect` 명령을 실행하고 `OpenCode Go`를 선택한 다음 API 키를 붙여넣습니다. -3. TUI에서 `/models`를 실행해 Go를 통해 사용할 수 있는 모델 목록을 확인합니다. - -:::note -workspace당 한 명의 멤버만 OpenCode Go를 구독할 수 있습니다. -::: - -현재 모델 목록에는 다음이 포함됩니다. - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -새로운 모델을 테스트하고 추가함에 따라 이 목록은 변경될 수 있습니다. - ---- - -## 사용 한도 - -OpenCode Go에는 다음과 같은 한도가 포함됩니다. - -- **5시간 한도** — 사용량 $12 -- **주간 한도** — 사용량 $30 -- **월간 한도** — 사용량 $60 - -한도는 달러 금액 기준으로 정의됩니다. 즉, 실제 요청 횟수는 사용하는 모델에 따라 달라집니다. DeepSeek V4 Flash처럼 저렴한 모델은 더 많은 요청이 가능하고, GLM-5.2처럼 비용이 더 높은 모델은 더 적은 요청이 가능합니다. - -아래 표는 일반적인 Go 사용 패턴을 기준으로 한 예상 요청 횟수를 보여줍니다. - -| Model | 5시간당 요청 횟수 | 주간 요청 횟수 | 월간 요청 횟수 | -| ----------------- | ----------------- | -------------- | -------------- | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -이 예상치는 관찰된 평균 요청 패턴을 기준으로 합니다. - -- GLM-5.2/5.1 — 요청당 입력 700, 캐시 52,000, 출력 토큰 150 -- Kimi K2.7 Code/K2.6 — 요청당 입력 870, 캐시 55,000, 출력 토큰 200 -- DeepSeek V4 Pro — 요청당 입력 750, 캐시 82,000, 출력 토큰 290 -- DeepSeek V4 Flash — 요청당 입력 790, 캐시 68,000, 출력 토큰 280 -- MiniMax M3 — 요청당 입력 510, 캐시 56,000, 출력 토큰 190 -- MiniMax M2.7 — 요청당 입력 300, 캐시 55,000, 출력 토큰 125 -- Qwen3.7 Max — 요청당 입력 420, 캐시 66,000, 출력 토큰 200 -- Qwen3.7 Plus — 요청당 입력 500, 캐시 57,000, 출력 토큰 190 -- Qwen3.6 Plus — 요청당 입력 500, 캐시 57,000, 출력 토큰 190 -- MiMo-V2.5 — 요청당 입력 830, 캐시 71,500, 출력 토큰 295 -- MiMo-V2.5-Pro — 요청당 입력 790, 캐시 86,000, 출력 토큰 305 - -이 예상치는 또한 1M tokens당 다음 가격을 기준으로 합니다. - -| Model | Input | Output | Cached Read | Cached Write | -| ---------------------------- | ----- | ------ | ----------- | ------------ | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -현재 사용량은 **console**에서 확인할 수 있습니다. - -:::tip -사용 한도에 도달해도 무료 모델은 계속 사용할 수 있습니다. -::: - -초기 사용량과 피드백을 바탕으로 사용 한도는 변경될 수 있습니다. - ---- - -### 한도 초과 사용 - -Zen 잔액에 크레딧도 있다면, console에서 **Use balance** 옵션을 활성화할 수 있습니다. 이 옵션을 켜면, 사용 한도에 도달했을 때 요청을 차단하는 대신 Go가 Zen 잔액으로 자동 전환됩니다. - ---- - -## 엔드포인트 - -다음 API 엔드포인트를 통해서도 Go 모델에 액세스할 수 있습니다. - -| 모델 | 모델 ID | 엔드포인트 | AI SDK 패키지 | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -OpenCode config의 [model id](/docs/config/#models)는 `opencode-go/` 형식을 사용합니다. 예를 들어 Kimi K2.7 Code의 경우 config에서 `opencode-go/kimi-k2.7-code`를 사용하면 됩니다. - ---- - -### 모델 - -사용 가능한 전체 모델 목록과 메타데이터는 다음에서 가져올 수 있습니다. - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## 개인정보 보호 - -이 플랜은 안정적인 전 세계 액세스를 위해 모델을 미국, EU, 싱가포르에 호스팅하며, 주로 해외 사용자를 위해 설계되었습니다. 저희 제공자는 zero-retention 정책을 따르며, 고객 데이터를 모델 학습에 사용하지 않습니다. - ---- - -## 목표 - -OpenCode Go를 만든 목적은 다음과 같습니다. - -1. 저비용 구독으로 더 많은 사람이 AI 코딩을 **접근 가능하게** 이용할 수 있도록 합니다. -2. 최고의 오픈 코딩 모델에 **안정적으로** 액세스할 수 있게 합니다. -3. 코딩 에이전트 사용에 맞게 **테스트되고 벤치마킹된** 모델을 선별합니다. -4. OpenCode에서 다른 제공자도 함께 사용할 수 있게 해 **종속성 없음**을 유지합니다. diff --git a/packages/web/src/content/docs/ko/ide.mdx b/packages/web/src/content/docs/ko/ide.mdx deleted file mode 100644 index ddc7300191..0000000000 --- a/packages/web/src/content/docs/ko/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: IDE -description: VS Code, Cursor 및 기타 IDE용 OpenCode 확장 프로그램 ---- - -OpenCode는 VS Code, Cursor, 또는 터미널을 지원하는 모든 IDE와 통합됩니다. 시작하려면 터미널에서 `opencode`를 실행하세요. - ---- - -## 사용법 - -- **Quick Launch**: `Cmd+Esc` (Mac) 또는 `Ctrl+Esc` (Windows/Linux)를 사용해 분할 터미널 뷰에서 OpenCode를 열거나, 이미 실행 중인 터미널 세션으로 포커스하세요. -- **New Session**: `Cmd+Shift+Esc` (Mac) 또는 `Ctrl+Shift+Esc` (Windows/Linux)를 사용해 기존 세션이 열려 있어도 새 OpenCode 터미널 세션을 시작하세요. UI의 OpenCode 버튼을 클릭해도 됩니다. -- **Context Awareness**: 현재 선택 영역이나 탭을 OpenCode와 자동으로 공유합니다. -- **File Reference Shortcuts**: `Cmd+Option+K` (Mac) 또는 `Alt+Ctrl+K` (Linux/Windows)를 사용해 파일 참조를 삽입하세요. 예: `@File#L37-42`. - ---- - -## 설치 - -VS Code와 Cursor, Windsurf, VSCodium 같은 인기 포크에 OpenCode를 설치하려면: - -1. VS Code를 여세요.4 -2. 통합 터미널을 여세요. -3. `opencode`를 실행하세요. 확장 프로그램이 자동으로 설치됩니다. - -반면 TUI에서 `/editor` 또는 `/export`를 실행할 때 자체 IDE를 사용하려면 `export EDITOR="code --wait"`를 설정해야 합니다. [자세히 알아보기](/docs/tui/#editor-setup). - ---- - -### 수동 설치 - -Extension Marketplace에서 **OpenCode**를 검색한 다음 **Install**을 클릭하세요. - ---- - -### 문제 해결 - -확장이 자동으로 설치되지 않는 경우: - -- 통합 터미널에서 `opencode`를 실행하고 있는지 확인하세요. -- IDE용 CLI가 설치되어 있는지 확인하세요. - - VS Code: `code` command - - Cursor: `cursor` command - - Windsurf: `windsurf` command - - VSCodium: `codium` command - - 설치되어 있지 않다면 `Cmd+Shift+P` (Mac) 또는 `Ctrl+Shift+P` (Windows/Linux)를 실행하고 "Shell Command: Install 'code' command in PATH"(또는 IDE에 맞는 동등한 명령)를 검색하세요. -- VS Code에 확장 프로그램 설치 권한이 있는지 확인하세요. diff --git a/packages/web/src/content/docs/ko/index.mdx b/packages/web/src/content/docs/ko/index.mdx deleted file mode 100644 index 0dfa0bbc83..0000000000 --- a/packages/web/src/content/docs/ko/index.mdx +++ /dev/null @@ -1,344 +0,0 @@ ---- -title: 소개 -description: OpenCode를 시작해 보세요. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" -import config from "../../../../config.mjs" -export const console = config.console - -[**OpenCode**](/)는 오픈 소스 AI coding agent입니다. 터미널 기반 인터페이스, 데스크톱 앱, IDE 확장으로 사용할 수 있습니다. - -![opencode TUI with the opencode theme](../../../assets/lander/screenshot.png) - -바로 시작해 보겠습니다. - ---- - -#### 사전 준비 - -터미널에서 OpenCode를 사용하려면 다음이 필요합니다. - -1. 다음과 같은 최신 터미널 에뮬레이터 - - [WezTerm](https://wezterm.org), 크로스 플랫폼 - - [Alacritty](https://alacritty.org), 크로스 플랫폼 - - [Ghostty](https://ghostty.org), Linux 및 macOS - - [Kitty](https://sw.kovidgoyal.net/kitty/), Linux 및 macOS - -2. 사용할 LLM 제공자의 API 키 - ---- - -## 설치 - -OpenCode를 설치하는 가장 쉬운 방법은 설치 스크립트를 사용하는 것입니다. - -```bash -curl -fsSL https://opencode.ai/install | bash -``` - -다음 명령으로도 설치할 수 있습니다. - -- **Node.js 사용** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **macOS/Linux에서 Homebrew 사용** - - ```bash - brew install anomalyco/tap/opencode - ``` - - > 최신 릴리스를 사용하려면 OpenCode tap 사용을 권장합니다. 공식 `brew install opencode` formula는 Homebrew 팀이 관리하며 업데이트 주기가 더 깁니다. - -- **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 - ``` - -현재 Windows에서 Bun을 사용한 OpenCode 설치 지원은 준비 중입니다. - -[Releases](https://github.com/anomalyco/opencode/releases)에서 바이너리를 직접 받아 설치할 수도 있습니다. - ---- - -## 구성 - -OpenCode는 API 키를 설정하면 원하는 LLM 제공자를 사용할 수 있습니다. - -LLM 제공자를 처음 사용한다면 [OpenCode Zen](/docs/zen) 사용을 권장합니다. -OpenCode 팀이 테스트하고 검증한 모델 목록입니다. - -1. TUI에서 `/connect` 명령을 실행하고 `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 -프로젝트의 `AGENTS.md` 파일은 Git에 커밋하는 것을 권장합니다. -::: - -이렇게 하면 OpenCode가 프로젝트 구조와 사용 중인 코딩 패턴을 더 잘 이해할 수 있습니다. - ---- - -## 사용법 - -이제 OpenCode로 프로젝트 작업을 시작할 준비가 되었습니다. 무엇이든 물어보세요. - -AI coding agent를 처음 사용한다면 도움이 될 수 있는 예시를 소개합니다. - ---- - -### 질문하기 - -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 mode*가 있습니다. - - **Tab** 키를 눌러 전환하세요. 화면 오른쪽 아래에서 모드 표시를 확인할 수 있습니다. - - ```bash frame="none" title="Switch to Plan mode" - - ``` - - 이제 수행하길 원하는 작업을 설명해 보겠습니다. - - ```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 - 이미지를 터미널에 드래그 앤 드롭해 prompt에 추가하세요. - ::: - - OpenCode는 제공한 이미지를 스캔해 prompt에 추가할 수 있습니다. 이미지를 터미널에 드래그 앤 드롭하면 됩니다. - -3. **기능 구현** - - 계획이 충분히 마음에 들면 **Tab** 키를 다시 눌러 *Build mode*로 전환하세요. - - ```bash frame="none" - - ``` - - 그리고 변경을 적용해 달라고 요청하세요. - - ```bash frame="none" - Sounds good! Go ahead and make the changes. - ``` - ---- - -### 바로 변경하기 - -비교적 간단한 변경은 계획을 먼저 검토하지 않고 바로 구현하도록 요청할 수 있습니다. - -```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? -``` - -여기에서 prompt를 수정해 다시 요청할 수 있습니다. - -:::tip -`/undo`는 여러 번 연속으로 실행할 수 있습니다. -::: - -또는 `/redo` 명령으로 변경을 **다시 적용**할 수 있습니다. - -```bash frame="none" -/redo -``` - ---- - -## 공유 - -OpenCode와의 대화는 [팀과 공유](/docs/share)할 수 있습니다. - -```bash frame="none" -/share -``` - -이 명령을 실행하면 현재 대화 링크를 생성하고 클립보드에 복사합니다. - -:::note -대화는 기본값으로 공유되지 않습니다. -::: - -다음은 OpenCode [대화 예시](https://opencode.ai/s/4XP1fce5)입니다. - ---- - -## 사용자 지정 - -이제 OpenCode 사용법을 익혔습니다. - -원하는 방식에 맞추려면 [테마 선택](/docs/themes), [키바인드 사용자 지정](/docs/keybinds), [코드 formatter 설정](/docs/formatters), [custom command 만들기](/docs/commands), [OpenCode config 설정](/docs/config)을 권장합니다. diff --git a/packages/web/src/content/docs/ko/keybinds.mdx b/packages/web/src/content/docs/ko/keybinds.mdx deleted file mode 100644 index b6a605f2eb..0000000000 --- a/packages/web/src/content/docs/ko/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: 키바인드 -description: 키바인드를 커스터마이즈하세요. ---- - -OpenCode에는 `tui.json`을 통해 커스터마이즈할 수 있는 키바인드 목록이 있습니다. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "h", - "display_thinking": "none" - } -} -``` - ---- - -## 리더 키 - -OpenCode는 대부분의 keybinds에 `leader` 키를 사용합니다. 이렇게 하면 terminal에서 충돌을 피할 수 있습니다. - -기본값으로 `ctrl+x`가 리더 키이며, 대부분의 작업은 먼저 리더 키를 누른 뒤 단축키를 누릅니다. 예를 들어 새 세션을 시작하려면 먼저 `ctrl+x`를 누르고 `n`을 누릅니다. - -keybinds에 리더 키를 꼭 사용할 필요는 없지만, 사용하는 것을 권장합니다. - ---- - -## 키바인드 비활성화 - -`tui.json`에 해당 키를 값 `"none"`으로 추가하면 키바인드를 비활성화할 수 있습니다. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "session_compact": "none" - } -} -``` - ---- - -## 데스크탑 프롬프트 단축키 - -OpenCode 데스크톱 앱의 프롬프트 입력은 텍스트 편집을 위한 일반적인 Readline/Emacs-style 단축키를 지원합니다. 이 단축키는 내장되어 있으며 현재 `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와 modifier 키 조합을 전송하지 않습니다. `Shift+Enter`를 이스케이프 시퀀스로 전송하도록 terminal을 설정해야 할 수도 있습니다. - -### 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을 다시 시작하거나 새 탭을 여세요. diff --git a/packages/web/src/content/docs/ko/lsp.mdx b/packages/web/src/content/docs/ko/lsp.mdx deleted file mode 100644 index 0bbd6c8e17..0000000000 --- a/packages/web/src/content/docs/ko/lsp.mdx +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: LSP 서버 -description: OpenCode는 LSP 서버와 통합됩니다. ---- - -OpenCode는 Language Server Protocol(LSP) 서버와 통합해 진단 정보를 agent의 피드백으로 사용할 수 있습니다. - ---- - -## 기본 제공 (Built-in) - -OpenCode는 널리 사용되는 언어를 위해 여러 built-in 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` dependency 존재 | -| 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+)` 설치됨 | -| julials | .jl | `julia` 및 `LanguageServer.jl` 설치됨 | -| 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` dependency 존재 | -| php intelephense | .php | PHP 프로젝트에서 자동 설치 | -| prisma | .prisma | `prisma` 명령 사용 가능 | -| pyright | .py, .pyi | `pyright` dependency 설치됨 | -| 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 releases에서 자동 설치 | -| tinymist | .typ, .typc | GitHub releases에서 자동 설치 | -| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | 프로젝트에 `typescript` dependency 존재 | -| vue | .vue | Vue 프로젝트에서 자동 설치 | -| yaml-ls | .yaml, .yml | Red Hat `yaml-language-server` 자동 설치 | -| zls | .zig, .zon | `zig` 명령 사용 가능 | - -LSP는 기본적으로 비활성화되어 있습니다. 활성화하면 위 확장자 중 하나가 감지되고 요구 사항이 충족될 때 서버가 시작됩니다. - -:::note -`OPENCODE_DISABLE_LSP_DOWNLOAD` 환경 변수를 `true`로 설정하면 LSP 서버 자동 다운로드를 비활성화할 수 있습니다. -::: - ---- - -## 작동 방식 - -LSP가 활성화되어 있고 OpenCode가 파일을 열면 다음과 같이 동작합니다. - -1. 활성화된 모든 LSP 서버에 대해 파일 확장자를 확인합니다. -2. 적절한 LSP 서버가 아직 실행 중이지 않다면 시작합니다. - ---- - -## 모범 사례 - -LSP는 언어 서버의 진단을 제공해 agent가 문제를 찾고 수정하는 데 도움을 줄 수 있습니다. 일부 프로젝트에서는 유용하지만 항상 순이익이 되는 것은 아닙니다. - -언어 서버는 동기화가 어긋나거나 많은 메모리를 사용하거나 버전 또는 프로젝트에 따라 다르게 동작하고 agent 워크플로를 느리게 만들 수 있습니다. 많은 프로젝트에서는 agent가 lint, typecheck 또는 다른 진단용 CLI 도구를 직접 실행하게 하는 편이 더 좋습니다. 이렇게 하면 이러한 트레이드오프 없이 오류가 agent 루프로 다시 전달됩니다. agent가 무엇을 실행해야 하는지 알 수 있도록 해당 명령을 `AGENTS.md` 또는 skills 같은 instruction files에 문서화하세요. 프로젝트가 추가 언어 서버 피드백의 이점을 얻을 때 LSP를 활성화하세요. - ---- - -## 구성 - -OpenCode config의 `lsp` 섹션에서 LSP 서버를 활성화하고 사용자 정의할 수 있습니다. - -모든 내장 LSP 서버를 활성화하려면 `lsp`를 `true`로 설정하세요. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -객체를 사용하면 내장 서버를 활성화한 상태로 유지하면서 오버라이드나 사용자 정의 서버를 구성할 수 있습니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": {} -} -``` - -각 LSP 서버는 다음 속성을 지원합니다. - -| 속성 | 타입 | 설명 | -| ---------------- | -------- | --------------------------------------------- | -| `disabled` | boolean | LSP 서버를 비활성화하려면 `true`로 설정하세요 | -| `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 서버가 비활성화됩니다. 다른 config에서 활성화한 모든 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` - -파일에는 추가 내용 없이 라이선스 키만 포함하는 것이 좋습니다. diff --git a/packages/web/src/content/docs/ko/mcp-servers.mdx b/packages/web/src/content/docs/ko/mcp-servers.mdx deleted file mode 100644 index 2d5a8e025e..0000000000 --- a/packages/web/src/content/docs/ko/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -title: MCP 서버 -description: 로컬 및 원격 MCP 도구를 추가하세요. ---- - -Model Context Protocol , 또는 MCP를 사용하여 opencode에 외부 도구를 추가할 수 있습니다. opencode는 로컬 및 원격 서버를 모두 지원합니다. - -추가되면 MCP 도구는 내장 도구와 함께 LLM에 자동으로 사용할 수 있습니다. - ---- - -#### 주의사항 - -MCP 서버를 사용할 때 컨텍스트에 추가됩니다. 도구가 많으면 컨텍스트가 빠르게 채워질 수 있습니다. 그래서 우리는 당신이 사용하는 MCP 서버와 주의를 기울여야 합니다. - -:::tip -MCP 서버는 귀하의 컨텍스트에 추가하므로, 활성화할 수 있는 것을 주의해야 합니다. -::: - -GitHub MCP 서버와 같은 특정 MCP 서버는 많은 토큰을 추가하고 컨텍스트 제한을 쉽게 초과 할 수 있습니다. - ---- - -## 구성 - -`mcp`에서 MCP 서버를 정의할 수 있습니다. 각 MCP를 고유 이름으로 추가합니다. LLM을 프롬프트할 때 MCP를 참조할 수 있습니다. - -```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`로 설정하여 서버를 비활성화 할 수 있습니다. config에서 제거하지 않고 서버를 일시적으로 비활성화하려는 경우 유용합니다. - ---- - -### 원격 기본값 재정의 - -조직은 `.well-known/opencode` 엔드포인트를 통해 기본 MCP 서버를 제공 할 수 있습니다. 이 서버는 기본적으로 비활성화 될 수 있으며 사용자가 필요한 것들에 대해 선택 할 수 있습니다. - -조직의 원격 설정에서 특정 서버를 활성화하려면 `enabled: true`로 로컬 구성에 추가하십시오. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - -로컬 설정 값은 원격 기본값을 무시합니다. 자세한 내용은 [config precedence](/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", - }, - }, - }, -} -``` - -명령은 로컬 MCP 서버가 시작되는 방법입니다. 또한 환경 변수 목록에서 전달할 수 있습니다. - -예를 들어, 테스트 [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP 서버를 추가할 수 있는 방법입니다. - -```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` | 문자열 | Y | MCP 서버 연결 유형은 `"local"`. | -| `command` | Array | Y | MCP 서버를 실행하는 명령과 인수. | -| `environment` | 개체 | | 서버 실행시 설정하는 환경 변수 | -| `enabled` | boolean | | 시동에서 MCP 서버 사용 가능 | -| `timeout` | number | | MCP 서버에서 태핑툴을 위한 타임아웃 기본 5000 (5 초). | - ---- - -## 원격 - -`type`를 `"remote"`로 설정하여 원격 MCP 서버를 추가하십시오. - -```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`는 원격 MCP 서버의 URL이며 `headers` 옵션으로 헤더 목록에서 전달할 수 있습니다. - ---- - -#### 옵션 - -| 옵션 | 타입 | 필수 | 설명 | -| --------- | ------- | ---- | ----------------------------------------------------------- | -| `type` | 문자열 | Y | MCP 서버 연결 유형은 `"remote"`. | -| `url` | 문자열 | Y | 원격 MCP 서버의 URL. | -| `enabled` | boolean | | 시동에서 MCP 서버 사용 가능 | -| `headers` | 개체 | | 헤드러는 요청으로 보내드립니다. | -| `oauth` | 개체 | | OAuth 인증 구성 [OAuth](#oauth) 아래의 섹션을 참조하십시오. | -| `timeout` | number | | MCP 서버에서 태핑툴을 위한 타임아웃 기본 5000 (5 초). | - ---- - -## OAuth - -opencode는 원격 MCP 서버에 대한 OAuth 인증을 자동으로 처리합니다. 서버가 인증이 필요할 때, opencode는: - -1. 401 응답을 검출하고 OAuth 흐름을 시작 -2. **Dynamic Client 등록 (RFC 7591) ** 서버에서 지원되는 경우 -3. 미래의 요청에 대해 안전하게 보관 토큰 - ---- - -## 자동 설정 - -대부분의 OAuth-enabled MCP 서버를 위해, 특별한 구성은 필요하지 않습니다. 원격 서버를 구성: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "my-oauth-server": { - "type": "remote", - "url": "https://mcp.example.com/mcp" - } - } -} -``` - -서버가 인증이 필요한 경우, opencode는 먼저 사용하려고 할 때 인증됩니다. 그렇지 않다면, `opencode mcp auth `를 사용하여 [수동으로 트리거](#authenticating)할 수 있습니다. - ---- - -### 사전등록 - -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 서버를 나열하고 auth 상태: - -```bash -opencode mcp list -``` - -저장된 자격 제거: - -```bash -opencode mcp logout my-oauth-server -``` - -`mcp auth` 명령은 사용자의 브라우저를 엽니다. `~/.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` | 개체 \| false | OAuth config object, 또는 `false`를 비활성화하는 OAuth 자동검출. · | -| `clientId` | 문자열 | OAuth 클라이언트 ID. 제공되지 않은 경우, 동적 클라이언트 등록 시도됩니다. · | -| `clientSecret` | String | OAuth 클라이언트 비밀, 허가서 서버가 필요한 경우. | -| `scope` | String | OAuth 범위는 인증 중입니다. | - -###### 디버깅 - -원격 MCP 서버가 인증에 실패하면 다음과 같은 문제를 진단 할 수 있습니다. - -```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 -``` - -`mcp debug` 명령은 현재 auth 상태를 보여 주며 HTTP 연결을 테스트하고 OAuth 발견 흐름을 시도합니다. - ---- - -## 관리 - -MCP는 opencode의 도구로 사용할 수 있으며 내장 도구와 함께 사용할 수 있습니다. 다른 도구와 같이 opencode config를 통해 관리할 수 있습니다. - ---- - -## 전역 - -이는 전역적으로 활성화하거나 비활성화할 수 있음을 의미합니다. - -```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 - } -} -``` - -여기에 우리는 모든 MCP를 비활성화하는 glob 패턴 `my-mcp*`를 사용합니다. - ---- - -## 에이전트별 - -많은 MCP 서버가 있다면 전역적으로는 비활성화하고 에이전트별로만 활성화할 수 있습니다. 이 작업을 수행: - -1. 글로벌 도구로 사용 가능. -2. [agent config](/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 패턴은 간단한 regex globbing 패턴을 사용합니다 : - -- `*`는 어떤 특성 (예를들면, `"my-mcp*"` 경기 `my-mcp_search`, `my-mcp_list`, 등)의 0개 이상 일치합니다. -- `?`는 정확히 하나의 문자 일치 -- 다른 모든 문자 일치 말 그대로 - -:::note -MCP 서버 도구는 서버 이름으로 prefix로 등록되므로 서버의 모든 도구를 간단하게 사용할 수 있습니다. - -``` -"mymcpservername_*": false -``` - -::: - ---- - -## 예제 - -다음은 일반적인 MCP 서버의 예입니다. 다른 서버에 문서를 작성하려면 PR을 제출할 수 있습니다. - ---- - -#### Sentry - -[Sentry MCP 서버](https://mcp.sentry.dev)를 추가하여 Sentry 프로젝트와 문제와 상호 작용합니다. - -```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 계정에 연결하십시오. - -일단 인증되면, 당신은 쿼리 문제, 프로젝트, 오류 데이터에 대한 프린트 도구를 사용할 수 있습니다. - -```txt "use sentry" -Show me the latest unresolved issues in my project. use sentry -``` - ---- - -### Context7 - -[Context7 MCP 서버](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` 환경 변수 세트가 있다는 것을 assuming입니다. - -Context7 MCP 서버를 사용하여 `use 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 - -[Grep by Vercel](https://grep.app) MCP 서버를 추가하여 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. -``` diff --git a/packages/web/src/content/docs/ko/models.mdx b/packages/web/src/content/docs/ko/models.mdx deleted file mode 100644 index 2eeaa1ef59..0000000000 --- a/packages/web/src/content/docs/ko/models.mdx +++ /dev/null @@ -1,223 +0,0 @@ ---- -title: 모델 -description: LLM 공급자 및 모델 구성. ---- - -opencode는 [AI SDK](https://ai-sdk.dev/) 및 [Models.dev](https://models.dev)를 사용하여 **75+ LLM 제공 업체**를 지원하며 로컬 모델을 실행합니다. - ---- - -## 공급자 - -가장 인기 있는 공급자는 기본적으로 미리 로드되어 있습니다. `/connect` 명령을 통해 공급자를위한 자격 증명을 추가하면 opencode를 시작할 때 사용할 수 있습니다. - -자세히 알아보기 [providers](/docs/providers). - ---- - -## 모델 선택 - -공급자를 구성하면 입력하여 원하는 모델을 선택할 수 있습니다. - -```bash frame="none" -/models -``` - ---- - -## 추천 모델 - -수많은 모델이 있으며, 매주 새로운 모델이 출시됩니다. - -:::tip -우리가 추천하는 모델 중 하나를 사용하여 고려하십시오. -::: - -하지만 코드 작성과 도구 호출 모두에서 뛰어난 성능을 보이는 모델들이 있습니다. - -특별한 순서는 없습니다. (이 목록은 전체 목록이 아니며 최신 상태가 아닐 수 있습니다): - -- GPT 5.2 -- GPT 5.1 Codex -- Claude Opus 4.5 -- Claude Sonnet 4.5 -- M2.1 -- Gemini 3 Pro - ---- - -## 기본값 설정 - -기본 모델로 설정하려면 `model` 키를 설정할 수 있습니다. -opencode 설정. - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "model": "lmstudio/google/gemma-3n-e4b" -} -``` - -전체 ID는 `provider_id/model_id`입니다. 예를 들어, [OpenCode Zen](/docs/zen)을 사용한다면, GPT 5.1 Codex에 `opencode/gpt-5.1-codex`를 사용할 수 있습니다. - -[custom Provider](/docs/providers#custom)를 구성하면 `provider_id`는 구성의 `provider` 부분에서 키이며 `model_id`는 `provider.models`에서 키입니다. - ---- - -## 모델 구성 - -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, - }, - }, - }, - }, - }, - }, -} -``` - -여기서는 두 개의 내장 모델에 대한 전역 설정을 구성합니다: `gpt-5`를 통해 액세스 할 때 `openai` 공급자 및 `claude-sonnet-4-20250514`는 `anthropic` 공급자를 통해 액세스 할 때. -내장 공급자 및 모델 이름은 [Models.dev](https://models.dev)에서 찾을 수 있습니다. - -사용중인 에이전트에 이러한 옵션을 구성할 수 있습니다. 에이전트 구성은 여기에 모든 글로벌 옵션을 overrides. [더 알아보기](/docs/agents/#additional). - -내장 된 것을 확장하는 사용자 정의 변형을 정의 할 수 있습니다. Variants는 중복 항목 생성 없이 동일한 모델을 위한 다른 설정을 구성할 수 있습니다: - -```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", - }, - }, - }, - }, - }, - }, -} -``` - ---- - -## 변형 - -많은 모델이 다양한 구성의 변형(variant)을 지원합니다. opencode는 인기있는 공급자를위한 기본 변형으로 배송됩니다. - -## 내장 변형 - -opencode는 많은 공급자를 위한 기본 변종으로 발송합니다: - -**Anthropic**: - -- `high` - 높은 생각(Thinking) 예산 (기본) -- `max` - 최대 생각 예산 - -** OpenAI **: - -모델에 따라 다릅니다. - -- `none` - 추론(Reasoning) 없음 -- `minimal` - 최소 추론 노력 -- `low` - 낮은 이유 노력 -- `medium` - 중간 이유 노력 -- `high` - 높은 이유 노력 -- `xhigh` - 추가 높은 이유 노력 - -** 구글 **: - -- `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, - }, - }, - }, - }, - }, - }, -} -``` - -## 변형 순환 - -keybind `variant_cycle`를 사용하여 변형 사이 신속하게 전환합니다. [더 알아보기](/docs/keybinds). - ---- - -## 모델 로딩 순서 - -opencode가 시작될 때, 다음의 우선순위 순서에 있는 모형을 검사합니다: - -1. `--model` 또는 `-m` 명령 선 깃발. 형식은 구성 파일과 동일합니다. `provider_id/model_id`. - -2. opencode config의 모델 목록. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-20250514" - } - ``` - -여기에 형식은 `provider/model`입니다. - -3. 마지막 사용된 모형. - -4. 내부 우선 순위를 사용하는 첫 번째 모델. diff --git a/packages/web/src/content/docs/ko/network.mdx b/packages/web/src/content/docs/ko/network.mdx deleted file mode 100644 index ee3cbfa255..0000000000 --- a/packages/web/src/content/docs/ko/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: 네트워크 -description: 프록시 및 사용자 정의 인증서 구성. ---- - -opencode는 엔터프라이즈 네트워크 환경을 위한 표준 프록시 환경 변수 및 사용자 지정 인증서를 지원합니다. - ---- - -## 프록시 - -opencode는 표준 프록시 환경 변수를 존중합니다. - -```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는 로컬 HTTP 서버와 통신합니다. routing 루프를 방지하기 위해이 연결에 대한 프록시를 우회해야합니다. -::: - -[CLI 플래그](/docs/cli#run)을 사용하여 서버 포트와 호스트명을 구성할 수 있습니다. - ---- - -### 인증 - -프록시가 기본 인증을 필요로 하는 경우 URL에서 자격 증명이 포함되어 있습니다. - -```bash -export HTTPS_PROXY=http://username:password@proxy.example.com:8080 -``` - -:::caution -암호를 해독하지 마십시오. 환경 변수를 사용하거나 자격 증명 스토리지를 확보하십시오. -::: - -NTLM 또는 Kerberos와 같은 고급 인증을 요구하는 프록시는 인증 방법을 지원하는 LLM Gateway를 사용하여 고려합니다. - ---- - -## 사용자 정의 인증서 - -엔터프라이즈가 HTTPS 연결을 위해 사용자 정의 CA를 사용한다면, opencode를 사용하여 신뢰합니다. - -```bash -export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem -``` - -프록시 연결과 직접 API 액세스를 위한 이 작업. diff --git a/packages/web/src/content/docs/ko/permissions.mdx b/packages/web/src/content/docs/ko/permissions.mdx deleted file mode 100644 index c956b8f112..0000000000 --- a/packages/web/src/content/docs/ko/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -title: 권한 -description: 실행 승인이 필요한 작업을 제어합니다. ---- - -opencode는 주어진 동작이 자동으로 실행되는지 결정하기 위해 `permission` config를 사용하거나 차단합니다. - -`v1.1.1`의 것과 같이, 유산 `tools` 불린 구성은 deprecated이고 `permission`로 합병되었습니다. 오래된 `tools` config는 여전히 뒤쪽 호환성을 위해 지원됩니다. - ---- - -## 동작 - -각 권한 규칙은 다음과 같습니다: - -- `"allow"` - 승인없이 실행 -- `"ask"` - 승인을위한 prompt -- `"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" - } - } -} -``` - -규칙은 패턴 일치에 의해 평가됩니다, ** 마지막 일치 규칙 우승 **. 일반적인 패턴은 catch-all `"*"` 규칙을 먼저 넣는 것입니다, 그리고 그 후에 더 구체적인 규칙. - -## 와일드카드 - -Permission 본 사용 간단한 wildcard 일치: - -- `*`는 어떤 성격든지의 0개 이상 일치합니다 -- `?`는 정확히 하나의 문자 일치 -- 다른 모든 문자 일치 말 그대로 - -## 홈 디렉토리 확장 - -`~` 또는 `$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` defaults to `allow`](#defaults)는 `external_directory`에서 `external_directory`의 항목에 대해 읽을 수 있습니다. 도구가 이러한 경로에 제한 될 때 명시적 규칙을 추가하십시오. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - }, - "edit": { - "~/projects/personal/**": "deny" - } - } -} -``` - -신뢰할 수있는 경로에 초점을 맞춘 목록을 유지하고 다른 도구 (예 : `bash`)에 필요한대로 추가 허용하거나 deny 규칙을 층을 설정합니다. - ---- - -## 사용 가능한 권한 - -opencode 권한은 도구 이름에 의해 키 입력되며, 두 개의 안전 가드 : - -- `read` - 파일 읽기 (파일 경로의 매칭) -- `edit` - 모든 파일 수정 (covers `edit`, `write`, `patch`) -- `glob` - 파일 globbing (glob 패턴 매칭) -- `grep` - 콘텐츠 검색 ( regex 패턴 매칭) -- `bash` - shell 명령 실행 (`git status --porcelain`와 같은 팟 명령) -- `task` - 에이전트 실행 (작업 에이전트 유형) -- `skill` - 기술을 로딩 (기술 이름을 매칭) -- `lsp` - LSP 쿼리 실행 (현재 비 과립) -- `webfetch` - URL을 fetching ( URL을 매칭) -- `websearch` - 웹 검색 (문자 쿼리) -- `external_directory` - 프로젝트 작업 디렉토리 외부의 도구 접촉 경로 때 트리거 -- `doom_loop` - 동일한 도구 호출이 동일한 입력으로 3 번 반복 할 때 트리거 - ---- - -## 기본값 - -아무것도 지정하지 않는 경우, opencode는 permissive 기본값에서 시작합니다. - -- `"allow"`에 기본 권한. -- `doom_loop` 및 `external_directory` 기본적으로 `"ask"`. -- `read`는 `"allow"`이고, 그러나 `.env` 파일은 기본적으로 denied: - -```json title="opencode.json" -{ - "permission": { - "read": { - "*": "allow", - "*.env": "deny", - "*.env.*": "deny", - "*.env.example": "allow" - } - } -} -``` - ---- - -## "Ask"란 무엇입니까? - -opencode가 승인되면 UI는 세 가지 결과를 제공합니다. - -- `once` - 이 요청을 승인 -- `always` - 제안 된 패턴과 일치하는 미래 요청 (현재 opencode 세션의 나머지) -- `reject` - 요청을 거부 - -`always`는 도구 (예를 들면, bash 승인 일반적으로 `git status*`와 같은 안전한 명령 접두사)에 의해 approve가 제공 될 패턴의 집합. - ---- - -## 에이전트 - -에이전트 당 권한이 부여 될 수 있습니다. 에이전트 권한은 글로벌 구성과 합병되며, 에이전트 규칙은 우선합니다. [Learn more](/docs/agents#permissions) 약 에이전트 권한. - -:::note -[Granular Rules (Object Syntax)](#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 *"`와 같은)이 필요합니다. -::: diff --git a/packages/web/src/content/docs/ko/plugins.mdx b/packages/web/src/content/docs/ko/plugins.mdx deleted file mode 100644 index f20eb90c46..0000000000 --- a/packages/web/src/content/docs/ko/plugins.mdx +++ /dev/null @@ -1,388 +0,0 @@ ---- -title: 플러그인 -description: OpenCode를 확장하기 위해 자신만의 플러그인을 작성하세요. ---- - -플러그인은 다양한 이벤트와 사용자 정의 행동으로 후킹하여 opencode를 확장 할 수 있습니다. 플러그인을 사용하여 새로운 기능을 추가하거나, 외부 서비스와 통합하거나, opencode의 기본 동작을 수정할 수 있습니다. - -예를 들어, 커뮤니티에 의해 생성 된 [plugins](/docs/ecosystem#plugins)를 확인하십시오. - ---- - -## 플러그인 사용 - -플러그인을 로드하는 두 가지 방법이 있습니다. - ---- - -### 로컬 파일에서 - -플러그인 디렉토리에 JavaScript 또는 TypeScript 파일을 배치합니다. - -- `.opencode/plugins/` - 프로젝트 레벨 플러그인 -- `~/.config/opencode/plugins/` - 글로벌 플러그인 - -이 디렉토리의 파일은 시작 시 자동으로 로드됩니다. - ---- - -### npm에서 - -config 파일에 npm 패키지를 지정합니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"] -} -``` - -일반 패키지 및 스코프 npm 패키지 모두 지원됩니다. - -[ecosystem](/docs/ecosystem#plugins)에서 사용할 수 있는 플러그인을 찾아보세요. - ---- - -### 플러그인이 설치되는 방법 - -**npm 플러그인**은 시작시 Bun을 사용하여 자동으로 설치됩니다. 패키지와 그 의존성은 `~/.cache/opencode/node_modules/`에 캐시됩니다. - -**로컬 플러그인**은 플러그인 디렉토리에서 직접 로드됩니다. 외부 패키지를 사용하려면 구성 디렉토리 내에 `package.json`을 작성해야 하거나([의존성](#의존성) 참조), 플러그인을 npm에 게시하고 [config에 추가](/docs/config#plugins)해야 합니다. - ---- - -### 로드 순서 - -플러그인은 모든 소스에서 로드되며 모든 후크는 순서대로 실행됩니다. 로드 순서는 다음과 같습니다: - -1. 글로벌 구성 (`~/.config/opencode/opencode.json`) -2. 프로젝트 구성 (`opencode.json`) -3. 글로벌 플러그인 디렉토리 (`~/.config/opencode/plugins/`) -4. 프로젝트 플러그인 디렉토리 (`.opencode/plugins/`) - -중복된 이름과 버전의 npm 패키지는 한 번만 로드됩니다. 하지만 로컬 플러그인과 npm 플러그인의 이름이 비슷하더라도 둘 다 별도로 로드됩니다. - ---- - -## 플러그인 만들기 - -플러그인은 하나 이상의 플러그인 함수를 내보내는 **JavaScript/TypeScript 모듈**입니다. 각 함수는 context 객체를 수신하고 hooks 객체를 반환합니다. - ---- - -### 의존성 - -로컬 플러그인 및 사용자 정의 도구는 외부 npm 패키지를 사용할 수 있습니다. config 디렉토리에 `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`: AI와 상호 작용을 위한 opencode SDK 클라이언트. -- `$`: 명령어를 실행하기 위한 Bun의 [shell API](https://bun.com/docs/runtime/shell). - ---- - -### 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.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"'` - } - }, - } -} -``` - -macOS에서 AppleScript를 실행하기 위해 `osascript`를 사용하고 있습니다. 여기서는 알림을 보내는 데 사용합니다. - -:::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") - } - }, - } -} -``` - ---- - -### Inject 환경 변수 - -모든 shell 실행(AI 도구 및 사용자 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` helper는 opencode가 호출할 수 있는 사용자 정의 도구를 만듭니다. Zod 스키마 함수를 받고 다음을 포함하는 도구 정의를 반환합니다: - -- `description`: 도구가 하는 일 -- `args`: 도구의 인수에 대한 Zod 스키마 -- `execute`: 도구가 호출될 때 실행되는 함수 - -사용자 정의 도구는 내장 도구와 함께 opencode에서 사용할 수 있습니다. - -:::note -플러그인 도구가 내장 도구와 같은 이름을 사용하면 플러그인 도구가 우선순위를 갖습니다. -::: - ---- - -### 로깅 - -구조화된 로깅을 위해 `console.log` 대신 `client.app.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)를 참고하세요. - ---- - -### Compaction 훅 - -세션이 압축될 때 포함되는 컨텍스트를 사용자 지정할 수 있습니다: - -```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` 배열은 무시됩니다. diff --git a/packages/web/src/content/docs/ko/providers.mdx b/packages/web/src/content/docs/ko/providers.mdx deleted file mode 100644 index 87278bef23..0000000000 --- a/packages/web/src/content/docs/ko/providers.mdx +++ /dev/null @@ -1,1984 +0,0 @@ ---- -title: 공급자 -description: OpenCode에서 LLM 공급자를 사용합니다. ---- - -import config from "../../../../config.mjs" -export const console = config.console - -OpenCode는 [AI SDK](https://ai-sdk.dev/) 및 [Models.dev](https://models.dev)를 사용하여 **75개 이상의 LLM 공급자**를 지원하며 로컬 모델도 실행할 수 있습니다. - -필요한 공급자를 추가하려면: - -1. `/connect` 명령을 사용하여 공급자의 API 키를 추가하십시오. -2. OpenCode 구성에서 공급자를 구성하십시오. - ---- - -### 자격 증명 - -`/connect` 명령으로 공급자의 API 키를 추가하면 다음 위치에 저장됩니다: -`~/.local/share/opencode/auth.json` - ---- - -### 구성 - -OpenCode 설정의 `provider` 섹션을 통해 공급자를 사용자 정의할 수 있습니다. - ---- - -#### 기본 URL - -`baseURL` 옵션을 설정하여 모든 공급자를 위한 기본 URL을 사용자 정의할 수 있습니다. 프록시 서비스 또는 사용자 정의 엔드포인트를 사용할 때 유용합니다. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen은 OpenCode 팀이 OpenCode와 잘 작동하도록 테스트하고 검증한 모델 목록입니다. [더 알아보기](/docs/zen). - -:::tip -처음이라면 OpenCode Zen으로 시작하는 것이 좋습니다. -::: - -1. TUI에서 `/connect` 명령을 실행하고 `OpenCode Zen`을 선택한 뒤, [opencode.ai/auth](https://opencode.ai/zen)로 이동합니다. - - ```txt - /connect - ``` - -2. 로그인하고 결제 정보를 입력한 후 API 키를 복사하십시오. - -3. API 키를 붙여넣습니다. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. TUI에서 `/models`를 실행하여 추천 모델 목록을 볼 수 있습니다. - - ```txt - /models - ``` - -OpenCode의 다른 공급자처럼 작동하며 사용은 완전히 선택 사항입니다. - ---- - -## OpenCode Go - -OpenCode Go는 OpenCode 팀이 테스트하고 검증하여 OpenCode와 잘 작동하는 인기 있는 오픈 코딩 모델에 안정적으로 액세스할 수 있는 저렴한 구독 요금제입니다. - -1. TUI에서 `/connect` 명령을 실행하고 `OpenCode Go`를 선택한 뒤 [opencode.ai/auth](https://opencode.ai/zen)로 이동하십시오. - - ```txt - /connect - ``` - -2. 로그인하고 결제 정보를 입력한 후 API 키를 복사하십시오. - -3. API 키를 붙여넣습니다. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. TUI에서 `/models`를 실행하여 추천 모델 목록을 볼 수 있습니다. - - ```txt - /models - ``` - -OpenCode의 다른 공급자처럼 작동하며 사용은 완전히 선택 사항입니다. - ---- - -## 디렉토리 - -공급자 세부 정보를 확인하세요. 목록에 공급자를 추가하려면 PR을 열어주세요. - -:::note -원하는 공급자가 없나요? PR을 제출해 주세요. -::: - ---- - -### 302.AI - -1. [302.AI 콘솔](https://302.ai/)로 이동하여 계정을 만들고 API 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **302.AI**를 검색하십시오. - - ```txt - /connect - ``` - -3. 302.AI API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 모델을 선택하려면 `/models` 명령을 실행하십시오. - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -OpenCode로 Amazon Bedrock을 사용하려면: - -1. Amazon Bedrock 콘솔의 **Model catalog**로 이동하여 원하는 모델에 대한 액세스를 요청합니다. - - :::tip - Amazon Bedrock에서 원하는 모델에 대한 액세스 권한이 있어야 합니다. - ::: - -2. 다음 방법 중 하나를 사용하여 **인증을 구성**합니다: - - *** - - #### 환경 변수 (빠른 시작) - - OpenCode를 실행하는 동안 다음 환경 변수 중 하나를 설정합니다: - - ```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - 또는 bash 프로필에 추가합니다: - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - *** - - #### 구성 파일 (권장) - - 프로젝트별 또는 영구 구성을 위해 `opencode.json`을 사용하십시오: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **유효한 옵션:** - - `region` - AWS 리전 (예: `us-east-1`, `eu-west-1`) - - `profile` - `~/.aws/credentials`의 AWS 프로필 이름 - - `endpoint` - VPC 엔드포인트 등을 위한 사용자 정의 엔드포인트 URL (일반 `baseURL` 옵션의 별칭) - - :::tip - 구성 파일 옵션은 환경 변수보다 우선 순위가 높습니다. - ::: - - *** - - #### 고급: VPC 엔드포인트 - - Bedrock의 VPC 엔드포인트를 사용하는 경우: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } - } - ``` - - :::note - `endpoint` 옵션은 일반적인 `baseURL` 옵션의 별칭입니다. `endpoint`와 `baseURL` 둘 다 지정된 경우 `endpoint`가 우선합니다. - ::: - - *** - - #### 인증 방법 - - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: IAM 사용자 및 AWS 콘솔에서 액세스 키 생성 - - **`AWS_PROFILE`**: `~/.aws/credentials`의 프로필 이름을 사용합니다. `aws configure --profile my-profile` 또는 `aws sso login`으로 먼저 구성하십시오. - - **`AWS_BEARER_TOKEN_BEDROCK`**: Amazon Bedrock 콘솔에서 임시 API 키 생성 - - **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**: EKS IRSA (서비스 계정용 IAM 역할) 또는 다른 Kubernetes 환경의 OIDC 연동. 이 환경 변수는 서비스 계정을 사용할 때 Kubernetes에 의해 자동으로 주입됩니다. - - *** - - #### 인증 우선 순위 - - Amazon Bedrock은 다음과 같은 인증 우선 순위를 사용합니다. - 1. **Bearer Token** - `AWS_BEARER_TOKEN_BEDROCK` 환경 변수 또는 `/connect` 명령의 토큰 - 2. **AWS Credential Chain** - 프로필, 액세스 키, 공유 자격 증명, IAM 역할, 웹 ID 토큰 (EKS IRSA), 인스턴스 메타데이터 - - :::note - Bearer 토큰을 설정할 때 (`/connect` 또는 `AWS_BEARER_TOKEN_BEDROCK`를 통해), 구성된 프로필을 포함한 모든 AWS 자격 증명 방법보다 우선 순위가 높습니다. - ::: - -3. `/models` 명령을 실행하여 원하는 모델을 선택하십시오. - - ```txt - /models - ``` - -:::note -사용자 정의 추론 프로필(custom inference profiles)의 경우, 키에 모델과 공급자 이름을 사용하고 `id` 속성에 ARN을 설정하십시오. 이렇게 하면 올바른 캐싱이 보장됩니다. -::: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - ---- - -### Anthropic - -1. 가입 후 `/connect` 명령을 실행하고 **Anthropic**을 선택합니다. - - ```txt - /connect - ``` - -2. **Claude Pro/Max** 옵션을 선택하면 브라우저가 열리고 인증을 요청합니다. - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. 이제 `/models` 명령을 사용할 때 모든 Anthropic 모델을 사용할 수 있습니다. - - ```txt - /models - ``` - -:::info -OpenCode에서 Claude Pro/Max 구독을 사용하는 것은 [Anthropic](https://anthropic.com)에서 공식적으로 지원하지 않습니다. -::: - -##### API 키 사용 - -Pro/Max 구독이 없는 경우 **Create an API Key**를 선택할 수 있습니다. 브라우저가 열리고 Anthropic에 로그인한 후 터미널에 붙여넣을 수 있는 코드를 제공합니다. - -또는 이미 API 키가 있다면, **Manually enter API Key**를 선택하고 터미널에 붙여넣을 수 있습니다. - ---- - -### Atomic Chat - -OpenAI 호환 API 서버 뒤에서 로컬 LLM을 실행하는 데스크톱 애플리케이션인 [Atomic Chat](https://atomic.chat)을 통해 로컬 모델을 사용하도록 opencode를 구성할 수 있습니다(기본 엔드포인트 `http://127.0.0.1:1337/v1`). - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -이 예시에서: - -- `atomic-chat`은 사용자 지정 공급자 ID입니다. 원하는 어떤 문자열이든 사용할 수 있습니다. -- `npm`은 이 공급자에 사용할 패키지를 지정합니다. 여기서는 모든 OpenAI 호환 API에 `@ai-sdk/openai-compatible`이 사용됩니다. -- `name`은 UI에 표시되는 공급자의 이름입니다. -- `options.baseURL`은 로컬 서버의 엔드포인트입니다. Atomic Chat 설정에 맞게 호스트와 포트를 변경하세요. -- `models`는 모델 ID와 해당 표시 이름의 맵입니다. 각 ID는 `GET /v1/models`가 반환하는 `id`와 일치해야 하며, 현재 Atomic Chat에 로드된 ID 목록을 확인하려면 `curl http://127.0.0.1:1337/v1/models`를 실행하세요. - -:::tip -도구 호출이 잘 작동하지 않는 경우, 도구 호출을 잘 지원하는 로드된 모델(예: Qwen-Coder 또는 DeepSeek-Coder 변형)을 선택하세요. -::: - ---- - -### Azure OpenAI - -:::note -"I'm sorry, but I cannot assist with that request" 오류가 발생하면, Azure 리소스의 콘텐츠 필터를 **DefaultV2**에서 **Default**로 변경해 보세요. -::: - -1. [Azure 포털](https://portal.azure.com/)로 이동하여 **Azure OpenAI** 리소스를 만듭니다. 다음이 필요합니다: - - **리소스 이름**: API 엔드포인트의 일부가 됩니다 (`https://RESOURCE_NAME.openai.azure.com/`) - - **API 키**: 리소스의 `KEY 1` 또는 `KEY 2` - -2. [Azure AI Foundry](https://ai.azure.com/)로 이동하여 모델을 배포합니다. - - :::note - 배포 이름은 제대로 작동하려면 OpenCode의 모델 이름과 일치해야 합니다. - ::: - -3. `/connect` 명령을 실행하고 **Azure**를 검색하십시오. - - ```txt - /connect - ``` - -4. API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. 리소스 이름을 환경 변수로 설정: - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - - 또는 bash 프로필에 추가: - - ```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX - ``` - -6. `/models` 명령을 실행하여 배포된 모델을 선택하십시오. - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. [Azure 포털](https://portal.azure.com/)로 이동하여 **Azure OpenAI** 리소스를 만듭니다. 다음이 필요합니다: - - **리소스 이름**: API 엔드포인트의 일부가 됩니다 (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) - - **API 키**: 리소스의 `KEY 1` 또는 `KEY 2` - -2. [Azure AI Foundry](https://ai.azure.com/)로 이동하여 모델을 배포합니다. - - :::note - 배포 이름은 제대로 작동하려면 OpenCode의 모델 이름과 일치해야 합니다. - ::: - -3. `/connect` 명령을 실행하고 **Azure Cognitive Services**를 검색하십시오. - - ```txt - /connect - ``` - -4. API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. 리소스 이름을 환경 변수로 설정: - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - - 또는 bash 프로필에 추가: - - ```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX - ``` - -6. `/models` 명령을 실행하여 배포된 모델을 선택하십시오. - - ```txt - /models - ``` - ---- - -### Baseten - -1. [Baseten](https://app.baseten.co/)으로 이동하여 계정을 만들고 API 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **Baseten**을 검색하십시오. - - ```txt - /connect - ``` - -3. Baseten API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 모델을 선택하려면 `/models` 명령을 실행하십시오. - - ```txt - /models - ``` - ---- - -### Cerebras - -1. [Cerebras 콘솔](https://inference.cerebras.ai/)로 이동하여 계정을 만들고 API 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **Cerebras**를 검색하십시오. - - ```txt - /connect - ``` - -3. Cerebras API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델(예: _Qwen 3 Coder 480B_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -Cloudflare AI Gateway는 OpenAI, Anthropic, Workers AI 등의 모델에 액세스할 수 있으며, 통합된 엔드포인트를 통해 더 많은 기능을 제공합니다. [Unified Billing](https://developers.cloudflare.com/ai-gateway/features/unified-billing/)을 사용하면 각 공급자의 별도 API 키가 필요하지 않습니다. - -1. [Cloudflare 대시보드](https://dash.cloudflare.com/)로 이동하여, **AI** > **AI Gateway**로 가서 새로운 게이트웨이를 만듭니다. - -2. 계정 ID 및 Gateway ID를 환경 변수로 설정하십시오. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. `/connect` 명령을 실행하고 **Cloudflare AI Gateway**를 검색하십시오. - - ```txt - /connect - ``` - -4. Cloudflare API 토큰을 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - - 또는 환경 변수로 설정합니다. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token - ``` - -5. 모델을 선택하려면 `/models` 명령을 실행하십시오. - - ```txt - /models - ``` - - OpenCode 구성을 통해 모델을 추가할 수 있습니다. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } - } - ``` - ---- - -### Cortecs - -1. [Cortecs 콘솔](https://cortecs.ai/)로 이동하여 계정을 만들고 API 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **Cortecs**를 검색하십시오. - - ```txt - /connect - ``` - -3. Cortecs API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델(예: _Kimi K2 Instruct_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. [DeepSeek 콘솔](https://platform.deepseek.com/)로 이동하여 계정을 만들고 **API Keys**를 클릭하여 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **DeepSeek**를 검색하십시오. - - ```txt - /connect - ``` - -3. DeepSeek API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 DeepSeek 모델(예: _DeepSeek V4 Pro_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. [Deep Infra 대시보드](https://deepinfra.com/dash)로 이동하여 계정을 만들고 API 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **Deep Infra**를 검색하십시오. - - ```txt - /connect - ``` - -3. Deep Infra API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 모델을 선택하려면 `/models` 명령을 실행하십시오. - - ```txt - /models - ``` - ---- - -### FrogBot - -1. [FrogBot 대시보드](https://app.frogbot.ai/signup)로 이동하여 계정을 만들고 API 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **FrogBot**를 검색하십시오. - - ```txt - /connect - ``` - -3. FrogBot API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 모델을 선택하려면 `/models` 명령을 실행하십시오. - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. [Fireworks AI 콘솔](https://app.fireworks.ai/)로 이동하여 계정을 만들고 **API Keys**를 클릭합니다. - -2. `/connect` 명령을 실행하고 **Fireworks AI**를 검색하십시오. - - ```txt - /connect - ``` - -3. Fireworks AI API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델(예: _Kimi K2 Instruct_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo는 GitLab의 Anthropic 프록시를 통해 기본 도구 호출 기능을 갖춘 AI 기반 에이전트 채팅을 제공합니다. - -1. `/connect` 명령을 실행하고 GitLab을 선택합니다. - - ```txt - /connect - ``` - -2. 인증 방법을 선택하십시오: - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### OAuth 사용 (권장) - - **OAuth**를 선택하면 브라우저가 열리고 인증을 요청합니다. - - #### 개인 액세스 토큰 사용 - 1. [GitLab User Settings > Access Tokens](https://gitlab.com/-/user_settings/personal_access_tokens)로 이동 - 2. **Add new token** 클릭 - 3. 이름: `OpenCode`, 범위: `api` - 4. 토큰 복사 (`glpat-`로 시작) - 5. 터미널에 입력 - -3. `/models` 명령을 실행하여 사용 가능한 모델을 확인하십시오. - - ```txt - /models - ``` - - 세 가지 Claude 기반 모델을 사용할 수 있습니다: - - **duo-chat-haiku-4-5** (기본값) - 빠른 작업을 위한 빠른 응답 - - **duo-chat-sonnet-4-5** - 대부분의 워크플로우에 균형 잡힌 성능 - - **duo-chat-opus-4-5** - 복잡한 분석에 적합 - -:::note -`GITLAB_TOKEN` 환경 변수를 지정하여 토큰을 저장하지 않고 사용할 수도 있습니다. -::: - -#### 셀프 호스팅 GitLab - -:::note[규정 준수 참고 사항] -OpenCode는 세션 제목 생성과 같은 일부 AI 작업을 위해 작은 모델을 사용합니다. -기본적으로 Zen에서 호스팅되는 gpt-5-nano를 사용하도록 구성됩니다. -OpenCode를 자체 호스팅 GitLab 인스턴스만 사용하도록 제한하려면 `opencode.json` 파일에 다음을 추가하십시오. -세션 공유를 비활성화하는 것도 권장합니다. - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -자체 호스팅 GitLab 인스턴스의 경우: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -인스턴스가 사용자 정의 AI Gateway를 실행하는 경우: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -또는 bash 프로필에 추가: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -GitLab 관리자는 다음을 활성화해야 합니다: - -1. [Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) (사용자, 그룹 또는 인스턴스) -2. 기능 플래그 (Rails 콘솔을 통해): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -#### 셀프 호스팅 인스턴스용 OAuth - -자체 호스팅 인스턴스에 대해 OAuth를 작동시키려면 새로운 애플리케이션(Settings → Applications)을 만들어야 합니다. -콜백 URL `http://127.0.0.1:8080/callback` 및 다음 범위가 필요합니다: - -- api (사용자 대신 API 액세스) -- read_user (개인 정보 읽기) -- read_repository (리포지토리 읽기 전용 액세스) - -그런 다음 애플리케이션 ID를 환경 변수로 노출하십시오: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -[opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth) 홈페이지에 추가 문서가 있습니다. - -#### 구성 - -`opencode.json`을 통해 사용자 정의: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -#### GitLab API 도구 (선택 사항이지만 강력 권장) - -GitLab 도구(병합 요청, 이슈, 파이프라인, CI/CD 등)에 액세스하려면: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -이 플러그인은 MR 리뷰, 이슈 추적, 파이프라인 모니터링 등을 포함한 포괄적인 GitLab 리포지토리 관리 기능을 제공합니다. - ---- - -### GitHub Copilot - -OpenCode에서 GitHub Copilot 구독을 사용하려면: - -:::note -일부 모델은 [Pro+ 구독](https://github.com/features/copilot/plans)이 필요할 수 있습니다. -::: - -1. `/connect` 명령을 실행하고 GitHub Copilot을 검색하십시오. - - ```txt - /connect - ``` - -2. [github.com/login/device](https://github.com/login/device)로 이동하여 코드를 입력합니다. - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - │ Waiting for authorization... - └ - ``` - -3. 이제 원하는 모델을 선택하기 위해 `/models` 명령을 실행합니다. - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -OpenCode로 Google Vertex AI를 사용하려면: - -1. Google Cloud Console의 **Model Garden**으로 이동하여 해당 리전에서 사용 가능한 모델을 확인하십시오. - - :::note - Vertex AI API가 활성화된 Google Cloud 프로젝트가 있어야 합니다. - ::: - -2. 필요한 환경 변수를 설정: - - `GOOGLE_CLOUD_PROJECT`: 구글 클라우드 프로젝트 ID - - `VERTEX_LOCATION` (선택): Vertex AI 리전 (기본값: `global`) - - 인증 (하나 선택): - - `GOOGLE_APPLICATION_CREDENTIALS`: 서비스 계정 JSON 키 파일 경로 - - gcloud CLI 사용: `gcloud auth application-default login` - - OpenCode를 실행할 때 설정: - - ```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode - ``` - - 또는 bash 프로필에 추가: - - ```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global - ``` - -:::tip -`global` 리전은 가용성을 높이고 오류를 줄이며 추가 비용이 없습니다. 데이터 거주 요건이 있는 경우 지역 엔드포인트(예: `us-central1`)를 사용하십시오. [더 알아보기](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. `/models` 명령을 실행하여 원하는 모델을 선택하십시오. - - ```txt - /models - ``` - ---- - -### Groq - -1. [Groq 콘솔](https://console.groq.com/)로 이동하여 **Create API Key**를 클릭하고 키를 복사합니다. - -2. `/connect` 명령을 실행하고 Groq를 검색하십시오. - - ```txt - /connect - ``` - -3. API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 원하는 모델을 선택합니다. - - ```txt - /models - ``` - ---- - -### Hugging Face - -[Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers)는 17개 이상의 공급자가 지원하는 오픈 모델에 대한 액세스를 제공합니다. - -1. [Hugging Face settings](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained)로 이동하여 Inference Providers에 호출할 권한이 있는 토큰을 생성합니다. - -2. `/connect` 명령을 실행하고 **Hugging Face**를 검색하십시오. - - ```txt - /connect - ``` - -3. Hugging Face 토큰을 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델(예: _Kimi-K2-Instruct_ 또는 _GLM-4.6_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai)는 AI 애플리케이션을 위한 로깅, 모니터링 및 분석 기능을 제공하는 LLM 관찰 가능성(Observability) 플랫폼입니다. Helicone AI Gateway는 모델을 기반으로 적절한 공급자에게 요청을 자동으로 라우팅합니다. - -1. [Helicone](https://helicone.ai)로 이동하여 계정을 만들고 대시보드에서 API 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **Helicone**를 검색하십시오. - - ```txt - /connect - ``` - -3. Helicone API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델을 선택하십시오. - - ```txt - /models - ``` - -캐싱 및 속도 제한과 같은 더 많은 공급자와 고급 기능은 [Helicone 문서](https://docs.helicone.ai)를 확인하십시오. - -#### 선택적 구성 - -OpenCode를 통해 자동으로 구성되지 않는 Helicone의 기능이나 모델이 있는 경우 직접 구성할 수 있습니다. - -[Helicone의 모델 디렉토리](https://helicone.ai/models)에서 추가하려는 모델의 ID를 확인하십시오. - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### 사용자 정의 헤더 - -Helicone는 캐싱, 사용자 추적 및 세션 관리와 같은 기능을 위한 사용자 정의 헤더를 지원합니다. `options.headers`를 사용하여 공급자 구성에 추가하십시오: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### 세션 추적 - -Helicone의 [Sessions](https://docs.helicone.ai/features/sessions) 기능을 사용하면 관련 LLM 요청을 그룹화할 수 있습니다. [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) 플러그인을 사용하여 각 OpenCode 대화를 Helicone 세션으로 자동 기록하십시오. - -```bash -npm install -g opencode-helicone-session -``` - -설정에 추가하십시오. - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -이 플러그인은 `Helicone-Session-Id` 및 `Helicone-Session-Name` 헤더를 요청에 주입합니다. Helicone의 세션 페이지에서 각 OpenCode 대화가 별도의 세션으로 나열되는 것을 볼 수 있습니다. - -##### 공통 Helicone 헤더 - -| 헤더 | 설명 | -| -------------------------- | ---------------------------------------------------------- | -| `Helicone-Cache-Enabled` | 응답 캐싱 활성화 (`true`/`false`) | -| `Helicone-User-Id` | 사용자별 지표 추적 | -| `Helicone-Property-[Name]` | 사용자 정의 속성 추가(예: `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | 요청을 프롬프트 버전과 연관 | - -사용 가능한 모든 헤더는 [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory)를 참조하십시오. - ---- - -### llama.cpp - -[llama.cpp](https://github.com/ggml-org/llama.cpp)의 llama-server 유틸리티를 통해 로컬 모델을 사용하도록 구성할 수 있습니다. - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -이 예제에서: - -- `llama.cpp`는 사용자 정의 공급자 ID입니다. 원하는 문자열로 지정할 수 있습니다. -- `npm`은 이 공급자에 사용할 패키지를 지정합니다. 여기서는 OpenAI 호환 API를 위해 `@ai-sdk/openai-compatible`을 사용합니다. -- `name`은 UI에 표시될 공급자 이름입니다. -- `options.baseURL`은 로컬 서버의 엔드포인트입니다. -- `models`는 모델 ID와 해당 구성을 매핑합니다. 모델 이름은 모델 선택 목록에 표시됩니다. - ---- - -### IO.NET - -IO.NET은 다양한 사용 사례에 최적화된 17개의 모델을 제공합니다: - -1. [IO.NET 콘솔](https://ai.io.net/)로 이동하여 계정을 만들고 API 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **IO.NET**을 검색하십시오. - - ```txt - /connect - ``` - -3. IO.NET API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 모델을 선택하려면 `/models` 명령을 실행하십시오. - - ```txt - /models - ``` - ---- - -### LM Studio - -LM Studio를 통해 로컬 모델을 사용하도록 구성할 수 있습니다. - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -이 예제에서: - -- `lmstudio`는 사용자 정의 공급자 ID입니다. 원하는 문자열로 지정할 수 있습니다. -- `npm`은 이 공급자에 사용할 패키지를 지정합니다. 여기서는 OpenAI 호환 API를 위해 `@ai-sdk/openai-compatible`을 사용합니다. -- `name`은 UI에 표시될 공급자 이름입니다. -- `options.baseURL`은 로컬 서버의 엔드포인트입니다. -- `models`는 모델 ID와 해당 구성을 매핑합니다. 모델 이름은 모델 선택 목록에 표시됩니다. - ---- - -### Moonshot AI - -Moonshot AI에서 Kimi K2를 사용하려면: - -1. [Moonshot AI 콘솔](https://platform.moonshot.ai/console)로 이동하여 계정을 만들고 **Create API key**를 클릭합니다. - -2. `/connect` 명령을 실행하고 **Moonshot AI**를 검색하십시오. - - ```txt - /connect - ``` - -3. Moonshot API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 *Kimi K2*를 선택하십시오. - - ```txt - /models - ``` - ---- - -### MiniMax - -1. [MiniMax API 콘솔](https://platform.minimax.io/login)로 이동하여 계정을 만들고 API 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **MiniMax**를 검색하십시오. - - ```txt - /connect - ``` - -3. MiniMax API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델(예: _M2.1_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. [Nebius Token Factory 콘솔](https://tokenfactory.nebius.com/)로 이동하여 계정을 만들고 **Add Key**를 클릭합니다. - -2. `/connect` 명령을 실행하고 **Nebius Token Factory**를 검색하십시오. - - ```txt - /connect - ``` - -3. Nebius Token Factory API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델(예: _Kimi K2 Instruct_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### Ollama - -Ollama를 통해 로컬 모델을 사용하도록 구성할 수 있습니다. - -:::tip -Ollama는 OpenCode에 대해 자동으로 구성될 수 있습니다. 자세한 내용은 [Ollama 통합 문서](https://docs.ollama.com/integrations/opencode)를 참조하십시오. -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -이 예제에서: - -- `ollama`는 사용자 정의 공급자 ID입니다. 원하는 문자열로 지정할 수 있습니다. -- `npm`은 이 공급자에 사용할 패키지를 지정합니다. 여기서는 OpenAI 호환 API를 위해 `@ai-sdk/openai-compatible`을 사용합니다. -- `name`은 UI에 표시될 공급자 이름입니다. -- `options.baseURL`은 로컬 서버의 엔드포인트입니다. -- `models`는 모델 ID와 해당 구성을 매핑합니다. 모델 이름은 모델 선택 목록에 표시됩니다. - -:::tip -도구 호출이 작동하지 않는 경우, Ollama에서 `num_ctx`를 늘려보십시오. 16k - 32k 정도에서 시작하십시오. -::: - ---- - -### Ollama Cloud - -OpenCode로 Ollama Cloud를 사용하려면: - -1. [https://ollama.com/](https://ollama.com/)으로 이동하여 로그인하거나 계정을 만듭니다. - -2. **Settings** > **Keys**로 이동하여 **Add API Key**를 클릭해 새 API 키를 생성합니다. - -3. OpenCode에서 사용할 API 키를 복사합니다. - -4. `/connect` 명령을 실행하고 **Ollama Cloud**를 검색하십시오. - - ```txt - /connect - ``` - -5. Ollama Cloud API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **중요**: OpenCode에서 클라우드 모델을 사용하기 전에, 로컬에서 모델 정보를 가져와야 합니다: - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. `/models` 명령을 실행하여 Ollama Cloud 모델을 선택하십시오. - - ```txt - /models - ``` - ---- - -### OpenAI - -[ChatGPT Plus 또는 Pro](https://chatgpt.com/pricing)에 가입하는 것이 좋습니다. - -1. 가입 후 `/connect` 명령을 실행하고 OpenAI를 선택하십시오. - - ```txt - /connect - ``` - -2. **ChatGPT Plus/Pro** 옵션을 선택하면 브라우저가 열리고 인증을 요청합니다. - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. 이제 `/models` 명령을 사용할 때 모든 OpenAI 모델을 사용할 수 있습니다. - - ```txt - /models - ``` - -##### API 키 사용 - -이미 API 키가 있다면 **Manually enter API Key**를 선택하고 터미널에 붙여넣을 수 있습니다. - ---- - -### OpenCode Zen - -OpenCode Zen은 OpenCode 팀에서 제공하는 테스트 및 검증된 모델 목록입니다. [더 알아보기](/docs/zen). - -1. **OpenCode Zen**에 로그인하고 **Create API Key**를 클릭합니다. - -2. `/connect` 명령을 실행하고 **OpenCode Zen**을 검색하십시오. - - ```txt - /connect - ``` - -3. OpenCode API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델(예: _Qwen 3 Coder 480B_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. [OpenRouter 대시보드](https://openrouter.ai/settings/keys)로 이동하여 **Create API Key**를 클릭하고 키를 복사합니다. - -2. `/connect` 명령을 실행하고 OpenRouter를 검색하십시오. - - ```txt - /connect - ``` - -3. API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 많은 OpenRouter 모델은 기본적으로 미리 로드되어 있으므로 `/models` 명령을 실행하여 원하는 것을 선택하십시오. - - ```txt - /models - ``` - - OpenCode 구성을 통해 모델을 추가할 수도 있습니다. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. 또한 OpenCode 구성을 통해 사용자 정의할 수도 있습니다. 다음은 공급자 순서를 지정하는 예입니다. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI Core는 OpenAI, Anthropic, Google, Amazon, Meta, Mistral 및 AI21의 40개 이상의 모델에 대한 액세스를 제공합니다. - -1. [SAP BTP Cockpit](https://account.hana.ondemand.com/)으로 이동하여 SAP AI Core 서비스 인스턴스로 이동하고 서비스 키를 만듭니다. - - :::tip - 서비스 키는 `clientid`, `clientsecret`, `url` 및 `serviceurls.AI_API_URL`을 포함하는 JSON 객체입니다. **Services** > **Instances and Subscriptions** 아래에서 AI Core 인스턴스를 찾을 수 있습니다. - ::: - -2. `/connect` 명령을 실행하고 **SAP AI Core**를 검색하십시오. - - ```txt - /connect - ``` - -3. 서비스 키 JSON을 입력하십시오. - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - 또는 `AICORE_SERVICE_KEY` 환경 변수를 설정합니다: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - 또는 bash 프로필에 추가합니다: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. 선택적으로 배포 ID 및 리소스 그룹을 설정합니다: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - 이 설정은 선택 사항이며 SAP AI Core 설정에 따라 구성해야 합니다. - ::: - -5. `/models` 명령을 실행하여 40개 이상의 사용 가능한 모델 중에서 선택하십시오. - - ```txt - /models - ``` - ---- - -### STACKIT - -STACKIT AI Model Serving은 Llama, Mistral, Qwen과 같은 LLM에 초점을 맞추고 유럽 인프라에서 데이터 주권을 최대한 보장하는 완전 관리형 AI 모델 호스팅 환경을 제공합니다. - -1. [STACKIT Portal](https://portal.stackit.cloud)로 이동하여 **AI Model Serving**으로 이동한 다음 프로젝트의 인증 토큰을 만듭니다. - - :::tip - 인증 토큰을 만들기 전에 STACKIT 고객 계정, 사용자 계정 및 프로젝트가 필요합니다. - ::: - -2. `/connect` 명령을 실행하고 **STACKIT**을 검색하십시오. - - ```txt - /connect - ``` - -3. STACKIT AI Model Serving 인증 토큰을 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 _Qwen3-VL 235B_ 또는 *Llama 3.3 70B*와 같은 사용 가능한 모델을 선택하십시오. - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. [OVHcloud 패널](https://ovh.com/manager)로 이동합니다. `Public Cloud` 섹션으로 이동하여 `AI & Machine Learning` > `AI Endpoints`로 간 뒤 `API Keys` 탭에서 **Create a new API key**를 클릭합니다. - -2. `/connect` 명령을 실행하고 **OVHcloud AI Endpoints**를 검색하십시오. - - ```txt - /connect - ``` - -3. OVHcloud AI Endpoints API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델(예: _gpt-oss-120b_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### Scaleway - -OpenCode로 [Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/)를 사용하려면: - -1. [Scaleway Console IAM 설정](https://console.scaleway.com/iam/api-keys)에서 새 API 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **Scaleway**를 검색하십시오. - - ```txt - /connect - ``` - -3. Scaleway API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델(예: _devstral-2-123b-instruct-2512_ 또는 _gpt-oss-120b_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### Together AI - -1. [Together AI 콘솔](https://api.together.ai)로 이동하여 계정을 만들고 **Add Key**를 클릭합니다. - -2. `/connect` 명령을 실행하고 **Together AI**를 검색하십시오. - - ```txt - /connect - ``` - -3. Together AI API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델(예: _Kimi K2 Instruct_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### Venice AI - -1. [Venice AI 콘솔](https://venice.ai)로 이동하여 계정을 만들고 API 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **Venice AI**를 검색하십시오. - - ```txt - /connect - ``` - -3. Venice AI API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델(예: _Llama 3.3 70B_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -Vercel AI Gateway는 OpenAI, Anthropic, Google, xAI 등의 모델에 액세스할 수 있으며, 통합된 엔드포인트를 통해 더 많은 기능을 제공합니다. 모델은 마크업 없이 정가로 제공됩니다. - -1. [Vercel 대시보드](https://vercel.com/)로 이동하여 **AI Gateway** 탭으로 간 뒤, **API keys**를 클릭하여 새 API 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **Vercel AI Gateway**를 검색하십시오. - - ```txt - /connect - ``` - -3. Vercel AI Gateway API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델을 선택하십시오. - - ```txt - /models - ``` - -OpenCode 구성을 통해 모델을 사용자 정의할 수도 있습니다. 다음은 공급자 라우팅 순서를 지정하는 예입니다. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -몇 가지 유용한 라우팅 옵션: - -| 옵션 | 설명 | -| ------------------- | --------------------------------- | -| `order` | 시도할 공급자 순서 | -| `only` | 특정 공급자로 제한 | -| `zeroDataRetention` | 데이터 보유 정책이 없는 곳만 사용 | - ---- - -### xAI - -1. [xAI 콘솔](https://console.x.ai/)로 이동하여 계정을 만들고 API 키를 생성합니다. - -2. `/connect` 명령을 실행하고 **xAI**를 검색하십시오. - - ```txt - /connect - ``` - -3. xAI API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델(예: _Grok Beta_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### Z.AI - -1. [Z.AI API 콘솔](https://z.ai/manage-apikey/apikey-list)로 이동하여 계정을 만들고 **Create a new API key**를 클릭합니다. - -2. `/connect` 명령을 실행하고 **Z.AI**를 검색하십시오. - - ```txt - /connect - ``` - - **GLM Coding Plan**에 가입했다면 **Z.AI Coding Plan**을 선택하십시오. - -3. Z.AI API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. `/models` 명령을 실행하여 모델(예: _GLM-4.7_)을 선택하십시오. - - ```txt - /models - ``` - ---- - -### ZenMux - -1. [ZenMux 대시보드](https://zenmux.ai/settings/keys)로 이동하여 **Create API Key**를 클릭하고 키를 복사합니다. - -2. `/connect` 명령을 실행하고 ZenMux를 검색하십시오. - - ```txt - /connect - ``` - -3. API 키를 입력하십시오. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 많은 ZenMux 모델은 기본적으로 미리 로드되어 있으므로 `/models` 명령을 실행하여 원하는 것을 선택하십시오. - - ```txt - /models - ``` - - OpenCode 구성을 통해 모델을 추가할 수도 있습니다. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## 사용자 정의 공급자 - -`/connect` 명령에 나열되지 않은 **OpenAI 호환** 공급자를 추가하려면: - -:::tip -OpenCode에서 모든 OpenAI 호환 공급자를 사용할 수 있습니다. 대부분의 최신 AI 공급자는 OpenAI 호환 API를 제공합니다. -::: - -1. `/connect` 명령을 실행하고 **Other**로 스크롤하십시오. - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. 공급자를 위한 고유한 ID를 입력하십시오. - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - 기억하기 쉬운 ID를 선택하십시오. 구성 파일에서 이 ID를 사용하게 됩니다. - ::: - -3. 공급자의 API 키를 입력하십시오. - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. 프로젝트 디렉토리에 `opencode.json` 파일을 만들거나 업데이트하십시오. - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - - 구성 옵션은 다음과 같습니다: - - **npm**: 사용할 AI SDK 패키지. OpenAI 호환 공급자의 경우 `@ai-sdk/openai-compatible` - - **name**: UI에 표시될 이름 - - **models**: 사용 가능한 모델 - - **options.baseURL**: API 엔드포인트 URL - - **options.apiKey**: 인증을 사용하지 않는 경우 선택적으로 API 키 설정 - - **options.headers**: 선택적으로 사용자 정의 헤더 설정 - - 고급 옵션에 대한 자세한 내용은 아래 예제를 참조하십시오. - -5. `/models` 명령을 실행하면 사용자 정의 공급자와 모델이 선택 목록에 나타납니다. - ---- - -##### 예제 - -다음은 `apiKey`, `headers` 및 모델 `limit` 옵션을 설정하는 예입니다. - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -구성 세부 사항: - -- **apiKey**: `env` 변수 구문을 사용하여 설정, [더 알아보기](/docs/config#env-vars). -- **headers**: 각 요청과 함께 전송되는 사용자 정의 헤더. -- **limit.context**: 모델이 허용하는 최대 입력 토큰. -- **limit.output**: 모델이 생성할 수 있는 최대 출력 토큰. - -`limit` 필드를 사용하면 OpenCode가 남은 컨텍스트 양을 파악할 수 있습니다. 표준 공급자는 models.dev에서 자동으로 이를 가져옵니다. - ---- - -## 문제 해결 - -공급자 구성에 문제가 있는 경우 다음을 확인하십시오. - -1. **인증 설정 확인**: `opencode auth list`를 실행하여 공급자의 자격 증명이 구성에 추가되었는지 확인하십시오. - - Amazon Bedrock과 같이 인증을 위해 환경 변수에 의존하는 공급자에는 적용되지 않습니다. - -2. 사용자 정의 공급자의 경우, OpenCode 구성을 확인하고 다음을 수행하십시오: - - `/connect` 명령에 사용된 공급자 ID가 OpenCode 구성의 ID와 일치하는지 확인하십시오. - - 공급자에 올바른 npm 패키지가 사용되었는지 확인하십시오. 예를 들어 Cerebras에는 `@ai-sdk/cerebras`를 사용하고, 다른 모든 OpenAI 호환 공급자에는 `@ai-sdk/openai-compatible`을 사용하십시오. - - `options.baseURL` 필드에 올바른 API 엔드포인트가 사용되었는지 확인하십시오. diff --git a/packages/web/src/content/docs/ko/rules.mdx b/packages/web/src/content/docs/ko/rules.mdx deleted file mode 100644 index 940ad6237a..0000000000 --- a/packages/web/src/content/docs/ko/rules.mdx +++ /dev/null @@ -1,179 +0,0 @@ ---- -title: 규칙 -description: OpenCode에 대한 사용자 정의 지침 설정. ---- - -`AGENTS.md` 파일을 만들 수 있도록 opencode에 사용자 정의 지침을 제공 할 수 있습니다. Cursor의 규칙과 유사합니다. LLM의 컨텍스트에 포함된 지침을 통해 특정 프로젝트에 대한 행동을 사용자 정의합니다. - ---- - -## 초기화 - -새로운 `AGENTS.md` 파일을 만들려면 `/init` 명령을 opencode에서 실행할 수 있습니다. - -:::tip -프로젝트의 `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 세션에서 적용됩니다. - -이것은 Git에 전념하지 않거나 팀과 공유하지 않기 때문에 LLM이 따르는 모든 개인 규칙을 지정하는 것이 좋습니다. - -### Claude 코드 호환성 - -Claude Code에서 마이그레이션하는 경우, opencode는 Claude Code의 파일 컨벤션을 fallbacks로 지원합니다. - -- ** 규칙 ** : 프로젝트 디렉토리에 `CLAUDE.md` (`AGENTS.md`가 존재하지 않는 경우 사용) -- ** 글로벌 규칙**: `~/.claude/CLAUDE.md` (`~/.config/opencode/AGENTS.md`가 존재하지 않는 경우 사용) -**Skills**: `~/.claude/skills/` — [Agent 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. **Local 파일 ** 현재 디렉토리에서 추적 (`AGENTS.md`, `CLAUDE.md`) -2. ** 글로벌 파일 ** `~/.config/opencode/AGENTS.md` -3. **Claude 코드 파일 ** `~/.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 초 타임 아웃으로 fetched. - -모든 명령 파일은 `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의 수동 지침 - -`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 concise 유지 -- 특정 작업에 필요한 경우에만 opencode 로드 파일 유지 - -:::tip -공유 표준을 가진 monorepos 또는 프로젝트를 위해, glob 본을 가진 `opencode.json`를 사용하여 (`packages/*/AGENTS.md` 같이)는 수동 지시 보다는 더 유지가능합니다. -::: diff --git a/packages/web/src/content/docs/ko/sdk.mdx b/packages/web/src/content/docs/ko/sdk.mdx deleted file mode 100644 index a5d12d1ab0..0000000000 --- a/packages/web/src/content/docs/ko/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: SDK -description: opencode 서버를 위한 타입 안전한 JS 클라이언트. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -opencode JS/TS SDK는 서버와 상호 작용을 위한 유형 안전한 클라이언트를 제공합니다. -통합 및 제어 opencode programmatically를 구축하는 데 사용됩니다. - -[Learn more](/docs/server) 서버가 어떻게 작동하나요? 예를 들어, 커뮤니티에 의해 구축 된 [projects](/docs/ecosystem#projects)를 확인하십시오. - ---- - -## 설치 - -npm에서 SDK 설치: - -```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에는 모든 API 유형의 TypeScript 정의가 포함되어 있습니다. 직접 가져 오기 : - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -모든 유형은 서버의 OpenAPI 사양에서 생성되며 types 파일에서 사용할 수 있습니다. - ---- - -## 오류 - -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` 사용**: 필수 필드를 지정하려면 `required`를 사용하십시오. -3. **스키마를 집중적으로 유지**: 복잡한 중첩 스키마는 모델이 올바르게 채우기 더 어려울 수 있습니다. -4. **적절한 `retryCount` 설정**: 복잡한 스키마의 경우 늘리고 단순한 스키마의 경우 줄이십시오. - ---- - -## API - -SDK는 type-safe 클라이언트를 통해 모든 서버 API를 노출합니다. - ---- - -### 글로벌 - -| 메서드 | 설명 | 응답 | -| ----------------- | ---------------------- | ------------------------------------ | -| `global.health()` | 서버 건강 및 버전 확인 | `{ healthy: true, version: string }` | - ---- - -#### 예제 - -```javascript -const health = await client.global.health() -console.log(health.data.version) -``` - ---- - -### 앱 - -| 방법 | 설명 | 응답 | -| -------------- | ------------------------- | ------------------------------------------- | -| `app.log()` | 로그 항목 작성 | `boolean` | -| `app.agents()` | 이용 가능한 모든 에이전트 | Agent[] | - ---- - -#### 예제 - -```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.list()` | 모든 프로젝트 보기 | Project[] | -| `project.current()` | 현재 프로젝트 가져 오기 | Project | - ---- - -#### 예제 - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### 경로 - -| 방법 | 설명 | 응답 | -| ------------ | ------------------- | ---------------------------------------- | -| `path.get()` | 현재 경로 가져 오기 | Path | - ---- - -#### 예제 - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### 구성 - -| 방법 | 설명 | 응답 | -| -------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | 구성 정보 | Config | -| `config.providers()` | 목록 제공업체 및 기본 모델 | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### 예제 - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### 세션 - -| 메서드 | 설명 | 비고 | -| ---------------------------------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `session.list()` | 세션 일람 | Session[] | -| `session.get({ path })` | 세션 가져 오기 | Session | -| `session.children({ path })` | 하위 세션 목록 | 반품 Session | -| `session.create({ body })` | 세션 만들기 | 리턴 Session | -| `session.delete({ path })` | 세션 삭제 | `boolean` 반품 | -| `session.update({ path, body })` | 업데이트 세션 속성 | 반품 Session | -| `session.init({ path, body })` | 앱 초기화 및 `AGENTS.md` 분석 | `boolean`를 반환 | -| `session.abort({ path })` | 운영 중인 세션 | 반품 `boolean` | -| `session.share({ path })` | 공유 세션 | 반품 Session | -| `session.unshare({ path })` | 공유 세션 취소 | 반품 Session | -| `session.summarize({ path, body })` | 세션 요약 | 반품 `boolean` | -| `session.messages({ path })` | 세션의 메시지 목록 | `{ info: `Message`, parts: `Part`}[]` | -| `session.message({ path })` | 메시지 상세정보 | 반품 `{ info: `Message`, parts: `Part[]`}` | -| `session.prompt({ path, body })` | prompt 메시지 보내기 | `body.noReply: true`는 UserMessage(컨텍스트 전용)를 반환합니다. 기본값은 AI 응답과 함께 AssistantMessage를 반환합니다. [구조화된 출력](#구조화된-출력)을 위한 `body.outputFormat`을 지원합니다 | -| `session.command({ path, body })` | 세션으로 명령을 전송 | `{ info: `AssistantMessage`, parts: `Part[]`}` | -| `session.shell({ path, body })` | shell 명령을 실행 | AssistantMessage | -| `session.revert({ path, body })` | 메시지 다시 변환 | Session | -| `session.unrevert({ path })` | 메시지 되돌리기 취소 | 반품 Session | -| `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 })` | 작업 공간 심볼 찾기 | Symbol[] | -| `file.read({ query })` | 파일 보기 | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | 트랙 된 파일 상태를 확인 | File[] | - -`find.files`는 몇몇 선택적인 조회 분야를 지원합니다: - -- `type`: `"file"` 또는 `"directory"` -- `directory`: 검색에 대한 프로젝트 루트를 override -- `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.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 })` | 토스트 알림 표시 | `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.set({ ... })` | 인증 자격 증명 | `boolean` | - ---- - -#### 예제 - -```javascript -await client.auth.set({ - path: { id: "anthropic" }, - body: { type: "api", key: "your-api-key" }, -}) -``` - ---- - -### 이벤트 - -| 방법 | 설명 | 응답 | -| ------------------- | ----------------------- | ----------------------- | -| `event.subscribe()` | 서버-sent 이벤트 스트림 | 서버-sent 이벤트 스트림 | - ---- - -#### 예제 - -```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) -} -``` diff --git a/packages/web/src/content/docs/ko/server.mdx b/packages/web/src/content/docs/ko/server.mdx deleted file mode 100644 index a6914605a7..0000000000 --- a/packages/web/src/content/docs/ko/server.mdx +++ /dev/null @@ -1,287 +0,0 @@ ---- -title: 서버 -description: HTTP를 통해 OpenCode 서버와 상호 작용합니다. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -`opencode serve` 명령은 opencode 클라이언트가 사용할 수 있는 OpenAPI 엔드포인트를 노출하는 headless HTTP 서버를 실행합니다. - ---- - -### 사용법 - -```bash -opencode serve [--port ] [--hostname ] [--cors ] -``` - -#### 옵션 - -| 플래그 | 설명 | 기본값 | -| --------------- | ------------------------------------- | ---------------- | -| `--port` | 수신 대기할 포트 | `4096` | -| `--hostname` | 수신 대기할 호스트명 | `127.0.0.1` | -| `--mdns` | mDNS 탐지 활성화 | `false` | -| `--mdns-domain` | mDNS 서비스의 사용자 지정 도메인 이름 | `opencode.local` | -| `--cors` | 허용할 추가 브라우저 origin | `[]` | - -`--cors`는 다수 시간을 통과될 수 있습니다: - -```bash -opencode serve --cors http://localhost:5173 --cors https://app.example.com -``` - ---- - -### 인증 - -`OPENCODE_SERVER_PASSWORD`를 설정하여 서버를 HTTP Basic auth로 보호합니다. `opencode` 또는 `OPENCODE_SERVER_USERNAME`를 오버라이드로 설정하는 사용자의 기본값. 이것은 `opencode serve`와 `opencode web` 둘 다에 적용합니다. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve -``` - ---- - -### 작동 방식 - -`opencode`를 실행하면 TUI와 서버를 시작합니다. TUI는 어디에 있습니까? -서버와 대화하는 클라이언트. 서버는 OpenAPI 3.1 spec을 노출 -끝점. 이 엔드포인트는 [SDK](/docs/sdk)을 생성하는 데도 사용됩니다. - -:::tip -opencode 서버를 사용하여 opencode programmatically와 상호 작용합니다. -::: - -이 아키텍처는 opencode 지원 여러 클라이언트를 허용하고 opencode programmatically와 상호 작용 할 수 있습니다. - -독립 서버를 시작하려면 `opencode serve`를 실행할 수 있습니다. 당신이 있는 경우에 -opencode TUI 실행, `opencode serve` 새로운 서버를 시작합니다. - ---- - -#### 기존 서버에 연결 - -TUI를 시작하면 무작위로 포트와 호스트 이름을 할당합니다. 대신 `--hostname`와 `--port` [flags](/docs/cli)에서 전달할 수 있습니다. 그런 다음 서버에 연결하십시오. - -[`/tui`](#tui) 엔드포인트는 서버를 통해 TUI를 구동하는 데 사용될 수 있습니다. 예를 들어 미리 작성하거나 프롬프트를 실행할 수 있습니다. 이 설정은 opencode [IDE](/docs/ide) 플러그인에 의해 사용됩니다. - ---- - -## 사양 - -서버는 OpenAPI 3.1 spec을 게시합니다. - -``` -http://:/doc -``` - -예를 들어, `http://localhost:4096/doc`. 클라이언트를 생성하거나 요청 및 응답 유형을 검사하는 spec를 사용하십시오. 또는 Swagger 탐험가에서 볼 수 있습니다. - ---- - -## API - -opencode 서버는 다음과 같은 API를 노출합니다. - ---- - -## 글로벌 - -| 방법 | 경로 | 설명 | 응답 | -| ----- | ---------------- | ------------------------- | ------------------------------------ | -| `GET` | `/global/health` | 서버 건강 및 버전 | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | 글로벌 이벤트(SSE 스트림) | 이벤트 스트림 | - ---- - -## 프로젝트 - -| 방법 | 경로 | 설명 | 응답 | -| ----- | ------------------ | ----------------------- | --------------------------------------------- | -| `GET` | `/project` | 모든 프로젝트 보기 | Project[] | -| `GET` | `/project/current` | 현재 프로젝트 가져 오기 | 프로젝트 | - ---- - -### 경로 & VCS - -| 방법 | 경로 | 설명 | 응답 | -| ----- | ------- | ----------------------------- | ------------------------------------------- | -| `GET` | `/path` | 현재 경로 받기 | Path | -| `GET` | `/vcs` | 현재 프로젝트의 VCS 정보 받기 | VcsInfo | - ---- - -### 인스턴스 - -| 방법 | 경로 | 설명 | 응답 | -| ------ | ------------------- | -------------------- | --------- | -| `POST` | `/instance/dispose` | 현재 인스턴스를 해제 | `boolean` | - ---- - -### 구성 - -| 방법 | 경로 | 설명 | 응답 | -| ------- | ------------------- | -------------------------- | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | 구성정보 | Config | -| `PATCH` | `/config` | 업데이트 구성 | Config | -| `GET` | `/config/providers` | 목록 제공업체 및 기본 모델 | `{ providers: ` 사이트 맵`, default: { [key: string]: string } }` | - ---- - -## 공급자 - -| 방법 | 경로 | 설명 | 응답 | -| ------ | -------------------------------- | --------------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | 모든 공급자 목록 | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | 공급자 인증 메서드 가져오기 | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | OAuth를 사용한 공급자 허가 | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | 공급자를 위한 OAuth 콜백 | `boolean` | - ---- - -## 세션 - -| 메서드 | 경로 | 설명 | 비고 | -| -------- | ---------------------------------------- | ---------------------------------- | ----------------------------------------------------------------------------- | -| `GET` | `/session` | 모든 세션 일람표 | 반환 Session[] | -| `POST` | `/session` | 새 세션 만들기 | 몸: `{ parentID?, title? }`, 반환 Session | -| `GET` | `/session/status` | 모든 세션의 세션 상태를 가져옵니다 | `{ [sessionID: string]: `SessionStatus` }` | -| `GET` | `/session/:id` | 세션 상세보기 | 반품 Session | -| `DELETE` | `/session/:id` | 세션 삭제 및 모든 데이터 | `boolean` | -| `PATCH` | `/session/:id` | 업데이트 세션 속성 | 본체: `{ title? }`, 반환 Session | -| `GET` | `/session/:id/children` | 세션의 하위 세션 | 리턴 Session[] | -| `GET` | `/session/:id/todo` | 세션의 할 일(Todo) 목록 받기 | Todo[] | -| `POST` | `/session/:id/init` | 앱 초기화 및 `AGENTS.md` 분석 | 몸: `{ messageID, providerID, modelID }`, 반환 `boolean` | -| `POST` | `/session/:id/fork` | 메시지의 기존 세션 | 몸: `{ messageID? }`, 반환 Session | -| `POST` | `/session/:id/abort` | 운영 중인 세션 | 반품 `boolean` | -| `POST` | `/session/:id/share` | 세션 공유 | Session | -| `DELETE` | `/session/:id/share` | 세션 공유 | Session | -| `GET` | `/session/:id/diff` | `/session/:id/diff` | `messageID?`, 반환 FileDiff[] | -| `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: `Message`, parts: `Part[]`}[]` | -| `POST` | `/session/:id/message` | 응답을 위해 메시지를 보내고 기다립니다 | 몸: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, 반환 `{ info: `Message`, parts: `Part[]`}` | -| `GET` | `/session/:id/message/:messageID` | 메시지 보내기 | `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/prompt_async` | 비동기적으로 메시지 보내기 | 몸: `/session/:id/message`와 동일, `204 No Content`를 반환 | -| `POST` | `/session/:id/command` | 슬래시 명령어 실행 | 본체: `{ messageID?, agent?, model?, command, arguments }`, 반환 `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/shell` | shell 명령 실행 | 체: `{ agent, model?, command }`, 반환 `{ info: `Message`, parts: `Part[]`}` | - ---- - -## 명령 - -| 방법 | 경로 | 설명 | 응답 | -| ----- | ---------- | --------- | --------------------------------------------- | -| `GET` | `/command` | 모든 명령 | Command[] | - ---- - -## 파일 - -| 방법 | 경로 | 설명 | 응답 | -| ----- | ------------------------ | ---------------------------- | --------------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | 파일에서 텍스트 검색 | `path`, `lines`, `line_number`, `absolute_offset`, `submatches`가 포함된 일치 객체 배열 | -| `GET` | `/find/file?query=` | 이름으로 파일/디렉터리 찾기 | `string[]` (경로) | -| `GET` | `/find/symbol?query=` | 워크스페이스 심볼 찾기 | Symbol[] | -| `GET` | `/file?path=` | 파일 및 디렉터리 목록 | FileNode[] | -| `GET` | `/file/content?path=

` | 파일 읽기 | FileContent | -| `GET` | `/file/status` | 추적 중인 파일 상태 가져오기 | File[] | - -#### `/find/file` 쿼리 매개 변수 - -- `query` (required) - 검색 문자열 (fuzzy 일치) -- `type` (선택 사항) - `"file"` 또는 `"directory"`에 제한 결과 -- `directory` (선택 사항) - 검색에 대한 프로젝트 루트를 무시 -- (선택) `limit` - 최대 결과 (1-200) -- `dirs` (옵션) - 레거시 플래그 (`"false"`는 파일만 반환) - ---- - -## 도구 (실험적) - -| 방법 | 경로 | 설명 | 응답 | -| ----- | ------------------------------------------- | ----------------------- | --------------------------------------------- | -| `GET` | `/experimental/tool/ids` | 모든 도구 ID | 도구 | -| `GET` | `/experimental/tool?provider=

&model=` | 모델용 JSON 스키마 목록 | 도구 목록 | - ---- - -### LSP, 포매터 & MCP - -| 방법 | 경로 | 설명 | 응답 | -| ------ | ------------ | ---------------------- | -------------------------------------------------------- | -| `GET` | `/lsp` | LSP 서버 상태 | LSPStatus[] | -| `GET` | `/formatter` | 형식의 상태를 확인 | FormatterStatus[] | -| `GET` | `/mcp` | MCP 서버 상태를 얻는다 | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | MCP 서버가 동적 | 본체: `{ name, config }`, MCP 상태 객체를 반환 | - ---- - -## 에이전트 - -| 방법 | 경로 | 설명 | 응답 | -| ----- | -------- | ------------------------- | ----------------------------------------------- | -| `GET` | `/agent` | 이용 가능한 모든 에이전트 | 에이전트[] | - ---- - -### 로깅 - -| 방법 | 경로 | 설명 | 응답 | -| ------ | ------ | ----------------------------------------------------- | --------- | -| `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` | 쇼 토스트(`{ title?, message, variant }`) | `boolean` | -| `GET` | `/tui/control/next` | 다음 컨트롤 요청 시 기다리고 | 제어 요청 개체 | -| `POST` | `/tui/control/response` | 통제 요청(`{ body }`) 대응 | `boolean` | - ---- - -### 인증 - -| 방법 | 경로 | 설명 | 응답 | -| ----- | ----------- | --------------------------------------------------- | --------- | -| `PUT` | `/auth/:id` | 인증 자격 증명 몸은 공급자 스키마를 일치해야 합니다 | `boolean` | - ---- - -## 이벤트 - -| 방법 | 경로 | 설명 | 응답 | -| ----- | -------- | ------------------------------------------------------------------------------- | ------------------------ | -| `GET` | `/event` | 서버 전송 이벤트 스트림. 첫 번째 이벤트는 `server.connected`, 그 후 버스 이벤트 | Server-sent event stream | - ---- - -### 문서 - -| 방법 | 경로 | 설명 | 응답 | -| ----- | ------ | ---------------- | ------------------------ | -| `GET` | `/doc` | OpenAPI 3.1 사양 | HTML 페이지 OpenAPI 사양 | diff --git a/packages/web/src/content/docs/ko/share.mdx b/packages/web/src/content/docs/ko/share.mdx deleted file mode 100644 index 9e5c638824..0000000000 --- a/packages/web/src/content/docs/ko/share.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: 공유 -description: OpenCode 대화를 공유하세요. ---- - -opencode의 공유 기능은 opencode 대화에 대한 공개 링크를 만들 수 있으므로 Teammates와 협업하거나 다른 곳에서 도움을받을 수 있습니다. - -:::note -공유 대화는 링크를 통해 누구나 쉽게 접근할 수 있습니다. -::: - ---- - -## 작동 방식 - -대화를 공유할 때, opencode: - -1. 세션에 대한 독특한 공개 URL 만들기 -2. 우리의 서버에 대화 기록 동기화 -3. 공유 가능한 링크를 통해 접근 할 수있는 대화 만들기 — `opncd.ai/s/` - ---- - -## 공유 - -opencode는 대화가 공유되는 방법을 제어하는 세 가지 공유 모드를 지원합니다. - ---- - -## 수동 (기본) - -기본적으로 opencode는 수동 공유 모드를 사용합니다. 세션은 자동으로 공유되지 않지만 `/share` 명령을 사용하여 수동으로 공유 할 수 있습니다. - -``` -/share -``` - -클립보드에 복사할 수 있는 독특한 URL을 생성합니다. - -[config 파일](/docs/config)에서 수동 모드를 명시적으로 설정하려면: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - ---- - -## 자동 공유 - -`share` 옵션을 설정하여 모든 새로운 대화에 대한 자동 공유를 활성화 할 수 있습니다 `"auto"` 당신의 [config 파일](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "auto" -} -``` - -자동 공유 활성화로 모든 새로운 대화는 자동으로 공유되고 링크가 생성됩니다. - ---- - -#### 비활성화 - -`share` 옵션을 설정하여 완전히 공유할 수 있습니다. `"disabled"`에 [config file](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -주어진 프로젝트를 위해 팀 전반에 걸쳐 이것을 시행하려면 프로젝트에 `opencode.json`에 추가하고 Git로 확인하십시오. - ---- - -## 공유 취소 - -대화를 중지하고 공공 액세스에서 제거 : - -``` -/unshare -``` - -이 공유 링크를 제거하고 대화와 관련된 데이터를 삭제합니다. - ---- - -## 개인 정보 - -대화를 나누면 마음이 유지되는 몇 가지가 있습니다. - ---- - -## 데이터 보유 - -공유 대화는 명시적으로 그들을 공유 할 때까지 접근 할 수 있습니다. 이름 \* -다음: - -- 전체 대화 기록 -- 모든 메시지 및 응답 -- 세션 메타데이터 - ---- - -### 추천 - -- 민감한 정보를 포함하지 않는 대화 만 공유합니다. -- 공유하기 전에 대화 내용을 검토하십시오. -- 협업이 완료되면 Unshare 대화. -- 독점 코드 또는 기밀 데이터와 대화를 공유하지 마십시오. -- 민감한 프로젝트를 위해, 완전히 공유할 수 있습니다. - ---- - -## 기업용 - -기업 배포를 위해, 공유 기능은: - -- ** 보안 준수를 위해 완전히 비활성화 ** -- **SSO를 통해 인증된 사용자에 대한 제한 ** -- ** 자체 인프라 ** - -[Learn more](/docs/enterprise) 귀하의 조직에서 opencode를 사용하여. diff --git a/packages/web/src/content/docs/ko/skills.mdx b/packages/web/src/content/docs/ko/skills.mdx deleted file mode 100644 index 03ec9c75a4..0000000000 --- a/packages/web/src/content/docs/ko/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: "에이전트 스킬" -description: "SKILL.md 정의를 통해 재사용 가능한 동작을 정의합니다." ---- - -Agent Skill let opencode discover reusable instruction from your repo 또는 홈 디렉토리. -Skills are loaded on-demand via native `skill` tool-agents see available skills and can loaded full content when needed. - ---- - -## 파일 위치 - -기술 이름 당 하나의 폴더를 만들고 내부 `SKILL.md`를 넣어. -opencode 이 위치를 검색: - -- 프로젝트 구성: `.opencode/skills//SKILL.md` -- 글로벌 구성: `~/.config/opencode/skills//SKILL.md` -- 프로젝트 클로드 호환 : `.claude/skills//SKILL.md` -- 글로벌 클로드 호환 : `~/.claude/skills//SKILL.md` -- 프로젝트 에이전트 호환 : `.agents/skills//SKILL.md` -- 글로벌 에이전트 호환 : `~/.agents/skills//SKILL.md` - ---- - -## 검색 이해 - -Project-local paths의 경우, 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`는 YAML frontmatter로 시작해야 합니다. -이 필드는 인식됩니다: - -- `name` (필수) -- `description` (필수) -- (선택) `license` -- (선택) `compatibility` -- `metadata` (선택 사항, 문자열에 문자열 맵) - -알려진 frontmatter 필드는 무시됩니다. - ---- - -## 유효한 이름 - -`name`는 해야 합니다: - -- 1–64자 -- 단 하나 hyphen 분리기를 가진 더 낮은 케이스 alphanumeric가 있으십시오 -- `-`로 시작 또는 끝 아닙니다 -- 연속 `--` 포함하지 -- `SKILL.md`를 포함하는 디렉토리 이름을 일치 - -동등한 regex: - -```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 - - - git-release - Create consistent releases and changelogs - - -``` - -에이전트는 도구를 호출하여 기술을로드 : - -``` -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" - } - } - } - } -} -``` - ---- - -## 스킬 도구 비활성화 - -그들을 사용하지 않는 에이전트을위한 완전히 비활성화 된 기술 : - -**사용자 지정 에이전트**: - -```yaml ---- -tools: - skill: false ---- -``` - -** 내장 에이전트 **: - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -비활성화 할 때, `` 섹션은 완전히 부유합니다. - ---- - -## 로딩 문제 해결 - -기술이 나타나지 않는 경우: - -1. `SKILL.md`는 모든 모자에서 spelled -2. `name`와 `description`를 포함하는 검사 -3. 기술 이름은 모든 위치에서 독특합니다. -4. `deny`를 가진 허가를 검사하십시오 에이전트에서 숨겨집니다 diff --git a/packages/web/src/content/docs/ko/themes.mdx b/packages/web/src/content/docs/ko/themes.mdx deleted file mode 100644 index af148eda10..0000000000 --- a/packages/web/src/content/docs/ko/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -title: 테마 -description: 내장 테마를 선택하거나 자신만의 테마를 정의하세요. ---- - -OpenCode를 사용하면 여러 내장 테마 중 하나에서 선택할 수 있으며 terminal 테마에 적응하는 테마를 사용하거나 사용자 정의 테마를 정의 할 수 있습니다. - -기본적으로 OpenCode는 자체 `opencode` 테마를 사용합니다. - ---- - -## 터미널 요구 사항 - -테마가 전체 색상 팔레트로 올바르게 표시되려면 터미널이 **truecolor** (24비트 색상)를 지원해야 합니다. 대부분의 최신 터미널은 기본적으로 이를 지원하지만, 활성화해야 할 수도 있습니다: - -- **지원 확인**: `echo $COLORTERM` 실행 - `truecolor` 또는 `24bit`가 출력되어야 합니다. -- **truecolor 활성화**: 셸 프로필에서 환경 변수 `COLORTERM=truecolor`를 설정하십시오. -- **터미널 호환성**: 터미널 에뮬레이터가 24비트 색상을 지원하는지 확인하십시오 (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) Dark 테마 기반 | - -그리고 더, 우리는 끊임없이 새로운 테마를 추가하고 있습니다. - ---- - -## 시스템 테마 - -`system` 테마는 터미널의 색상 스키마에 자동으로 적응하도록 설계되었습니다. 고정 색상을 사용하는 기존 테마와 달리, system 테마는: - -- **그레이스케일 생성**: 터미널의 배경 색상을 기반으로 사용자 정의 그레이스케일을 생성하여 최적의 대비를 보장합니다. -- **ANSI 색상 사용**: 구문 강조 및 UI 요소에 표준 ANSI 색상(0-15)을 활용하여 터미널의 색상 팔레트를 존중합니다. -- **터미널 기본값 유지**: 텍스트 및 배경 색상에 `none`을 사용하여 터미널의 기본 모양을 유지합니다. - -시스템 테마는 다음과 같은 사용자에게 적합합니다: - -- OpenCode가 터미널의 모양과 일치하기를 원하는 경우 -- 사용자 정의 터미널 색상 스키마를 사용하는 경우 -- 모든 터미널 애플리케이션에서 일관된 모양을 선호하는 경우 - ---- - -## 테마 사용 - -`/theme` 명령어로 테마 선택기를 불러와 테마를 선택할 수 있습니다. 또는 `tui.json`에서 지정할 수 있습니다. - -```json title="tui.json" {3} -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - ---- - -## 사용자 정의 테마 - -OpenCode는 사용자가 쉽게 테마를 만들고 사용자 정의할 수 있도록 유연한 JSON 기반 테마 시스템을 지원합니다. - ---- - -### 계층 구조 - -테마는 다음 순서대로 여러 디렉토리에서 로드되며, 나중 디렉토리가 이전 디렉토리를 덮어씁니다: - -1. **내장 테마 (Built-in themes)** - 바이너리에 내장되어 있습니다. -2. **사용자 설정 디렉토리 (User config directory)** - `~/.config/opencode/themes/*.json` 또는 `$XDG_CONFIG_HOME/opencode/themes/*.json`에 정의됩니다. -3. **프로젝트 루트 디렉토리 (Project root directory)** - `/.opencode/themes/*.json`에 정의됩니다. -4. **현재 작업 디렉토리 (Current working directory)** - `./.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 형식을 사용합니다: - -- **Hex 색상**: `"#ffffff"` -- **ANSI 색상**: `3` (0-255) -- **색상 참조**: `"primary"` 또는 사용자 정의 정의 -- **다크/라이트 변형**: `{"dark": "#000", "light": "#fff"}` -- **색상 없음**: `"none"` - 터미널의 기본 색상 또는 투명 사용 - ---- - -### 색상 정의 - -`defs` 섹션은 선택 사항이며 테마 내에서 참조할 수 있는 재사용 가능한 색상을 정의할 수 있습니다. - ---- - -### 터미널 기본값 - -`"none"`이라는 특별한 값은 모든 색상에 대해 터미널의 기본 색상을 상속하는 데 사용할 수 있습니다. 이는 특히 터미널의 색상 스키마와 매끄럽게 어우러지는 테마를 만들 때 유용합니다: - -- `"text": "none"` - 터미널의 기본 전경색 사용 -- `"background": "none"` - 터미널의 기본 배경색 사용 - ---- - -### 예제 - -사용자 정의 테마의 예입니다: - -```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" - } - } -} -``` diff --git a/packages/web/src/content/docs/ko/tools.mdx b/packages/web/src/content/docs/ko/tools.mdx deleted file mode 100644 index 8fe5ab1d0a..0000000000 --- a/packages/web/src/content/docs/ko/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -title: 도구 -description: LLM이 사용할 수 있는 도구를 관리합니다. ---- - -도구는 LLM을 사용하여 코드베이스에서 작업을 수행 할 수 있습니다. opencode는 내장 도구 세트로 제공되지만, [custom tools](/docs/custom-tools) 또는 [MCP 서버](/docs/mcp-servers)로 확장할 수 있습니다. - -기본적으로 모든 도구는**enabled**이며, 실행할 권한이 없습니다. [permissions](/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" - } -} -``` - -[Learn more](/docs/permissions) configuring 권한에 대해. - ---- - -## 내장 - -다음은 opencode에서 사용할 수있는 모든 내장 도구입니다. - ---- - -###### bash - -프로젝트 환경에서 shell 명령을 실행합니다. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "bash": "allow" - } -} -``` - -이 도구는 `npm install`, `git status` 또는 다른 shell 명령과 같은 terminal 명령을 실행하는 LLM을 허용합니다. - ---- - -### edit - -정확한 문자열 교체를 사용하여 기존 파일을 수정합니다. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -이 도구는 정확한 텍스트 일치를 대체하여 파일에 정확한 편집을 수행합니다. LLM은 코드를 modify하는 주요 방법입니다. - ---- - -### write - -새로운 파일을 만들거나 기존의 것을 덮어쓰기. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -LLM을 사용하여 새 파일을 만듭니다. 이미 존재하는 경우 기존 파일을 덮어쓰겠습니다. - -:::note -`write` 공구는 모든 파일 수정 (`edit`, `write`, `patch`)를 포함하는 `edit` 허가에 의해 통제됩니다. -::: - ---- - -### read - -codebase에서 파일 내용을 읽으십시오. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "read": "allow" - } -} -``` - -이 도구는 파일을 읽고 내용을 반환합니다. 큰 파일에 대한 특정 라인 범위를 읽을 수 있습니다. - ---- - -#### grep - -정규 표현식을 사용하여 파일 내용을 검색합니다. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "grep": "allow" - } -} -``` - -Codebase에서 빠른 콘텐츠 검색. 전체 regex 문법 및 파일 패턴 필터링 지원. - ---- - -#### glob - -패턴 매칭으로 파일 찾기. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "glob": "allow" - } -} -``` - -`**/*.js` 또는 `src/**/*.ts`와 같은 glob 패턴을 사용하여 파일 검색. 수정 시간에 의해 정렬 된 파일 경로 반환. - ---- - -### lsp (실험적) - -정의, 참고, hover info 및 호출 hierarchy와 같은 코드 인텔리전스 기능을 얻기 위해 구성 된 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 Servers](/docs/lsp)를 참조하십시오. - ---- - -## patch - -파일에 패치를 적용합니다. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -이 도구는 코드베이스에 패치 파일을 적용합니다. 다양한 소스에서 diffs 및 Patch를 적용하는 데 유용합니다. - -:::note -`patch` 공구는 모든 파일 수정 (`edit`, `write`, `patch`)를 포함하는 `edit` 허가에 의해 통제됩니다. -::: - ---- - -### skill - -[skill](/docs/skills) (`SKILL.md` 파일)을로드하고 대화의 내용을 반환합니다. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "skill": "allow" - } -} -``` - ---- - -## todowrite - -코딩 세션 중에 todo 목록을 관리합니다. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "todowrite": "allow" - } -} -``` - -복잡한 작업 중에 진행 상황을 추적하기 위해 작업 목록을 만들고 업데이트합니다. LLM은 멀티 단계 작업을 구성하기 위해 이것을 사용합니다. - -:::note -이 도구는 기본으로 시약을 비활성화하지만 수동으로 활성화 할 수 있습니다. [더 알아보기](/docs/agents/#permissions) -::: - ---- - -#### webfetch - -Fetch 웹 콘텐츠. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "webfetch": "allow" - } -} -``` - -LLM을 fetch 및 웹 페이지를 읽을 수 있습니다. 온라인 리소스를 찾는 데 도움이 되는 문서 또는 연구 - ---- - -#### 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 키가 필요하지 않습니다 - 도구는 인증없이 Exa AI의 호스팅 MCP 서비스에 직접 연결됩니다. - -:::tip -`websearch`를 사용하면 특정 URL (retrieval)에서 콘텐츠를 검색해야합니다. -::: - ---- - -### question - -실행 중에 사용자의 질문 요청. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "question": "allow" - } -} -``` - -이 도구는 작업 중에 LLM을 요청할 수 있습니다. 그것은 유용합니다: - -- 사용자 선호도 또는 요구 사항 변경 -- 주위 지침 -- 구현 선택에 대한 결정 -- 어떤 방향에 대한 선택 제공 - -각 질문에는 헤더, 질문 텍스트 및 옵션 목록이 포함되어 있습니다. 사용자는 제공된 선택권에서 선택하거나 주문 대답을 타자를 수 있습니다. 여러 질문이 있을 때, 사용자는 모든 답변을 제출하기 전에 그들 사이에서 탐색 할 수 있습니다. - ---- - -## 사용자 정의 도구 - -사용자 정의 도구는 LLM이 호출 할 수있는 자신의 기능을 정의 할 수 있습니다. config 파일에 정의되어 arbitrary 코드를 실행할 수 있습니다. - -[Learn more](/docs/custom-tools) 사용자 정의 도구 만들기. - ---- - -## MCP 서버 - -MCP(Model Context Protocol) 서버는 외부 도구와 서비스를 통합할 수 있습니다. 이 데이터베이스 액세스, API 통합 및 타사 서비스가 포함되어 있습니다. - -MCP 서버 구성에 대한 [Learn more](/docs/mcp-servers). - ---- - -## 내부 - -내부, 도구 `grep` 그리고 `glob` 사용 [ripgrep](https://github.com/BurntSushi/ripgrep) 후드 아래에. 기본적으로 ripgrep은 `.gitignore` 패턴을 존중하며 `.gitignore`에 나열된 파일 및 디렉토리를 검색 및 목록에서 제외됩니다. - ---- - -#### Ignore 패턴 - -일반적으로 무시되는 파일을 포함하려면 프로젝트 루트에 `.ignore` 파일을 만듭니다. 이 파일은 명시적으로 특정 경로를 허용 할 수 있습니다. - -```text title=".ignore" -!node_modules/ -!dist/ -!build/ -``` - -예를 들어,이 `.ignore` 파일은 `node_modules/`, `dist/` 및 `build/` 디렉토리 내에서 검색 할 수 있습니다. `.gitignore`. diff --git a/packages/web/src/content/docs/ko/troubleshooting.mdx b/packages/web/src/content/docs/ko/troubleshooting.mdx deleted file mode 100644 index a7a7ae5e43..0000000000 --- a/packages/web/src/content/docs/ko/troubleshooting.mdx +++ /dev/null @@ -1,303 +0,0 @@ ---- -title: 문제 해결 -description: 일반적인 문제와 해결 방법. ---- - -opencode와 문제를 디버그하려면 로그와 로컬 데이터를 확인하여 디스크에 저장합니다. - ---- - -## 로깅 - -로그 파일은 다음과 같습니다: - --**macOS/리눅스**: `~/.local/share/opencode/log/` - -- **Windows**: 압박 `WIN+R`와 풀 `%USERPROFILE%\.local\share\opencode\log` - -로그 파일은 타임스탬프 (예 : `2025-01-09T123456.log`)과 가장 최근 10 로그 파일이 보관됩니다. - -자세한 디버그 정보를 얻기 위해 `--log-level` 명령줄 옵션을 사용하여 로그 레벨을 설정할 수 있습니다. 예를 들면, `opencode --log-level DEBUG`. - ---- - -## 저장소 - -opencode 저장 세션 데이터 및 디스크에 다른 응용 데이터: - --**macOS/리눅스**: `~/.local/share/opencode/` - -- **Windows**: 압박 `WIN+R`와 풀 `%USERPROFILE%\.local\share\opencode` - -이 디렉토리는 다음과 같습니다: - -- `auth.json` - API 키, OAuth 토큰과 같은 인증 데이터 -- `log/` - 응용 프로그램 로그 -- `project/` - 세션 및 메시지 데이터와 같은 프로젝트별 데이터 -- 프로젝트가 Git repo 안에 있는 경우에, 그것은 `.//storage/`에서 저장됩니다 -- Git repo가 아닌 경우 `./global/storage/`에 저장됩니다. - ---- - -## 데스크톱 앱 - -opencode 데스크톱은 배경에서 로컬 opencode 서버 (`opencode-cli` sidecar)를 실행합니다. 대부분의 문제는 misbehaving 플러그인, 손상된 캐시, 또는 나쁜 서버 설정에 의해 발생합니다. - -## 빠른 확인 - -- 완전히 종료하고 앱을 다시 시작. -- 앱이 오류 화면을 보여 주면 ** Restart**를 클릭하고 오류 세부 정보를 복사합니다. -- macOS만: `OpenCode` 메뉴 -> **웹뷰 **(UI가 공백/frozen인 경우). - ---- - -## 플러그인 비활성화 - -데스크톱 앱이 출시, 거는, 또는 이상한 것에서 충돌하면 플러그인을 비활성화하여 시작합니다. - -### 전역 설정 확인 - -글로벌 설정 파일을 열고 `plugin` 키를 찾습니다. - --**macOS/리눅스**: `~/.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는 디스크에서 로컬 플러그인을로드 할 수 있습니다. Temporarily 이동 이러한 방법 (또는 폴더 이름을 변경) 및 데스크톱 응용 프로그램을 다시 시작: - -- **글로벌 플러그인** -**macOS/리눅스**: `~/.config/opencode/plugins/` -- **Windows**: 압박 `WIN+R`와 풀 `%USERPROFILE%\.config\opencode\plugins` -- **프로젝트 플러그인** (프로젝트 설정만 사용) -- `/.opencode/plugins/` - -앱이 다시 일하는 경우, 재 활성화 플러그인은 한 번에 문제가 발생할 수 있습니다. - ---- - -#### 캐시 삭제 - -플러그인을 비활성화하는 경우 도움이되지 않습니다 (또는 플러그인 설치가 붙어있다), 캐시를 삭제 그래서 opencode는 그것을 재구성 할 수 있습니다. - -1. Quit opencode 데스크톱 완전히. -2. 캐시 디렉토리 삭제: - --**macOS**: 찾기 -> `Cmd+Shift+G` -> 붙여넣기 `~/.cache/opencode` - -- **Linux**: `~/.cache/opencode` 삭제 (또는 `rm -rf ~/.cache/opencode` 실행) -- **Windows**: 압박 `WIN+R`와 풀 `%USERPROFILE%\.cache\opencode` - -3. Restart opencode 데스크탑. - ---- - -## 서버 연결 문제 수정 - -opencode 데스크톱은 자체 로컬 서버(기본)를 시작하거나 구성된 서버 URL에 연결할 수 있습니다. - -**"Connection Failed"** 대화 상자 (또는 앱이 스패시 화면을 지나지 않습니다), 사용자 정의 서버 URL을 확인합니다. - -### 데스크톱 기본 서버 URL 삭제 - -Home 화면에서 Server Picker를 열려면 서버 이름(상태 점)을 클릭하십시오. **기본 서버** 섹션에서 **Clear**를 클릭합니다. - -#### 설정에서 server.port/server.hostname 제거 - -`opencode.json(c)`가 `server` 섹션을 포함하면 일시적으로 제거하고 데스크톱 앱을 다시 시작합니다. - -### 환경 변수 확인 - -`OPENCODE_PORT`가 있는 경우, 데스크탑 앱은 로컬 서버의 포트를 사용하려고 합니다. - -- `OPENCODE_PORT` (또는 무료 포트를 선택) 및 재시작. - ---- - -## Linux: Wayland / X11 문제 - -Linux에서 일부 Wayland 설정은 공백 창이나 compositor 오류를 일으킬 수 있습니다. - -- If you're on Wayland and the app is blank/crashing, `OC_ALLOW_WAYLAND=1`로 출시하려고합니다. -- 더 나쁜 것을 만드는 경우, 제거하고 X11 세션에서 실행하려고합니다. - ---- - -## Windows: WebView2 런타임 - -Windows에서 opencode 데스크톱은 Microsoft Edge ** WebView2 실행 시간 **를 요구합니다. 앱이 공백 창에 열거나 시작하지 않을 경우, install/update WebView2를 설치하고 다시 시도하십시오. - ---- - -## Windows: 일반 성능 문제 - -느린 성능, 파일 액세스 문제 또는 Windows의 terminal 문제를 경험하는 경우 [WSL (Windows Subsystem for Linux)](/docs/windows-wsl)를 사용하여 시도하십시오. WSL은 opencode의 기능으로 더 원활하게 작동하는 Linux 환경을 제공합니다. - ---- - -## 알림이 표시되지 않음 - -opencode 데스크톱은 시스템 알림을 보여줍니다 : - -- OS 설정에서 opencode에 대한 알림이 활성화되고, -- 앱 창이 집중되지 않습니다. - ---- - -## 데스크톱 앱 저장소 재설정 (최후의 수단) - -앱이 시작되지 않은 경우 UI 내부에서 설정을 취소할 수 없습니다. 데스크탑 앱의 저장된 상태를 재설정하십시오. - -1. Quit opencode 데스크탑. -2. 이 파일을 찾아 삭제 (opencode 데스크톱 앱 데이터 디렉토리에서 라이브): - -- `opencode.settings.dat` (데스크톱 기본 서버 URL) -- `opencode.global.dat` 및 `opencode.workspace.*.dat` (최근 서버/프로젝트와 같은 UI 국가) - -빠른 디렉토리를 찾을 수: - --**macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (위의 파일명 검색) - -- **리눅스 **: 위의 파일명에 대한 `~/.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. terminal에 있는 산출을 보기 위하여 `--print-logs`로 달리기를 시도하십시오 -3. 당신은 `opencode upgrade`를 가진 최신 버전이 있는 것을 지킵니다 - ---- - -### 인증 문제 - -1. TUI에서 `/connect` 명령으로 다시 입력 시도 -2. API 키가 유효하다는 것을 확인 -3. 네트워크가 공급자의 API에 연결을 허용 - ---- - -#### 모델을 사용할 수 없음 - -1. 공급자와 정통한 확인 -2. config의 모델명을 수정한다. -3. 몇몇 모형은 특정한 접근 또는 구독을 요구할지도 모릅니다 - -만약 당신이 `ProviderModelNotFoundError`에 직면 하는 경우 가장 가능성이 잘못 -모델 어딘가를 나타냅니다. -모형은 이렇게 참고되어야 합니다: `/` - -예제: - -- `openai/gpt-4.1` -- `openrouter/google/gemini-2.5-flash` -- `opencode/kimi-k2` - -당신이 액세스 할 수있는 모델을 파악하려면, `opencode models`를 실행 - ---- - -## ProviderInitError - -ProviderInitError가 발생하면 잘못된 구성이나 손상된 구성이 있습니다. - -해결하기: - -1. 첫째로, 당신의 공급자는 [providers guide](./providers)를 따르기 위하여 제대로 설치됩니다 -2. 문제가 발생하면 저장된 구성을 삭제하십시오. - - ```bash - rm -rf ~/.local/share/opencode - ``` - -Windows에서, `WIN+R`를 누르고 삭제하십시오: `%USERPROFILE%\.local\share\opencode` - -3. TUI의 `/connect` 명령을 사용하여 공급자와 재해. - ---- - -### AI_APICallError 및 공급자 패키지 문제 - -API 호출 오류가 발생하면, 이 공급 업체 패키지로 인해 발생할 수 있습니다. opencode 동적 설치 공급자 패키지 (OpenAI, Anthropic, Google 등) 필요 하 고 로컬로 캐시. - -공급자 패키지 문제를 해결하려면: - -1. 공급자 포장 캐시를 지우십시오: - - ```bash - rm -rf ~/.cache/opencode - ``` - -Windows에서, `WIN+R`를 누르고 삭제하십시오: `%USERPROFILE%\.cache\opencode` - -2. 최신 공급자 포장을 재설치하는 Restart opencode - -이것은 종종 모델 매개 변수와 API 변경과 호환성 문제를 해결하는 공급자 패키지의 가장 최근 버전을 다운로드하기 위해 opencode를 강제합니다. - ---- - -#### Linux에서 복사/붙여넣기 작동 안 함 - -Linux 사용자는 다음과 같은 클립 보드 유틸리티 중 하나가 복사 / 붙여 넣기 기능에 설치해야합니다. - -** X11 시스템:** - -```bash -apt install -y xclip -# or -apt install -y xsel -``` - -**웨이랜드 시스템:** - -```bash -apt install -y wl-clipboard -``` - -** 헤드리스 환경에 대한:** - -```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`. diff --git a/packages/web/src/content/docs/ko/tui.mdx b/packages/web/src/content/docs/ko/tui.mdx deleted file mode 100644 index db2b1297e0..0000000000 --- a/packages/web/src/content/docs/ko/tui.mdx +++ /dev/null @@ -1,425 +0,0 @@ ---- -title: TUI -description: OpenCode 터미널 사용자 인터페이스 사용. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode는 LLM과 함께 프로젝트 작업을 하기 위한 대화형 터미널 인터페이스(TUI)를 제공합니다. - -OpenCode를 실행하면 현재 디렉토리에서 TUI가 시작됩니다. - -```bash -opencode -``` - -또는 특정 작업 디렉토리에 대해 시작할 수 있습니다. - -```bash -opencode /path/to/project -``` - -TUI에 들어가면 메시지를 입력하여 프롬프트할 수 있습니다. - -```text -Give me a quick summary of the codebase. -``` - ---- - -## 파일 참조 - -`@`를 사용하여 메시지에서 파일을 참조할 수 있습니다. 이것은 현재 작업 디렉토리에서 퍼지(fuzzy) 파일 검색을 수행합니다. - -:::tip -`@`를 사용하여 메시지에서 파일을 참조할 수 있습니다. -::: - -```text "@packages/functions/src/api/index.ts" -How is auth handled in @packages/functions/src/api/index.ts? -``` - -파일의 내용이 자동으로 대화에 추가됩니다. - ---- - -## Bash 명령 - -`!`로 메시지를 시작하여 셸 명령을 실행합니다. - -```bash frame="none" -!ls -la -``` - -명령의 출력은 도구 결과로 대화에 추가됩니다. - ---- - -## 명령 - -OpenCode TUI를 사용할 때 `/` 뒤에 명령 이름을 입력하여 작업을 빠르게 실행할 수 있습니다. 예를 들어: - -```bash frame="none" -/help -``` - -대부분의 명령에는 기본 리더 키인 `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" -/themes -``` - -**키바인드:** `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 setup - -`/editor`와 `/export` 명령 모두 `EDITOR` 환경 변수에 지정된 편집기를 사용합니다. - - - - ```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" - ``` - - 영구적으로 설정하려면 셸 프로필(`~/.bashrc`, `~/.zshrc` 등)에 추가하십시오. - - - - - ```bash - set EDITOR=notepad - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - set EDITOR=code --wait - ``` - - 영구적으로 설정하려면 **시스템 속성** > **환경 변수**를 사용하십시오. - - - - - ```powershell - $env:EDITOR = "notepad" - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - $env:EDITOR = "code --wait" - ``` - - 영구적으로 설정하려면 PowerShell 프로필에 추가하십시오. - - - - -인기 있는 편집기 옵션은 다음과 같습니다: - -- `code` - Visual Studio Code -- `cursor` - Cursor -- `windsurf` - Windsurf -- `nvim` - Neovim editor -- `vim` - Vim editor -- `nano` - Nano editor -- `notepad` - Windows Notepad -- `subl` - Sublime Text - -:::note -VS Code와 같은 일부 편집기는 `--wait` 플래그와 함께 시작해야 합니다. -::: - -일부 편집기는 차단 모드에서 실행하려면 명령줄 인수가 필요합니다. `--wait` 플래그는 편집기 프로세스가 닫힐 때까지 차단되도록 합니다. - ---- - -## 구성 - -`tui.json` (또는 `tui.jsonc`) 파일을 통해 TUI 동작을 사용자 정의할 수 있습니다. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -이는 서버/런타임 동작을 구성하는 `opencode.json`과는 별개입니다. - -`keybinds`는 내장 기본값과 병합되므로 변경하려는 단축키만 설정하면 됩니다. - -### 옵션 - -- `theme` - UI 테마를 설정합니다. [더 알아보기](/docs/themes). -- `keybinds` - 키보드 단축키를 사용자 정의합니다. [더 알아보기](/docs/keybinds). -- `leader_timeout` - leader key를 누른 뒤 OpenCode가 다음 키 입력을 기다리는 시간을 제어합니다. 기본값은 `2000`입니다. -- `scroll_acceleration.enabled` - 부드럽고 자연스러운 스크롤을 위해 macOS 스타일의 스크롤 가속을 활성화합니다. 활성화하면 빠른 스크롤 제스처로 스크롤 속도가 증가하고 느린 움직임에서는 정밀하게 유지됩니다. **이 설정은 `scroll_speed`보다 우선하며 활성화 시 이를 덮어씁니다.** -- `scroll_speed` - 스크롤 명령을 사용할 때 TUI 스크롤 속도를 제어합니다 (최소: `0.001`, 소수점 값 지원). 기본값은 `3`입니다. **참고: `scroll_acceleration.enabled`가 `true`로 설정되면 무시됩니다.** -- `diff_style` - diff 렌더링 방식을 제어합니다. `"auto"`는 터미널 너비에 적응하고, `"stacked"`는 항상 단일 열 레이아웃을 표시합니다. -- `mouse` - TUI에서 마우스 캡처를 활성화하거나 비활성화합니다(기본값: `true`). 비활성화하면 터미널의 기본 마우스 선택/스크롤 동작이 유지됩니다. -- `attention` - TUI 데스크톱 알림과 사운드를 구성합니다. 기본적으로 비활성화되어 있습니다. - -`OPENCODE_TUI_CONFIG`를 사용하여 사용자 정의 TUI 설정 경로를 로드할 수 있습니다. - -### Attention - -Attention을 사용하면 OpenCode가 답변을 기다리거나, 권한 승인이 필요하거나, 세션 오류가 발생했거나, 세션이 완료되었을 때 TUI가 사운드와 데스크톱 알림으로 알려줍니다. `attention.enabled`로 활성화합니다. 기본 제공 이벤트는 발생할 때 사운드를 재생합니다. 데스크톱 알림은 터미널 창에 포커스가 없을 때만 전송되며 subagent 이벤트에는 사용되지 않습니다. - -- `enabled` - Attention의 모든 알림과 사운드를 활성화합니다. 기본값은 `false`입니다. -- `notifications` - Attention이 활성화된 경우 TUI가 터미널을 통해 데스크톱 알림을 보낼 수 있도록 허용합니다. 기본값은 `true`입니다. -- `sound` - Attention이 활성화된 경우 알림음을 재생할 수 있도록 허용합니다. 기본값은 `true`입니다. -- `volume` - 알림음의 기본 볼륨이며 `0`부터 `1`까지입니다. 기본값은 `0.4`입니다. -- `sound_pack` - 사용할 sound pack ID입니다. 기본값은 `opencode.default`입니다. -- `sounds` - `default`, `question`, `permission`, `error`, `done` 또는 `subagent_done`에 사용할 사용자 지정 사운드 파일을 지정합니다. 경로는 절대 경로, `file://` URL 또는 `tui.json` 기준 상대 경로일 수 있습니다. - ---- - -## 사용자 정의 - -명령 팔레트(`ctrl+x h` 또는 `/help`)를 사용하여 TUI 보기의 다양한 측면을 사용자 정의할 수 있습니다. 설정은 다시 시작해도 유지됩니다. - ---- - -#### 사용자 이름 표시 - -채팅 메시지에 사용자 이름이 표시되는지 여부를 토글합니다. 다음을 통해 액세스: - -- 명령 팔레트: "username" 또는 "hide username" 검색 -- 설정은 자동으로 유지되며 TUI 세션 간에 기억됩니다. diff --git a/packages/web/src/content/docs/ko/web.mdx b/packages/web/src/content/docs/ko/web.mdx deleted file mode 100644 index 349ee4d08d..0000000000 --- a/packages/web/src/content/docs/ko/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Web -description: 브라우저에서 OpenCode 사용하기. ---- - -opencode는 브라우저에서 웹 응용 프로그램을 실행할 수 있으며 terminal을 필요로하지 않고 동일한 강력한 AI 코딩 경험을 제공합니다. - -![opencode Web - 새로운 세션](../../../assets/web/web-homepage-new-session.png) - -## 시작하기 - -실행하여 웹 인터페이스를 시작: - -```bash -opencode web -``` - -`127.0.0.1`의 로컬 서버를 랜덤 사용 가능한 포트로 시작하고 기본 브라우저에서 opencode를 자동으로 엽니다. - -:::caution -`OPENCODE_SERVER_PASSWORD`가 설정되지 않은 경우 서버가 중단되지 않습니다. 이것은 로컬 사용을위한 괜찮지만 네트워크 액세스를 설정해야합니다. -::: - -:::tip[Windows 사용자] -최고의 경험을 위해서는 PowerShell보다 `opencode web`를 실행하십시오. 적절한 파일 시스템 액세스 및 terminal 통합을 보장합니다. -::: - ---- - -## 구성 - -명령줄 플래그 또는 [config file](/docs/config)에서 웹 서버를 구성할 수 있습니다. - -## 포트 - -기본적으로 opencode는 사용할 수 있는 포트를 선택합니다. 포트를 지정할 수 있습니다: - -```bash -opencode web --port 4096 -``` - -## 호스트 이름 - -기본적으로 서버는 `127.0.0.1` (localhost only)에 바인딩합니다. 네트워크에서 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`에 hostname을 설정하고 `opencode.local`로 서버를 광고합니다. - -동일한 네트워크에서 여러 인스턴스를 실행하려면 mDNS 도메인 이름을 지정할 수 있습니다. - -```bash -opencode web --mdns --mdns-domain myproject.local -``` - -###### CORS - -CORS에 대한 추가 도메인을 허용하려면 (사용자 정의 frontends에 적합) : - -```bash -opencode web --cors https://example.com -``` - -### 인증 - -액세스를 보호하려면 `OPENCODE_SERVER_PASSWORD` 환경 변수를 사용하여 암호를 설정하십시오. - -```bash -OPENCODE_SERVER_PASSWORD=secret opencode web -``` - -`opencode`에 대한 사용자의 기본값은 `OPENCODE_SERVER_USERNAME`로 변경할 수 있습니다. - ---- - -## 웹 인터페이스 사용 - -시작되면 웹 인터페이스는 opencode 세션에 액세스 할 수 있습니다. - -## 세션 - -홈페이지에서 세션을 보고 관리합니다. 활성 세션을 볼 수 있으며 새로운 것을 시작합니다. - -![opencode Web - Active Session](../../../assets/web/web-homepage-active-session.png) - -## 서버 상태 - -"See Servers"를 클릭하여 연결된 서버와 상태를 볼 수 있습니다. - -![opencode Web - Servers 참조](../../../assets/web/web-homepage-see-servers.png) - ---- - -## 터미널 연결 - -실행 웹 서버에 terminal TUI를 연결할 수 있습니다. - -```bash -# Start the web server -opencode web --port 4096 - -# In another terminal, attach the TUI -opencode attach http://localhost:4096 -``` - -웹 인터페이스와 terminal을 동시에 사용할 수 있도록, 같은 세션과 상태를 공유합니다. - ---- - -## 구성 파일 - -`opencode.json` config 파일에서 서버 설정을 구성할 수 있습니다: - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -Command line flags는 config 파일 설정에 대한 precedence를 가져옵니다. diff --git a/packages/web/src/content/docs/ko/windows-wsl.mdx b/packages/web/src/content/docs/ko/windows-wsl.mdx deleted file mode 100644 index e75ad41f1c..0000000000 --- a/packages/web/src/content/docs/ko/windows-wsl.mdx +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Windows (WSL) -description: WSL로 Windows에서 opencode를 더 편하게 사용하세요. ---- - -import { Steps } from "@astrojs/starlight/components" - -opencode는 Windows에서 직접 실행할 수 있지만, 가장 좋은 사용 경험을 위해 [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) 사용을 권장합니다. WSL은 opencode 기능과 자연스럽게 동작하는 Linux 환경을 제공합니다. - -:::tip[왜 WSL인가요?] -WSL은 더 나은 파일 시스템 성능, 완전한 terminal 지원, 그리고 opencode가 의존하는 개발 도구와의 호환성을 제공합니다. -::: - ---- - -## 설정 - - - -1. **WSL 설치하기** - - 아직 설치하지 않았다면 Microsoft 공식 가이드를 따라 [WSL을 설치](https://learn.microsoft.com/en-us/windows/wsl/install)하세요. - -2. **WSL에 opencode 설치하기** - - WSL 설정이 끝나면 WSL terminal을 열고 [설치 방법](/docs/) 중 하나로 opencode를 설치하세요. - - ```bash - curl -fsSL https://opencode.ai/install | bash - ``` - -3. **WSL에서 opencode 실행하기** - - 프로젝트 디렉터리로 이동한 뒤(opencode에서 Windows 파일은 `/mnt/c/`, `/mnt/d/` 등으로 접근) opencode를 실행하세요. - - ```bash - cd /mnt/c/Users/YourName/project - opencode - ``` - - - ---- - -## 데스크톱 앱 + 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`가 동작하지 않으면 WSL의 IP 주소를 사용하세요(WSL에서 `hostname -I` 실행). 이후 `http://: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. **PowerShell 대신 WSL terminal에서 `opencode web` 실행하기** - - ```bash - opencode web --hostname 0.0.0.0 - ``` - -2. **Windows 브라우저에서 접속하기** - - `http://localhost:`로 접속하세요(opencode가 URL을 출력합니다). - -WSL에서 `opencode web`를 실행하면 올바른 파일 시스템 접근과 terminal 통합을 유지하면서도 Windows 브라우저에서 바로 사용할 수 있습니다. - ---- - -## Windows 파일 접근 - -WSL에서는 `/mnt/` 디렉터리를 통해 Windows 파일 전체에 접근할 수 있습니다. - -- `C:` drive → `/mnt/c/` -- `D:` drive → `/mnt/d/` -- 다른 드라이브도 같은 방식입니다 - -예시: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -가장 매끄러운 경험을 원한다면 저장소를 WSL 파일시스템(예: `~/code/`)으로 복제하거나 복사한 뒤 그 위치에서 opencode를 실행해 보세요. -::: - ---- - -## 팁 - -- Windows 드라이브에 있는 프로젝트라도 opencode는 WSL에서 실행하면 파일 접근이 더 자연스럽습니다 -- 통합된 개발 워크플로를 위해 opencode와 함께 VS Code의 [WSL 확장](https://code.visualstudio.com/docs/remote/wsl)을 사용해 보세요 -- opencode 설정과 세션은 WSL 환경의 `~/.local/share/opencode/`에 저장됩니다 diff --git a/packages/web/src/content/docs/ko/zen.mdx b/packages/web/src/content/docs/ko/zen.mdx deleted file mode 100644 index 31b07f0a71..0000000000 --- a/packages/web/src/content/docs/ko/zen.mdx +++ /dev/null @@ -1,301 +0,0 @@ ---- -title: Zen -description: OpenCode가 제공하는 엄선된 모델 목록. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen은 OpenCode 팀이 제공하는, 테스트와 검증을 거친 모델 목록입니다. - -Zen은 OpenCode의 다른 provider와 똑같이 작동합니다. OpenCode Zen에 로그인해 API 키를 받으면 됩니다. 이는 **완전히 선택 사항**이며, OpenCode를 사용하기 위해 반드시 사용할 필요는 없습니다. - ---- - -## 배경 - -시중에는 매우 많은 모델이 있지만, 이 가운데 코딩 에이전트로 잘 작동하는 모델은 일부뿐입니다. 또한 대부분의 provider는 설정 방식이 매우 달라서, 성능과 품질에도 큰 차이가 생깁니다. - -:::tip -OpenCode에서 잘 작동하는 일부 모델과 provider를 직접 테스트했습니다. -::: - -따라서 OpenRouter 같은 서비스를 통해 모델을 사용하면, 원하는 모델의 최적 버전을 정말 쓰고 있는지 확신하기 어렵습니다. - -이 문제를 해결하기 위해 다음과 같은 작업을 했습니다. - -1. 일부 모델을 직접 테스트하고, 각 팀과 함께 가장 잘 운영하는 방법을 논의했습니다. -2. 이어서 몇몇 provider와 협력해, 이 모델들이 올바르게 제공되도록 했습니다. -3. 마지막으로 모델/provider 조합을 벤치마크하고, 자신 있게 추천할 수 있는 목록을 정리했습니다. - -OpenCode Zen은 이런 모델에 접근할 수 있게 해주는 AI gateway입니다. - ---- - -## 작동 방식 - -OpenCode Zen은 OpenCode의 다른 provider와 똑같이 작동합니다. - -1. **OpenCode Zen**에 로그인하고, 결제 정보를 추가한 뒤, API 키를 복사합니다. -2. TUI에서 `/connect` 명령을 실행하고, OpenCode Zen을 선택한 다음 API 키를 붙여넣습니다. -3. TUI에서 `/models`를 실행해, 저희가 추천하는 모델 목록을 확인합니다. - -요금은 요청별로 청구되며, 계정에 크레딧을 추가할 수 있습니다. - ---- - -## 엔드포인트 - -다음 API 엔드포인트를 통해서도 모델에 접근할 수 있습니다. - -| 모델 | 모델 ID | 엔드포인트 | 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -OpenCode config에서 사용하는 [모델 ID](/docs/config/#models)는 `opencode/` 형식입니다. 예를 들어 GPT 5.5를 사용하려면 config에서 `opencode/gpt-5.5`를 사용하면 됩니다. - ---- - -### 모델 - -사용 가능한 전체 모델 목록과 메타데이터는 다음에서 가져올 수 있습니다. - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## 요금 - -종량제(pay-as-you-go)를 지원합니다. 아래 가격은 **1M tokens당** 기준입니다. - -| 모델 | 입력 | 출력 | Cached Read | Cached Write | -| --------------------------------- | ------ | ------- | ----------- | ------------ | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -사용 기록에서 *Claude Haiku 3.5*를 볼 수 있습니다. 이는 세션 제목을 생성할 때 사용되는 [저비용 모델](/docs/config/#models)입니다. - -:::note -신용카드 수수료는 원가 그대로 전달됩니다(거래당 4.4% + $0.30). 그 외 추가 요금은 부과하지 않습니다. -::: - -무료 모델: - -- DeepSeek V4 Flash Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. -- MiMo-V2.5 Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. -- North Mini Code Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. -- Nemotron 3 Ultra Free는 한정된 기간 동안 OpenCode에서 제공됩니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. -- Big Pickle은 한정된 기간 동안 OpenCode에서 무료로 제공되는 stealth model입니다. 팀은 이 기간에 피드백을 수집하고 모델을 개선합니다. - -궁금한 점이 있으면 Contact us로 문의해 주세요. - ---- - -### 자동 충전 - -잔액이 $5 아래로 내려가면 Zen이 자동으로 $20을 충전합니다. - -자동 충전 금액은 변경할 수 있습니다. 자동 충전을 완전히 비활성화할 수도 있습니다. - ---- - -### 월간 한도 - -워크스페이스 전체와 팀의 각 구성원에 대해 월간 사용 한도를 설정할 수도 있습니다. - -예를 들어 월간 사용 한도를 $20로 설정하면, Zen은 한 달에 $20를 초과해 사용하지 않습니다. 하지만 자동 충전이 켜져 있다면 잔액이 $5 아래로 내려갈 때 자동으로 충전되어, 실제 청구 금액은 $20를 넘을 수 있습니다. - ---- - -### 지원 중단 모델 - -| 모델 | 지원 중단 날짜 | -| ------------------ | ----------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## 개인정보 보호 - -모든 모델은 미국에서 호스팅됩니다. provider는 zero-retention 정책을 따르며, 다음 예외를 제외하고는 데이터를 모델 학습에 사용하지 않습니다. - -- Big Pickle: 무료 제공 기간에는 수집된 데이터가 모델 개선에 사용될 수 있습니다. -- DeepSeek V4 Flash Free: 무료 제공 기간에는 수집된 데이터가 모델 개선에 사용될 수 있습니다. -- MiMo-V2.5 Free: 무료 제공 기간에는 수집된 데이터가 모델 개선에 사용될 수 있습니다. -- North Mini Code Free: 무료 제공 기간 동안 수집된 데이터는 보관되며 모델 개선에 사용될 수 있습니다. 개인 정보나 기밀 정보를 제출하지 마세요. 자세한 내용은 [이용 약관](https://cohere.com/terms-of-use) 및 [개인정보 처리방침](https://cohere.com/privacy)을 참조하세요. -- Nemotron 3 Ultra Free(NVIDIA 무료 엔드포인트): 평가판 전용이며 — 개인 정보나 기밀 데이터는 제출하지 마세요. 사용 내역은 보안 목적과 NVIDIA 제품 및 서비스 개선을 위해 기록됩니다. 개선 목적으로 기록된 세션 데이터는 사용자의 신원이나 영구 식별자와 연결되지 않습니다. 당사의 데이터 처리 관행에 대한 자세한 내용은 [개인정보처리방침](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)을 참조하세요. 이 엔드포인트와 상호 작용함으로써 사용자는 당사가 이러한 정보를 수집, 기록, 사용하는 것과 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)에 동의하게 됩니다. -- OpenAI APIs: 요청은 [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data)에 따라 30일 동안 보관됩니다. -- Anthropic APIs: 요청은 [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage)에 따라 30일 동안 보관됩니다. - ---- - -## 팀용 기능 - -Zen은 팀에서도 매우 잘 작동합니다. 팀원을 초대하고, 역할을 할당하고, 팀에서 사용할 모델을 선별하는 등 다양한 작업을 할 수 있습니다. - -:::note -워크스페이스는 현재 beta의 일부로 팀에 무료 제공되고 있습니다. -::: - -현재 beta의 일부로 팀의 워크스페이스 관리도 무료입니다. 가격에 대한 더 자세한 내용은 곧 공유할 예정입니다. - ---- - -### 역할 - -워크스페이스에 팀원을 초대하고 역할을 할당할 수 있습니다. - -- **Admin**: 모델, 멤버, API 키, 결제를 관리 -- **Member**: 자신의 API 키만 관리 - -Admin은 비용을 통제할 수 있도록 각 멤버의 월간 지출 한도도 설정할 수 있습니다. - ---- - -### 모델 접근 - -Admin은 워크스페이스에서 특정 모델을 활성화하거나 비활성화할 수 있습니다. 비활성화된 모델로 보내는 요청은 오류를 반환합니다. - -이는 데이터를 수집하는 모델의 사용을 비활성화하고 싶을 때 유용합니다. - ---- - -### Bring your own key - -Zen의 다른 모델도 계속 사용하면서, 자체 OpenAI 또는 Anthropic API 키를 사용할 수 있습니다. - -자체 키를 사용하면 토큰 요금은 Zen이 아니라 provider가 직접 청구합니다. - -예를 들어 조직에서 이미 OpenAI나 Anthropic 키를 가지고 있고, Zen이 제공하는 키 대신 그 키를 사용하고 싶을 수 있습니다. - ---- - -## 목표 - -OpenCode Zen을 만든 이유는 다음과 같습니다. - -1. 코딩 에이전트에 가장 적합한 모델/provider를 **벤치마크**하기 위해. -2. 성능을 낮추거나 더 저렴한 provider로 라우팅하지 않고, **최고 품질**의 선택지에 접근하기 위해. -3. 원가로 판매해 **가격 인하**를 그대로 반영하기 위해. 따라서 붙는 마진은 처리 수수료를 충당하기 위한 수준뿐입니다. -4. 다른 코딩 에이전트와도 함께 사용할 수 있게 해 **lock-in이 없도록** 하기 위해. 또한 OpenCode에서 언제나 다른 provider도 사용할 수 있게 하기 위해. diff --git a/packages/web/src/content/docs/nb/acp.mdx b/packages/web/src/content/docs/nb/acp.mdx deleted file mode 100644 index 23fbd06d22..0000000000 --- a/packages/web/src/content/docs/nb/acp.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: ACP-støtte -description: Bruk opencode i en hvilken som helst ACP-kompatibel editor. ---- - -OpenCode støtter [Agent Client Protocol](https://agentclientprotocol.com) eller (ACP), slik at du kan bruke den direkte i kompatible editorer og IDE-er. - -:::tip -For en liste over editorer og verktøy som støtter ACP, sjekk ut [ACP fremdriftsrapport](https://zed.dev/blog/acp-progress-report#available-now). -::: - -ACP er en åpen protokoll som standardiserer kommunikasjon mellom kodeditorer og AI-kodeagenter. - ---- - -## Konfigurasjon - -For å bruke OpenCode via ACP, konfigurer redigeringsprogrammet til å kjøre kommandoen `opencode acp`. - -Kommandoen starter OpenCode som en ACP-kompatibel underprosess som kommuniserer med editoren din over JSON-RPC via stdio. - -Nedenfor er eksempler på populære editorer som støtter ACP. - ---- - -### Zed - -Legg til i [Zed](https://zed.dev)-konfigurasjonen (`~/.config/zed/settings.json`): - -```json title="~/.config/zed/settings.json" -{ - "agent_servers": { - "OpenCode": { - "command": "opencode", - "args": ["acp"] - } - } -} -``` - -For å åpne den, bruk handlingen `agent: new thread` i **Kommandopaletten**. - -Du kan også binde en hurtigtast ved å redigere `keymap.json`: - -```json title="keymap.json" -[ - { - "bindings": { - "cmd-alt-o": [ - "agent::NewExternalAgentThread", - { - "agent": { - "custom": { - "name": "OpenCode", - "command": { - "command": "opencode", - "args": ["acp"] - } - } - } - } - ] - } - } -] -``` - ---- - -### JetBrains IDE-er - -Legg til [JetBrains IDE](https://www.jetbrains.com/) acp.json i henhold til [dokumentasjonen](https://www.jetbrains.com/help/ai-assistant/acp.html): - -```json title="acp.json" -{ - "agent_servers": { - "OpenCode": { - "command": "/absolute/path/bin/opencode", - "args": ["acp"] - } - } -} -``` - -For å åpne den, bruk den nye 'OpenCode'-agenten i AI Chat-agentvelgeren. - ---- - -### Avante.nvim - -Legg til i [Avante.nvim](https://github.com/yetone/avante.nvim)-konfigurasjonen: - -```lua -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" } - } - } -} -``` - -Hvis du trenger å sende miljøvariabler: - -```lua {6-8} -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" }, - env = { - OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY") - } - } - } -} -``` - ---- - -### CodeCompanion.nvim - -For å bruke OpenCode som en ACP-agent i [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), legg til følgende i Neovim-konfigurasjonen: - -```lua -require("codecompanion").setup({ - interactions = { - chat = { - adapter = { - name = "opencode", - model = "claude-sonnet-4", - }, - }, - }, -}) -``` - -Denne konfigurasjonen setter opp CodeCompanion.nvim til å bruke OpenCode som ACP-agent for chat. - -Hvis du trenger å sende miljøvariabler (som `OPENCODE_API_KEY`), se [Konfigurere adaptere: miljøvariabler](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) i CodeCompanion.nvim-dokumentasjonen for fullstendige detaljer. - -## Støtte - -OpenCode fungerer på samme måte via ACP som i terminalen. Alle funksjoner støttes: - -:::note -Noen innebygde slash-kommandoer som `/undo` og `/redo` støttes for øyeblikket ikke. -::: - -- Innebygde verktøy (filoperasjoner, terminalkommandoer, etc.) -- Egendefinerte verktøy og slash-kommandoer -- MCP servere konfigurert i OpenCode-konfigurasjonen -- Prosjektspesifikke regler fra `AGENTS.md` -- Tilpassede formatere og linters -- Agenter og tillatelsessystem diff --git a/packages/web/src/content/docs/nb/agents.mdx b/packages/web/src/content/docs/nb/agents.mdx deleted file mode 100644 index f9971758d5..0000000000 --- a/packages/web/src/content/docs/nb/agents.mdx +++ /dev/null @@ -1,754 +0,0 @@ ---- -title: Agenter -description: Konfigurer og bruk spesialiserte agenter. ---- - -Agenter er spesialiserte AI-assistenter som kan konfigureres for spesifikke oppgaver og arbeidsflyter. De lar deg lage fokuserte verktøy med tilpassede meldinger, modeller og verktøytilgang. - -:::tip -Bruk planagenten til å analysere kode og gjennomgå forslag uten å gjøre noen kodeendringer. -::: - -Du kan bytte mellom agenter under en økt eller påkalle dem med `@`-omtalen. - ---- - -## Typer - -Det er to typer agenter i OpenCode; primære agenter og underagenter. - ---- - -### Primæragenter - -Primæragenter er de viktigste assistentene du samhandler direkte med. Du kan bla gjennom dem ved å bruke **Tab**-tasten, eller din konfigurerte `switch_agent`-tastebinding. Disse agentene håndterer hovedsamtalen din. Verktøytilgang konfigureres via tillatelser - for eksempel har Build alle verktøy aktivert mens Plan er begrenset. - -:::tip -Du kan bruke **Tab**-tasten for å bytte mellom primære agenter under en økt. -::: - -OpenCode kommer med to innebygde primære agenter, **Build** og **Plan**. Vi ser nærmere på disse nedenfor. - ---- - -### Underagenter - -Underagenter er spesialiserte assistenter som primære agenter kan påkalle for spesifikke oppgaver. Du kan også starte dem manuelt ved å **@ nevne** dem i meldingene dine. - -OpenCode kommer med tre innebygde underagenter, **General**, **Explore** og **Scout**. Vi skal se på dette nedenfor. - ---- - -## Innebygd - -OpenCode kommer med to innebygde primære agenter og tre innebygde underagenter. - ---- - -### Bruk av Build - -_Modus_: `primary` - -Build er **standard** primæragent med alle verktøy aktivert. Dette er standardagenten for utviklingsarbeid der du trenger full tilgang til filoperasjoner og systemkommandoer. - ---- - -### Bruk av Plan - -_Modus_: `primary` - -En begrenset agent designet for planlegging og analyse. Vi bruker et tillatelsessystem for å gi deg mer kontroll og forhindre utilsiktede endringer. -Som standard er alt av følgende satt til `ask`: - -- `file edits`: Alle skrivinger, patcher og redigeringer -- `bash`: Alle bash-kommandoer - -Denne agenten er nyttig når du vil at LLM skal analysere kode, foreslå endringer eller lage planer uten å gjøre noen faktiske endringer i kodebasen. - ---- - -### Bruk av General - -_Modus_: `subagent` - -En generell agent for å undersøke komplekse spørsmål og utføre flertrinnsoppgaver. Har full verktøytilgang (unntatt todo), slik at den kan gjøre filendringer når det er nødvendig. Bruk denne til å kjøre flere arbeidsenheter parallelt. - ---- - -### Bruk av Explore - -_Modus_: `subagent` - -En rask, skrivebeskyttet agent for å utforske kodebaser. Kan ikke endre filer. Bruk dette når du raskt trenger å finne filer etter mønstre, søke i kode etter nøkkelord eller svare på spørsmål om kodebasen. - ---- - -### Bruk av Scout - -_Modus_: `subagent` - -En skrivebeskyttet agent for ekstern dokumentasjon og forskning på avhengigheter. Bruk denne når du trenger å klone et avhengighetsrepo inn i OpenCode sin administrerte cache, inspisere kildekoden til et bibliotek eller kryssjekke lokal kode mot upstream-implementasjoner uten å endre arbeidsområdet ditt. - ---- - -### Bruk av Compaction - -_Modus_: `primary` - -Skjult systemagent som komprimerer lang kontekst til et mindre sammendrag. Den kjører automatisk ved behov og kan ikke velges i UI. - ---- - -### Bruk av Title - -_Modus_: `primary` - -Skjult systemagent som genererer korte økttitler. Den kjører automatisk og kan ikke velges i UI. - ---- - -### Bruk av Summary - -_Modus_: `primary` - -Skjult systemagent som lager øktsammendrag. Den kjører automatisk og kan ikke velges i UI. - ---- - -## Bruk - -1. For primære agenter, bruk **Tab**-tasten for å bla gjennom dem under en økt. Du kan også bruke din konfigurerte `switch_agent` nøkkelbinding. - -2. Underagenter kan påkalles: - - **Automatisk** av primære agenter for spesialiserte oppgaver basert på deres beskrivelser. - - Manuelt ved å **@ nevne** en underagent i meldingen. For eksempel. - - ```txt frame="none" - @general help me search for this function - ``` - -3. **Navigering mellom økter**: Når underagenter oppretter sine egne underordnede økter, kan du navigere mellom overordnede økter og alle underordnede økter ved å bruke: - - **\+Right** (eller din konfigurerte `session_child_cycle`-tastebinding) for å gå videre gjennom forelder → barn1 → barn2 → ... → forelder - - **\+Left** (eller din konfigurerte `session_child_cycle_reverse`-tastebinding) for å gå bakover gjennom forelder ← barn1 ← barn2 ← ... ← forelder - - Dette lar deg sømløst bytte mellom hovedsamtalen og spesialisert underagentarbeid. - ---- - -## Konfigurasjon - -Du kan tilpasse de innebygde agentene eller lage dine egne gjennom konfigurasjon. Agenter kan konfigureres på to måter: - ---- - -### JSON - -Konfigurer agenter i konfigurasjonsfilen `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 - -Du kan også definere agenter ved å bruke markdown-filer. Plasser dem i: - -- Globalt: `~/.config/opencode/agents/` -- Per prosjekt: `.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 blir agentnavnet. For eksempel oppretter `review.md` en `review`-agent. - ---- - -## Alternativer - -La oss se på disse konfigurasjonsalternativene i detalj. - ---- - -### Beskrivelse - -Bruk alternativet `description` for å gi en kort beskrivelse av hva agenten gjør og når den skal brukes. - -```json title="opencode.json" -{ - "agent": { - "review": { - "description": "Reviews code for best practices and potential issues" - } - } -} -``` - -Dette er et **obligatorisk** konfigurasjonsalternativ. - ---- - -### Temperatur - -Kontroller tilfeldigheten og kreativiteten til LLMs svar med `temperature`-konfigurasjonen. - -Lavere verdier gjør svarene mer fokuserte og deterministiske, mens høyere verdier øker kreativiteten og variasjonen. - -```json title="opencode.json" -{ - "agent": { - "plan": { - "temperature": 0.1 - }, - "creative": { - "temperature": 0.8 - } - } -} -``` - -Temperaturverdier varierer vanligvis fra 0,0 til 1,0: - -- **0.0-0.2**: Veldig fokuserte og deterministiske svar, ideell for kodeanalyse og planlegging -- **0,3-0,5**: Balanserte svar med litt kreativitet, bra for generelle utviklingsoppgaver -- **0.6-1.0**: Mer kreative og varierte svar, nyttig for idédugnad og utforskning - -```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 spesifisert, bruker OpenCode modellspesifikke standardinnstillinger; typisk 0 for de fleste modeller, 0,55 for Qwen-modeller. - ---- - -### Maks trinn - -Kontroller det maksimale antallet agentiske iterasjoner en agent kan utføre før den blir tvunget til å svare kun med tekst. Dette lar brukere som ønsker å kontrollere kostnadene sette en grense for agenthandlinger. - -Hvis dette ikke er satt, vil agenten fortsette å iterere til modellen velger å stoppe eller brukeren avbryter økten. - -```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 grensen er nådd, mottar agenten en spesiell systemmelding som instruerer den om å svare med en oppsummering av arbeidet og anbefalte gjenværende oppgaver. - -:::caution -Det gamle `maxSteps`-feltet er avviklet. Bruk `steps` i stedet. -::: - ---- - -### Deaktiver - -Sett til `true` for å deaktivere agenten. - -```json title="opencode.json" -{ - "agent": { - "review": { - "disable": true - } - } -} -``` - ---- - -### Ledetekst - -Spesifiser en tilpasset systemmeldingsfil for denne agenten med `prompt`-konfigurasjonen. Ledetekstfilen skal inneholde instruksjoner som er spesifikke for agentens formål. - -```json title="opencode.json" -{ - "agent": { - "review": { - "prompt": "{file:./prompts/code-review.txt}" - } - } -} -``` - -Denne banen er i forhold til hvor konfigurasjonsfilen er plassert. Så dette fungerer for både den globale OpenCode-konfigurasjonen og den prosjektspesifikke konfigurasjonen. - ---- - -### Modell - -Bruk `model`-konfigurasjonen for å overstyre modellen for denne agenten. Nyttig for bruk av ulike modeller optimalisert for ulike oppgaver. For eksempel en raskere modell for planlegging, en mer kapabel modell for implementering. - -:::tip -Hvis du ikke spesifiserer en modell, bruker primæragenter [modell globalt konfigurert](/docs/config#models) mens subagenter vil bruke modellen til primæragenten som påkalte subagenten. -::: - -```json title="opencode.json" -{ - "agent": { - "plan": { - "model": "anthropic/claude-haiku-4-20250514" - } - } -} -``` - -Modellen ID i OpenCode-konfigurasjonen din bruker formatet `provider/model-id`. For eksempel, hvis du bruker [OpenCode Zen](/docs/zen), vil du bruke `opencode/gpt-5.1-codex` for GPT 5.1 Codex. - ---- - -### Verktøy - -Kontroller hvilke verktøy som er tilgjengelige i denne agenten med `tools`-konfigurasjonen. Du kan aktivere eller deaktivere spesifikke verktøy ved å sette 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 agentspesifikke konfigurasjonen overstyrer den globale konfigurasjonen. -::: - -Du kan også bruke jokertegn for å kontrollere flere verktøy samtidig. For eksempel, for å deaktivere alle verktøy fra en MCP-server: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "readonly": { - "tools": { - "mymcp_*": false, - "write": false, - "edit": false - } - } - } -} -``` - -[Finn ut mer om verktøy](/docs/tools). - ---- - -### Tillatelser - -Du kan konfigurere tillatelser for å administrere hvilke handlinger en agent kan utføre. For øyeblikket kan tillatelsene for verktøyene `edit`, `bash` og `webfetch` konfigureres til: - -- `"ask"` — Be om godkjenning før du kjører verktøyet -- `"allow"` — Tillat alle operasjoner uten godkjenning -- `"deny"` — Deaktiver verktøyet - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - } -} -``` - -Du kan overstyre disse tillatelsene per 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å angi tillatelser 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 angi tillatelser for spesifikke bash-kommandoer. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git push": "ask", - "grep *": "allow" - } - } - } - } -} -``` - -Dette kan ta et globmønster. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git *": "ask" - } - } - } - } -} -``` - -Og du kan også bruke jokertegnet `*` for å administrere tillatelser for alle kommandoer. -Siden den siste samsvarsregelen har forrang, setter du jokertegnet `*` først og spesifikke regler etter. - -```json title="opencode.json" {8} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "*": "ask", - "git status *": "allow" - } - } - } - } -} -``` - -[Finn ut mer om tillatelser](/docs/permissions). - ---- - -### Modus - -Kontroller agentens modus med `mode`-konfigurasjonen. Alternativet `mode` brukes til å bestemme hvordan agenten kan brukes. - -```json title="opencode.json" -{ - "agent": { - "review": { - "mode": "subagent" - } - } -} -``` - -Alternativet `mode` kan settes til `primary`, `subagent` eller `all`. Hvis ingen `mode` er spesifisert, er den standard til `all`. - ---- - -### Skjult - -Skjul en underagent fra `@` autofullføringsmenyen med `hidden: true`. Nyttig for interne underagenter som bare skal påkalles programmatisk av andre agenter via oppgaveverktøyet. - -```json title="opencode.json" -{ - "agent": { - "internal-helper": { - "mode": "subagent", - "hidden": true - } - } -} -``` - -Dette påvirker kun brukersynlighet i autofullfør-menyen. Skjulte agenter kan fortsatt påkalles av modellen via oppgaveverktøyet hvis tillatelser tillater det. - -:::note -Gjelder kun `mode: subagent`-agenter. -::: - ---- - -### Oppgavetillatelser - -Kontroller hvilke subagenter en agent kan påkalle via oppgaveverktøyet med `permission.task`. Bruker glob-mønstre for fleksibel matching. - -```json title="opencode.json" -{ - "agent": { - "orchestrator": { - "mode": "primary", - "permission": { - "task": { - "*": "deny", - "orchestrator-*": "allow", - "code-reviewer": "ask" - } - } - } - } -} -``` - -Når den er satt til `deny`, fjernes subagenten fullstendig fra oppgaveverktøybeskrivelsen, så modellen vil ikke forsøke å starte den. - -:::tip -Reglene evalueres i rekkefølge, og den **siste samsvarsregelen vinner**. I eksemplet ovenfor samsvarer `orchestrator-planner` med både `*` (avslå) og `orchestrator-*` (tillat), men siden `orchestrator-*` kommer etter `*`, er resultatet `allow`. -::: - -:::tip -Brukere kan alltid starte en hvilken som helst underagent direkte via `@` autofullføringsmenyen, selv om agentens oppgavetillatelser ville nekte det. -::: - ---- - -### Farge - -Tilpass agentens visuelle utseende i UI med alternativet `color`. Dette påvirker hvordan agenten vises i grensesnittet. - -Bruk en gyldig sekskantfarge (f.eks. `#FF5733`) eller temafarge: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`. - -```json title="opencode.json" -{ - "agent": { - "creative": { - "color": "#ff6b6b" - }, - "code-reviewer": { - "color": "accent" - } - } -} -``` - ---- - -### Top P - -Kontroller responsmangfoldet med alternativet `top_p`. Alternativ til temperatur for å kontrollere tilfeldighet. - -```json title="opencode.json" -{ - "agent": { - "brainstorm": { - "top_p": 0.9 - } - } -} -``` - -Verdiene varierer fra 0,0 til 1,0. Lavere verdier er mer fokuserte, høyere verdier mer mangfoldige. - ---- - -### Ekstra - -Eventuelle andre alternativer du spesifiserer i agentkonfigurasjonen vil bli **overført direkte** til leverandøren som modellalternativer. Dette lar deg bruke leverandørspesifikke funksjoner og parametere. - -For eksempel, med OpenAIs resonneringsmodeller kan du kontrollere resonnementinnsatsen: - -```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 tilleggsalternativene er modell- og leverandørspesifikke. Sjekk leverandørens dokumentasjon for tilgjengelige parametere. - -:::tip -Kjør `opencode models` for å se en liste over tilgjengelige modeller. -::: - ---- - -## Opprette agenter - -Du kan opprette nye agenter ved å bruke følgende kommando: - -```bash -opencode agent create -``` - -Denne interaktive kommandoen vil: - -1. Spør hvor du skal lagre agenten; global eller prosjektspesifikk. -2. Beskrivelse av hva agenten skal gjøre. -3. Generer en passende systemmelding og identifikator. -4. La deg velge hvilke verktøy agenten har tilgang til. -5. Lag til slutt en nedmerkingsfil med agentkonfigurasjonen. - ---- - -## Bruksområder - -Her er noen vanlige bruksområder for forskjellige agenter. - -- **Byggagent**: Fullstendig utviklingsarbeid med alle verktøy aktivert -- **Planagent**: Analyse og planlegging uten å gjøre endringer -- **Kodevurderingsagent**: Kodegjennomgang med skrivebeskyttet tilgang pluss dokumentasjonsverktøy -- **Feilsøkingsagent**: Fokusert på etterforskning med bash og leseverktøy aktivert -- **Dokumentasjonsagent**: Dokumentasjonsskriving med filoperasjoner, men ingen systemkommandoer - ---- - -## Eksempler - -Her er noen eksempler på agenter du kan finne nyttige. - -:::tip -Har du en agent du vil dele? [Send inn en PR](https://github.com/anomalyco/opencode). -::: - ---- - -### Dokumentasjonsagent - -```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 -``` - ---- - -### Sikkerhetsrevisor - -```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 -``` diff --git a/packages/web/src/content/docs/nb/cli.mdx b/packages/web/src/content/docs/nb/cli.mdx deleted file mode 100644 index 36e9485e97..0000000000 --- a/packages/web/src/content/docs/nb/cli.mdx +++ /dev/null @@ -1,617 +0,0 @@ ---- -title: CLI -description: OpenCode CLI-alternativer og kommandoer. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode CLI starter som standard [TUI](/docs/tui) når den kjøres uten noen argumenter. - -```bash -opencode -``` - -Men den godtar også kommandoer som dokumentert på denne siden. Dette lar deg samhandle med OpenCode programmatisk. - -```bash -opencode run "Explain how closures work in JavaScript" -``` - ---- - -### tui - -Start OpenCode-terminalbrukergrensesnittet. - -```bash -opencode [project] -``` - -#### Flagg - -| Flagg | Kort | Beskrivelse | -| ---------------------------------------- | ---- | ------------------------------------------------------------------------ | -| {"--continue"} | `-c` | Fortsett siste økt | -| {"--session"} | `-s` | Økt ID for å fortsette | -| {"--fork"} | | Forgren økten ved fortsettelse (bruk med `--continue` eller `--session`) | -| {"--prompt"} | | Ledetekst som skal brukes | -| {"--model"} | `-m` | Modell å bruke i form av leverandør/modell | -| {"--agent"} | | Agent som skal brukes | -| {"--port"} | | Port å lytte på | -| {"--hostname"} | | Vertsnavn å lytte på | - ---- - -## Kommandoer - -OpenCode CLI har også følgende kommandoer. - ---- - -### agent - -Administrer agenter for OpenCode. - -```bash -opencode agent [command] -``` - ---- - -### attach - -Koble en terminal til en allerede kjørende OpenCode-backend-server startet via `serve` eller `web` kommandoer. - -```bash -opencode attach [url] -``` - -Dette gjør det mulig å bruke 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 -``` - -#### Flagg - -| Flagg | Kort | Beskrivelse | -| ---------------------------------------- | ---- | -------------------------------------------------------------------------------------------------- | -| {"--dir"} | | Arbeidskatalog for å starte TUI i | -| {"--continue"} | `-c` | Fortsett siste økt | -| {"--session"} | `-s` | Økt ID for å fortsette | -| {"--fork"} | | Forgren økten ved fortsettelse (bruk med `--continue` eller `--session`) | -| {"--password"} | `-p` | Passord for grunnleggende autentisering (standard: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Brukernavn for grunnleggende autentisering (standard: `OPENCODE_SERVER_USERNAME` eller `opencode`) | - ---- - -#### create - -Opprett en ny agent med tilpasset konfigurasjon. - -```bash -opencode agent create -``` - -Denne kommandoen vil veilede deg gjennom å lage en ny agent med en tilpasset systemmelding og verktøykonfigurasjon. - ---- - -#### list - -List opp alle tilgjengelige agenter. - -```bash -opencode agent list -``` - ---- - -### auth - -Kommando for administrasjon av påloggingsinformasjon og innlogging for leverandører. - -```bash -opencode auth [command] -``` - ---- - -#### login - -OpenCode drives av leverandørlisten på [Models.dev](https://models.dev), så du kan bruke `opencode auth login` til å konfigurere API-nøkler for enhver leverandør du vil bruke. Dette er lagret i `~/.local/share/opencode/auth.json`. - -```bash -opencode auth login -``` - -Når OpenCode starter opp, laster den leverandørene fra filen med påloggingsinformasjon. Og hvis det er noen nøkler definert i miljøene dine eller en `.env`-fil i prosjektet ditt. - ---- - -#### list - -Viser alle de autentiserte leverandørene som er lagret i filen med påloggingsinformasjon. - -```bash -opencode auth list -``` - -Eller bruk kortversjonen. - -```bash -opencode auth ls -``` - ---- - -#### logout - -Logger deg ut av en leverandør ved å fjerne den fra filen med påloggingsinformasjon. - -```bash -opencode auth logout -``` - ---- - -### github - -Administrer GitHub-agenten for depotautomatisering. - -```bash -opencode github [command] -``` - ---- - -#### install - -Installer GitHub-agenten i depotet ditt. - -```bash -opencode github install -``` - -Dette setter opp den nødvendige GitHub Actions-arbeidsflyten og veileder deg gjennom konfigurasjonsprosessen. [Finn ut mer](/docs/github). - ---- - -#### run - -Kjør GitHub-agenten. Dette brukes vanligvis i GitHub Actions. - -```bash -opencode github run -``` - -##### Flagg - -| Flagg | Beskrivelse | -| ------------------------------------- | -------------------------------------------- | -| {"--event"} | GitHub mock-hendelse agenten skal kjøres for | -| {"--token"} | GitHub personlig tilgangsnøkkel | - ---- - -### mcp - -Administrer Model Context Protocol-servere. - -```bash -opencode mcp [command] -``` - ---- - -#### add - -Legg til en MCP-server til konfigurasjonen. - -```bash -opencode mcp add -``` - -Denne kommandoen vil veilede deg gjennom å legge til enten en lokal eller ekstern MCP-server. - ---- - -#### list - -Liste alle konfigurerte MCP-servere og deres tilkoblingsstatus. - -```bash -opencode mcp list -``` - -Eller bruk den korte versjonen. - -```bash -opencode mcp ls -``` - ---- - -#### auth - -Autentiser med en OAuth-aktivert MCP-server. - -```bash -opencode mcp auth [name] -``` - -Hvis du ikke oppgir et servernavn, blir du bedt om å velge blant tilgjengelige OAuth-kompatible servere. - -Du kan også liste opp OAuth-kompatible servere og deres autentiseringsstatus. - -```bash -opencode mcp auth list -``` - -Eller bruk den korte versjonen. - -```bash -opencode mcp auth ls -``` - ---- - -#### logout - -Fjern OAuth-påloggingsinformasjon for en MCP-server. - -```bash -opencode mcp logout [name] -``` - ---- - -#### debug - -Feilsøk OAuth-tilkoblingsproblemer for en MCP-server. - -```bash -opencode mcp debug -``` - ---- - -### models - -List opp alle tilgjengelige modeller fra konfigurerte leverandører. - -```bash -opencode models [provider] -``` - -Denne kommandoen viser alle modeller som er tilgjengelige på tvers av dine konfigurerte leverandører i formatet `provider/model`. - -Dette er nyttig for å finne ut det eksakte modellnavnet som skal brukes i [din konfigurasjon](/docs/config/). - -Du kan eventuelt sende en leverandør ID for å filtrere modeller etter den leverandøren. - -```bash -opencode models anthropic -``` - -#### Flagg - -| Flagg | Beskrivelse | -| --------------------------------------- | ------------------------------------------------------------------- | -| {"--refresh"} | Oppdater modellbufferen fra models.dev | -| {"--verbose"} | Bruk mer detaljert modellutdata (inkluderer metadata som kostnader) | - -Bruk `--refresh`-flagget for å oppdatere den bufrede modelllisten. Dette er nyttig når nye modeller er lagt til en leverandør og du vil se dem i OpenCode. - -```bash -opencode models --refresh -``` - ---- - -### run - -Kjør OpenCode i ikke-interaktiv modus ved å sende en melding direkte. - -```bash -opencode run [message..] -``` - -Dette er nyttig for skripting, automatisering eller når du vil ha et raskt svar uten å starte hele TUI. For eksempel. - -```bash "opencode run" -opencode run Explain the use of context in Go -``` - -Du kan også koble til en kjørende `opencode serve`-forekomst for å unngå MCP-serveres kaldstarttid ved hver kjøring: - -```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" -``` - -#### Flagg - -| Flagg | Kort | Beskrivelse | -| ---------------------------------------- | ---- | -------------------------------------------------------------------------------------------------- | -| {"--command"} | | Kommandoen for å kjøre, bruk melding for args | -| {"--continue"} | `-c` | Fortsett siste økt | -| {"--session"} | `-s` | Økt ID for å fortsette | -| {"--fork"} | | Forgren økten ved fortsettelse (bruk med `--continue` eller `--session`) | -| {"--share"} | | Del økten | -| {"--model"} | `-m` | Modell å bruke i form av leverandør/modell | -| {"--agent"} | | Agent å bruke | -| {"--file"} | `-f` | Fil(er) som skal legges ved meldingen | -| {"--format"} | | Format: standard (formatert) eller json (rå JSON hendelser) | -| {"--title"} | | Tittel for økten (bruker avkortet ledetekst hvis ingen verdi er oppgitt) | -| {"--attach"} | | Koble til en kjørende OpenCode-server (f.eks. http://localhost:4096) | -| {"--password"} | `-p` | Passord for grunnleggende autentisering (standard: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Brukernavn for grunnleggende autentisering (standard: `OPENCODE_SERVER_USERNAME` eller `opencode`) | -| {"--dir"} | | Katalog å kjøre i, eller sti på fjernserveren ved tilkobling | -| {"--variant"} | | Modellvariant (leverandørspesifikk resonneringsinnsats) | -| {"--thinking"} | | Vis tenkeblokker | -| {"--port"} | | Port for den lokale serveren (standard til tilfeldig port) | - ---- - -### serve - -Start en headless OpenCode-server for API-tilgang. Sjekk ut [server-dokumentene](/docs/server) for hele HTTP-grensesnittet. - -```bash -opencode serve -``` - -Dette starter en HTTP-server som gir API tilgang til OpenCode-funksjonalitet uten TUI-grensesnittet. Sett `OPENCODE_SERVER_PASSWORD` for å aktivere HTTP grunnleggende autentisering (brukernavn er standard til `opencode`). - -#### Flagg - -| Flagg | Beskrivelse | -| ---------------------------------------- | -------------------------------------------------- | -| {"--port"} | Port å lytte på | -| {"--hostname"} | Vertsnavn å lytte på | -| {"--mdns"} | Aktiver mDNS-oppdagelse | -| {"--cors"} | Ytterligere nettleseropprinnelse som tillater CORS | - ---- - -### session - -Administrer OpenCode-økter. - -```bash -opencode session [command] -``` - ---- - -#### list - -List opp alle OpenCode-økter. - -```bash -opencode session list -``` - -##### Flagg - -| Flagg | Kort | Beskrivelse | -| ----------------------------------------- | ---- | ---------------------------------------- | -| {"--max-count"} | `-n` | Begrens til N siste økter | -| {"--format"} | | Utdataformat: tabell eller json (tabell) | - ---- - -### stats - -Vis tokenbruk og kostnadsstatistikk for OpenCode-øktene dine. - -```bash -opencode stats -``` - -#### Flagg - -| Flagg | Beskrivelse | -| --------------------------------------- | -------------------------------------------------------------------------------- | -| {"--days"} | Vis statistikk for de siste N dagene (hele tiden) | -| {"--tools"} | Antall verktøy som skal vises (alle) | -| {"--models"} | Vis oversikt over modellbruk (skjult som standard). Gi et tall for å vise topp N | -| {"--project"} | Filtrer etter prosjekt (alle prosjekter, tom streng: gjeldende prosjekt) | - ---- - -### export - -Eksporter øktdata som JSON. - -```bash -opencode export [sessionID] -``` - -Hvis du ikke gir en økt ID, blir du bedt om å velge fra tilgjengelige økter. - ---- - -### import - -Importer øktdata fra en JSON-fil eller en OpenCode share-URL. - -```bash -opencode import -``` - -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 headless OpenCode-server med et webgrensesnitt. - -```bash -opencode web -``` - -Dette starter en HTTP-server og åpner en nettleser for å få tilgang til OpenCode via et nettgrensesnitt. Sett `OPENCODE_SERVER_PASSWORD` for å aktivere HTTP grunnleggende autentisering (brukernavn er standard til `opencode`). - -#### Flagg - -| Flagg | Beskrivelse | -| ---------------------------------------- | -------------------------------------------------- | -| {"--port"} | Port å lytte på | -| {"--hostname"} | Vertsnavn å lytte på | -| {"--mdns"} | Aktiver mDNS-oppdagelse | -| {"--cors"} | Ytterligere nettleseropprinnelse som tillater CORS | - ---- - -### acp - -Start en ACP (Agent Client Protocol) server. - -```bash -opencode acp -``` - -Denne kommandoen starter en ACP-server som kommuniserer via stdin/stdout ved å bruke nd-JSON. - -#### Flagg - -| Flagg | Beskrivelse | -| ---------------------------------------- | -------------------- | -| {"--cwd"} | Arbeidskatalog | -| {"--port"} | Port å lytte på | -| {"--hostname"} | Vertsnavn å lytte på | - ---- - -### uninstall - -Avinstaller OpenCode og fjern alle relaterte filer. - -```bash -opencode uninstall -``` - -#### Flagg - -| Flagg | Kort | Beskrivelse | -| ------------------------------------------- | ---- | --------------------------------------------- | -| {"--keep-config"} | `-c` | Behold konfigurasjonsfiler | -| {"--keep-data"} | `-d` | Behold øktdata og øyeblikksbilder | -| {"--dry-run"} | | Vis hva som ville blitt fjernet uten å fjerne | -| {"--force"} | `-f` | Hopp over bekreftelsesforespørsler | - ---- - -### upgrade - -Oppdaterer OpenCode til siste versjon eller en spesifikk versjon. - -```bash -opencode upgrade [target] -``` - -For å oppgradere til siste versjon. - -```bash -opencode upgrade -``` - -For å oppgradere til en bestemt versjon. - -```bash -opencode upgrade v0.1.48 -``` - -#### Flagg - -| Flagg | Kort | Beskrivelse | -| -------------------------------------- | ---- | -------------------------------------------------------------- | -| {"--method"} | `-m` | Installasjonsmetoden som ble brukt: curl, npm, pnpm, bun, brew | - ---- - -## Globale flagg - -OpenCode CLI bruker følgende globale flagg. - -| Flagg | Kort | Beskrivelse | -| ------------------------------------------ | ---- | ----------------------------------- | -| {"--help"} | `-h` | Vis hjelp | -| {"--version"} | `-v` | Skriv ut versjonsnummer | -| {"--print-logs"} | | Skriv ut logger til stderr | -| {"--log-level"} | | Loggnivå (DEBUG, INFO, WARN, ERROR) | - ---- - -## Miljøvariabler - -OpenCode kan konfigureres ved hjelp av miljøvariabler. - -| Variabel | Type | Beskrivelse | -| ------------------------------------- | ------ | --------------------------------------------------------------------- | -| `OPENCODE_AUTO_SHARE` | boolsk | Del økter automatisk | -| `OPENCODE_GIT_BASH_PATH` | streng | Bane til Git Bash-kjørbar på Windows | -| `OPENCODE_CONFIG` | streng | Bane til konfigurasjonsfil | -| `OPENCODE_TUI_CONFIG` | streng | Bane til TUI-konfigurasjonsfil | -| `OPENCODE_CONFIG_DIR` | streng | Bane til konfigurasjonskatalog | -| `OPENCODE_CONFIG_CONTENT` | streng | Innebygd json-konfigurasjonsinnhold | -| `OPENCODE_DISABLE_AUTOUPDATE` | boolsk | Deaktiver automatiske oppdateringskontroller | -| `OPENCODE_DISABLE_PRUNE` | boolsk | Deaktiver beskjæring av gamle data | -| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolsk | Deaktiver automatiske terminaltitteloppdateringer | -| `OPENCODE_PERMISSION` | streng | Innebygd json-tillatelseskonfigurasjon | -| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolsk | Deaktiver standard plugins | -| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolsk | Deaktiver automatiske LSP servernedlastinger | -| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolsk | Aktiver eksperimentelle modeller | -| `OPENCODE_DISABLE_AUTOCOMPACT` | boolsk | Deaktiver automatisk kontekstkomprimering | -| `OPENCODE_DISABLE_CLAUDE_CODE` | boolsk | Deaktiver lesing fra `.claude` (spørsmål + ferdigheter) | -| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolsk | Deaktiver lesing `~/.claude/CLAUDE.md` | -| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolsk | Deaktiver innlasting av `.claude/skills` | -| `OPENCODE_DISABLE_MODELS_FETCH` | boolsk | Deaktiver henting av modeller fra eksterne kilder | -| `OPENCODE_FAKE_VCS` | streng | Falsk VCS-leverandør for testformål | -| `OPENCODE_CLIENT` | streng | Klientidentifikator (standard til `cli`) | -| `OPENCODE_ENABLE_EXA` | boolsk | Aktiver Exa-nettsøkeverktøy | -| `OPENCODE_SERVER_PASSWORD` | streng | Aktiver grunnleggende autentisering for `serve`/`web` | -| `OPENCODE_SERVER_USERNAME` | streng | Overstyr grunnleggende autentiseringsbrukernavn (standard `opencode`) | -| `OPENCODE_MODELS_URL` | streng | Egendefinert URL for henting av modellkonfigurasjon | - ---- - -### Eksperimentelt - -Disse miljøvariablene muliggjør eksperimentelle funksjoner som kan endres eller fjernes. - -| Variabel | Type | Beskrivelse | -| ----------------------------------------------- | ------ | ----------------------------------------------------- | -| `OPENCODE_EXPERIMENTAL` | boolsk | Aktiver eksperimentelle funksjoner under samleflagget | -| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolsk | Aktiver ikonoppdagelse | -| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolsk | Deaktiver kopi ved valg i TUI | -| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | tall | Standard tidsavbrudd for bash-kommandoer i ms | -| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | tall | Maks Output Tokens for LLM-svar | -| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolsk | Aktiver filovervåker for hele dir | -| `OPENCODE_EXPERIMENTAL_OXFMT` | boolsk | Aktiver oxfmt formatter | -| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolsk | Aktiver eksperimentelt LSP-verktøy | -| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolsk | Deaktiver filovervåking | -| `OPENCODE_EXPERIMENTAL_EXA` | boolsk | Aktiver eksperimentelle Exa-funksjoner | -| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolsk | Aktiver TY LSP for python-filer | -| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolsk | Aktiver planmodus | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | boolsk | Aktiver bakgrunnsoppgaver for subagenter | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | boolsk | Aktiver eksperimentelt hendelsessystem | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | boolsk | Aktiver innebygd LLM-forespørselsvei | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | boolsk | Aktiver parallell kjøring av websøk | -| `OPENCODE_EXPERIMENTAL_SCOUT` | boolsk | Aktiver Scout-subagent | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | boolsk | Aktiver arbeidsområde-støtte | diff --git a/packages/web/src/content/docs/nb/commands.mdx b/packages/web/src/content/docs/nb/commands.mdx deleted file mode 100644 index b4bf8f09f3..0000000000 --- a/packages/web/src/content/docs/nb/commands.mdx +++ /dev/null @@ -1,323 +0,0 @@ ---- -title: Kommandoer -description: Lag egendefinerte kommandoer for repeterende oppgaver. ---- - -Egendefinerte kommandoer lar deg spesifisere en ledetekst du vil kjøre når kommandoen utføres i TUI. - -```bash frame="none" -/my-command -``` - -Egendefinerte kommandoer kommer i tillegg til de innebygde kommandoene som `/init`, `/undo`, `/redo`, `/share`, `/help`. [Finn ut mer](/docs/tui#commands). - ---- - -## Lag kommandofiler - -Lag nedmerkingsfiler i `commands/`-katalogen for å definere egendefinerte kommandoer. - -Opprett `.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 kommandoegenskaper. Innholdet blir malen. - -Bruk kommandoen ved å skrive `/` etterfulgt av kommandonavnet. - -```bash frame="none" -"/test" -``` - ---- - -## Konfigurasjon - -Du kan legge til egendefinerte kommandoer gjennom OpenCode-konfigurasjonen eller ved å lage markdown-filer i katalogen `commands/`. - ---- - -### JSON - -Bruk alternativet `command` i 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" - } - } -} -``` - -Nå kan du kjøre denne kommandoen i TUI: - -```bash frame="none" -/test -``` - ---- - -### Markdown - -Du kan også definere kommandoer ved å bruke markdown-filer. Plasser dem i: - -- Globalt: `~/.config/opencode/commands/` -- Per prosjekt: `.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 blir kommandonavnet. For eksempel lar `test.md` -deg kjøre: - -```bash frame="none" -/test -``` - ---- - -## Ledetekstkonfigurasjon - -Ledetekstene for de egendefinerte kommandoene støtter flere spesielle plassholdere og syntaks. - ---- - -### Argumenter - -Send argumenter til kommandoer ved å bruke plassholderen `$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. -``` - -Kjør kommandoen med argumenter: - -```bash frame="none" -/component Button -``` - -Og `$ARGUMENTS` vil bli erstattet med `Button`. - -Du kan også få tilgang til individuelle argumenter ved å bruke posisjonelle parametere: - -- `$1` - Første argument -- `$2` - Andre 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 -``` - -Kjø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-utdata - -Bruk _!`command`_ for å injisere [bash-kommando](/docs/tui#bash-commands)-utdata i ledeteksten. - -For eksempel, for å lage en egendefinert kommando som analyserer testdekning: - -```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 å se gjennom nylige endringer: - -```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 kjøres i prosjektets rotkatalog og utdataene deres blir en del av ledeteksten. - ---- - -### Filreferanser - -Inkluder filer i kommandoen din ved å bruke `@` etterfulgt av 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. -``` - -Filinnholdet blir automatisk inkludert i ledeteksten. - ---- - -## Alternativer - -La oss se på konfigurasjonsalternativene i detalj. - ---- - -### Mal - -Alternativet `template` definerer ledeteksten som vil bli sendt til LLM når kommandoen utfø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 et **obligatorisk** konfigurasjonsalternativ. - ---- - -### Beskrivelse - -Bruk alternativet `description` for å gi en kort beskrivelse av hva kommandoen gjør. - -```json title="opencode.json" -{ - "command": { - "test": { - "description": "Run tests with coverage" - } - } -} -``` - -Dette vises som beskrivelsen i TUI når du skriver inn kommandoen. - ---- - -### Agent - -Bruk `agent`-konfigurasjonen for å spesifisere hvilken [agent](/docs/agents) som skal utføre denne kommandoen. -Hvis dette er en [subagent](/docs/agents/#subagents), vil kommandoen utløse en subagent påkalling som standard. -For å deaktivere denne virkemåten, sett `subtask` til `false`. - -```json title="opencode.json" -{ - "command": { - "review": { - "agent": "plan" - } - } -} -``` - -Denne kommandoen vil veilede deg gjennom å lage en ny agent med en tilpasset systemmelding og verktøykonfigurasjon. - ---- - -### Underoppgave - -Bruk `subtask` for å tvinge kommandoen til å utløse en [subagent](/docs/agents/#subagents) påkalling. -Dette er nyttig hvis du vil at kommandoen ikke skal forurense din primære kontekst og vil **tvinge** agenten til å fungere som en underagent, -selv om `mode` er satt til `primary` på [agent](/docs/agents) konfigurasjonen. - -```json title="opencode.json" -{ - "command": { - "analyze": { - "subtask": true - } - } -} -``` - -Dette er et **valgfritt** konfigurasjonsalternativ. - ---- - -### Modell - -Bruk `model`-konfigurasjonen for å overstyre standardmodellen for denne kommandoen. - -```json title="opencode.json" -{ - "command": { - "analyze": { - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -Dette er et **valgfritt** konfigurasjonsalternativ. - ---- - -## Innebygd - -OpenCode inkluderer flere innebygde kommandoer som `/init`, `/undo`, `/redo`, `/share`, `/help`; [finn ut mer](/docs/tui#commands). - -:::note -Egendefinerte kommandoer kan overstyre innebygde kommandoer. -::: - -Hvis du definerer en egendefinert kommando med samme navn, vil den overstyre den innebygde kommandoen. diff --git a/packages/web/src/content/docs/nb/config.mdx b/packages/web/src/content/docs/nb/config.mdx deleted file mode 100644 index f617c1b8a3..0000000000 --- a/packages/web/src/content/docs/nb/config.mdx +++ /dev/null @@ -1,688 +0,0 @@ ---- -title: Konfigurasjon -description: Ved å bruke opencode JSON-konfigurasjonen. ---- - -Du kan konfigurere OpenCode ved å bruke en JSON konfigurasjonsfil. - ---- - -## Format - -OpenCode stø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, - }, -} -``` - ---- - -## Plasseringer - -Du kan plassere konfigurasjonen på et par forskjellige steder, og de har en -annen rekkefølge. - -:::note -Konfigurasjonsfiler er **slått sammen**, ikke erstattet. -::: - -Konfigurasjonsfiler slås sammen, ikke erstattes. Innstillinger fra følgende konfigurasjonsplasseringer kombineres. Senere konfigurasjoner overstyrer tidligere kun for motstridende nøkler. Ikke-motstridende innstillinger fra alle konfigurasjoner er bevart. - -For eksempel, hvis din globale konfigurasjon setter `theme: "opencode"` og `autoupdate: true`, og prosjektkonfigurasjonen setter `model: "anthropic/claude-sonnet-4-5"`, vil den endelige konfigurasjonen inkludere alle tre innstillingene. - ---- - -### Prioritetsrekkefølge - -Konfigurasjonskilder lastes inn i denne rekkefølgen (senere kilder overstyrer tidligere): - -1. **Ekstern konfigurasjon** (fra `.well-known/opencode`) - organisasjonsstandarder -2. **Global konfigurasjon** (`~/.config/opencode/opencode.json`) - brukerinnstillinger -3. **Egendefinert konfigurasjon** (`OPENCODE_CONFIG` env var) - egendefinerte overstyringer -4. **Prosjektkonfigurasjon** (`opencode.json` i prosjekt) - prosjektspesifikke innstillinger -5. **`.opencode` kataloger** - agenter, kommandoer, plugins -6. **Inline config** (`OPENCODE_CONFIG_CONTENT` env var) - kjøretidsoverstyringer - -Dette betyr at prosjektkonfigurasjoner kan overstyre globale standardinnstillinger, og globale konfigurasjoner kan overstyre eksterne organisasjonsstandarder. - -:::note -`.opencode` og `~/.config/opencode` katalogene bruker **flertallsnavn** på underkataloger: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` og `themes/`. Enkeltnavn (f.eks. `agent/`) støttes også for bakoverkompatibilitet. -::: - ---- - -### Ekstern konfigurasjon - -Organisasjoner kan tilby standardkonfigurasjon via `.well-known/opencode`-endepunktet. Dette hentes automatisk når du autentiserer med en leverandør som støtter det. - -Ekstern konfigurasjon lastes først, og fungerer som grunnlaget. Alle andre konfigurasjonskilder (global, prosjekt) kan overstyre disse standardinnstillingene. - -For eksempel, hvis organisasjonen din tilbyr MCP servere som er deaktivert 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 spesifikke servere i din lokale konfigurasjon: - -```json title="opencode.json" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - ---- - -### Global konfigurasjon - -Plasser din globale OpenCode-konfigurasjon i `~/.config/opencode/opencode.json`. Bruk global konfigurasjon for brukerspesifikke preferanser som temaer, leverandører eller nøkkelbindinger. - -Global konfigurasjon overstyrer eksterne organisasjonsstandarder. - ---- - -### Per prosjekt - -Legg til `opencode.json` i prosjektroten din. Prosjektkonfigurasjon har den høyeste prioritet blant standard config-filer - den overstyrer både globale og eksterne konfigurasjoner. - -:::tip -Plasser prosjektspesifikk konfigurasjon i roten til prosjektet ditt. -::: - -Når OpenCode starter opp, ser den etter en konfigurasjonsfil i gjeldende katalog eller går opp til nærmeste Git-katalog. - -Det er også trygt å sjekke inn dette i Git og bruker samme skjema som det globale. - ---- - -### Egendefinert bane - -Spesifiser en tilpasset konfigurasjonsfilbane ved å bruke miljøvariabelen `OPENCODE_CONFIG`. - -```bash -export OPENCODE_CONFIG=/path/to/my/custom-config.json -opencode run "Hello world" -``` - -Egendefinert konfigurasjon lastes inn mellom globale og prosjektkonfigurasjoner i prioritetsrekkefølge. - ---- - -### Egendefinert katalog - -Spesifiser en tilpasset konfigurasjonskatalog ved å bruke `OPENCODE_CONFIG_DIR` -miljøvariabel. Denne katalogen vil bli søkt etter agenter, kommandoer, -moduser og plugins akkurat som standard `.opencode` katalog, og bør -følge samme struktur. - -```bash -export OPENCODE_CONFIG_DIR=/path/to/my/config-directory -opencode run "Hello world" -``` - -Den egendefinerte katalogen lastes inn etter den globale konfigurasjonen og `.opencode`-katalogene, slik at den **kan overstyre** innstillingene deres. - ---- - -## Skjema - -Konfigurasjonsfilen har et skjema som er definert i [**`opencode.ai/config.json`**](https://opencode.ai/config.json). - -Redaktøren din skal kunne validere og autofullføre basert på skjemaet. - ---- - -### TUI - -Du kan konfigurere TUI-spesifikke innstillinger gjennom alternativet `tui`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "tui": { - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": true - }, - "diff_style": "auto" - } -} -``` - -Tilgjengelige alternativer: - -- `scroll_acceleration.enabled` - Aktiver rulleakselerasjon i macOS-stil. **Tar forrang over `scroll_speed`.** -- `scroll_speed` - Egendefinert rullehastighetsmultiplikator (standard: `3`, minimum: `1`). Ignorert hvis `scroll_acceleration.enabled` er `true`. -- `diff_style` - Kontroller diff-gjengivelse. `"auto"` tilpasser seg terminalbredden, `"stacked"` viser alltid en kolonne. - -[Les mer om bruk av TUI her](/docs/tui). - ---- - -### Tjener - -Du kan konfigurere serverinnstillinger for kommandoene `opencode serve` og `opencode web` gjennom alternativet `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"] - } -} -``` - -Tilgjengelige alternativer: - -- `port` - Port å lytte på. -- `hostname` - Vertsnavn å lytte på. Når `mdns` er aktivert og ingen vertsnavn er angitt, er standard `0.0.0.0`. -- `mdns` - Aktiver mDNS-tjenesteoppdagelse. Dette lar andre enheter på nettverket oppdage OpenCode-serveren din. -- `mdnsDomain` - Egendefinert domenenavn for mDNS-tjeneste. Standard er `opencode.local`. Nyttig for å kjøre flere forekomster på samme nettverk. -- `cors` - Ytterligere opprinnelser for å tillate CORS når du bruker HTTP-serveren fra en nettleserbasert klient. Verdiene må være fullstendige opprinnelser (skjema + vert + valgfri port), f.eks. `https://app.example.com`. - -[Les mer om serveren her](/docs/server). - ---- - -### Verktøy - -Du kan administrere verktøyene en LLM kan bruke gjennom alternativet `tools`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "tools": { - "write": false, - "bash": false - } -} -``` - -[Les mer om verktøy her](/docs/tools). - ---- - -### Modeller - -Du kan konfigurere leverandørene og modellene du vil bruke i OpenCode-konfigurasjonen gjennom alternativene `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" -} -``` - -Alternativet `small_model` konfigurerer en egen modell for lette oppgaver som tittelgenerering. Som standard prøver OpenCode å bruke en rimeligere modell hvis en er tilgjengelig fra leverandøren din, ellers faller den tilbake til hovedmodellen din. - -Leverandøralternativer kan inkludere `timeout` og `setCacheKey`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "timeout": 600000, - "setCacheKey": true - } - } - } -} -``` - -- `timeout` - Tidsavbrudd for forespørsler i millisekunder (standard: 300 000). Sett til `false` for å deaktivere. -- `setCacheKey` - Sørg for at en hurtigbuffernøkkel alltid settes for valgt leverandør. - -Du kan også konfigurere [lokale modeller](/docs/models#local). [Finn ut mer](/docs/models). - ---- - -#### Leverandørspesifikke alternativer - -Noen leverandører støtter flere konfigurasjonsalternativer utover de generiske innstillingene `timeout` og `apiKey`. - -##### Amazon Bedrock - -Amazon Bedrock støtter AWS-spesifikk konfigurasjon: - -```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 er `AWS_REGION` env var eller `us-east-1`) -- `profile` - AWS navngitt profil fra `~/.aws/credentials` (standard til `AWS_PROFILE` env var) -- `endpoint` - Egendefinert endepunkt URL for VPC endepunkter. Dette er et alias for det generiske `baseURL`-alternativet som bruker AWS-spesifikk terminologi. Hvis begge er spesifisert, har `endpoint` forrang. - -:::note -Bærer-tokens (`AWS_BEARER_TOKEN_BEDROCK` eller `/connect`) har forrang over profilbasert autentisering. Se [autentiseringsprioritet](/docs/providers#authentication-precedence) for detaljer. -::: - -[Les mer om konfigurasjon av Amazon Bedrock](/docs/providers#amazon-bedrock). - ---- - -### Temaer - -Angi UI-temaet ditt i `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - -[Les mer her](/docs/themes). - ---- - -### Agenter - -Du kan konfigurere spesialiserte agenter for spesifikke oppgaver gjennom alternativet `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 å bruke markdown-filer i `~/.config/opencode/agents/` eller `.opencode/agents/`. [Les mer her](/docs/agents). - ---- - -### Standardagent - -Du kan angi standard agent ved å bruke alternativet `default_agent`. Dette bestemmer hvilken agent som brukes når ingen er eksplisitt spesifisert. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "default_agent": "plan" -} -``` - -Standardagenten må være en primæragent (ikke en underagent). Dette kan være en innebygd agent som `"build"` eller `"plan"`, eller en [egendefinert agent](/docs/agents) du har definert. Hvis den angitte agenten ikke eksisterer eller er en subagent, vil OpenCode falle tilbake til `"build"` med en advarsel. - -Denne innstillingen gjelder for alle grensesnitt: TUI, CLI (`opencode run`), skrivebordsapp og GitHub Action. - ---- - -### Deling - -Du kan konfigurere [share](/docs/share)-funksjonen gjennom alternativet `share`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - -Dette krever: - -- `"manual"` - Tillat manuell deling via kommandoer (standard) -- `"auto"` - Del nye samtaler automatisk -- `"disabled"` - Deaktiver deling helt - -Som standard er deling satt til manuell modus der du eksplisitt må dele samtaler ved å bruke kommandoen `/share`. - ---- - -### Kommandoer - -Du kan konfigurere egendefinerte kommandoer for repeterende oppgaver gjennom alternativet `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 å bruke markdown-filer i `~/.config/opencode/commands/` eller `.opencode/commands/`. [Les mer her](/docs/commands). - ---- - -### Tastebindinger - -Tilpass tastebindinger i `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": {} -} -``` - -[Les mer her](/docs/keybinds). - ---- - -### Autooppdatering - -OpenCode vil automatisk laste ned eventuelle nye oppdateringer når den starter opp. Du kan deaktivere dette med alternativet `autoupdate`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "autoupdate": false -} -``` - -Hvis du ikke vil ha oppdateringer, men ønsker å bli varslet når en ny versjon er tilgjengelig, sett `autoupdate` til `"notify"`. -Legg merke til at dette bare fungerer hvis det ikke ble installert med en pakkebehandling som Homebrew. - ---- - -### Formatere - -Du kan konfigurere kodeformatere gjennom alternativet `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"] - } - } -} -``` - -[Les mer om formattere her](/docs/formatters). - ---- - -### Tillatelser - -Som standard **tillater OpenCode alle operasjoner** uten å kreve eksplisitt godkjenning. Du kan endre dette ved å bruke alternativet `permission`. - -Slik sikrer du at verktøyene `edit` og `bash` krever brukergodkjenning: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "ask", - "bash": "ask" - } -} -``` - -[Les mer om tillatelser her](/docs/permissions). - ---- - -### Komprimering - -Du kan styre kontekstkomprimering gjennom alternativet `compaction`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "compaction": { - "auto": true, - "prune": false, - "reserved": 10000 - } -} -``` - -- `auto` - Komprimer økten automatisk når konteksten er full (standard: `true`). -- `prune` - Fjern gamle verktøyutdata for å spare tokens (standard: `false`). -- `reserved` - Token-buffer for komprimering. Etterlater nok vindu til å unngå overflyt under komprimering - ---- - -### Filovervåker - -Du kan konfigurere ignoreringsmønstre for filovervåking gjennom alternativet `watcher`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "watcher": { - "ignore": ["node_modules/**", "dist/**", ".git/**"] - } -} -``` - -Mønstre følger glob-syntaks. Bruk dette for å ekskludere støyende kataloger fra filovervåking. - ---- - -### MCP servere - -Du kan konfigurere MCP-servere du vil bruke gjennom alternativet `mcp`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": {} -} -``` - -[Les mer her](/docs/mcp-servers). - ---- - -### Utvidelser - -[Plugins](/docs/plugins) utvider OpenCode med tilpassede verktøy, kroker og integrasjoner. - -Plasser plugin-filer i `.opencode/plugins/` eller `~/.config/opencode/plugins/`. Du kan også laste inn plugins fra npm gjennom alternativet `plugin`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "@my-org/custom-plugin"] -} -``` - -[Les mer her](/docs/plugins). - ---- - -### Instruksjoner - -Du kan konfigurere instruksjoner for modellen du bruker gjennom alternativet `instructions`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -Dette krever en liste med baner og globmønstre til instruksjonsfiler. [Les mer -om regler her](/docs/rules). - ---- - -### Deaktiverte leverandører - -Du kan deaktivere leverandører som lastes automatisk gjennom alternativet `disabled_providers`. Dette er nyttig når du vil forhindre at enkelte leverandører lastes inn selv om deres legitimasjon er tilgjengelig. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "disabled_providers": ["openai", "gemini"] -} -``` - -:::note -`disabled_providers` har prioritet over `enabled_providers`. -::: - -Alternativet `disabled_providers` godtar en rekke leverandør-ID-er. Når en leverandør er deaktivert: - -- Den blir ikke lastet selv om miljøvariabler er angitt. -- Den vil ikke bli lastet inn selv om API-nøkler er konfigurert gjennom `/connect`-kommandoen. -- Leverandørens modeller vises ikke i modellvalglisten. - ---- - -### Aktiverte leverandører - -Du kan spesifisere en godkjenningsliste over leverandører gjennom alternativet `enabled_providers`. Når angitt, vil bare de angitte leverandørene være aktivert og alle andre vil bli ignorert. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "enabled_providers": ["anthropic", "openai"] -} -``` - -Dette er nyttig når du vil begrense OpenCode til kun å bruke spesifikke leverandører i stedet for å deaktivere dem én etter én. - -:::note -`disabled_providers` har prioritet over `enabled_providers`. -::: - -Hvis en leverandør vises i både `enabled_providers` og `disabled_providers`, har `disabled_providers` prioritet for bakoverkompatibilitet. - ---- - -### Eksperimentelt - -`experimental`-nøkkelen inneholder alternativer som er under aktiv utvikling. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "experimental": {} -} -``` - -:::caution -Eksperimentelle alternativer er ikke stabile. De kan endres eller fjernes uten varsel. -::: - ---- - -## Variabler - -Du kan bruke variabelerstatning i konfigurasjonsfilene dine for å referere til miljøvariabler og filinnhold. - ---- - -### Miljøvariabler - -Bruk `{env:VARIABLE_NAME}` for å 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øvariabelen ikke er angitt, vil den bli erstattet med en tom streng. - ---- - -### Filer - -Bruk `{file:path/to/file}` for å erstatte innholdet i en fil: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["./custom-instructions.md"], - "provider": { - "openai": { - "options": { - "apiKey": "{file:~/.secrets/openai-key}" - } - } - } -} -``` - -Filbaner kan være: - -- I forhold til konfigurasjonsfilkatalogen -- Eller absolutte baner som begynner med `/` eller `~` - -Disse er nyttige for: - -- Oppbevaring av sensitive data som API-nøkler i separate filer. -- Inkludert store instruksjonsfiler uten å rote konfigurasjonen din. -- Deling av vanlige konfigurasjonsbiter på tvers av flere konfigurasjonsfiler. diff --git a/packages/web/src/content/docs/nb/custom-tools.mdx b/packages/web/src/content/docs/nb/custom-tools.mdx deleted file mode 100644 index 505c261a0b..0000000000 --- a/packages/web/src/content/docs/nb/custom-tools.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: Egendefinerte verktøy -description: Lag verktøy som LLM kan kalle inn OpenCode. ---- - -Egendefinerte verktøy er funksjoner du oppretter som LLM kan kalle under samtaler. De fungerer sammen med OpenCode sine [innebygde verktøy](/docs/tools) som `read`, `write` og `bash`. - ---- - -## Opprette et verktøy - -Verktøy er definert som **TypeScript**- eller **JavaScript**-filer. Verktøydefinisjonen kan imidlertid påkalle skript skrevet på **alle språk** - TypeScript eller JavaScript brukes bare for selve verktøydefinisjonen. - ---- - -### Plassering - -De kan defineres: - -- Lokalt ved å plassere dem i `.opencode/tools/`-katalogen til prosjektet ditt. -- Eller globalt, ved å plassere dem i `~/.config/opencode/tools/`. - ---- - -### Struktur - -Den enkleste måten å lage verktøy på er å bruke `tool()`-hjelperen som gir typesikkerhet 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** blir **verktøynavnet**. Ovennevnte oppretter et `database`-verktøy. - ---- - -#### Flere verktøy per fil - -Du kan også eksportere flere verktøy fra en enkelt fil. Hver eksport blir **et separat verktøy** med navnet **`_`**: - -```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 lager to verktøy: `math_add` og `math_multiply`. - ---- - -#### Navnekollisjoner med innebygde verktøy - -Egendefinerte verktøy er nøklet etter verktøynavn. Hvis et egendefinert verktøy bruker samme navn som et innebygd verktøy, vil det egendefinerte verktøyet ha forrang. - -For eksempel erstatter denne filen det innebygde `bash`-verktøyet: - -```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 -Foretrekk unike navn med mindre du med vilje ønsker å erstatte et innebygd verktøy. Hvis du vil deaktivere et innebygd verktøy, men ikke overstyre det, bruk [tillatelser](/docs/permissions). -::: - ---- - -### Argumenter - -Du kan bruke `tool.schema`, som bare er [Zod](https://zod.dev), for å 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 vanlig 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 - -Verktøy mottar kontekst om gjeldende økt: - -```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}` - }, -}) -``` - -Bruk `context.directory` for øktens arbeidskatalog. -Bruk `context.worktree` for git-arbeidstreet. - ---- - -## Eksempler - -### Skrive et verktøy i Python - -Du kan skrive verktøyene dine på hvilket som helst språk du vil. Her er et eksempel som legger til to tall ved hjelp av Python. - -Først lager du verktøyet som et Python-skript: - -```python title=".opencode/tools/add.py" -import sys - -a = int(sys.argv[1]) -b = int(sys.argv[2]) -print(a + b) -``` - -Lag deretter verktøydefinisjonen som påkaller 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 bruker vi [`Bun.$`](https://bun.com/docs/runtime/shell)-verktøyet for å kjøre Python-skriptet. diff --git a/packages/web/src/content/docs/nb/ecosystem.mdx b/packages/web/src/content/docs/nb/ecosystem.mdx deleted file mode 100644 index 7cd0c21ab9..0000000000 --- a/packages/web/src/content/docs/nb/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Økosystem -description: Prosjekter og integrasjoner bygget med OpenCode. ---- - -En samling fellesskapsprosjekter bygget på OpenCode. - -:::note -Vil du legge til ditt OpenCode-relaterte prosjekt til denne listen? Send inn en PR. -::: - -Du kan også sjekke ut [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) og [opencode.cafe](https://opencode.cafe), et fellesskap som samler økosystemet og fellesskapet. - ---- - -## Utvidelser - -| Navn | Beskrivelse | -| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | -| [opencode-daytona](https://github.com/daytonaio/daytona/tree/main/libs/opencode-plugin) | Kjør OpenCode-økter automatisk i isolerte Daytona-sandkasser med git-synkronisering og live-forhåndsvisninger | -| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | Injiser automatisk Helicone-headers for forespørselsgruppering | -| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | Auto-injiser TypeScript/Svelte-typer i fillesninger med oppslagsverktøy | -| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Bruk ChatGPT Plus/Pro-abonnementet ditt i stedet for API kreditter | -| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Bruk din eksisterende Gemini-plan i stedet for API-fakturering | -| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | Bruk Antigravitys gratis modeller i stedet for API-fakturering | -| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Multi-branch devcontainer-isolasjon med grunne kloner og automatisk tildelte porter | -| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Google Antigravity OAuth-plugin, med støtte for Google Søk og mer robust API-håndtering | -| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Optimaliser bruken av token ved å beskjære utdaterte verktøy | -| [opencode-vibeguard](https://github.com/inkdust2021/opencode-vibeguard) | Sladd hemmeligheter/PII til VibeGuard-stil plassholdere før LLM-kall; gjenopprett lokalt | -| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Legg til innebygd støtte for nettsøk for støttede leverandører med Googles kildebaserte stil | -| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Gjør det mulig for AI-agenter å kjøre bakgrunnsprosesser i en PTY, sende interaktiv inndata til dem. | -| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Instruksjoner for ikke-interaktive skallkommandoer - forhindrer heng ved TTY-avhengige operasjoner | -| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Spor OpenCode-bruk med Wakatime | -| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Rydd opp i markdown-tabeller produsert av LLMs | -| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | Fast Apply-redigering, WarpGrep-kodesøk og kontekstkomprimering via Morph | -| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Bakgrunnsagenter, forhåndsbygde LSP/AST/MCP verktøy, kurerte agenter, Claude Code-kompatibel | -| [opencode-notificator](https://github.com/panta82/opencode-notificator) | Skrivebordsvarsler og lydvarsler for OpenCode-økter | -| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | Skrivebordsvarsler og lydvarsler for tillatelse, fullføring og feilhendelser | -| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | AI-drevet automatisk Zellij-sesjonsnavn basert på OpenCode-kontekst | -| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | Tillat OpenCode-agenter å lazy-loade meldinger på forespørsel med ferdighetsoppdagelse og injeksjon | -| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Vedvarende minne på tvers av økter ved hjelp av Supermemory | -| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Interaktiv plangjennomgang med visuell merknad og privat/offline deling | -| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Utvid OpenCode /kommandoer til et kraftig orkestreringssystem med granulær flytkontroll | -| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Planlegg gjentakende jobber ved hjelp av launchd (Mac) eller systemd (Linux) med cron-syntaks | -| [micode](https://github.com/vtemian/micode) | Strukturert brainstorm → Plan → Implementer arbeidsflyt med øktkontinuitet | -| [octto](https://github.com/vtemian/octto) | Interaktiv nettleser UI for AI idédugnad med flerspørsmålsskjemaer | -| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Claude Code-stil bakgrunnsagenter med asynkrondelegering og kontekstbevaring | -| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | Innfødte OS-varsler for OpenCode – vet når oppgaver fullføres | -| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | Medfølgende multi-agent orkestreringsrammeverk – 16 komponenter, én installasjon | -| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | Nullfriksjon git-arbeidstre for OpenCode | -| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | Spor og feilsøk AI-agentene dine med Sentry AI Monitoring | - ---- - -## Prosjekter - -| Navn | Beskrivelse | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------- | -| [kimaki](https://github.com/remorses/kimaki) | Discord-bot for å kontrollere OpenCode-økter, bygget på SDK | -| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Neovim-plugin for editor-tilpassede meldinger, bygget på API | -| [portal](https://github.com/hosenur/portal) | Mobile-first web UI for OpenCode over Tailscale/VPN | -| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | Mal for å bygge OpenCode-plugins | -| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Neovim-grensesnitt for OpenCode - en terminalbasert AI-kodingsagent | -| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Vercel AI SDK leverandør for bruk av OpenCode via @opencode-ai/sdk | -| [OpenChamber](https://github.com/btriapitsyn/openchamber) | Web-/skrivebordsapp og VS Code-utvidelse for OpenCode | -| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Obsidian-plugin som bygger inn OpenCode i Obsidians UI | -| [OpenWork](https://github.com/different-ai/openwork) | Et åpen kildekode-alternativ til Claude Cowork, drevet av OpenCode | -| [ocx](https://github.com/kdcokenny/ocx) | OpenCode utvidelsesbehandler med bærbare, isolerte profiler. | -| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | Desktop, Web, Mobile og Remote Client App for OpenCode | - ---- - -## Agenter - -| Navn | Beskrivelse | -| ----------------------------------------------------------------- | --------------------------------------------------------------------------- | -| [Agentic](https://github.com/Cluster444/agentic) | Modulære AI agenter og kommandoer for strukturert utvikling | -| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Konfigurasjoner, meldinger, agenter og plugins for forbedrede arbeidsflyter | diff --git a/packages/web/src/content/docs/nb/enterprise.mdx b/packages/web/src/content/docs/nb/enterprise.mdx deleted file mode 100644 index eef0d7e986..0000000000 --- a/packages/web/src/content/docs/nb/enterprise.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: Bedrift -description: Sikker bruk av opencode i din organisasjon. ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -OpenCode Enterprise er for organisasjoner som ønsker å sikre at deres kode og data aldri forlater deres infrastruktur. Den kan gjøre dette ved å bruke en sentralisert konfigurasjon som integreres med din SSO og interne AI gateway. - -:::note -OpenCode lagrer ingen av koden eller kontekstdataene dine. -::: - -For å komme i gang med OpenCode Enterprise: - -1. Gjør en prøveversjon internt med teamet ditt. -2. **Kontakt oss** for å diskutere priser og implementeringsalternativer. - ---- - -## Prøveversjon - -OpenCode er åpen kildekode og lagrer ingen av koden eller kontekstdataene dine, så utviklerne dine kan ganske enkelt [komme i gang](/docs/) og utføre en prøveversjon. - ---- - -### Datahåndtering - -**OpenCode lagrer ikke koden eller kontekstdataene dine.** All behandling skjer lokalt eller gjennom direkte API-anrop til AI-leverandøren din. - -Dette betyr at så lenge du bruker en leverandør du stoler på, eller en intern -AI gateway, kan du bruke OpenCode sikkert. - -Det eneste forbeholdet her er den valgfrie `/share`-funksjonen. - ---- - -#### Deling av samtaler - -Hvis en bruker aktiverer funksjonen `/share`, sendes samtalen og dataene knyttet til den til tjenesten vi bruker til å være vert for disse delesidene på opencode.ai. - -Dataene leveres for øyeblikket gjennom vårt CDNs edge-nettverk, og bufres på kanten nær brukerne dine. - -Vi anbefaler at du deaktiverer dette for prøveversjonen. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -[Finn ut mer om deling](/docs/share). - ---- - -### Kodeeierskap - -**Du eier all kode produsert av OpenCode.** Det er ingen lisensieringsbegrensninger eller eierskapskrav. - ---- - -## Priser - -Vi bruker en per-sete-modell for OpenCode Enterprise. Hvis du har din egen LLM-gateway, tar vi ikke betalt for tokens som brukes. For mer informasjon om priser og implementeringsalternativer, **kontakt oss**. - ---- - -## Implementering - -Når du har fullført prøveversjonen og du er klar til å bruke OpenCode på -organisasjonen din, kan du **kontakte oss** for å diskutere -prissetting og implementeringsalternativer. - ---- - -### Sentral konfigurasjon - -Vi kan sette opp OpenCode for å bruke en enkelt sentral konfigurasjon for hele organisasjonen din. - -Denne sentraliserte konfigurasjonen kan integreres med SSO-leverandøren din og sikrer at alle brukere kun får tilgang til din interne AI-gateway. - ---- - -### SSO-integrasjon - -Gjennom den sentrale konfigurasjonen kan OpenCode integreres med organisasjonens SSO-leverandør for autentisering. - -Dette lar OpenCode få legitimasjon for din interne AI-gateway gjennom ditt eksisterende identitetsadministrasjonssystem. - ---- - -### Intern AI-gateway - -Med den sentrale konfigurasjonen kan OpenCode også konfigureres til kun å bruke din interne AI-gateway. - -Du kan også deaktivere alle andre AI-leverandører, og sikre at alle forespørsler går gjennom organisasjonens godkjente infrastruktur. - ---- - -### Egen hosting - -Selv om vi anbefaler å deaktivere delingssidene for å sikre at dataene dine aldri forsvinner -organisasjonen din, kan vi også hjelpe deg med å være vert for dem på din infrastruktur. - -Dette er nå på veikartet vårt. Hvis du er interessert, **gi oss beskjed**. - ---- - -## Ofte stilte spørsmål (FAQ) - -

-Hva er OpenCode Enterprise? - -OpenCode Enterprise er for organisasjoner som ønsker å sikre at deres kode og data aldri forlater deres infrastruktur. Den kan gjøre dette ved å bruke en sentralisert konfigurasjon som integreres med din SSO og interne AI gateway. - -
- -
-Hvordan kommer jeg i gang med OpenCode Enterprise? - -Bare sett i gang en intern prøveversjon med teamet ditt. OpenCode lagrer som standard ikke koden eller kontekstdataene dine, noe som gjør det enkelt å komme i gang. - -Så **kontakt oss** for å diskutere priser og implementeringsalternativer. - -
- -
-Hvordan fungerer bedriftsprising? - -Vi tilbyr bedriftspriser per bruker. Hvis du har din egen LLM-gateway, tar vi ikke betalt for tokens som brukes. For ytterligere detaljer, **kontakt oss** for et tilpasset tilbud basert på organisasjonens behov. - -
- -
-Er dataene mine trygge med OpenCode Enterprise? - -Ja. OpenCode lagrer ikke koden eller kontekstdataene dine. All behandling skjer lokalt eller gjennom direkte API-anrop til AI-leverandøren din. Med sentral konfigurasjon og SSO-integrasjon forblir dataene dine sikre i organisasjonens infrastruktur. - -
- -
-Kan vi bruke vårt eget private NPM-register? - -OpenCode støtter private npm-registre gjennom Bun sin innebygde støtte for .npmrc-filer. Hvis organisasjonen din bruker et privat register, som JFrog Artifactory, Nexus eller lignende, sørg for at utviklerne er autentisert før du kjører OpenCode. - -Slik setter du opp autentisering med ditt private register: - -```bash -npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/ -``` - -Dette oppretter `~/.npmrc` med autentiseringsdetaljer. OpenCode vil automatisk -oppdage dette. - -:::caution -Du må være logget inn i det private registeret før du kjører OpenCode. -::: - -Alternativt kan du konfigurere en `.npmrc`-fil manuelt: - -```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} -``` - -Utviklere må være logget på det private registeret før de kjører OpenCode for å sikre at pakker kan installeres fra bedriftsregisteret. - -
diff --git a/packages/web/src/content/docs/nb/formatters.mdx b/packages/web/src/content/docs/nb/formatters.mdx deleted file mode 100644 index 9619c1470a..0000000000 --- a/packages/web/src/content/docs/nb/formatters.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: Formattere -description: OpenCode bruker språkspesifikke formattere. ---- - -OpenCode formaterer automatisk filer etter at de er skrevet eller redigert ved hjelp av språkspesifikke formattere. Dette sikrer at koden som genereres følger kodestilene til prosjektet ditt. - ---- - -## Innebygde formattere - -OpenCode kommer med flere innebygde formattere for populære språk og rammeverk. Nedenfor er en liste over formattere, støttede filendelser og kommandoer eller konfigurasjonsalternativer den krever. - -| Formatter | Filendelser | Krav | -| ---------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | -| gofmt | .go | `gofmt` kommando tilgjengelig | -| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | `mix` kommando tilgjengelig | -| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml og [flere](https://prettier.io/docs/en/index.html) | `prettier` avhengighet i `package.json` | -| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml og [flere](https://biomejs.dev/) | `biome.json(c)` konfigurasjonsfil | -| zig | .zig, .zon | `zig` kommando tilgjengelig | -| clang-format | .c, .cpp, .h, .hpp, .ino og [flere](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` konfigurasjonsfil | -| ktlint | .kt, .kts | `ktlint` kommando tilgjengelig | -| ruff | .py, .pyi | `ruff` kommando tilgjengelig med config | -| rustfmt | .rs | `rustfmt` kommando tilgjengelig | -| cargofmt | .rs | `cargo fmt` kommando tilgjengelig | -| uv | .py, .pyi | `uv` kommando tilgjengelig | -| rubocop | .rb, .rake, .gemspec, .ru | `rubocop` kommando tilgjengelig | -| standardrb | .rb, .rake, .gemspec, .ru | `standardrb` kommando tilgjengelig | -| htmlbeautifier | .erb, .html.erb | `htmlbeautifier` kommando tilgjengelig | -| air | .R | `air` kommando tilgjengelig | -| dart | .dart | `dart` kommando tilgjengelig | -| dfmt | .d | `dfmt` kommando tilgjengelig | -| ocamlformat | .ml, .mli | `ocamlformat` kommando tilgjengelig og `.ocamlformat` konfigurasjonsfil | -| terraform | .tf, .tfvars | `terraform` kommando tilgjengelig | -| gleam | .gleam | `gleam` kommando tilgjengelig | -| nixfmt | .nix | `nixfmt` kommando tilgjengelig | -| shfmt | .sh, .bash | `shfmt` kommando tilgjengelig | -| pint | .php | `laravel/pint` avhengighet i `composer.json` | -| oxfmt (Eksperimentell) | .js, .jsx, .ts, .tsx | `oxfmt` avhengighet i `package.json` og et [eksperimentelt env variabel flagg](/docs/cli/#experimental) | -| ormolu | .hs | `ormolu` kommando tilgjengelig | - -Så hvis prosjektet ditt har `prettier` i `package.json`, vil OpenCode automatisk bruke det. - ---- - -## Slik fungerer det - -Når OpenCode skriver eller redigerer en fil, gjør den: - -1. Kontrollerer filtypen mot alle aktiverte formattere. -2. Kjører riktig formateringskommando på filen. -3. Bruker formateringsendringene automatisk. - -Denne prosessen skjer i bakgrunnen, og sikrer at kodestilene dine opprettholdes uten noen manuelle trinn. - ---- - -## Konfigurasjon - -Du kan tilpasse formattere gjennom `formatter`-delen i OpenCode-konfigurasjonen. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "formatter": {} -} -``` - -Hver formateringskonfigurasjon støtter følgende: - -| Egenskap | Type | Beskrivelse | -| ------------- | -------- | --------------------------------------------------------------- | -| `disabled` | boolean | Sett dette til `true` for å deaktivere formatteren | -| `command` | string[] | Kommandoen som skal kjøres for formatering | -| `environment` | object | Miljøvariabler som skal settes når formateringsverktøyet kjøres | -| `extensions` | string[] | Filendelser denne formatteren skal håndtere | - -La oss se på noen eksempler. - ---- - -### Deaktivering av formattere - -For å deaktivere **alle** formattere globalt, sett `formatter` til `false`: - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": false -} -``` - -For å deaktivere en **spesifikk** formatter, sett `disabled` til `true`: - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": { - "prettier": { - "disabled": true - } - } -} -``` - ---- - -### Egendefinerte formattere - -Du kan overstyre de innebygde formatterne eller legge til nye ved å spesifisere kommandoen, miljøvariablene og filtypene: - -```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"] - } - } -} -``` - -**Plassholderen $FILE** i kommandoen vil bli erstattet med banen til filen som formateres. diff --git a/packages/web/src/content/docs/nb/github.mdx b/packages/web/src/content/docs/nb/github.mdx deleted file mode 100644 index 4a39c8830d..0000000000 --- a/packages/web/src/content/docs/nb/github.mdx +++ /dev/null @@ -1,325 +0,0 @@ ---- -title: GitHub -description: Bruk opencode i GitHub-problemer og pull-forespørsler. ---- - -OpenCode integreres med GitHub-arbeidsflyten din. Nevn `/opencode` eller `/oc` i kommentaren din, og OpenCode vil utføre oppgaver i din GitHub Actions-løper. - ---- - -## Funksjoner - -- **Triage saker**: Be OpenCode se på en sak og forklare den for deg. -- **Fiks og implementer**: Be OpenCode om å fikse en sak eller implementere en funksjon. Den vil jobbe i en ny gren og sende inn en PR med alle endringene. -- **Sikkert**: OpenCode kjører i GitHub-runners. - ---- - -## Installasjon - -Kjør følgende kommando i et prosjekt som er et GitHub-repo: - -```bash -opencode github install -``` - -Dette vil lede deg gjennom å installere GitHub-appen, lage arbeidsflyten og sette opp secrets (hemmeligheter). - ---- - -### Manuelt oppsett - -Eller du kan sette den opp manuelt. - -1. **Installer GitHub-appen** - - Gå over til [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Sørg for at den er installert på mållageret. - -2. **Legg til arbeidsflyten** - - Legg til følgende arbeidsflytfil til `.github/workflows/opencode.yml` i repoen. Sørg for å sette riktig `model` og nødvendige API-nøkler 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. **Lagre API-nøklene i hemmeligheter** - - Utvid **Hemmeligheter og variabler** til venstre i **innstillingene** for organisasjonen eller prosjektet og velg **Actions**. Og legg til de nødvendige API-nøklene. - ---- - -## Konfigurasjon - -- `model`: Modellen som skal brukes med OpenCode. Tar formatet `provider/model`. Dette er **obligatorisk**. -- `agent`: Agenten som skal brukes. Må være en primær agent. Faller tilbake til `default_agent` fra config eller `"build"` hvis ikke funnet. -- `share`: Om OpenCode-økten skal deles. Standard er **true** for offentlige depoter. -- `prompt`: Valgfri egendefinert melding for å overstyre standard oppførsel. Bruk dette til å tilpasse hvordan OpenCode behandler forespørsler. -- `token`: Valgfritt GitHub-tilgangstoken for å utføre operasjoner som å lage kommentarer, foreta endringer og åpne pull-forespørsler. Som standard bruker OpenCode installasjonstilgangstokenet fra OpenCode GitHub-appen, så commits, kommentarer og pull-forespørsler ser ut til å komme fra appen. - - Alternativt kan du bruke GitHub Action-løperens [innebygde `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) uten å installere OpenCode GitHub-appen. Bare sørg for å gi de nødvendige tillatelsene i arbeidsflyten din: - - ```yaml - permissions: - id-token: write - contents: write - pull-requests: write - issues: write - ``` - - Du kan også bruke en [personlig tilgangstoken](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) hvis foretrukket. - ---- - -## Støttede hendelser - -OpenCode kan utløses av følgende GitHub-hendelser: - -| Hendelsestype | Utløst av | Detaljer | -| ----------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -| `issue_comment` | Kommentar på sak eller PR | Nevn `/opencode` eller `/oc` i kommentaren din. OpenCode leser kontekst og kan opprette grener, åpne PR-er eller svare. | -| `pull_request_review_comment` | Kommenter spesifikke kodelinjer i en PR | Nevn `/opencode` eller `/oc` mens du ser gjennom koden. OpenCode mottar filbane, linjenummer og diff-kontekst. | -| `issues` | Sak åpnet eller redigert | Utløs OpenCode automatisk når saker opprettes eller endres. Krever `prompt` inngang. | -| `pull_request` | PR åpnet eller oppdatert | Utløs OpenCode automatisk når PR-er åpnes, synkroniseres eller gjenåpnes. Nyttig for automatiserte anmeldelser. | -| `schedule` | Cron-basert tidsplan | Kjør OpenCode etter en tidsplan. Krever `prompt` inngang. Utdata går til logger og PR (ingen sak å kommentere). | -| `workflow_dispatch` | Manuell utløser fra GitHub UI | Utløs OpenCode på forespørsel via fanen Handlinger. Krever `prompt` inngang. Utdata går til logger og PR-er. | - -### Eksempel på tidsplan - -Kjør OpenCode på en tidsplan for å utføre automatiserte oppgaver: - -```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 arrangementer er `prompt`-inngangen **påkrevd** siden det ikke er noen kommentarer å trekke ut instruksjoner fra. Planlagte workflows kjører uten brukerkontekst for tillatelsessjekking, så arbeidsflyten må gi `contents: write` og `pull-requests: write` hvis du forventer at OpenCode oppretter grener eller PR-er. - ---- - -### Eksempel på Pull Request - -Gjennomgå PR-er automatisk når de åpnes eller oppdateres: - -```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`-hendelser, hvis ingen `prompt` er oppgitt, går OpenCode som standard gjennom PR-en. - ---- - -### Eksempel på triage av saker - -Automatisk triage av nye saker. Dette eksemplet filtrerer til kontoer eldre enn 30 dager for å redusere 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`-hendelser er `prompt`-inngangen **påkrevd** siden det ikke er noen kommentarer å trekke ut instruksjoner fra. - ---- - -## Egendefinerte prompter - -Overstyr standardprompten for å tilpasse oppførselen til OpenCode for arbeidsflyten din. - -```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 nyttig for å håndheve spesifikke vurderingskriterier, kodestandarder eller fokusområder som er relevante for prosjektet ditt. - ---- - -## Eksempler - -Her er noen eksempler på hvordan du kan bruke OpenCode i GitHub. - -:::tip -Du kan konfigurere til å bruke en annen triggerfrase enn `@opencode`. -::: - -- **Forklar en sak (issue)** - - Legg til denne kommentaren i en GitHub-sak. - - ``` - /opencode explain this issue - ``` - - OpenCode vil lese hele tråden, inkludert alle kommentarer, og svare med en tydelig forklaring. - -- **Fiks en sak** - - I en GitHub-sak, si: - - ``` - /opencode fix this - ``` - - Og OpenCode vil opprette en ny gren, implementere endringene og åpne en PR med endringene. - -- **Se gjennom PR-er og gjør endringer** - - Legg igjen følgende kommentar på en GitHub PR. - - ``` - Delete the attachment from S3 when the note is removed /oc - ``` - - OpenCode vil implementere den forespurte endringen og committe den til samme PR. - -- **Review av spesifikke kodelinjer** - - Legg igjen en kommentar direkte på kodelinjer i PRs "Filer"-fane. OpenCode oppdager automatisk filen, linjenumrene og diff-konteksten for å gi presise svar. - - ``` - [Comment on specific lines in Files tab] - /oc add error handling here - ``` - - Når du kommenterer spesifikke linjer, mottar OpenCode: - - Den nøyaktige filen blir gjennomgått - - De spesifikke kodelinjene - - Den omkringliggende diff-konteksten - - Linjenummerinformasjon - - Dette gir mulighet for mer målrettede forespørsler uten å måtte spesifisere filstier eller linjenumre manuelt. diff --git a/packages/web/src/content/docs/nb/gitlab.mdx b/packages/web/src/content/docs/nb/gitlab.mdx deleted file mode 100644 index 2fc34a3e8f..0000000000 --- a/packages/web/src/content/docs/nb/gitlab.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: GitLab -description: Bruk opencode i GitLab-problemer og Merge Requests. ---- - -OpenCode integreres med GitLab arbeidsflyten gjennom GitLab CI/CD pipeline eller med GitLab Duo. - -I begge tilfeller vil OpenCode kjøre på GitLab Runners. - ---- - -## GitLab CI - -OpenCode fungerer i en vanlig GitLab-pipeline. Du kan bygge den inn i en pipeline som en [CI-komponent](https://docs.gitlab.com/ee/ci/components/) - -Her bruker vi en fellesskapsskapt CI/CD-komponent for OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode). - ---- - -### Funksjoner - -- **Bruk tilpasset konfigurasjon per jobb**: Konfigurer OpenCode med en tilpasset konfigurasjonskatalog, for eksempel `./config/#custom-directory` for å aktivere eller deaktivere funksjonalitet per OpenCode-anrop. -- **Minimalt oppsett**: CI-komponenten setter opp OpenCode i bakgrunnen, du trenger bare å lage OpenCode-konfigurasjonen og den første ledeteksten. -- **Fleksibel**: CI-komponenten støtter flere innganger for å tilpasse virkemåten - ---- - -### Oppsett - -1. Lagre OpenCode sin autentiserings-JSON som en CI-miljøvariabel av typen Fil under **Innstillinger** > **CI/CD** > **Variabler**. Sørg for å merke dem som "Masked and hidden". -2. Legg til følgende i `.gitlab-ci.yml`-filen. - - ```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 inndata og brukstilfeller [sjekk ut dokumentene](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) for denne komponenten. - ---- - -## GitLab Duo - -OpenCode integreres med din GitLab arbeidsflyt. -Nevn `@opencode` i en kommentar, og OpenCode vil utføre oppgaver innenfor din GitLab CI-pipeline. - ---- - -### Funksjoner - -- **Triage av saker**: Be OpenCode se på en sak og forklare den for deg. -- **Fiks og implementer**: Be OpenCode om å fikse en sak eller implementere en funksjon. - Det vil opprette en ny gren og sende en Merge Request med endringene. -- **Sikkert**: OpenCode kjører på GitLab Runners. - ---- - -### Oppsett - -OpenCode kjører i GitLab CI/CD pipeline, her er det du trenger for å sette den opp: - -:::tip -Sjekk ut [**GitLab-dokumentene**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) for oppdaterte instruksjoner. -::: - -1. Konfigurer GitLab-miljøet ditt -2. Sett opp CI/CD -3. Få en AI modellleverandør API nøkkel -4. Opprett en tjenestekonto -5. Konfigurer CI/CD variabler -6. Lag en flytkonfigurasjonsfil, her er et eksempel: - -
- - Flow configuration - - ```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. - - - 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. - - " - - 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 - ``` - -
- -Du kan se [GitLab CLI agents docs](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) for detaljerte instruksjoner. - ---- - -### Eksempler - -Her er noen eksempler på hvordan du kan bruke OpenCode i GitLab. - -:::tip -Du kan konfigurere til å bruke en annen triggerfrase enn `@opencode`. -::: - -- **Forklar en sak** - - Legg til denne kommentaren i en GitLab-sak. - - ``` - @opencode explain this issue - ``` - - OpenCode vil lese saken og svare med en klar forklaring. - -- **Fiks en sak** - - I en GitLab-sak, si: - - ``` - @opencode fix this - ``` - - OpenCode vil opprette en ny gren, implementere endringene og åpne en Merge Request med endringene. - -- **Review av Merge Requests** - - Legg igjen følgende kommentar på en GitLab Merge Request. - - ``` - @opencode review this merge request - ``` - - OpenCode vil gjennomgå Merge Request-en og gi tilbakemelding. diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx deleted file mode 100644 index 14d289b139..0000000000 --- a/packages/web/src/content/docs/nb/go.mdx +++ /dev/null @@ -1,211 +0,0 @@ ---- -title: Go -description: Lavkostnadsabonnement for åpne kodemodeller. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Go er et lavkostnadsabonnement — **$5 for din første måned**, deretter **$10/måned** — som gir deg pålitelig tilgang til populære åpne kodemodeller. - -Go fungerer som enhver annen leverandør i OpenCode. Du abonnerer på OpenCode Go og -får din API-nøkkel. Det er **helt valgfritt**, og du trenger ikke å bruke det for å -bruke OpenCode. - -Det er primært utformet for internasjonale brukere, med modeller driftet i USA, EU og Singapore for stabil global tilgang. - ---- - -## Bakgrunn - -Åpne modeller har blitt veldig gode. De oppnår nå ytelse nær -proprietære modeller for kodeoppgaver. Og fordi mange leverandører kan tilby dem -konkurransedyktig, er de vanligvis mye billigere. - -Imidlertid kan det være vanskelig å få pålitelig tilgang med lav forsinkelse til dem. Leverandører -varierer i kvalitet og tilgjengelighet. - -:::tip -Vi testet en utvalgt gruppe modeller og leverandører som fungerer godt med OpenCode. -::: - -For å fikse dette, gjorde vi et par ting: - -1. Vi testet en utvalgt gruppe åpne modeller og snakket med teamene deres om hvordan de - best kan kjøres. -2. Deretter samarbeidet vi med noen få leverandører for å sikre at disse ble levert - riktig. -3. Til slutt utførte vi ytelsestester på kombinasjonen av modell og leverandør, og kom frem - til en liste som vi trygt kan anbefale. - -OpenCode Go gir deg tilgang til disse modellene for **$5 for din første måned**, deretter **$10/måned**. - ---- - -## Hvordan det fungerer - -OpenCode Go fungerer som enhver annen leverandør i OpenCode. - -1. Du logger inn på **OpenCode Zen**, abonnerer på Go, og - kopierer din API-nøkkel. -2. Du kjører kommandoen `/connect` i TUI-en, velger `OpenCode Go`, og limer inn - din API-nøkkel. -3. Kjør `/models` i TUI-en for å se listen over modeller som er tilgjengelige gjennom Go. - -:::note -Kun ett medlem per arbeidsområde kan abonnere på OpenCode Go. -::: - -Den nåværende listen over modeller inkluderer: - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -Listen over modeller kan endres etter hvert som vi tester og legger til nye. - ---- - -## Bruksgrenser - -OpenCode Go inkluderer følgende grenser: - -- **5-timers grense** — $12 i bruk -- **Ukentlig grense** — $30 i bruk -- **Månedlig grense** — $60 i bruk - -Grensene er definert i dollarverdi. Dette betyr at ditt faktiske antall forespørsler avhenger av modellen du bruker. Billigere modeller som DeepSeek V4 Flash tillater flere forespørsler, mens dyrere modeller som GLM-5.2 tillater færre. - -Tabellen nedenfor gir et estimert antall forespørsler basert på typiske bruksmønstre for Go: - -| Model | forespørsler per 5 timer | forespørsler per uke | forespørsler per måned | -| ----------------- | ------------------------ | -------------------- | ---------------------- | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -Estimatene er basert på observerte gjennomsnittlige forespørselsmønstre: - -- GLM-5.2/5.1 — 700 input, 52 000 bufret, 150 output-tokens per forespørsel -- Kimi K2.7 Code/K2.6 — 870 input, 55 000 bufret, 200 output-tokens per forespørsel -- DeepSeek V4 Pro — 750 input, 82 000 bufret, 290 output-tokens per forespørsel -- DeepSeek V4 Flash — 790 input, 68 000 bufret, 280 output-tokens per forespørsel -- MiniMax M3 — 510 input, 56 000 bufret, 190 output-tokens per forespørsel -- MiniMax M2.7 — 300 input, 55 000 bufret, 125 output-tokens per forespørsel -- Qwen3.7 Max — 420 input, 66 000 bufret, 200 output-tokens per forespørsel -- Qwen3.7 Plus — 500 input, 57 000 bufret, 190 output-tokens per forespørsel -- Qwen3.6 Plus — 500 input, 57 000 bufret, 190 output-tokens per forespørsel -- MiMo-V2.5 — 830 input, 71 500 bufret, 295 output-tokens per forespørsel -- MiMo-V2.5-Pro — 790 input, 86 000 bufret, 305 output-tokens per forespørsel - -Estimatene er også basert på følgende priser per 1M tokens: - -| Model | Input | Output | Cached Read | Cached Write | -| ---------------------------- | ----- | ------ | ----------- | ------------ | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -Du kan spore din nåværende bruk i **konsollen**. - -:::tip -Hvis du når bruksgrensen, kan du fortsette å bruke gratismodellene. -::: - -Bruksgrenser kan endres etter hvert som vi lærer fra tidlig bruk og tilbakemeldinger. - ---- - -### Bruk utover grensene - -Hvis du også har kreditt på din Zen-saldo, kan du aktivere alternativet **Bruk saldo** -i konsollen. Når dette er aktivert, vil Go falle tilbake på din Zen-saldo -etter at du har nådd bruksgrensene dine, i stedet for å blokkere forespørsler. - ---- - -## Endepunkter - -Du kan også få tilgang til Go-modeller gjennom følgende API-endepunkter. - -| Modell | Modell-ID | Endepunkt | AI SDK Package | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -[Modell-ID-en](/docs/config/#models) i din OpenCode-konfigurasjon -bruker formatet `opencode-go/`. For eksempel, for Kimi K2.7 Code, vil du -bruke `opencode-go/kimi-k2.7-code` i konfigurasjonen din. - ---- - -### Modeller - -Du kan hente hele listen over tilgjengelige modeller og metadataene deres fra: - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## Personvern - -Planen er primært utformet for internasjonale brukere, med modeller hostet i US, EU og Singapore for stabil global tilgang. Våre leverandører følger en zero-retention-policy og bruker ikke dataene dine til modelltrening. - ---- - -## Mål - -Vi opprettet OpenCode Go for å: - -1. Gjøre AI-koding **tilgjengelig** for flere mennesker med et lavkostnadsabonnement. -2. Gi **pålitelig** tilgang til de beste åpne kodemodellene. -3. Kuratere modeller som er **testet og ytelsesmålt** for bruk av kodeagenter. -4. Ha **ingen innelåsing** ved å la deg bruke en hvilken som helst annen leverandør med OpenCode også. diff --git a/packages/web/src/content/docs/nb/ide.mdx b/packages/web/src/content/docs/nb/ide.mdx deleted file mode 100644 index 76b1ce1664..0000000000 --- a/packages/web/src/content/docs/nb/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: IDE -description: OpenCode-utvidelsen for VS Code, Cursor og andre IDE-er ---- - -OpenCode integreres med VS Code, Cursor eller en hvilken som helst IDE som støtter en terminal. Bare kjør `opencode` i terminalen for å komme i gang. - ---- - -## Bruk - -- **Hurtigstart**: Bruk `Cmd+Esc` (Mac) eller `Ctrl+Esc` (Windows/Linux) for å åpne OpenCode i en delt terminalvisning, eller fokuser en eksisterende terminaløkt hvis en allerede kjører. -- **Ny økt**: Bruk `Cmd+Shift+Esc` (Mac) eller `Ctrl+Shift+Esc` (Windows/Linux) for å starte en ny OpenCode-terminaløkt, selv om en allerede er åpen. Du kan også klikke på OpenCode-knappen i UI. -- **Kontekstbevissthet**: Del automatisk ditt nåværende valg eller fane med OpenCode. -- **Snarveier for filreferanser**: Bruk `Cmd+Option+K` (Mac) eller `Alt+Ctrl+K` (Linux/Windows) for å sette inn filreferanser. For eksempel `@File#L37-42`. - ---- - -## Installasjon - -For å installere OpenCode på VS Code og populære varianter som Cursor, Windsurf, VSCodium: - -1. Åpne VS Code -2. Åpne den integrerte terminalen -3. Kjør `opencode` - utvidelsen installeres automatisk - -Hvis du derimot vil bruke din egen IDE når du kjører `/editor` eller `/export` fra TUI, må du angi `export EDITOR="code --wait"`. [Finn ut mer](/docs/tui/#editor-setup). - ---- - -### Manuell installasjon - -Søk etter **OpenCode** i Extension Marketplace og klikk på **Install**. - ---- - -### Feilsøking - -Hvis utvidelsen ikke kan installeres automatisk: - -- Sørg for at du kjører `opencode` i den integrerte terminalen. -- Bekreft at CLI for IDE er installert: - - For VS Code: `code` kommando - - For Cursor: `cursor` kommando - - For Windsurf: `windsurf` kommando - - For VSCodium: `codium` kommando - - Hvis ikke, kjør `Cmd+Shift+P` (Mac) eller `Ctrl+Shift+P` (Windows/Linux) og søk etter "Shell Command: Install 'code' command in PATH" (eller tilsvarende for din IDE) -- Sørg for at VS Code har tillatelse til å installere utvidelser diff --git a/packages/web/src/content/docs/nb/index.mdx b/packages/web/src/content/docs/nb/index.mdx deleted file mode 100644 index 0e6846d2b9..0000000000 --- a/packages/web/src/content/docs/nb/index.mdx +++ /dev/null @@ -1,359 +0,0 @@ ---- -title: Introduksjon -description: Kom i gang med OpenCode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" -import config from "../../../../config.mjs" -export const console = config.console - -[**OpenCode**](/) er en åpen kildekode AI kodeagent. Den er tilgjengelig som et terminalbasert grensesnitt, skrivebordsapp eller IDE-utvidelse. - -![OpenCode TUI med opencode-temaet](../../../assets/lander/screenshot.png) - -La oss komme i gang. - ---- - -#### Forutsetninger - -For å bruke OpenCode i terminalen din trenger du: - -1. En moderne terminalemulator som: - - [WezTerm](https://wezterm.org), på tvers av plattformer - - [Alacritty](https://alacritty.org), på tvers av plattformer - - [Ghostty](https://ghostty.org), Linux og macOS - - [Kitty](https://sw.kovidgoyal.net/kitty/), Linux og macOS - -2. API-nøkler for LLM-leverandørene du vil bruke. - ---- - -## Installasjon - -Den enkleste måten å installere OpenCode på er gjennom installasjonsskriptet. - -```bash -curl -fsSL https://opencode.ai/install | bash -``` - -Du kan også installere den med følgende kommandoer: - -- **Bruke Node.js** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **Bruke Homebrew på macOS og Linux** - - ```bash - brew install anomalyco/tap/opencode - ``` - - > Vi anbefaler å bruke OpenCode-tappen for de mest oppdaterte utgivelsene. Den offisielle `brew install opencode`-formelen vedlikeholdes av Homebrew-teamet og oppdateres sjeldnere. - -- **Bruke Paru på Arch Linux** - - ```bash - sudo pacman -S opencode # Arch Linux (Stable) - paru -S opencode-bin # Arch Linux (Latest from AUR) - ``` - -#### Windows - -:::tip[Anbefalt: Bruk WSL] -For den beste opplevelsen på Windows anbefaler vi å bruke [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). Det gir bedre ytelse og full kompatibilitet med funksjonene i OpenCode. -::: - -- **Bruke Chocolatey** - - ```bash - choco install opencode - ``` - -- **Bruke Scoop** - - ```bash - scoop install opencode - ``` - -- **Bruke npm** - - ```bash - npm install -g opencode-ai - ``` - -- **Bruke Mise** - - ```bash - mise use -g github:anomalyco/opencode - ``` - -- **Bruke Docker** - - ```bash - docker run -it --rm ghcr.io/anomalyco/opencode - ``` - -Støtte for installasjon av OpenCode på Windows med Bun er under arbeid. - -Du kan også hente binæren fra [Releases](https://github.com/anomalyco/opencode/releases). - ---- - -## Konfigurasjon - -Med OpenCode kan du bruke hvilken som helst LLM-leverandør ved å konfigurere deres API-nøkler. - -Hvis du er ukjent med LLM-leverandører, anbefaler vi å bruke [OpenCode Zen](/docs/zen). -Det er en kuratert liste over modeller som har blitt testet og verifisert av OpenCode-teamet. - -1. Kjør kommandoen `/connect` i TUI, velg OpenCode og gå til [opencode.ai/auth](https://opencode.ai/auth). - - ```txt - /connect - ``` - -2. Logg på, legg til faktureringsdetaljene dine og kopier API-nøkkelen. - -3. Lim inn API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -Alternativt kan du velge en av de andre leverandørene. [Finn ut mer](/docs/providers#directory). - ---- - -## Initialisering - -Nå som du har konfigurert en leverandør, kan du navigere til et prosjekt som -du vil jobbe med. - -```bash -cd /path/to/project -``` - -Og kjør OpenCode. - -```bash -opencode -``` - -Deretter initialiserer du OpenCode for prosjektet ved å kjøre følgende kommando. - -```bash frame="none" -/init -``` - -Dette vil få OpenCode til å analysere prosjektet ditt og opprette en `AGENTS.md`-fil i -prosjektroten. - -:::tip -Du bør overgi prosjektets `AGENTS.md`-fil til Git. -::: - -Dette hjelper OpenCode med å forstå prosjektstrukturen og kodingsmønstrene -brukt. - ---- - -## Bruk - -Du er nå klar til å bruke OpenCode for å jobbe med prosjektet ditt. Spør det gjerne -noe! - -Hvis du er ukjent med AI-kodeagenter, her er noen eksempler som kan -hjelpe. - ---- - -### Still spørsmål - -Du kan be OpenCode forklare kodebasen for deg. - -:::tip -Bruk `@`-tasten for uklart søk etter filer i prosjektet. -::: - -```txt frame="none" "@packages/functions/src/api/index.ts" -How is authentication handled in @packages/functions/src/api/index.ts -``` - -Dette er nyttig hvis det er en del av kodebasen du ikke har jobbet med. - ---- - -### Legg til funksjonalitet - -Du kan be OpenCode legge til nye funksjoner i prosjektet ditt. Selv om vi først anbefaler å be den om å lage en plan. - -1. **Lag en plan** - - OpenCode har en _Plan-modus_ som deaktiverer muligheten til å gjøre endringer og - foreslår i stedet _hvordan_ den vil implementere funksjonen. - - Bytt til den ved å bruke **Tab**-tasten. Du vil se en indikator for dette i nedre høyre hjørne. - - ```bash frame="none" title="Switch to Plan mode" - - ``` - - La oss nå beskrive hva vi vil at den skal gjø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 bør gi OpenCode nok detaljer til å forstå hva du ønsker. Det hjelper - å snakke med det som om du snakker med en juniorutvikler på laget ditt. - - :::tip - Gi OpenCode mye kontekst og eksempler for å hjelpe den å forstå hva du - ønsker. - ::: - -2. **Iterer på planen** - - Når du får en plan, kan du gi den tilbakemelding eller legge til 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 - Dra og slipp bilder i terminalen for å legge dem til ledeteksten. - ::: - - OpenCode kan skanne alle bilder du gir den og legge dem til i ledeteksten. Du kan - gjør dette ved å dra og slippe et bilde inn i terminalen. - -3. **Bygg funksjonen** - - Når du føler deg komfortabel med planen, bytt tilbake til _Byggemodus_ ved å - trykke på **Tab**-tasten igjen. - - ```bash frame="none" - - ``` - - Og be den om å gjøre endringene. - - ```bash frame="none" - Sounds good! Go ahead and make the changes. - ``` - ---- - -### Gjør endringer - -For mer enkle endringer kan du be OpenCode om å bygge det direkte -uten å måtte gjennomgå 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 -``` - -Sørg for å gi nok detaljer, slik at OpenCode gjør de rette -endringene. - ---- - -### Angre endringer - -La oss si at du ber OpenCode om å gjøre noen endringer. - -```txt frame="none" "@packages/functions/src/api/index.ts" -Can you refactor the function in @packages/functions/src/api/index.ts? -``` - -Men du skjønner at det ikke er det du ønsket. Du **kan angre** endringene -ved å bruke kommandoen `/undo`. - -```bash frame="none" -/undo -``` - -OpenCode vil nå tilbakestille endringene du har gjort og vise den opprinnelige meldingen -igjen. - -```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 ledeteksten og be OpenCode om å prøve igjen. - -:::tip -Du kan kjøre `/undo` flere ganger for å angre flere endringer. -::: - -Eller du **kan gjøre om** endringene ved å bruke `/redo`-kommandoen. - -```bash frame="none" -/redo -``` - ---- - -## Deling - -Samtalene du har med OpenCode kan [deles med din -team](/docs/share). - -```bash frame="none" -/share -``` - -Dette vil opprette en kobling til den gjeldende samtalen og kopiere den til utklippstavlen. - -:::note -Samtaler deles ikke som standard. -::: - -Her er en [eksempelsamtale](https://opencode.ai/s/4XP1fce5) med OpenCode. - ---- - -## Tilpasning - -Og det er det! Du er nå en proff på å bruke OpenCode. - -For å tilpasse det anbefaler vi å [velge et tema](/docs/themes), [tilpasse tastebindingene](/docs/keybinds), [konfigurere kodeformattere](/docs/formatters), [opprette egendefinerte kommandoer](/docs/commands) eller leke med [OpenCode-konfigurasjonen](/docs/config). diff --git a/packages/web/src/content/docs/nb/keybinds.mdx b/packages/web/src/content/docs/nb/keybinds.mdx deleted file mode 100644 index 623f7aa241..0000000000 --- a/packages/web/src/content/docs/nb/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Tastebindinger -description: Tilpass tastebindingene dine. ---- - -OpenCode har en liste over tastebindinger som du kan tilpasse gjennom `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "h", - "display_thinking": "none" - } -} -``` - ---- - -## Leader-tast - -OpenCode bruker en `leader`-tast for de fleste tastebindinger. Dette unngår konflikter i terminalen din. - -Som standard er `ctrl+x` ledertasten, og de fleste handlinger krever at du først trykker på ledertasten og deretter snarveien. For å starte en ny økt, trykker du for eksempel først `ctrl+x` og deretter `n`. - -Du trenger ikke å bruke en ledertast for tastebindingene dine, men vi anbefaler at du gjør det. - ---- - -## Deaktivering av tastebindinger - -Du kan deaktivere en tastebinding ved å legge til tasten til `tui.json` med en verdi på "none". - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "session_compact": "none" - } -} -``` - ---- - -## Snarveier i skrivebordsappen - -Prompt-feltet for OpenCode-skrivebordsappen støtter vanlige snarveier i Readline/Emacs-stil for redigering av tekst. Disse er innebygd og foreløpig ikke konfigurerbare via `opencode.json`. - -| Snarvei | Handling | -| -------- | ---------------------------------------- | -| `ctrl+a` | Flytt til starten av gjeldende linje | -| `ctrl+e` | Flytt til slutten av gjeldende linje | -| `ctrl+b` | Flytt markøren ett tegn tilbake | -| `ctrl+f` | Flytt markøren ett tegn fremover | -| `alt+b` | Flytt markøren ett ord tilbake | -| `alt+f` | Flytt markøren ett ord fremover | -| `ctrl+d` | Slett tegn under markøren | -| `ctrl+k` | Slett til slutten av linjen | -| `ctrl+u` | Slett til starten av linjen | -| `ctrl+w` | Slett forrige ord | -| `alt+d` | Slett neste ord | -| `ctrl+t` | Bytt om tegn | -| `ctrl+g` | Avbryt popovers / avbryt kjøring av svar | - ---- - -## Shift+Enter - -Noen terminaler sender ikke modifikasjonstaster med Enter som standard. Du må kanskje konfigurere terminalen til å sende `Shift+Enter` som en escape-sekvens. - -### Windows Terminal - -Åpne `settings.json` på: - -``` -%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json -``` - -Legg dette til `actions`-matrisen på rotnivå: - -```json -"actions": [ - { - "command": { - "action": "sendInput", - "input": "\u001b[13;2u" - }, - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Legg dette til `keybindings`-matrisen på rotnivå: - -```json -"keybindings": [ - { - "keys": "shift+enter", - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Lagre filen og start Windows Terminal på nytt eller åpne en ny fane. diff --git a/packages/web/src/content/docs/nb/lsp.mdx b/packages/web/src/content/docs/nb/lsp.mdx deleted file mode 100644 index 7c9ceeaf88..0000000000 --- a/packages/web/src/content/docs/nb/lsp.mdx +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: LSP-servere -description: opencode integreres med LSP-serverne dine. ---- - -OpenCode kan integreres med Language Server Protocol (LSP)-servere for å bruke diagnostikk som tilbakemelding til agenten. - ---- - -## Innebygde servere - -OpenCode kommer med flere innebygde LSP-servere for populære språk: - -| LSP Server | Filendelser | Krav | -| ------------------ | ------------------------------------------------------------------- | ----------------------------------------------------------------------- | -| astro | .astro | Installeres automatisk for Astro-prosjekter | -| bash | .sh, .bash, .zsh, .ksh | Installerer bash-language-server automatisk | -| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Installeres automatisk for C/C++-prosjekter | -| csharp | .cs | `.NET SDK` installert | -| clojure-lsp | .clj, .cljs, .cljc, .edn | `clojure-lsp` kommando tilgjengelig | -| dart | .dart | `dart` kommando tilgjengelig | -| deno | .ts, .tsx, .js, .jsx, .mjs | `deno` kommando tilgjengelig (automatisk oppdager deno.json/deno.jsonc) | -| elixir-ls | .ex, .exs | `elixir` kommando tilgjengelig | -| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | `eslint` avhengighet i prosjekt | -| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` installert | -| gleam | .gleam | `gleam` kommando tilgjengelig | -| gopls | .go | `go` kommando tilgjengelig | -| hls | .hs, .lhs | `haskell-language-server-wrapper` kommando tilgjengelig | -| jdtls | .java | `Java SDK (version 21+)` installert | -| julials | .jl | `julia` og `LanguageServer.jl` installert | -| kotlin-ls | .kt, .kts | Installeres automatisk for Kotlin-prosjekter | -| lua-ls | .lua | Installeres automatisk for Lua-prosjekter | -| nixd | .nix | `nixd` kommando tilgjengelig | -| ocaml-lsp | .ml, .mli | `ocamllsp` kommando tilgjengelig | -| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | `oxlint` avhengighet i prosjekt | -| php intelephense | .php | Installeres automatisk for PHP-prosjekter | -| prisma | .prisma | `prisma` kommando tilgjengelig | -| pyright | .py, .pyi | `pyright` avhengighet installert | -| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | `ruby` og `gem` kommandoer tilgjengelig | -| rust | .rs | `rust-analyzer` kommando tilgjengelig | -| sourcekit-lsp | .swift, .objc, .objcpp | `swift` installert (`xcode` på macOS) | -| svelte | .svelte | Installeres automatisk for Svelte-prosjekter | -| terraform | .tf, .tfvars | Installeres automatisk fra GitHub-utgivelser | -| tinymist | .typ, .typc | Installeres automatisk fra GitHub-utgivelser | -| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | `typescript` avhengighet i prosjekt | -| vue | .vue | Installeres automatisk for Vue-prosjekter | -| yaml-ls | .yaml, .yml | Installerer Red Hat yaml-language-server automatisk | -| zls | .zig, .zon | `zig` kommando tilgjengelig | - -LSP er deaktivert som standard. Når det er aktivert, starter servere når en av filtypene ovenfor oppdages og kravene oppfylles. - -:::note -Du kan deaktivere automatiske LSP-servernedlastinger ved å sette miljøvariabelen `OPENCODE_DISABLE_LSP_DOWNLOAD` til `true`. -::: - ---- - -## Slik fungerer det - -Når LSP er aktivert og opencode åpner en fil, gjør den: - -1. Kontrollerer filtypen mot alle aktiverte LSP-servere. -2. Starter den riktige LSP-serveren hvis den ikke allerede kjører. - ---- - -## Beste praksis - -LSP kan hjelpe agenten med å finne og fikse problemer ved å gi diagnostikk fra språkservere. Dette er nyttig i noen prosjekter, men er ikke alltid en klar gevinst. - -Språkservere kan komme ut av synk, bruke mye minne, variere etter versjon eller prosjekt og redusere agentarbeidsflyter. I mange prosjekter er det bedre at agenten kjører lint, typecheck eller andre diagnostiske CLI-verktøy direkte, slik at feil mates tilbake i agentløkken uten disse avveiningene. Dokumenter disse kommandoene i instruksjonsfiler som `AGENTS.md` eller skills, slik at agenten vet hva den skal kjøre. Aktiver LSP når prosjektet ditt har nytte av ekstra språkservertilbakemelding. - ---- - -## Konfigurasjon - -Du kan aktivere og tilpasse LSP-servere gjennom `lsp`-delen i OpenCode-konfigurasjonen. - -For å aktivere alle innebygde LSP-servere, sett `lsp` til `true`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -Bruk et objekt for å beholde innebygde servere aktivert mens du konfigurerer overstyringer eller egendefinerte servere. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": {} -} -``` - -Hver LSP-server støtter følgende: - -| Egenskap | Type | Beskrivelse | -| ---------------- | -------- | -------------------------------------------------------- | -| `disabled` | boolean | Sett dette til `true` for å deaktivere LSP-serveren | -| `command` | string[] | Kommandoen for å starte LSP-serveren | -| `extensions` | string[] | Filendelser denne LSP-serveren skal håndtere | -| `env` | object | Miljøvariabler som skal angis når serveren startes | -| `initialization` | object | Initialiseringsalternativer for å sende til LSP-serveren | - -La oss se på noen eksempler. - ---- - -### Miljøvariabler - -Bruk egenskapen `env` til å angi 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" - } - } - } -} -``` - ---- - -### Initialiseringsalternativer - -Bruk egenskapen `initialization` til å sende initialiseringsalternativer til LSP-serveren. Dette er serverspesifikke innstillinger sendt under LSP `initialize`-forespørselen: - -```json title="opencode.json" {5-9} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "initialization": { - "preferences": { - "importModuleSpecifierPreference": "relative" - } - } - } - } -} -``` - -:::note -Initialiseringsalternativer varierer etter LSP-server. Sjekk dokumentasjonen til LSP-serveren for tilgjengelige alternativer. -::: - ---- - -### Deaktivering av LSP-servere - -Hvis `lsp` utelates, er alle LSP-servere deaktivert. For å deaktivere alle LSP-servere etter at en annen konfigurasjon har aktivert dem, sett `lsp` til `false`: - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": false -} -``` - -For å deaktivere en **spesifikk** LSP-server, sett `disabled` til `true`: - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "disabled": true - } - } -} -``` - ---- - -### Egendefinerte LSP-servere - -Du kan legge til egendefinerte LSP-servere ved å spesifisere kommandoen og filtypene: - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "custom-lsp": { - "command": ["custom-lsp-server", "--stdio"], - "extensions": [".custom"] - } - } -} -``` - ---- - -## Tilleggsinformasjon - -### PHP Intelephense - -PHP Intelephense tilbyr førsteklasses funksjoner gjennom en lisensnøkkel. Du kan oppgi en lisensnøkkel ved å plassere (bare) nøkkelen i en tekstfil på: - -- På macOS/Linux: `$HOME/intelephense/license.txt` -- På Windows: `%USERPROFILE%/intelephense/license.txt` - -Filen skal bare inneholde lisensnøkkelen uten ekstra innhold. diff --git a/packages/web/src/content/docs/nb/mcp-servers.mdx b/packages/web/src/content/docs/nb/mcp-servers.mdx deleted file mode 100644 index c7908eb988..0000000000 --- a/packages/web/src/content/docs/nb/mcp-servers.mdx +++ /dev/null @@ -1,624 +0,0 @@ ---- -title: MCP-servere -description: Legg til lokale og eksterne MCP-verktøy. ---- - -Du kan legge til eksterne verktøy i OpenCode ved å bruke _Model Context Protocol_ eller MCP. OpenCode støtter både lokale og eksterne servere. - -Når de er lagt til, er MCP-verktøy automatisk tilgjengelige for LLM sammen med innebygde verktøy. - ---- - -#### Advarsler - -Når du bruker en MCP-server, legger den til konteksten. Dette kan fort gå opp hvis du har mange verktøy. Så vi anbefaler å være forsiktig med hvilke MCP-servere du bruker. - -:::tip -MCP-servere legger til konteksten din, så du vil være forsiktig med hvilke du aktiverer. -::: - -Enkelte MCP-servere, som GitHub MCP-serveren, har en tendens til å legge til mange tokens og kan lett overskride kontekstgrensen. - ---- - -## Aktivering - -Du kan definere MCP-servere i [OpenCode Config](https://opencode.ai/docs/config/) under `mcp`. Legg til hver MCP med et unikt navn. Du kan referere til den MCP ved navn når du spør LLM-en. - -```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 å sette `enabled` til `false`. Dette er nyttig hvis du vil deaktivere en server midlertidig uten å fjerne den fra konfigurasjonen. - ---- - -### Overstyring av fjernstandarder - -Organisasjoner kan tilby standard MCP-servere via deres `.well-known/opencode`-endepunkt. Disse serverne kan være deaktivert som standard, slik at brukere kan melde seg på de de trenger. - -For å aktivere en spesifikk server fra organisasjonens eksterne konfigurasjon, legg den til i din lokale konfigurasjon 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 konfigurasjonsverdier overstyrer de eksterne standardinnstillingene. Se [config precedence](/docs/config#precedence-order) for flere detaljer. - ---- - -## Lokal - -Legg til lokale MCP-servere ved å bruke `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-serveren startes. Du kan også sende inn en liste over miljøvariabler. - -For eksempel, her er hvordan du kan legge til test [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP serveren. - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "mcp_everything": { - "type": "local", - "command": ["npx", "-y", "@modelcontextprotocol/server-everything"], - }, - }, -} -``` - -Og for å bruke den kan du legge til `use the mcp_everything tool` i ledetekstene mine. - -```txt "mcp_everything" -use the mcp_everything tool to add the number 3 and 4 -``` - ---- - -#### Alternativer - -Her er alle alternativene for å konfigurere en lokal MCP-server. - -| Alternativ | Type | Påkrevd | Beskrivelse | -| ------------- | ------- | ------- | ---------------------------------------------------------------------------------------- | -| `type` | String | Y | Type MCP servertilkobling, må være `"local"`. | -| `command` | Array | Y | Kommando og argumenter for å kjøre MCP-serveren. | -| `environment` | Object | | Miljøvariabler som skal angis når serveren kjøres. | -| `enabled` | Boolean | | Aktiver eller deaktiver MCP-serveren ved oppstart. | -| `timeout` | Number | | Tidsavbrudd i ms for henting av verktøy fra MCP-serveren. Standard er 5000 (5 sekunder). | - ---- - -## Ekstern - -Legg til eksterne MCP-servere ved å sette `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 til den eksterne MCP serveren og med alternativet `headers` kan du sende inn en liste over headere. - ---- - -#### Alternativer - -| Alternativ | Type | Påkrevd | Beskrivelse | -| ---------- | ------- | ------- | ---------------------------------------------------------------------------------------- | -| `type` | String | Y | Type MCP servertilkobling, må være `"remote"`. | -| `url` | String | Y | URL av den eksterne MCP-serveren. | -| `enabled` | Boolean | | Aktiver eller deaktiver MCP-serveren ved oppstart. | -| `headers` | Object | | Headere å sende med forespørselen. | -| `oauth` | Object | | OAuth-autentiseringskonfigurasjon. Se delen [OAuth](#oauth) nedenfor. | -| `timeout` | Number | | Tidsavbrudd i ms for henting av verktøy fra MCP-serveren. Standard er 5000 (5 sekunder). | - ---- - -## OAuth - -OpenCode håndterer automatisk OAuth-autentisering for eksterne MCP-servere. Når en server krever autentisering, vil OpenCode: - -1. Oppdag 401-svaret og start OAuth-flyten -2. Bruk **Dynamisk klientregistrering (RFC 7591)** hvis det støttes av serveren -3. Lagre tokens sikkert for fremtidige forespørsler - ---- - -### Automatisk - -For de fleste OAuth-aktiverte MCP-servere er ingen spesiell konfigurasjon nødvendig. Bare konfigurer den eksterne serveren: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "my-oauth-server": { - "type": "remote", - "url": "https://mcp.example.com/mcp" - } - } -} -``` - -Hvis serveren krever autentisering, vil OpenCode be deg om å autentisere når du prøver å bruke den for første gang. Hvis ikke, kan du [utløse flyten manuelt](#authenticating) med `opencode mcp auth `. - ---- - -### Forhåndsregistrert - -Hvis du har klientlegitimasjon fra MCP-serverleverandøren, 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" - } - } - } -} -``` - ---- - -### Autentisering - -Du kan utløse autentisering manuelt eller administrere legitimasjon. - -Autentiser med en spesifikk MCP-server: - -```bash -opencode mcp auth my-oauth-server -``` - -Liste alle MCP-servere og deres autentiseringsstatus: - -```bash -opencode mcp list -``` - -Fjern lagret legitimasjon: - -```bash -opencode mcp logout my-oauth-server -``` - -Kommandoen `mcp auth` åpner nettleseren din for autorisasjon. Etter at du har godkjent, vil OpenCode lagre tokens sikkert i `~/.local/share/opencode/mcp-auth.json`. - ---- - -#### Deaktivering av OAuth - -Hvis du vil deaktivere automatisk OAuth for en server (f.eks. for servere som bruker API-nøkler i stedet), setter du `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-alternativer - -| Alternativ | Type | Beskrivelse | -| -------------- | --------------- | -------------------------------------------------------------------------------------- | -| `oauth` | Object \| false | OAuth-konfigurasjonsobjekt, eller `false` for å deaktivere automatisk OAuth-deteksjon. | -| `clientId` | String | OAuth-klient ID. Hvis ikke oppgitt, vil dynamisk klientregistrering bli forsøkt. | -| `clientSecret` | String | OAuth-klienthemmelighet, hvis det kreves av autorisasjonsserveren. | -| `scope` | String | OAuth-omfang å be om under autorisasjon. | - -#### Feilsøking - -Hvis en ekstern MCP-server ikke klarer å autentisere, kan du diagnostisere 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 gjeldende autentiseringsstatus, tester HTTP-tilkoblingen og forsøker OAuth-oppdagelsesflyten. - ---- - -## Administrering - -MCP-ene dine er tilgjengelige som verktøy i OpenCode, sammen med innebygde verktøy. Så du kan administrere dem gjennom OpenCode-konfigurasjonen som alle andre verktøy. - ---- - -### Globalt - -Dette betyr 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å bruke et globmønster for å deaktivere alle matchende MCP-er. - -```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 bruker vi globmønsteret `my-mcp*` for å deaktivere alle MCP-er. - ---- - -### Per agent - -Hvis du har et stort antall MCP-servere, vil du kanskje bare aktivere dem per agent og deaktivere dem globalt. Slik gjør du dette: - -1. Deaktiver det som et verktøy globalt. -2. Aktiver MCP-serveren som et verktøy i [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 bruker enkle regex-globing-mønstre: - -- `*` samsvarer med null eller flere av alle tegn (f.eks. `"my-mcp*"` samsvarer med `my-mcp_search`, `my-mcp_list`, osv.) -- `?` samsvarer med nøyaktig ett tegn -- Alle andre karakterer samsvarer bokstavelig talt - -:::note -MCP serververktøy er registrert med servernavn som prefiks, så for å deaktivere alle verktøy for en server bruker du bare: - -``` -"mymcpservername_*": false -``` - -::: - ---- - -## Eksempler - -Nedenfor er eksempler på noen vanlige MCP-servere. Du kan sende inn en PR hvis du vil dokumentere andre servere. - ---- - -### Sentry - -Legg til [Sentry MCP-serveren](https://mcp.sentry.dev) for å samhandle med Sentry-prosjektene og problemene dine. - -```json title="opencode.json" {4-8} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "sentry": { - "type": "remote", - "url": "https://mcp.sentry.dev/mcp", - "oauth": {} - } - } -} -``` - -Etter å ha lagt til konfigurasjonen, autentiser med Sentry: - -```bash -opencode mcp auth sentry -``` - -Dette åpner et nettleservindu for å fullføre OAuth-flyten og koble OpenCode til Sentry-kontoen din. - -Når du er autentisert, kan du bruke Sentry-verktøy i ledetekstene dine for å spørre etter problemer, prosjekter og feildata. - -```txt "use sentry" -Show me the latest unresolved issues in my project. use sentry -``` - ---- - -### Context7 - -Legg til [Context7 MCP-serveren](https://github.com/upstash/context7) for å søke gjennom 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 registrert deg for en gratis konto, kan du bruke API-nøkkelen din og få høyere satsgrenser. - -```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 antar vi at du har `CONTEXT7_API_KEY` miljøvariabelen satt. - -Legg til `use context7` i instruksjonene for å bruke Context7 MCP-serveren. - -```txt "use context7" -Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7 -``` - -Alternativt kan du legge til noe slikt til din [AGENTS.md](/docs/rules/). - -```md title="AGENTS.md" -When you need to search docs, use `context7` tools. -``` - ---- - -### Grep by Vercel - -Legg til [Grep by Vercel](https://grep.app) MCP-serveren for å søke gjennom kodebiter på GitHub. - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "gh_grep": { - "type": "remote", - "url": "https://mcp.grep.app" - } - } -} -``` - -Siden vi kalte MCP-serveren vår `gh_grep`, kan du legge til `use the gh_grep tool` i spørsmålene dine for å få agenten til å bruke 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 legge til noe slikt 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. -``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) er en LLM observerbarhetsplattform som gir logging, overvåking og analyser for AI-applikasjonene dine. Helicone AI Gateway ruter forespørslene dine til riktig leverandør automatisk basert på modellen. - -1. Gå over til [Helicone](https://helicone.ai), opprett en konto og generer en API nøkkel fra dashbordet. - -2. Kjør kommandoen `/connect` og søk etter **Helicone**. - - ```txt - /connect - ``` - -3. Skriv inn Helicone API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell. - - ```txt - /models - ``` - -For flere leverandører og avanserte funksjoner som bufring og hastighetsbegrensning, sjekk [Helicone-dokumentasjonen](https://docs.helicone.ai). - -#### Valgfrie konfigurasjoner - -I tilfelle du ser en funksjon eller modell fra Helicone som ikke konfigureres automatisk gjennom OpenCode, kan du alltid konfigurere den selv. - -Her er [Helicone's Model Directory](https://helicone.ai/models), du trenger denne for å hente ID-ene til modellene du vil legge til. - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### Egendefinerte headere - -Helicone støtter tilpassede headere for funksjoner som bufring, brukersporing og øktadministrasjon. Legg dem til leverandørkonfigurasjonen din ved å bruke `options.headers`: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### Sesjonssporing - -Helicones [Sessions](https://docs.helicone.ai/features/sessions) funksjon lar deg gruppere relaterte LLM forespørsler sammen. Bruk [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) plugin for automatisk å logge hver OpenCode-samtale som en økt i Helicone. - -```bash -npm install -g opencode-helicone-session -``` - -Legg den til i konfigurasjonen din. - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -Programtillegget injiserer `Helicone-Session-Id` og `Helicone-Session-Name` overskrifter i forespørslene dine. På Helicones Sessions-side vil du se hver OpenCode-samtale oppført som en separat økt. - -##### Vanlige Helicone-headere - -| Overskrift | Beskrivelse | -| -------------------------- | -------------------------------------------------------------------------- | -| `Helicone-Cache-Enabled` | Aktiver responsbufring (`true`/`false`) | -| `Helicone-User-Id` | Spor beregninger etter bruker | -| `Helicone-Property-[Name]` | Legg til egendefinerte egenskaper (f.eks. `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | Knytt forespørsler til spørsmålsversjoner | - -Se [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory) for alle tilgjengelige overskrifter. diff --git a/packages/web/src/content/docs/nb/models.mdx b/packages/web/src/content/docs/nb/models.mdx deleted file mode 100644 index fe53d9661d..0000000000 --- a/packages/web/src/content/docs/nb/models.mdx +++ /dev/null @@ -1,223 +0,0 @@ ---- -title: Modeller -description: Konfigurere en LLM leverandør og modell. ---- - -OpenCode bruker [AI SDK](https://ai-sdk.dev/) og [Models.dev](https://models.dev) for å støtte **75+ LLM leverandører** og den støtter kjøring av lokale modeller. - ---- - -## Leverandører - -De fleste populære leverandørene er forhåndslastet som standard. Hvis du har lagt til legitimasjonen for en leverandør gjennom kommandoen `/connect`, vil den være tilgjengelig når du starter OpenCode. - -Finn ut mer om [leverandører](/docs/providers). - ---- - -## Velge en modell - -Når du har konfigurert leverandøren din, kan du velge modellen du ønsker ved å skrive inn: - -```bash frame="none" -/models -``` - ---- - -## Anbefalte modeller - -Det er mange modeller der ute, med nye modeller som kommer ut hver uke. - -:::tip -Vurder å bruke en av modellene vi anbefaler. -::: - -Imidlertid er det bare noen få av dem som er gode til både å generere kode og verktøykalling. - -Her er flere modeller som fungerer godt med OpenCode, uten spesiell rekkefølge. (Dette er ikke en uttømmende liste og er heller ikke nødvendigvis oppdatert): - -- GPT 5.2 -- GPT 5.1 Codex -- Claude Opus 4.5 -- Claude Sonnet 4.5 -- Minimax M2.1 -- Gemini 3 Pro - ---- - -## Angi en standard - -For å angi en av disse som standardmodell, kan du angi `model`-tasten i din -OpenCode-konfigurasjon. - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "model": "lmstudio/google/gemma-3n-e4b" -} -``` - -Her er hele ID `provider_id/model_id`. For eksempel, hvis du bruker [OpenCode Zen](/docs/zen), vil du bruke `opencode/gpt-5.1-codex` for GPT 5.1 Codex. - -Hvis du har konfigurert en [egendefinert leverandør](/docs/providers#custom), er `provider_id` nøkkelen fra `provider`-delen av konfigurasjonen din, og `model_id` er nøkkelen fra `provider.models`. - ---- - -## Konfigurer modeller - -Du kan konfigurere en modells alternativer globalt gjennom konfigurasjonen. - -```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 innstillinger for to innebygde modeller: `gpt-5` når de åpnes via `openai`-leverandøren, og `claude-sonnet-4-20250514` når de åpnes via `anthropic`-leverandøren. -De innebygde leverandør- og modellnavnene finnes på [Models.dev](https://models.dev). - -Du kan også konfigurere disse alternativene for alle agenter du bruker. Agentkonfigurasjonen overstyrer alle globale alternativer her. [Finn ut mer](/docs/agents/#additional). - -Du kan også definere tilpassede varianter som utvider de innebygde. Varianter lar deg konfigurere forskjellige innstillinger for samme modell uten å opprette dupliserte oppføringer: - -```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 støtter flere varianter med forskjellige konfigurasjoner. opencode leveres med innebygde standardvarianter for populære leverandører. - -### Innebygde varianter - -OpenCode leveres med standardvarianter for mange leverandører: - -**Anthropic**: - -- `high` - Høyt tenkebudsjett (standard) -- `max` - Maksimalt tenkebudsjett - -**OpenAI**: - -Varierer etter modell, men omtrent: - -- `none` - Ingen resonnement -- `minimal` - Minimal resonnementinnsats -- `low` - Lav resonnementinnsats -- `medium` - Middels resonnementinnsats -- `high` - Høy resonnementinnsats -- `xhigh` - Ekstra høy resonnementinnsats - -**Google**: - -- `low` - Lavere innsats/tokenbudsjett -- `high` - Høyere innsats/tokenbudsjett - -:::tip -Denne listen er ikke uttømmende. Mange andre leverandører har også innebygde standardinnstillinger. -::: - -### Egendefinerte varianter - -Du kan overstyre eksisterende varianter eller legge til 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, - }, - }, - }, - }, - }, - }, -} -``` - -### Bytt varianter - -Bruk tastebindingen `variant_cycle` for raskt å bytte mellom varianter. [Finn ut mer](/docs/keybinds). - ---- - -## Lasting av modeller - -Når OpenCode starter opp, ser den etter modeller i følgende prioriterte rekkefølge: - -1. Kommandolinjeflagget `--model` eller `-m`. Formatet er det samme som i konfigurasjonsfilen: `provider_id/model_id`. - -2. Modelllisten i OpenCode-konfigurasjonen. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-20250514" - } - ``` - - Formatet her er `provider/model`. - -3. Den sist brukte modellen. - -4. Den første modellen bruker en intern prioritet. diff --git a/packages/web/src/content/docs/nb/network.mdx b/packages/web/src/content/docs/nb/network.mdx deleted file mode 100644 index 418cc6d277..0000000000 --- a/packages/web/src/content/docs/nb/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Nettverk -description: Konfigurer proxyer og tilpassede sertifikater. ---- - -OpenCode støtter standard proxy-miljøvariabler og tilpassede sertifikater for bedriftsnettverksmiljøer. - ---- - -## Mellomtjener - -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-en kommuniserer med en lokal HTTP-server. Du må unngå proxy for denne tilkoblingen for å unngå rutingsløyfer. -::: - -Du kan konfigurere serverens port og vertsnavn ved å bruke [CLI-flagg](/docs/cli#run). - ---- - -### Autentisering - -Hvis proxyen din krever grunnleggende autentisering, inkluder påloggingsinformasjon i URL-en. - -```bash -export HTTPS_PROXY=http://username:password@proxy.example.com:8080 -``` - -:::caution -Unngå hardkoding av passord. Bruk miljøvariabler eller sikker lagring av påloggingsinformasjon. -::: - -For proxyer som krever avansert autentisering som NTLM eller Kerberos, bør du vurdere en LLM Gateway som støtter din autentiseringsmetode. - ---- - -## Egendefinerte sertifikater - -Hvis bedriften din bruker egendefinerte CA-er for HTTPS-tilkoblinger, konfigurer OpenCode til å stole på dem. - -```bash -export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem -``` - -Dette fungerer for både proxy-tilkoblinger og direkte API-tilgang. diff --git a/packages/web/src/content/docs/nb/permissions.mdx b/packages/web/src/content/docs/nb/permissions.mdx deleted file mode 100644 index 09d72442e3..0000000000 --- a/packages/web/src/content/docs/nb/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -title: Tillatelser -description: Kontroller hvilke handlinger som krever godkjenning for å kjøre. ---- - -OpenCode bruker `permission`-konfigurasjonen for å bestemme om en gitt handling skal kjøres automatisk, spørre deg eller blokkeres. - -Fra og med `v1.1.1` er den eldre `tools` boolske konfigurasjonen avviklet og har blitt slått sammen til `permission`. Den gamle `tools`-konfigurasjonen støttes fortsatt for bakoverkompatibilitet. - ---- - -## Handlinger - -Hver tillatelsesregel løses til en av: - -- `"allow"` — kjør uten godkjenning -- `"ask"` — be om godkjenning -- `"deny"` — blokker handlingen - ---- - -## Konfigurasjon - -Du kan angi tillatelser globalt (med `*`), og overstyre spesifikke verktøy. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "*": "ask", - "bash": "allow", - "edit": "deny" - } -} -``` - -Du kan også angi alle tillatelser samtidig: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": "allow" -} -``` - ---- - -## Granulære regler (objektsyntaks) - -For de fleste tillatelser kan du bruke et objekt til å bruke forskjellige handlinger basert på verktøyinndata. - -```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 etter mønstermatch, med **siste samsvarende regel som vinner**. Et vanlig mønster er å sette oppsamlingsregelen `"*"` først, og mer spesifikke regler etter den. - -### Jokertegn - -Tillatelsesmønstre bruker enkel jokertegnsamsvar: - -- `*` samsvarer med null eller flere av alle tegn -- `?` samsvarer med nøyaktig ett tegn -- Alle andre karakterer samsvarer bokstavelig talt - -### Utvidelse av hjemmekatalog - -Du kan bruke `~` eller `$HOME` i starten av et mønster for å referere til hjemmekatalogen din. Dette er spesielt nyttig for [`external_directory`](#external-directories) regler. - -- `~/projects/*` -> `/Users/username/projects/*` -- `$HOME/projects/*` -> `/Users/username/projects/*` -- `~` -> `/Users/username` - -### Eksterne kataloger - -Bruk `external_directory` for å tillate verktøyanrop som berører stier utenfor arbeidskatalogen der OpenCode ble startet. Dette gjelder alle verktøy som tar en bane som input (for eksempel `read`, `edit`, `glob`, `grep` og mange `bash`-kommandoer). - -Hjemmeutvidelse (som `~/...`) påvirker bare hvordan et mønster skrives. Den gjør ikke en ekstern bane til en del av det gjeldende arbeidsområdet, så stier utenfor arbeidskatalogen må fortsatt tillates via `external_directory`. - -For eksempel gir dette tilgang til alt under `~/projects/personal/`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - } - } -} -``` - -Enhver katalog som er tillatt her, arver de samme standardinnstillingene som gjeldende arbeidsområde. Siden [`read` er standard til `allow`](#defaults), er lesing også tillatt for oppføringer under `external_directory` med mindre overstyrt. Legg til eksplisitte regler når et verktøy skal begrenses i disse banene, for eksempel blokkering av redigeringer mens du beholder lesninger: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - }, - "edit": { - "~/projects/personal/**": "deny" - } - } -} -``` - -Hold listen fokusert på klarerte baner, og lag ekstra tillat eller avslå regler etter behov for andre verktøy (for eksempel `bash`). - ---- - -## Tilgjengelige tillatelser - -OpenCode-tillatelser tastes inn etter verktøynavn, pluss et par sikkerhetsvakter: - -- `read` — lesing av en fil (tilsvarer filbanen) -- `edit` — alle filendringer (dekker `edit`, `write`, `patch`) -- `glob` — fil-globing (tilsvarer glob-mønsteret) -- `grep` — innholdssøk (samsvarer med regex-mønsteret) -- `bash` — kjører skallkommandoer (matcher analyserte kommandoer som `git status --porcelain`) -- `task` — start av subagenter (tilsvarer subagenttypen) -- `skill` — laster en ferdighet (tilsvarer navnet på ferdigheten) -- `lsp` — kjører LSP-spørringer (for øyeblikket ikke-granulære) -- `webfetch` — henter en URL (tilsvarer URL) -- `websearch` - nettsøk (samsvarer med søket) -- `external_directory` - utløses når et verktøy berører stier utenfor prosjektets arbeidskatalog -- `doom_loop` — utløses når det samme verktøykallet gjentas 3 ganger med identisk inndata - ---- - -## Standarder - -Hvis du ikke spesifiserer noe, starter OpenCode fra tillatte standardinnstillinger: - -- De fleste tillatelser er satt til `"allow"` som standard. -- `doom_loop` og `external_directory` er standard til `"ask"`. -- `read` er `"allow"`, men `.env` filer nektes som standard: - -```json title="opencode.json" -{ - "permission": { - "read": { - "*": "allow", - "*.env": "deny", - "*.env.*": "deny", - "*.env.example": "allow" - } - } -} -``` - ---- - -## Hva "ask" gjør - -Når OpenCode ber om godkjenning, gir brukergrensesnittet tre alternativer: - -- `once` — godkjenne nettopp denne forespørselen -- `always` — godkjenn fremtidige forespørsler som samsvarer med de foreslåtte mønstrene (for resten av den nåværende OpenCode-økten) -- `reject` — avslå forespørselen - -Settet med mønstre som `always` vil godkjenne, leveres av verktøyet (for eksempel, bash-godkjenninger hvitlister vanligvis et trygt kommandoprefiks som `git status*`). - ---- - -## Agenter - -Du kan overstyre tillatelser per agent. Agenttillatelser slås sammen med den globale konfigurasjonen, og agentregler har forrang. [Finn ut mer](/docs/agents#permissions) om agenttillatelser. - -:::note -Se avsnittet [Granular Rules (Object Syntax)](#granular-rules-object-syntax) ovenfor for mer detaljerte eksempler på mønstertilpasning. -::: - -```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 agenttillatelser 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 -Bruk mønstertilpasning for kommandoer med argumenter. `"grep *"` tillater `grep pattern file.txt`, mens `"grep"` alene ville blokkert den. Kommandoer som `git status` fungerer for standard oppførsel, men krever eksplisitt tillatelse (som `"git status *"`) når argumenter sendes. -::: diff --git a/packages/web/src/content/docs/nb/plugins.mdx b/packages/web/src/content/docs/nb/plugins.mdx deleted file mode 100644 index 27d23ec63a..0000000000 --- a/packages/web/src/content/docs/nb/plugins.mdx +++ /dev/null @@ -1,389 +0,0 @@ ---- -title: Programtillegg -description: Skriv dine egne programtillegg for å utvide OpenCode. ---- - -Plugins lar deg utvide OpenCode ved å koble til ulike hendelser og tilpasse atferd. Du kan lage plugins for å legge til nye funksjoner, integrere med eksterne tjenester eller endre standardoppførselen til OpenCode. - -For eksempler, sjekk ut [plugins](/docs/ecosystem#plugins) opprettet av fellesskapet. - ---- - -## Bruk av en plugin - -Det er to måter å laste inn plugins. - ---- - -### Fra lokale filer - -Plasser JavaScript- eller TypeScript-filer i plugin-katalogen. - -- `.opencode/plugins/` - Programtillegg på prosjektnivå -- `~/.config/opencode/plugins/` - Globale plugins - -Filer i disse katalogene lastes automatisk ved oppstart. - ---- - -### Fra npm - -Spesifiser npm-pakker i konfigurasjonsfilen. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"] -} -``` - -Både vanlige og scoped npm-pakker støttes. - -Bla gjennom tilgjengelige plugins i [økosystemet](/docs/ecosystem#plugins). - ---- - -### Hvordan plugins installeres - -**npm-plugins** installeres automatisk ved hjelp av Bun ved oppstart. Pakker og deres avhengigheter er bufret i `~/.cache/opencode/node_modules/`. - -**Lokale plugins** lastes direkte fra plugin-katalogen. For å bruke eksterne pakker, må du opprette en `package.json` i konfigurasjonskatalogen din (se [Dependencies](#dependencies)), eller publisere plugin-en til npm og [legg den til i konfigurasjonen din](/docs/config#plugins). - ---- - -### Lasterekkefølge - -Plugins lastes inn fra alle kilder og alle kroker kjøres i rekkefølge. Lastrekkefølgen er: - -1. Global konfigurasjon (`~/.config/opencode/opencode.json`) -2. Prosjektkonfigurasjon (`opencode.json`) -3. Global plugin-katalog (`~/.config/opencode/plugins/`) -4. Prosjektpluginkatalog (`.opencode/plugins/`) - -Dupliserte npm-pakker med samme navn og versjon lastes inn én gang. Imidlertid lastes en lokal plugin og en npm plugin med lignende navn begge separat. - ---- - -## Opprette en plugin - -En plugin er en **JavaScript/TypeScript-modul** som eksporterer en eller flere plugin-moduler -funksjoner. Hver funksjon mottar et kontekstobjekt og returnerer et krokobjekt. - ---- - -### Avhengigheter - -Lokale plugins og tilpassede verktøy kan bruke eksterne npm-pakker. Legg til en `package.json` til konfigurasjonskatalogen med avhengighetene du trenger. - -```json title=".opencode/package.json" -{ - "dependencies": { - "shescape": "^2.1.0" - } -} -``` - -OpenCode kjører `bun install` ved oppstart for å installere disse. Programtilleggene og verktøyene dine kan deretter 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) - } - }, - } -} -``` - ---- - -### Grunnleggende 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-funksjonen mottar: - -- `project`: Gjeldende prosjektinformasjon. -- `directory`: Gjeldende arbeidskatalog. -- `worktree`: Git-arbeidstrebanen. -- `client`: En OpenCode SDK klient for samhandling med AI. -- `$`: Buns [shell API](https://bun.com/docs/runtime/shell) for å utføre kommandoer. - ---- - -### TypeScript-støtte - -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 - } -} -``` - ---- - -### Hendelser - -Plugins kan abonnere på hendelser som vist nedenfor i Eksempler-delen. Her er en liste over de forskjellige hendelsene som er tilgjengelige. - -#### Kommandohendelser - -- `command.executed` - -#### Filhendelser - -- `file.edited` -- `file.watcher.updated` - -#### Installasjonshendelser - -- `installation.updated` - -#### LSP Hendelser - -- `lsp.client.diagnostics` -- `lsp.updated` - -#### Meldingshendelser - -- `message.part.removed` -- `message.part.updated` -- `message.removed` -- `message.updated` - -#### Tillatelseshendelser - -- `permission.asked` -- `permission.replied` - -#### Serverhendelser - -- `server.connected` - -#### Sesjonshendelser - -- `session.created` -- `session.compacted` -- `session.deleted` -- `session.diff` -- `session.error` -- `session.idle` -- `session.status` -- `session.updated` - -#### Todo-hendelser - -- `todo.updated` - -#### Shell-hendelser - -- `shell.env` - -#### Verktøyhendelser - -- `tool.execute.after` -- `tool.execute.before` - -#### TUI Hendelser - -- `tui.prompt.append` -- `tui.command.execute` -- `tui.toast.show` - ---- - -## Eksempler - -Her er noen eksempler på plugins du kan bruke for å utvide OpenCode. - ---- - -### Send varsler - -Send varsler når visse hendelser inntreffer: - -```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 bruker `osascript` for å kjøre AppleScript på macOS. Her bruker vi den til å sende varsler. - -:::note -Hvis du bruker OpenCode-skrivebordsappen, kan den sende systemvarsler automatisk når et svar er klart eller når en økt feiler. -::: - ---- - -### .env-beskyttelse - -Hindre OpenCode fra å lese `.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") - } - }, - } -} -``` - ---- - -### Injiser miljøvariabler - -Injiser miljøvariabler i all shell-utførelse (AI-verktøy og brukerterminaler): - -```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 - }, - } -} -``` - ---- - -### Egendefinerte verktøy - -Plugins kan også legge til egendefinerte verktøy 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`-hjelperen lager et tilpasset verktøy som OpenCode kan kalle. Den tar en Zod-skjemafunksjon og returnerer en verktøydefinisjon med: - -- `description`: Hva verktøyet gjør -- `args`: Zod-skjema for verktøyets argumenter - - `execute`: Funksjon som kjører når verktøyet kalles - -Dine egendefinerte verktøy vil være tilgjengelige for OpenCode sammen med innebygde verktøy. - -:::note -Hvis et plugin-verktøy bruker samme navn som et innebygd verktøy, vil plugin-verktøyet ha forrang. -::: - ---- - -### Logging - -Bruk `client.app.log()` i stedet for `console.log` for strukturert logging: - -```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" }, - }, - }) -} -``` - -Nivåer: `debug`, `info`, `warn`, `error`. Se [SDK dokumentasjon](https://opencode.ai/docs/sdk) for detaljer. - ---- - -### Komprimerings-hooks - -Tilpass konteksten inkludert når en økt 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`-kroken trigges før LLM genererer et fortsettelsessammendrag. Bruk den til å injisere domenespesifikk kontekst som standard komprimeringsprompt ville gå glipp av. - -Du kan også erstatte komprimeringsprompten helt ved å stille inn `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 angitt, erstatter den standard komprimeringsprompt fullstendig. `output.context`-matrisen ignoreres i dette tilfellet. diff --git a/packages/web/src/content/docs/nb/providers.mdx b/packages/web/src/content/docs/nb/providers.mdx deleted file mode 100644 index bf276918a9..0000000000 --- a/packages/web/src/content/docs/nb/providers.mdx +++ /dev/null @@ -1,1956 +0,0 @@ ---- -title: Leverandører -description: Bruke en hvilken som helst LLM-leverandør i OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console - -OpenCode bruker [AI SDK](https://ai-sdk.dev/) og [Models.dev](https://models.dev) for å støtte **75+ LLM leverandører** og den støtter kjøring av lokale modeller. - -For å legge til en leverandør må du: - -1. Legg til API-nøkkelen for leverandøren ved å bruke kommandoen `/connect`. -2. Konfigurer leverandøren i OpenCode-konfigurasjonen. - ---- - -### Legitimasjon - -Når du legger til en leverandørs API-nøkler med `/connect`-kommandoen, lagres de -i `~/.local/share/opencode/auth.json`. - ---- - -### Konfigurasjon - -Du kan tilpasse leverandørene gjennom `provider`-delen i OpenCode -konfig. - ---- - -#### Base-URL - -Du kan tilpasse base-URL-en for enhver leverandør ved å angi alternativet `baseURL`. Dette er nyttig når du bruker proxy-tjenester eller tilpassede endepunkter. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen er en liste over modeller levert av OpenCode-teamet som har vært -testet og verifisert for å fungere godt med OpenCode. [Finn ut mer](/docs/zen). - -:::tip -Hvis du er ny, anbefaler vi å starte med OpenCode Zen. -::: - -1. Kjør kommandoen `/connect` i TUI, velg `OpenCode Zen` og gå til [opencode.ai/auth](https://opencode.ai/zen). - - ```txt - /connect - ``` - -2. Logg på, legg til faktureringsdetaljene dine og kopier API-nøkkelen. - -3. Lim inn API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør `/models` i TUI for å se listen over modeller vi anbefaler. - - ```txt - /models - ``` - -Det fungerer som alle andre leverandører i OpenCode og er helt valgfritt å bruke. - ---- - -## OpenCode Go - -OpenCode Go er en lavpris abonnementsplan som gir pålitelig tilgang til populære åpne kodemodeller levert av OpenCode-teamet som har vært -testet og verifisert for å fungere godt med OpenCode. - -1. Kjør kommandoen `/connect` i TUI, velg `OpenCode Go`, og gå til [opencode.ai/auth](https://opencode.ai/zen). - - ```txt - /connect - ``` - -2. Logg på, legg til faktureringsdetaljene dine og kopier API-nøkkelen. - -3. Lim inn API-nøkkelen. - - ```txt - ┌ API key - │ - │ - │ - └ enter - ``` - -4. Kjør `/models` i TUI for å se listen over modeller vi anbefaler. - - ```txt - /models - ``` - -Det fungerer som alle andre leverandører i OpenCode og er helt valgfritt å bruke. - ---- - -## Katalog - -La oss se på noen av leverandørene i detalj. Hvis du vil legge til en leverandør til -liste, åpne gjerne en PR. - -:::note -Ser du ikke en leverandør her? Send inn en PR. -::: - ---- - -### 302.AI - -1. Gå over til [302.AI-konsollen](https://302.ai/), opprett en konto og generer en API-nøkkel. - -2. Kjør kommandoen `/connect` og søk etter **302.AI**. - - ```txt - /connect - ``` - -3. Skriv inn 302.AI API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell. - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -Slik bruker du Amazon Bedrock med OpenCode: - -1. Gå over til **modellkatalogen** i Amazon Bedrock-konsollen og be om - tilgang til modellene du ønsker. - - :::tip - Du må ha tilgang til modellen du ønsker i Amazon Bedrock. - ::: - -2. **Konfigurer autentisering** ved å bruke en av følgende metoder: - - #### Miljøvariabler (hurtigstart) - - Angi en av disse miljøvariablene mens du kjører OpenCode: - - ```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - Eller legg dem til bash-profilen din: - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - #### Konfigurasjonsfil (anbefalt) - - For prosjektspesifikk eller vedvarende konfigurasjon, bruk `opencode.json`: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **Tilgjengelige alternativer:** - - `region` - AWS region (f.eks. `us-east-1`, `eu-west-1`) - - `profile` - AWS navngitt profil fra `~/.aws/credentials` - - `endpoint` - Egendefinert endepunkt URL for VPC-endepunkter (alias for generisk `baseURL`-alternativ) - - :::tip - Alternativer for konfigurasjonsfil har forrang over miljøvariabler. - ::: - - #### Avansert: VPC-endepunkter - - Hvis du bruker VPC-endepunkter for Bedrock: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } - } - ``` - - :::note - Alternativet `endpoint` er et alias for det generiske alternativet `baseURL`, ved å bruke AWS-spesifikk terminologi. Hvis både `endpoint` og `baseURL` er spesifisert, har `endpoint` forrang. - ::: - - #### Autentiseringsmetoder - - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: Opprett en IAM-bruker og generer tilgangsnøkler i AWS-konsollen - - **`AWS_PROFILE`**: Bruk navngitte profiler fra `~/.aws/credentials`. Konfigurer først med `aws configure --profile my-profile` eller `aws sso login` - - **`AWS_BEARER_TOKEN_BEDROCK`**: Generer langsiktige API-nøkler fra Amazon Bedrock-konsollen - - **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**: For EKS IRSA (IAM roller for tjenestekontoer) eller andre Kubernetes-miljøer med OIDC føderasjon. Disse miljøvariablene injiseres automatisk av Kubernetes når du bruker tjenestekontokommentarer. - - #### Autentiseringsprioritet - - Amazon Bedrock bruker følgende autentiseringsprioritet: - 1. **Bearer Token** - `AWS_BEARER_TOKEN_BEDROCK` miljøvariabel eller token fra kommandoen `/connect` - 2. **AWS legitimasjonskjede** - profil, tilgangsnøkler, delt legitimasjon, IAM roller, nettidentitetstokener (EKS IRSA), forekomstmetadata - - :::note - Når et bærertoken er angitt (via `/connect` eller `AWS_BEARER_TOKEN_BEDROCK`), har det forrang over alle AWS legitimasjonsmetoder inkludert konfigurerte profiler. - ::: - -3. Kjør kommandoen `/models` for å velge modellen du ønsker. - - ```txt - /models - ``` - -:::note -For egendefinerte slutningsprofiler, bruk modellen og leverandørnavnet i nøkkelen og sett egenskapen `id` til arn. Dette sikrer korrekt caching: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - -::: - ---- - -### Anthropic - -1. Når du har registrert deg, kjør kommandoen `/connect` og velg Anthropic. - - ```txt - /connect - ``` - -2. Her kan du velge alternativet **Claude Pro/Max** og det vil åpne nettleseren din - og ber deg om å autentisere. - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. Nå skal alle Anthropic-modellene være tilgjengelige når du bruker kommandoen `/models`. - - ```txt - /models - ``` - -:::info -Å bruke Claude Pro/Max-abonnementet ditt i opencode støttes ikke offisielt av [Anthropic](https://anthropic.com). -::: - -##### Bruke API-nøkler - -Du kan også velge **Opprett en API nøkkel** hvis du ikke har et Pro/Max-abonnement. Den åpner også nettleseren din og ber deg logge på Anthropic og gi deg en kode du kan lime inn i terminalen din. - -Eller hvis du allerede har en API-nøkkel, kan du velge **Angi API-nøkkel manuelt** og lime den inn i terminalen. - ---- - -### Atomic Chat - -Du kan konfigurere opencode til å bruke lokale modeller via [Atomic Chat](https://atomic.chat) — et skrivebordsprogram som kjører lokale LLM-er bak en OpenAI-kompatibel API-server (standard endepunkt `http://127.0.0.1:1337/v1`). - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -I dette eksempelet: - -- `atomic-chat` er den egendefinerte leverandør-ID-en. Det kan være en hvilken som helst streng. -- `npm` spesifiserer pakken som skal brukes for denne leverandøren. Her brukes `@ai-sdk/openai-compatible` for enhver OpenAI-kompatibel API. -- `name` er visningsnavnet for leverandøren i grensesnittet. -- `options.baseURL` er endepunktet for den lokale serveren. Endre vert og port for å matche Atomic Chat-oppsettet ditt. -- `models` er en kartlegging av modell-IDer til visningsnavnene deres. Hver ID må samsvare med `id` som returneres av `GET /v1/models` — kjør `curl http://127.0.0.1:1337/v1/models` for å liste ID-ene som er lastet inn i Atomic Chat nå. - -:::tip -Hvis verktøykall ikke fungerer godt, velg en lastet modell med god tool calling-støtte (for eksempel en Qwen-Coder- eller DeepSeek-Coder-variant). -::: - ---- - -### Azure OpenAI - -:::note -Hvis du støter på «Beklager, men jeg kan ikke hjelpe med den forespørselen»-feil, kan du prøve å endre innholdsfilteret fra **DefaultV2** til **Default** i Azure-ressursen. -::: - -1. Gå over til [Azure-portalen](https://portal.azure.com/) og lag en **Azure OpenAI**-ressurs. Du trenger: - - **Ressursnavn**: Dette blir en del av API-endepunktet (`https://RESOURCE_NAME.openai.azure.com/`) - - **API nøkkel**: Enten `KEY 1` eller `KEY 2` fra ressursen din - -2. Gå til [Azure AI Foundry](https://ai.azure.com/) og distribuer en modell. - - :::note - Distribusjonsnavnet må samsvare med modellnavnet for at OpenCode skal fungere skikkelig. - ::: - -3. Kjør kommandoen `/connect` og søk etter **Azure**. - - ```txt - /connect - ``` - -4. Skriv inn API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Angi ressursnavnet ditt som en miljøvariabel: - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - - Eller legg den til bash-profilen din: - - ```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX - ``` - -6. Kjør kommandoen `/models` for å velge den distribuerte modellen. - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. Gå over til [Azure-portalen](https://portal.azure.com/) og lag en **Azure OpenAI**-ressurs. Du trenger: - - **Ressursnavn**: Dette blir en del av API-endepunktet (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) - - **API nøkkel**: Enten `KEY 1` eller `KEY 2` fra ressursen din - -2. Gå til [Azure AI Foundry](https://ai.azure.com/) og distribuer en modell. - - :::note - Distribusjonsnavnet må samsvare med modellnavnet for at OpenCode skal fungere skikkelig. - ::: - -3. Kjør kommandoen `/connect` og søk etter **Azure Cognitive Services**. - - ```txt - /connect - ``` - -4. Skriv inn API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Angi ressursnavnet ditt som en miljøvariabel: - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - - Eller legg den til bash-profilen din: - - ```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX - ``` - -6. Kjør kommandoen `/models` for å velge den distribuerte modellen. - - ```txt - /models - ``` - ---- - -### Baseten - -1. Gå over til [Baseten](https://app.baseten.co/), opprett en konto og generer en API nøkkel. - -2. Kjør kommandoen `/connect` og søk etter **Baseten**. - - ```txt - /connect - ``` - -3. Skriv inn din Baseten API nøkkel. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell. - - ```txt - /models - ``` - ---- - -### Cerebras - -1. Gå over til [Cerebras-konsollen](https://inference.cerebras.ai/), opprett en konto og generer en API-nøkkel. - -2. Kjør kommandoen `/connect` og søk etter **Cerebras**. - - ```txt - /connect - ``` - -3. Skriv inn Cerebras API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell som _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -Cloudflare AI Gateway lar deg få tilgang til modeller fra OpenAI, Anthropic, Workers AI og mer gjennom et enhetlig endepunkt. Med [Unified Billing](https://developers.cloudflare.com/ai-gateway/features/unified-billing/) trenger du ikke separate API-nøkler for hver leverandør. - -1. Gå over til [Cloudflare-dashbordet](https://dash.cloudflare.com/), naviger til **AI** > **AI Gateway**, og lag en ny gateway. - -2. Angi konto ID og gateway ID som miljøvariabler. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. Kjør kommandoen `/connect` og søk etter **Cloudflare AI Gateway**. - - ```txt - /connect - ``` - -4. Skriv inn Cloudflare API-tokenet ditt. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - - Eller angi den som en miljøvariabel. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token - ``` - -5. Kjør kommandoen `/models` for å velge en modell. - - ```txt - /models - ``` - - Du kan også legge til modeller gjennom OpenCode-konfigurasjonen. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } - } - ``` - ---- - -### Cortecs - -1. Gå over til [Cortecs-konsollen](https://cortecs.ai/), opprett en konto og generer en API-nøkkel. - -2. Kjør kommandoen `/connect` og søk etter **Cortecs**. - - ```txt - /connect - ``` - -3. Skriv inn Cortecs API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell som _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. Gå over til [DeepSeek-konsollen](https://platform.deepseek.com/), opprett en konto og klikk på **Opprett ny API-nøkkel**. - -2. Kjør kommandoen `/connect` og søk etter **DeepSeek**. - - ```txt - /connect - ``` - -3. Skriv inn DeepSeek API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en DeepSeek-modell som _DeepSeek V4 Pro_. - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. Gå over til [Deep Infra-dashbordet](https://deepinfra.com/dash), opprett en konto og generer en API-nøkkel. - -2. Kjør kommandoen `/connect` og søk etter **Deep Infra**. - - ```txt - /connect - ``` - -3. Skriv inn Deep Infra API nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell. - - ```txt - /models - ``` - ---- - -### FrogBot - -1. Gå over til [FrogBot dashboard](https://app.frogbot.ai/signup), opprett en konto og generer en API nøkkel. - -2. Kjør kommandoen `/connect` og søk etter **FrogBot**. - - ```txt - /connect - ``` - -3. Skriv inn frogbot API nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell. - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. Gå over til [Fireworks AI-konsollen](https://app.fireworks.ai/), opprett en konto og klikk på **Create API Key**. - -2. Kjør kommandoen `/connect` og søk etter **Fireworks AI**. - - ```txt - /connect - ``` - -3. Skriv inn Fireworks AI API nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell som _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo gir AI-drevet agentchat med native verktøyoppringingsfunksjoner gjennom GitLabs Anthropic-proxy. - -1. Kjør kommandoen `/connect` og velg GitLab. - - ```txt - /connect - ``` - -2. Velg autentiseringsmetoden din: - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### Bruke OAuth (anbefalt) - - Velg **OAuth** og nettleseren din åpnes for autorisasjon. - - #### Bruker personlig tilgangstoken - 1. Gå til [GitLab User Settings > Access Tokens](https://gitlab.com/-/user_settings/personal_access_tokens) - 2. Klikk på **Legg til nytt token** - 3. Navn: `OpenCode`, omfang: `api` - 4. Kopier tokenet (starter med `glpat-`) - 5. Skriv den inn i terminalen - -3. Kjør kommandoen `/models` for å se tilgjengelige modeller. - - ```txt - /models - ``` - - Tre Claude-baserte modeller er tilgjengelige: - - **duo-chat-haiku-4-5** (standard) - Raske svar for raske oppgaver - - **duo-chat-sonnet-4-5** - Balansert ytelse for de fleste arbeidsflyter - - **duo-chat-opus-4-5** - Mest egnet for kompleks analyse - -:::note -Du kan også spesifisere 'GITLAB_TOKEN' miljøvariabel hvis du ikke vil -for å lagre token i OpenCode auth-lagring. -::: - -##### Selvhostet GitLab - -:::note[Merknad om samsvar] -OpenCode bruker en liten modell for noen AI oppgaver som å generere økttittelen. -Den er konfigurert til å bruke gpt-5-nano som standard, hostet av Zen. For å låse OpenCode -for kun å bruke din egen GitLab-hostede forekomst, legg til følgende i din -`opencode.json` fil. Det anbefales også å deaktivere øktdeling. - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -For selvhostede GitLab-forekomster: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -Hvis forekomsten din kjører en tilpasset AI-gateway: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -Eller legg til bash-profilen din: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -GitLab-administratoren din må aktivere følgende: - -1. [Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) for brukeren, gruppen eller forekomsten -2. Funksjonsflagg (via Rails-konsollen): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### OAuth for selvvertsbaserte forekomster - -For å få Oauth til å fungere for din selvhostede forekomst, må du opprette -en ny applikasjon (Innstillinger → Programmer) med -tilbakeringing URL `http://127.0.0.1:8080/callback` og følgende omfang: - -- api (Få tilgang til API på dine vegne) -- read_user (Les din personlige informasjon) -- read_repository (tillater skrivebeskyttet tilgang til depotet) - -Utsett deretter applikasjonen ID som miljøvariabel: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -Mer dokumentasjon på [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth) hjemmeside. - -##### Konfigurasjon - -Tilpass gjennom `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### GitLab API Verktøy (valgfritt, men sterkt anbefalt) - -For å få tilgang til GitLab-verktøy (sammenslåingsforespørsler, problemer, pipelines, CI/CD, etc.): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -Denne plugin-en gir omfattende GitLab-repository-administrasjonsfunksjoner, inkludert MR-anmeldelser, problemsporing, pipeline-overvåking og mer. - ---- - -### GitHub Copilot - -Slik bruker du GitHub Copilot-abonnementet med OpenCode: - -:::note -Noen modeller kan trenge en [Pro+ -abonnement](https://github.com/features/copilot/plans) å bruke. - -Noen modeller må aktiveres manuelt i [GitHub Copilot-innstillingene](https://docs.github.com/en/copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use). -::: - -1. Kjør kommandoen `/connect` og søk etter GitHub Copilot. - - ```txt - /connect - ``` - -2. Naviger til [github.com/login/device](https://github.com/login/device) og skriv inn koden. - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - └ Waiting for authorization... - ``` - -3. Kjør nå kommandoen `/models` for å velge modellen du ønsker. - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -Slik bruker du Google Vertex AI med OpenCode: - -1. Gå over til **Model Garden** i Google Cloud Console og sjekk - modeller tilgjengelig i din region. - - :::note - Du må ha et Google Cloud-prosjekt med Vertex AI API aktivert. - ::: - -2. Angi de nødvendige miljøvariablene: - - `GOOGLE_CLOUD_PROJECT`: Google Cloud-prosjektet ditt ID - - `VERTEX_LOCATION` (valgfritt): Regionen for verteks AI (standard til `global`) - - Autentisering (velg en): - - `GOOGLE_APPLICATION_CREDENTIALS`: Bane til tjenestekontoen JSON nøkkelfil - - Autentiser med gcloud CLI: `gcloud auth application-default login` - - Sett dem mens du kjører OpenCode. - - ```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode - ``` - - Eller legg dem til på bash-profilen din. - - ```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global - ``` - -:::tip -`global`-regionen forbedrer tilgjengeligheten og reduserer feil uten ekstra kostnad. Bruk regionale endepunkter (f.eks. `us-central1`) for krav til dataopphold. [Finn ut mer](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. Kjør kommandoen `/models` for å velge modellen du ønsker. - - ```txt - /models - ``` - ---- - -### Groq - -1. Gå over til [Groq-konsollen](https://console.groq.com/), klikk på **Create API Key**, og kopier nøkkelen. - -2. Kjør kommandoen `/connect` og søk etter Groq. - - ```txt - /connect - ``` - -3. Skriv inn API-nøkkelen for leverandøren. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge den du ønsker. - - ```txt - /models - ``` - ---- - -### Hugging Face - -[Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers) gir tilgang til åpne modeller som støttes av 17+ leverandører. - -1. Gå over til [Hugging Face-innstillinger](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained) for å opprette et token med tillatelse til å ringe til inferensleverandører. - -2. Kjør kommandoen `/connect` og søk etter **Hugging Face**. - - ```txt - /connect - ``` - -3. Skriv inn ditt Hugging Face-token. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell som _Kimi-K2-Instruct_ eller _GLM-4.6_. - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) er en LLM observerbarhetsplattform som gir logging, overvåking og analyser for AI-applikasjonene dine. Helicone AI Gateway ruter forespørslene dine til riktig leverandør automatisk basert på modellen. - -1. Gå over til [Helicone](https://helicone.ai), opprett en konto og generer en API nøkkel fra dashbordet. - -2. Kjør kommandoen `/connect` og søk etter **Helicone**. - - ```txt - /connect - ``` - -3. Skriv inn Helicone API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell. - - ```txt - /models - ``` - -For flere leverandører og avanserte funksjoner som bufring og hastighetsbegrensning, sjekk [Helicone-dokumentasjonen](https://docs.helicone.ai). - -#### Valgfrie konfigurasjoner - -I tilfelle du ser en funksjon eller modell fra Helicone som ikke konfigureres automatisk gjennom OpenCode, kan du alltid konfigurere den selv. - -Her er [Helicone's Model Directory](https://helicone.ai/models), du trenger denne for å hente ID-ene til modellene du vil legge til. - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### Egendefinerte headere - -Helicone støtter tilpassede headere for funksjoner som bufring, brukersporing og øktadministrasjon. Legg dem til leverandørkonfigurasjonen din ved å bruke `options.headers`: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### Sesjonssporing - -Helicones [Sessions](https://docs.helicone.ai/features/sessions) funksjon lar deg gruppere relaterte LLM forespørsler sammen. Bruk [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) plugin for automatisk å logge hver OpenCode-samtale som en økt i Helicone. - -```bash -npm install -g opencode-helicone-session -``` - -Legg den til i konfigurasjonen din. - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -Programtillegget injiserer `Helicone-Session-Id` og `Helicone-Session-Name` headere i forespørslene dine. På Helicones Sessions-side vil du se hver OpenCode-samtale oppført som en separat økt. - -##### Vanlige Helicone-headere - -| Overskrift | Beskrivelse | -| -------------------------- | -------------------------------------------------------------------------- | -| `Helicone-Cache-Enabled` | Aktiver responsbufring (`true`/`false`) | -| `Helicone-User-Id` | Spor beregninger etter bruker | -| `Helicone-Property-[Name]` | Legg til egendefinerte egenskaper (f.eks. `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | Knytt forespørsler til spørsmålsversjoner | - -Se [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory) for alle tilgjengelige overskrifter. - ---- - -### llama.cpp - -Du kan konfigurere OpenCode for å bruke lokale modeller gjennom [llama.cpp](https://github.com/ggml-org/llama.cpp) llama-server-verktøyet. - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -I dette eksemplet: - -- `llama.cpp` er den tilpassede leverandøren ID. Dette kan være hvilken som helst streng du vil. -- `npm` spesifiserer pakken som skal brukes for denne leverandøren. Her brukes `@ai-sdk/openai-compatible` for enhver OpenAI-kompatibel API. -- `name` er visningsnavnet for leverandøren i UI. -- `options.baseURL` er endepunktet for den lokale serveren. -- `models` er et kart over modell-ID-er til deres konfigurasjoner. Modellnavnet vil vises i modellvalglisten. - ---- - -### IO.NET - -IO.NET tilbyr 17 modeller optimert for ulike brukstilfeller: - -1. Gå over til [IO.NET-konsollen](https://ai.io.net/), opprett en konto og generer en API-nøkkel. - -2. Kjør kommandoen `/connect` og søk etter **IO.NET**. - - ```txt - /connect - ``` - -3. Skriv inn nøkkelen IO.NET API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell. - - ```txt - /models - ``` - ---- - -### LM Studio - -Du kan konfigurere OpenCode for å bruke lokale modeller gjennom LM Studio. - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -I dette eksemplet: - -- `lmstudio` er den tilpassede leverandøren ID. Dette kan være hvilken som helst streng du vil. -- `npm` spesifiserer pakken som skal brukes for denne leverandøren. Her brukes `@ai-sdk/openai-compatible` for enhver OpenAI-kompatibel API. -- `name` er visningsnavnet for leverandøren i UI. -- `options.baseURL` er endepunktet for den lokale serveren. -- `models` er et kart over modell-ID-er til deres konfigurasjoner. Modellnavnet vil vises i modellvalglisten. - ---- - -### Moonshot AI - -Slik bruker du Kimi K2 fra Moonshot AI: - -1. Gå over til [Moonshot AI-konsollen](https://platform.moonshot.ai/console), opprett en konto og klikk på **Opprett API-nøkkel**. - -2. Kjør kommandoen `/connect` og søk etter **Moonshot AI**. - - ```txt - /connect - ``` - -3. Skriv inn Moonshot API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge _Kimi K2_. - - ```txt - /models - ``` - ---- - -### MiniMax - -1. Gå over til [MiniMax API-konsollen](https://platform.minimax.io/login), opprett en konto og generer en API-nøkkel. - -2. Kjør kommandoen `/connect` og søk etter **MiniMax**. - - ```txt - /connect - ``` - -3. Skriv inn MiniMax API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell som _M2.1_. - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. Gå over til [Nebius Token Factory-konsollen](https://tokenfactory.nebius.com/), opprett en konto og klikk på **Legg til nøkkel**. - -2. Kjør kommandoen `/connect` og søk etter **Nebius Token Factory**. - - ```txt - /connect - ``` - -3. Skriv inn Nebius Token Factory API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell som _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Ollama - -Du kan konfigurere OpenCode for å bruke lokale modeller gjennom Ollama. - -:::tip -Ollama kan automatisk konfigurere seg selv for OpenCode. Se [Ollama-integrasjonsdokumentene](https://docs.ollama.com/integrations/opencode) for detaljer. -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -I dette eksemplet: - -- `ollama` er den tilpassede leverandøren ID. Dette kan være hvilken som helst streng du vil. -- `npm` spesifiserer pakken som skal brukes for denne leverandøren. Her brukes `@ai-sdk/openai-compatible` for enhver OpenAI-kompatibel API. -- `name` er visningsnavnet for leverandøren i UI. -- `options.baseURL` er endepunktet for den lokale serveren. -- `models` er et kart over modell-ID-er til deres konfigurasjoner. Modellnavnet vil vises i modellvalglisten. - -:::tip -Hvis verktøykall ikke fungerer, prøv å øke `num_ctx` i Ollama. Start rundt 16k - 32k. -::: - ---- - -### Ollama Cloud - -Slik bruker du Ollama Cloud med OpenCode: - -1. Gå over til [https://ollama.com/](https://ollama.com/) og logg på eller opprett en konto. - -2. Naviger til **Innstillinger** > **Nøkler** og klikk på **Legg til API nøkkel** for å generere en ny API nøkkel. - -3. Kopier API-nøkkelen for bruk i OpenCode. - -4. Kjør kommandoen `/connect` og søk etter **Ollama Cloud**. - - ```txt - /connect - ``` - -5. Skriv inn din Ollama Cloud API nøkkel. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **Viktig**: Før du bruker skymodeller i OpenCode, må du hente modellinformasjonen lokalt: - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. Kjør kommandoen `/models` for å velge din Ollama Cloud-modell. - - ```txt - /models - ``` - ---- - -### OpenAI - -Vi anbefaler at du registrerer deg for [ChatGPT Plus eller Pro](https://chatgpt.com/pricing). - -1. Når du har registrert deg, kjør kommandoen `/connect` og velg OpenAI. - - ```txt - /connect - ``` - -2. Her kan du velge alternativet **ChatGPT Plus/Pro** og det åpner nettleseren din - og ber deg om å autentisere. - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. Nå skal alle OpenAI-modellene være tilgjengelige når du bruker kommandoen `/models`. - - ```txt - /models - ``` - -##### Bruke API-nøkler - -Hvis du allerede har en API-nøkkel, kan du velge **Angi API-nøkkel manuelt** og lime den inn i terminalen. - ---- - -### OpenCode Zen - -OpenCode Zen er en liste over testede og verifiserte modeller levert av OpenCode-teamet. [Finn ut mer](/docs/zen). - -1. Logg på **OpenCode Zen** og klikk på **Create API Key**. - -2. Kjør kommandoen `/connect` og søk etter **OpenCode Zen**. - - ```txt - /connect - ``` - -3. Skriv inn OpenCode API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell som _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. Gå over til [OpenRouter-dashbordet](https://openrouter.ai/settings/keys), klikk på **Create API Key**, og kopier nøkkelen. - -2. Kjør kommandoen `/connect` og søk etter OpenRouter. - - ```txt - /connect - ``` - -3. Skriv inn API-nøkkelen for leverandøren. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Mange OpenRouter-modeller er forhåndslastet som standard, kjør kommandoen `/models` for å velge den du ønsker. - - ```txt - /models - ``` - - Du kan også legge til flere modeller gjennom OpenCode-konfigurasjonen. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. Du kan også tilpasse dem gjennom OpenCode-konfigurasjonen. Her er et eksempel på å spesifisere en leverandør - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI Core gir tilgang til 40+ modeller fra OpenAI, Anthropic, Google, Amazon, Meta, Mistral og AI21 gjennom en enhetlig plattform. - -1. Gå til din [SAP BTP Cockpit](https://account.hana.ondemand.com/), naviger til din SAP AI kjernetjenesteforekomst, og lag en tjenestenøkkel. - - :::tip - Tjenestenøkkelen er et JSON-objekt som inneholder `clientid`, `clientsecret`, `url` og `serviceurls.AI_API_URL`. Du finner AI kjerneforekomsten din under **Tjenester** > **Forekomster og abonnementer** i BTP Cockpit. - ::: - -2. Kjør kommandoen `/connect` og søk etter **SAP AI Core**. - - ```txt - /connect - ``` - -3. Skriv inn tjenestenøkkelen JSON. - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - Eller angi miljøvariabelen `AICORE_SERVICE_KEY`: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - Eller legg den til bash-profilen din: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. Angi eventuelt distribusjon ID og ressursgruppe: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - Disse innstillingene er valgfrie og bør konfigureres i henhold til SAP AI kjerneoppsettet. - ::: - -5. Kjør kommandoen `/models` for å velge fra 40+ tilgjengelige modeller. - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. Gå over til [OVHcloud-panelet](https://ovh.com/manager). Naviger til `Public Cloud`-delen, `AI & Machine Learning` > `AI Endpoints` og i `API Keys`-fanen klikker du på **Opprett en ny API-nøkkel**. - -2. Kjør kommandoen `/connect` og søk etter **OVHcloud AI Endpoints**. - - ```txt - /connect - ``` - -3. Skriv inn OVHcloud AI Endpoints API nøkkel. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell som _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Scaleway - -Slik bruker du [Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/) med OpenCode: - -1. Gå over til [Scaleway Console IAM innstillinger](https://console.scaleway.com/iam/api-keys) for å generere en ny API nøkkel. - -2. Kjør kommandoen `/connect` og søk etter **Scaleway**. - - ```txt - /connect - ``` - -3. Skriv inn Scaleway API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell som _devstral-2-123b-instruct-2512_ eller _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Together AI - -1. Gå over til [Together AI-konsollen](https://api.together.ai), opprett en konto og klikk på **Legg til nøkkel**. - -2. Kjør kommandoen `/connect` og søk etter **Together AI**. - - ```txt - /connect - ``` - -3. Skriv inn Together AI API nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell som _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Venice AI - -1. Gå over til [Venice AI-konsollen](https://venice.ai), opprett en konto og generer en API-nøkkel. - -2. Kjør kommandoen `/connect` og søk etter **Venice AI**. - - ```txt - /connect - ``` - -3. Skriv inn Venice AI API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell som _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -Vercel AI Gateway lar deg få tilgang til modeller fra OpenAI, Anthropic, Google, xAI og mer gjennom et enhetlig endepunkt. Modeller tilbys til listepris uten påslag. - -1. Gå over til [Vercel dashboard](https://vercel.com/), naviger til fanen **AI Gateway**, og klikk på **API nøkler** for å opprette en ny API nøkkel. - -2. Kjør kommandoen `/connect` og søk etter **Vercel AI Gateway**. - - ```txt - /connect - ``` - -3. Skriv inn Vercel AI Gateway API nøkkel. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell. - - ```txt - /models - ``` - -Du kan også tilpasse modeller gjennom OpenCode-konfigurasjonen. Her er et eksempel på spesifisering av leverandørrutingsrekkefølge. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -Noen nyttige rutealternativer: - -| Alternativ | Beskrivelse | -| ------------------- | ------------------------------------------------------------- | -| `order` | Providersekvens for å prøve | -| `only` | Begrens til spesifikke leverandører | -| `zeroDataRetention` | Bruk kun leverandører med null retningslinjer for datalagring | - ---- - -### xAI - -1. Gå over til [xAI-konsollen](https://console.x.ai/), opprett en konto og generer en API-nøkkel. - -2. Kjør kommandoen `/connect` og søk etter **xAI**. - - ```txt - /connect - ``` - -3. Skriv inn xAI API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell som _Grok Beta_. - - ```txt - /models - ``` - ---- - -### Z.AI - -1. Gå over til [Z.AI API-konsollen](https://z.ai/manage-apikey/apikey-list), opprett en konto og klikk på **Opprett en ny API-nøkkel**. - -2. Kjør kommandoen `/connect` og søk etter **Z.AI**. - - ```txt - /connect - ``` - - Hvis du abonnerer på **GLM Coding Plan**, velg **Z.AI Coding Plan**. - -3. Skriv inn Z.AI API-nøkkelen. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Kjør kommandoen `/models` for å velge en modell som _GLM-4.7_. - - ```txt - /models - ``` - ---- - -### ZenMux - -1. Gå over til [ZenMux-dashbordet](https://zenmux.ai/settings/keys), klikk på **Create API Key**, og kopier nøkkelen. - -2. Kjør kommandoen `/connect` og søk etter ZenMux. - - ```txt - /connect - ``` - -3. Skriv inn API-nøkkelen for leverandøren. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Mange ZenMux-modeller er forhåndslastet som standard, kjør kommandoen `/models` for å velge den du ønsker. - - ```txt - /models - ``` - - Du kan også legge til flere modeller gjennom OpenCode-konfigurasjonen. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## Egendefinert leverandør - -Slik legger du til en **OpenAI-kompatibel**-leverandør som ikke er oppført i `/connect`-kommandoen: - -:::tip -Du kan bruke hvilken som helst OpenAI-kompatibel leverandør med OpenCode. De fleste moderne AI-leverandører tilbyr OpenAI-kompatible APIer. -::: - -1. Kjør kommandoen `/connect` og rull ned til **Annet**. - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. Skriv inn en unik ID for leverandøren. - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - Velg en minneverdig ID, du vil bruke denne i konfigurasjonsfilen din. - ::: - -3. Skriv inn API-nøkkelen for leverandøren. - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. Opprett eller oppdater `opencode.json`-filen i prosjektkatalogen: - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - - Her er konfigurasjonsalternativene: - - **npm**: AI SDK pakke å bruke, `@ai-sdk/openai-compatible` for OpenAI-kompatible leverandører - - **navn**: Visningsnavn i UI. - - **modeller**: Tilgjengelige modeller. - - **options.baseURL**: API endepunkt URL. - - **options.apiKey**: Angi API-nøkkelen hvis du ikke bruker auth. - - **options.headers**: Angi egendefinerte overskrifter. - - Mer om de avanserte alternativene i eksemplet nedenfor. - -5. Kjør kommandoen `/models` og din egendefinerte leverandør og modeller vil vises i utvalgslisten. - ---- - -##### Eksempel - -Her er et eksempel på innstilling av alternativene `apiKey`, `headers` og modell `limit`. - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -Konfigurasjonsdetaljer: - -- **apiKey**: Angi med `env` variabel syntaks, [finn ut mer](/docs/config#env-vars). -- **headere**: Egendefinerte headere sendt med hver forespørsel. -- **limit.context**: Maksimalt Input Tokens som modellen godtar. -- **limit.output**: Maksimalt antall tokens modellen kan generere. - -`limit`-feltene lar OpenCode forstå hvor mye kontekst du har igjen. Standardleverandører henter disse automatisk fra models.dev. - ---- - -## Feilsøking - -Hvis du har problemer med å konfigurere en leverandør, sjekk følgende: - -1. **Sjekk autentiseringsoppsettet**: Kjør `opencode auth list` for å se om legitimasjonen - for leverandøren legges til konfigurasjonen din. - - Dette gjelder ikke leverandører som Amazon Bedrock, som er avhengige av miljøvariabler for godkjenning. - -2. For tilpassede leverandører, sjekk OpenCode-konfigurasjonen og: - - Sørg for at leverandør-ID-en som brukes i `/connect`-kommandoen samsvarer med ID i OpenCode-konfigurasjonen. - - Den riktige npm-pakken brukes for leverandøren. Bruk for eksempel `@ai-sdk/cerebras` for Cerebras. Og for alle andre OpenAI-kompatible leverandører, bruk `@ai-sdk/openai-compatible`. - - Kontroller at riktig API-endepunkt er brukt i `options.baseURL`-feltet. diff --git a/packages/web/src/content/docs/nb/rules.mdx b/packages/web/src/content/docs/nb/rules.mdx deleted file mode 100644 index 38d5b77110..0000000000 --- a/packages/web/src/content/docs/nb/rules.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: Regler -description: Set custom instructions for OpenCode. ---- - -Du kan gi tilpassede instruksjoner for å OpenCode ved å opprette en `AGENTS.md`-fil. Dette ligner på Cursors regler. Den inneholder instruksjoner som vil bli inkludert i LLMs kontekst for å tilpasse oppførselen til ditt spesifikke prosjekt. - ---- - -## Initialisering - -For å lage en ny `AGENTS.md` fil, kan du kjøre kommandoen `/init` i OpenCode. - -:::tip -Du bør sjekke inn prosjektets `AGENTS.md`-fil i Git. -::: - -Dette vil skanne prosjektet og alt dets innhold for å forstå hva prosjektet handler om og generere en `AGENTS.md`-fil med det. Dette hjelper OpenCode å navigere i prosjektet bedre. - -Hvis du har en eksisterende `AGENTS.md`-fil, vil denne prøve å legge til den. - ---- - -## Eksempel - -Du kan også bare lage denne filen manuelt. Her er et eksempel på noen ting du kan legge 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 legger 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. - -### Prosjekt - -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 brukt på alle OpenCode-økter. - -Siden dette ikke er forpliktet til Git eller delt med teamet ditt, anbefaler vi å bruke dette til å spesifisere eventuelle personlige regler som LLM bør følge. - -### Claude Code-kompatibilitet - -For brukere som migrerer fra Claude Code, støtter OpenCode Claude Codes filkonvensjoner som fallbacks: - -- **Prosjektregler**: `CLAUDE.md` i prosjektkatalogen din (brukes hvis ingen `AGENTS.md` eksisterer) -- **Globale regler**: `~/.claude/CLAUDE.md` (brukes hvis ingen `~/.config/opencode/AGENTS.md` eksisterer) -- **Skills**: `~/.claude/skills/` — se [Agent Skills](/docs/skills/) for detaljer - -For å 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 -``` - ---- - -## Forrang - -Når OpenCode starter, ser den etter regelfiler i denne rekkefølgen: - -1. **Lokale filer** ved å gå opp fra gjeldende 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`, brukes bare `AGENTS.md`. På samme måte har `~/.config/opencode/AGENTS.md` forrang over `~/.claude/CLAUDE.md`. - ---- - -## Egendefinerte instruksjoner - -Du kan spesifisere egendefinerte instruksjonsfiler i din `opencode.json` eller den globale `~/.config/opencode/opencode.json`. Dette lar deg og teamet ditt gjenbruke eksisterende regler i stedet for å 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å bruke eksterne URL-er for å 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"] -} -``` - -Eksterne instruksjoner hentes med 5 sekunders tidsavbrudd. - -Alle instruksjonsfilene er kombinert med `AGENTS.md`-filene dine. - ---- - -## Referere til eksterne filer - -Selv om OpenCode ikke automatisk analyserer filreferanser i `AGENTS.md`, kan du oppnå lignende funksjonalitet på to måter: - -### Bruker opencode.json - -Den anbefalte tilnærmingen er å bruke 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 instruksjoner i AGENTS.md - -Du kan lære OpenCode å lese eksterne filer ved å 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: - -- Lage modulære, gjenbrukbare regelfiler -- Dele regler på tvers av prosjekter via symbolkoblinger eller git-undermoduler -- Holde AGENTS.md kortfattet mens du refererer til detaljerte retningslinjer -- Sørge 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 bruk av `opencode.json` med glob-mønstre (som `packages/*/AGENTS.md`) mer vedlikeholdbart enn manuelle instruksjoner. -::: diff --git a/packages/web/src/content/docs/nb/sdk.mdx b/packages/web/src/content/docs/nb/sdk.mdx deleted file mode 100644 index a947094476..0000000000 --- a/packages/web/src/content/docs/nb/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: SDK -description: Typesikker JS-klient for 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 gir en typesikker klient for samhandling med serveren. -Bruk den til å bygge integrasjoner og kontrollere OpenCode programmatisk. - -[Finn ut mer](/docs/server) om hvordan serveren fungerer. For eksempler, sjekk ut [prosjektene](/docs/ecosystem#projects) bygget av fellesskapet. - ---- - -## Installasjon - -Installer SDK fra npm: - -```bash -npm install @opencode-ai/sdk -``` - ---- - -## Opprette klient - -Opprett en forekomst av OpenCode: - -```javascript -import { createOpencode } from "@opencode-ai/sdk" - -const { client } = await createOpencode() -``` - -Dette starter både en server og en klient - -#### Alternativer - -| Alternativ | Type | Beskrivelse | Standard | -| ---------- | ------------- | -------------------------------- | ----------- | -| `hostname` | `string` | Server vertsnavn | `127.0.0.1` | -| `port` | `number` | Serverport | `4096` | -| `signal` | `AbortSignal` | AbortSignal for avbrudd | `undefined` | -| `timeout` | `number` | Tidsavbrudd i ms for serverstart | `5000` | -| `config` | `Config` | Konfigurasjonsobjekt | `{}` | - ---- - -## Konfigurasjon - -Du kan sende et konfigurasjonsobjekt for å tilpasse virkemåten. Forekomsten henter fortsatt din `opencode.json`, men du kan overstyre eller legge til konfigurasjon 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() -``` - -## Kun klient - -Hvis du allerede har en kjørende forekomst av OpenCode, kan du opprette en klientforekomst for å koble til den: - -```javascript -import { createOpencodeClient } from "@opencode-ai/sdk" - -const client = createOpencodeClient({ - baseUrl: "http://localhost:4096", -}) -``` - -#### Alternativer - -| Alternativ | Type | Beskrivelse | Standard | -| --------------- | ---------- | --------------------------------- | ----------------------- | -| `baseUrl` | `string` | URL av serveren | `http://localhost:4096` | -| `fetch` | `function` | Egendefinert fetch-implementasjon | `globalThis.fetch` | -| `parseAs` | `string` | Metode for responsparsing | `auto` | -| `responseStyle` | `string` | Returstil: `data` eller `fields` | `fields` | -| `throwOnError` | `boolean` | Kast feil i stedet for retur | `false` | - ---- - -## Typer - -SDK inkluderer TypeScript-definisjoner for alle API-typer. Importer dem direkte: - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -Alle typer er generert fra serverens OpenAPI-spesifikasjon og tilgjengelig i type-filen. - ---- - -## Feil - -SDK kan gi feil som du kan fange opp og håndtere: - -```typescript -try { - await client.session.get({ path: { id: "invalid-id" } }) -} catch (error) { - console.error("Failed to get session:", (error as Error).message) -} -``` - ---- - -## Strukturert Utdata - -Du kan be om strukturert JSON-utdata fra modellen ved å spesifisere et `format` med et JSON-skjema. Modellen vil bruke et `StructuredOutput`-verktøy for å returnere validert JSON som samsvarer med skjemaet ditt. - -### Grunnleggende bruk - -```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"] } -``` - -### Utdataformattyper - -| Type | Beskrivelse | -| ------------- | --------------------------------------------------------------- | -| `text` | Standard. Standard tekstrespons (ingen strukturert utdata) | -| `json_schema` | Returnerer validert JSON som samsvarer med det angitte skjemaet | - -### JSON Skjemaformat - -Når du bruker `type: 'json_schema'`, oppgi: - -| Felt | Type | Beskrivelse | -| ------------ | --------------- | ---------------------------------------------------------- | -| `type` | `'json_schema'` | Påkrevd. Spesifiserer JSON-skjemamodus | -| `schema` | `object` | Påkrevd. JSON Schema-objekt som definerer utdatastrukturen | -| `retryCount` | `number` | Valgfritt. Antall valideringsforsøk (standard: 2) | - -### Feilhåndtering - -Hvis modellen ikke klarer å produsere gyldig strukturert utdata etter alle forsøk, vil svaret inkludere en `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) -} -``` - -### Beste praksis - -1. **Gi klare beskrivelser** i skjemaegenskapene dine for å hjelpe modellen med å forstå hvilke data som skal trekkes ut -2. **Bruk `required`** for å spesifisere hvilke felt som må være til stede -3. **Hold skjemaer fokuserte** - komplekse nøstede skjemaer kan være vanskeligere for modellen å fylle ut riktig -4. **Angi passende `retryCount`** - øk for komplekse skjemaer, reduser for enkle - ---- - -## API-er - -SDK-en eksponerer alle server-API-er gjennom en typesikker klient. - ---- - -### Globalt - -| Metode | Beskrivelse | Svar | -| ----------------- | ----------------------------- | ------------------------------------ | -| `global.health()` | Sjekk serverstatus og versjon | `{ healthy: true, version: string }` | - ---- - -#### Eksempler - -```javascript -const health = await client.global.health() -console.log(health.data.version) -``` - ---- - -### App - -| Metode | Beskrivelse | Svar | -| -------------- | ------------------------------- | ------------------------------------------- | -| `app.log()` | Skriv en loggoppføring | `boolean` | -| `app.agents()` | List alle tilgjengelige agenter | Agent[] | - ---- - -#### Eksempler - -```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() -``` - ---- - -### Prosjekt - -| Metode | Beskrivelse | Svar | -| ------------------- | ----------------------- | --------------------------------------------- | -| `project.list()` | List alle prosjekter | Project[] | -| `project.current()` | Hent gjeldende prosjekt | Project | - ---- - -#### Eksempler - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### Sti - -| Metode | Beskrivelse | Svar | -| ------------ | ------------------- | ---------------------------------------- | -| `path.get()` | Hent gjeldende bane | Path | - ---- - -#### Eksempler - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### Konfigurasjon - -| Metode | Beskrivelse | Svar | -| -------------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | Hent konfigurasjonsinformasjon | Config | -| `config.providers()` | List leverandører og standardmodeller | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### Eksempler - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### Sesjoner - -| Metode | Beskrivelse | Merknader | -| ---------------------------------------------------------- | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `session.list()` | List økter | Returnerer Session[] | -| `session.get({ path })` | Hent økt | Returnerer Session | -| `session.children({ path })` | List barneøkter | Returnerer Session[] | -| `session.create({ body })` | Opprett økt | Returnerer Session | -| `session.delete({ path })` | Slett økt | Returnerer `boolean` | -| `session.update({ path, body })` | Oppdater øktegenskaper | Returnerer Session | -| `session.init({ path, body })` | Analyser appen og lag `AGENTS.md` | Returnerer `boolean` | -| `session.abort({ path })` | Avbryt en kjørende økt | Returnerer `boolean` | -| `session.share({ path })` | Del økten | Returnerer Session | -| `session.unshare({ path })` | Slutt å dele økten | Returnerer Session | -| `session.summarize({ path, body })` | Oppsummer økten | Returnerer `boolean` | -| `session.messages({ path })` | List meldinger i en økt | Returnerer `{ info: `Message`, parts: `Part[]`}[]` | -| `session.message({ path })` | Hent meldingsdetaljer | Returnerer `{ info: `Message`, parts: `Part[]`}` | -| `session.prompt({ path, body })` | Send melding | `body.noReply: true` returnerer UserMessage (kun kontekst). Standard returnerer AssistantMessage med AI svar. Støtter `body.outputFormat` for [strukturert utdata](#strukturert-utdata) | -| `session.command({ path, body })` | Send kommando til økt | Returnerer `{ info: `AssistantMessage`, parts: `Part[]`}` | -| `session.shell({ path, body })` | Kjør en shell-kommando | Returnerer AssistantMessage | -| `session.revert({ path, body })` | Tilbakestill en melding | Returnerer Session | -| `session.unrevert({ path })` | Gjenopprett reverserte meldinger | Returnerer Session | -| `postSessionByIdPermissionsByPermissionId({ path, body })` | Svar på en tillatelsesforespørsel | Returnerer `boolean` | - ---- - -#### Eksempler - -```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." }], - }, -}) -``` - ---- - -### Filer - -| Metode | Beskrivelse | Svar | -| ------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------ | -| `find.text({ query })` | Søk etter tekst i filer | En rekke matchobjekter med `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `find.files({ query })` | Finn filer og kataloger etter navn | `string[]` (baner) | -| `find.symbols({ query })` | Finn symboler i arbeidsområdet | Symbol[] | -| `file.read({ query })` | Les en fil | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | Hent status for sporede filer | File[] | - -`find.files` støtter noen få valgfrie søkefelt: - -- `type`: `"file"` eller `"directory"` -- `directory`: overstyr prosjektroten for søket -- `limit`: maksimalt antall resultater (1–200) - ---- - -#### Eksempler - -```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 - -| Metode | Beskrivelse | Svar | -| ------------------------------ | ------------------------- | --------- | -| `tui.appendPrompt({ body })` | Legg til tekst i prompten | `boolean` | -| `tui.openHelp()` | Åpne hjelpedialogen | `boolean` | -| `tui.openSessions()` | Åpne øktvelgeren | `boolean` | -| `tui.openThemes()` | Åpne temavelgeren | `boolean` | -| `tui.openModels()` | Åpne modellvelgeren | `boolean` | -| `tui.submitPrompt()` | Send inn gjeldende prompt | `boolean` | -| `tui.clearPrompt()` | Tøm prompten | `boolean` | -| `tui.executeCommand({ body })` | Utfør en kommando | `boolean` | -| `tui.showToast({ body })` | Vis toast-varsel | `boolean` | - ---- - -#### Eksempler - -```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 - -| Metode | Beskrivelse | Svar | -| ------------------- | ------------------------------ | --------- | -| `auth.set({ ... })` | Angi autentiseringsinformasjon | `boolean` | - ---- - -#### Eksempler - -```javascript -await client.auth.set({ - path: { id: "anthropic" }, - body: { type: "api", key: "your-api-key" }, -}) -``` - ---- - -### Hendelser - -| Metode | Beskrivelse | Svar | -| ------------------- | -------------------------------- | -------------------------------- | -| `event.subscribe()` | Strøm av server-sendte hendelser | Strøm av server-sendte hendelser | - ---- - -#### Eksempler - -```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) -} -``` diff --git a/packages/web/src/content/docs/nb/server.mdx b/packages/web/src/content/docs/nb/server.mdx deleted file mode 100644 index a6ad8c6dfb..0000000000 --- a/packages/web/src/content/docs/nb/server.mdx +++ /dev/null @@ -1,287 +0,0 @@ ---- -title: Tjener -description: Samhandle med OpenCode-tjener over HTTP. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -Kommandoen `opencode serve` kjører en hodeløs HTTP-server som eksponerer et OpenAPI-endepunkt som en OpenCode-klient kan bruke. - ---- - -### Bruk - -```bash -opencode serve [--port ] [--hostname ] [--cors ] -``` - -#### Alternativer - -| Flagg | Beskrivelse | Standard | -| --------------- | --------------------------------------------- | ---------------- | -| `--port` | Port å lytte på | `4096` | -| `--hostname` | Vertsnavn å lytte på | `127.0.0.1` | -| `--mdns` | Aktiver mDNS-oppdagelse | `false` | -| `--mdns-domain` | Egendefinert domenenavn for mDNS-tjeneste | `opencode.local` | -| `--cors` | Ytterligere nettleseropprinnelse som tillates | `[]` | - -`--cors` kan angis flere ganger: - -```bash -opencode serve --cors http://localhost:5173 --cors https://app.example.com -``` - ---- - -### Autentisering - -Sett `OPENCODE_SERVER_PASSWORD` for å beskytte serveren med HTTP grunnleggende autentisering. Brukernavnet er satt til `opencode` som standard, eller sett `OPENCODE_SERVER_USERNAME` for å overstyre det. Dette gjelder både `opencode serve` og `opencode web`. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve -``` - ---- - -### Slik fungerer det - -Når du kjører `opencode` starter den en TUI og en server. Der TUI er -klient som snakker med serveren. Serveren viser en OpenAPI 3.1-spesifikasjon -endepunkt. Dette endepunktet brukes også til å generere en [SDK](/docs/sdk). - -:::tip -Bruk OpenCode-serveren til å samhandle med OpenCode programmatisk. -::: - -Denne arkitekturen lar OpenCode støtte flere klienter og lar deg samhandle med OpenCode programmatisk. - -Du kan kjøre `opencode serve` for å starte en frittstående server. Hvis du har -OpenCode TUI kjører, vil `opencode serve` starte en ny server. - ---- - -#### Koble til en eksisterende server - -Når du starter TUI, tildeler den tilfeldig en port og vertsnavn. Du kan i stedet sende inn `--hostname` og `--port` [flagg](/docs/cli). Bruk deretter denne til å koble til serveren. - -[`/tui`](#tui) endepunktet kan brukes til å kjøre TUI gjennom serveren. Du kan for eksempel forhåndsutfylle eller kjøre en forespørsel. Dette oppsettet brukes av OpenCode [IDE](/docs/ide) plugins. - ---- - -## Spes - -Serveren publiserer en OpenAPI 3.1-spesifikasjon som kan vises på: - -``` -http://:/doc -``` - -For eksempel `http://localhost:4096/doc`. Bruk spesifikasjonen til å generere klienter eller inspisere forespørsels- og svartyper. Eller se den i en Swagger-utforsker. - ---- - -## APIer - -opencode-serveren viser følgende APIer. - ---- - -### Globalt - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ---------------- | -------------------------------- | ------------------------------------ | -| `GET` | `/global/health` | Få serverhelse og versjon | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | Få globale hendelser (SSE strøm) | Eventstrøm | - ---- - -### Prosjekt - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------------------ | ----------------------- | --------------------------------------------- | -| `GET` | `/project` | List alle prosjekter | Project[] | -| `GET` | `/project/current` | Hent gjeldende prosjekt | Project | - ---- - -### Bane og VCS - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------- | ------------------------------------ | ------------------------------------------- | -| `GET` | `/path` | Hent gjeldende bane | Path | -| `GET` | `/vcs` | Hent VCS-info for gjeldende prosjekt | VcsInfo | - ---- - -### Forekomst - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------------------- | --------------------------- | --------- | -| `POST` | `/instance/dispose` | Avslutt gjeldende forekomst | `boolean` | - ---- - -### Konfigurasjon - -| Metode | Sti | Beskrivelse | Svar | -| ------- | ------------------- | ------------------------------------- | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | Hent konfigurasjonsinformasjon | Config | -| `PATCH` | `/config` | Oppdater konfigurasjon | Config | -| `GET` | `/config/providers` | List leverandører og standardmodeller | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -### Leverandør - -| Metode | Sti | Beskrivelse | Svar | -| ------ | -------------------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | List alle leverandører | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | Hent autentiseringsmetoder for leverandør | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | Autoriser en leverandør ved å bruke OAuth | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | Håndter OAuth-tilbakeringing for en leverandør | `boolean` | - ---- - -### Sesjoner - -| Metode | Sti | Beskrivelse | Merknader | -| -------- | ---------------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------- | -| `GET` | `/session` | List alle økter | Returnerer Session[] | -| `POST` | `/session` | Opprett en ny økt | body: `{ parentID?, title? }`, returnerer Session | -| `GET` | `/session/status` | Hent øktstatus for alle økter | Returnerer `{ [sessionID: string]: `SessionStatus` }` | -| `GET` | `/session/:id` | Hent øktdetaljer | Returnerer Session | -| `DELETE` | `/session/:id` | Slett en økt og alle dens data | Returnerer `boolean` | -| `PATCH` | `/session/:id` | Oppdater øktegenskaper | body: `{ title? }`, returnerer Session | -| `GET` | `/session/:id/children` | Hent en økts barneøkter | Returnerer Session[] | -| `GET` | `/session/:id/todo` | Hent gjøremålslisten for en økt | Returnerer Todo[] | -| `POST` | `/session/:id/init` | Analyser appen og lag `AGENTS.md` | body: `{ messageID, providerID, modelID }`, returnerer `boolean` | -| `POST` | `/session/:id/fork` | Fork en eksisterende økt ved en melding | body: `{ messageID? }`, returnerer Session | -| `POST` | `/session/:id/abort` | Avbryt en kjørende økt | Returnerer `boolean` | -| `POST` | `/session/:id/share` | Del en økt | Returnerer Session | -| `DELETE` | `/session/:id/share` | Slutt å dele en økt | Returnerer Session | -| `GET` | `/session/:id/diff` | Hent diff for denne økten | spørring: `messageID?`, returnerer FileDiff[] | -| `POST` | `/session/:id/summarize` | Oppsummer økten | body: `{ providerID, modelID }`, returnerer `boolean` | -| `POST` | `/session/:id/revert` | Tilbakestill en melding | body: `{ messageID, partID? }`, returnerer `boolean` | -| `POST` | `/session/:id/unrevert` | Gjenopprett alle tilbakestilte meldinger | Returnerer `boolean` | -| `POST` | `/session/:id/permissions/:permissionID` | Svar på en tillatelsesforespørsel | body: `{ response, remember? }`, returnerer `boolean` | - ---- - -### Meldinger - -| Metode | Sti | Beskrivelse | Merknader | -| ------ | --------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `GET` | `/session/:id/message` | List meldinger i en økt | spørring: `limit?`, returnerer `{ info: `Message`, parts: `Part[]`}[]` | -| `POST` | `/session/:id/message` | Send en melding og vent på svar | body: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, returnerer `{ info: `Message`, parts: `Part[]`}` | -| `GET` | `/session/:id/message/:messageID` | Hent meldingsdetaljer | Returnerer `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/prompt_async` | Send en melding asynkront (ingen vent) | body: samme som `/session/:id/message`, returnerer `204 No Content` | -| `POST` | `/session/:id/command` | Utfør en slash-kommando | body: `{ messageID?, agent?, model?, command, arguments }`, returnerer `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/shell` | Kjør en shell-kommando | body: `{ agent, model?, command }`, returnerer `{ info: `Message`, parts: `Part[]`}` | - ---- - -### Kommandoer - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ---------- | -------------------- | --------------------------------------------- | -| `GET` | `/command` | List alle kommandoer | Command[] | - ---- - -### Filer - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------------------------ | ---------------------------------- | ------------------------------------------------------------------------------------------ | -| `GET` | `/find?pattern=` | Søk etter tekst i filer | En rekke matchobjekter med `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `GET` | `/find/file?query=` | Finn filer og kataloger etter navn | `string[]` (baner) | -| `GET` | `/find/symbol?query=` | Finn symboler i arbeidsområdet | Symbol[] | -| `GET` | `/file?path=` | List filer og kataloger | FileNode[] | -| `GET` | `/file/content?path=

` | Les en fil | FileContent | -| `GET` | `/file/status` | Hent status for sporede filer | File[] | - -#### `/find/file` spørringsparametere - -- `query` (obligatorisk) - søkestreng (uklar samsvar) -- `type` (valgfritt) - begrense resultatene til `"file"` eller `"directory"` -- `directory` (valgfritt) — overstyr prosjektroten for søket -- `limit` (valgfritt) - maks. resultater (1–200) -- `dirs` (valgfritt) - eldre flagg (`"false"` returnerer kun filer) - ---- - -### Verktøy (eksperimentelt) - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -| `GET` | `/experimental/tool/ids` | Vis alle verktøy-ID-er | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | List verktøy med JSON-skjemaer for en modell | ToolList | - ---- - -### LSP, formattere og MCP - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------------ | ---------------------------- | -------------------------------------------------------- | -| `GET` | `/lsp` | Hent LSP-serverstatus | LSPStatus[] | -| `GET` | `/formatter` | Hent formateringsstatus | FormatterStatus[] | -| `GET` | `/mcp` | Hent MCP-serverstatus | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | Legg til MCP-server dynamisk | body: `{ name, config }`, returnerer MCP statusobjekt | - ---- - -### Agenter - -| Metode | Sti | Beskrivelse | Svar | -| ------ | -------- | ------------------------------- | ------------------------------------------- | -| `GET` | `/agent` | List alle tilgjengelige agenter | Agent[] | - ---- - -### Logging - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------ | ---------------------------------------------------------------- | --------- | -| `POST` | `/log` | Skriv loggoppføring. Body: `{ service, level, message, extra? }` | `boolean` | - ---- - -### TUI - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ----------------------- | ------------------------------------------- | -------------------------- | -| `POST` | `/tui/append-prompt` | Legg til tekst i prompten | `boolean` | -| `POST` | `/tui/open-help` | Åpne hjelpedialogen | `boolean` | -| `POST` | `/tui/open-sessions` | Åpne øktvelgeren | `boolean` | -| `POST` | `/tui/open-themes` | Åpne temavelgeren | `boolean` | -| `POST` | `/tui/open-models` | Åpne modellvelgeren | `boolean` | -| `POST` | `/tui/submit-prompt` | Send inn gjeldende prompt | `boolean` | -| `POST` | `/tui/clear-prompt` | Tøm prompten | `boolean` | -| `POST` | `/tui/execute-command` | Utfør en kommando (`{ command }`) | `boolean` | -| `POST` | `/tui/show-toast` | Vis toast (`{ title?, message, variant }`) | `boolean` | -| `GET` | `/tui/control/next` | Vent på neste kontrollforespørsel | Kontrollforespørselsobjekt | -| `POST` | `/tui/control/response` | Svar på en kontrollforespørsel (`{ body }`) | `boolean` | - ---- - -### Auth - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ----------- | --------------------------------------------------------------------- | --------- | -| `PUT` | `/auth/:id` | Angi autentiseringsinformasjon. Body må samsvare med leverandørskjema | `boolean` | - ---- - -### Hendelser - -| Metode | Sti | Beskrivelse | Svar | -| ------ | -------- | ----------------------------------------------------------------------------------------------- | -------------------------------- | -| `GET` | `/event` | Strøm av server-sendte hendelser. Første hendelse er `server.connected`, deretter busshendelser | Strøm av server-sendte hendelser | - ---- - -### Dokumentasjon - -| Metode | Sti | Beskrivelse | Svar | -| ------ | ------ | ------------------------- | ----------------------------------- | -| `GET` | `/doc` | OpenAPI 3.1-spesifikasjon | HTML side med OpenAPI-spesifikasjon | diff --git a/packages/web/src/content/docs/nb/share.mdx b/packages/web/src/content/docs/nb/share.mdx deleted file mode 100644 index ca0cb4829a..0000000000 --- a/packages/web/src/content/docs/nb/share.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Deling -description: Del dine OpenCode-samtaler. ---- - -Delingsfunksjonen i OpenCode lar deg lage offentlige lenker til dine OpenCode-samtaler, slik at du kan samarbeide med lagkamerater eller få hjelp fra andre. - -:::note -Delte samtaler er offentlig tilgjengelige for alle med linken. -::: - ---- - -## Slik fungerer det - -Når du deler en samtale, OpenCode: - -1. Oppretter en unik offentlig URL for økten din -2. Synkroniserer samtaleloggen din til serverne våre -3. Gjør samtalen tilgjengelig via den delbare lenken — `opncd.ai/s/` - ---- - -## Deling - -OpenCode støtter tre delingsmoduser som kontrollerer hvordan samtaler deles: - ---- - -### Manuell (standard) - -Som standard bruker OpenCode manuell delingsmodus. Økter deles ikke automatisk, men du kan dele dem manuelt ved å bruke kommandoen `/share`: - -``` -/share -``` - -Dette vil generere en unik URL som vil bli kopiert til utklippstavlen din. - -For å eksplisitt angi manuell modus i [konfigurasjonsfilen](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - ---- - -### Automatisk deling - -Du kan aktivere automatisk deling for alle nye samtaler ved å sette alternativet `share` til `"auto"` i [konfigurasjonsfilen](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "auto" -} -``` - -Med automatisk deling aktivert, vil hver nye samtale automatisk bli delt og en kobling vil bli generert. - ---- - -### Deaktivert - -Du kan deaktivere deling helt ved å sette alternativet `share` til `"disabled"` i [konfigurasjonsfilen](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -For å håndheve dette på tvers av teamet ditt for et gitt prosjekt, legg det til `opencode.json` i prosjektet ditt og sjekk det inn i Git. - ---- - -## Opphev deling - -Slik slutter du å dele en samtale og fjerner den fra offentlig tilgang: - -``` -/unshare -``` - -Dette vil fjerne delelinken og slette dataene knyttet til samtalen. - ---- - -## Personvern - -Det er et par ting du må huske på når du deler en samtale. - ---- - -### Datalagring - -Delte samtaler forblir tilgjengelige til du eksplisitt opphever deling av dem. Dette -inkluderer: - -- Full samtalehistorikk -- Alle meldinger og svar -- Metadata for økter - ---- - -### Anbefalinger - -- Del kun samtaler som ikke inneholder sensitiv informasjon. -- Se gjennom samtaleinnholdet før du deler. -- Opphev deling av samtaler når samarbeidet er fullført. -- Unngå å dele samtaler med proprietær kode eller konfidensielle data. -- For sensitive prosjekter, deaktiver deling helt. - ---- - -## For bedrifter - -For bedriftsimplementeringer kan delingsfunksjonen være: - -- **Deaktivert** helt for overholdelse av sikkerhet -- **Begrenset** til brukere som kun er autentisert gjennom SSO -- **Selv-hostet** på din egen infrastruktur - -[Finn ut mer](/docs/enterprise) om bruk av opencode i organisasjonen din. diff --git a/packages/web/src/content/docs/nb/skills.mdx b/packages/web/src/content/docs/nb/skills.mdx deleted file mode 100644 index 717ad87df4..0000000000 --- a/packages/web/src/content/docs/nb/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: "Agentferdigheter" -description: "Definer gjenbrukbar oppførsel via SKILL.md-definisjoner" ---- - -Agentferdigheter lar OpenCode oppdage gjenbrukbare instruksjoner fra repo- eller hjemmekatalogen din. -Ferdigheter lastes inn på forespørsel via det innebygde `skill`-verktøyet – agenter ser tilgjengelige ferdigheter og kan laste inn hele innholdet når det er nødvendig. - ---- - -## Plasser filer - -Opprett én mappe per ferdighetsnavn og legg inn en `SKILL.md` i den. -opencode søker etter disse stedene: - -- Prosjektkonfigurasjon: `.opencode/skills//SKILL.md` -- Global konfigurasjon: `~/.config/opencode/skills//SKILL.md` -- Prosjekt Claude-kompatibel: `.claude/skills//SKILL.md` -- Global Claude-kompatibel: `~/.claude/skills//SKILL.md` -- Prosjektagent-kompatibel: `.agents/skills//SKILL.md` -- Global agent-kompatibel: `~/.agents/skills//SKILL.md` - ---- - -## Forstå oppdagelsen - -For prosjektlokale stier går opencode opp fra din nåværende arbeidskatalog til den når git-arbeidstreet. -Den laster alle matchende `skills/*/SKILL.md` i `.opencode/` og alle matchende `.claude/skills/*/SKILL.md` eller `.agents/skills/*/SKILL.md` underveis. - -Globale definisjoner lastes også inn fra `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` og `~/.agents/skills/*/SKILL.md`. - ---- - -## Skriv frontmatter - -Hver `SKILL.md` må starte med YAML frontmatter. -Bare disse feltene gjenkjennes: - -- `name` (påkrevd) -- `description` (påkrevd) -- `license` (valgfritt) -- `compatibility` (valgfritt) -- `metadata` (valgfritt, streng-til-streng kart) - -Ukjente frontmatter-felt ignoreres. - ---- - -## Bekreft navn - -`name` må: - -- Bestå av 1–64 tegn -- Vær alfanumerisk med små bokstaver, adskilt med enkel bindestrek -- Ikke begynne eller slutte med `-` -- Ikke inneholde påfølgende `--` -- Samsvare med katalognavnet som inneholder `SKILL.md` - -Ekvivalent regulært uttrykk: - -```text -^[a-z0-9]+(-[a-z0-9]+)*$ -``` - ---- - -## Følg lengdereglene - -`description` må bestå av 1-1024 tegn. -Hold det spesifikt nok til at agenten kan velge riktig. - ---- - -## Bruk et eksempel - -Lag `.opencode/skills/git-release/SKILL.md` slik: - -```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. -``` - ---- - -## Forstå verktøybeskrivelsen - -opencode viser tilgjengelige ferdigheter i `skill`-verktøybeskrivelsen. -Hver oppføring inneholder ferdighetsnavnet og beskrivelsen: - -```xml - - - git-release - Create consistent releases and changelogs - - -``` - -Agenten laster inn en ferdighet ved å kalle verktøyet: - -``` -skill({ name: "git-release" }) -``` - ---- - -## Konfigurer tillatelser - -Kontroller hvilke ferdigheter agenter har tilgang til ved å bruke mønsterbaserte tillatelser i `opencode.json`: - -```json -{ - "permission": { - "skill": { - "*": "allow", - "pr-review": "allow", - "internal-*": "deny", - "experimental-*": "ask" - } - } -} -``` - -| Tillatelse | Atferd | -| ---------- | ------------------------------------------- | -| `allow` | Ferdigheter lastes umiddelbart | -| `deny` | Ferdighet skjult for agent, tilgang avvist | -| `ask` | Bruker blir bedt om godkjenning før lasting | - -Mønstre støtter jokertegn: `internal-*` samsvarer med `internal-docs`, `internal-tools` osv. - ---- - -## Overstyring per agent - -Gi spesifikke agenter andre tillatelser enn de globale standardinnstillingene. - -**For egendefinerte agenter** (i agent frontmatter): - -```yaml ---- -permission: - skill: - "documents-*": "allow" ---- -``` - -**For innebygde agenter** (i `opencode.json`): - -```json -{ - "agent": { - "plan": { - "permission": { - "skill": { - "internal-*": "allow" - } - } - } - } -} -``` - ---- - -## Deaktiver ferdighetsverktøyet - -Deaktiver ferdigheter fullstendig for agenter som ikke bør bruke dem: - -**For egendefinerte agenter**: - -```yaml ---- -tools: - skill: false ---- -``` - -**For innebygde agenter**: - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -Når den er deaktivert, blir ``-delen utelatt helt. - ---- - -## Feilsøk lasting - -Hvis en ferdighet ikke vises: - -1. Kontroller at `SKILL.md` er stavet med store bokstaver -2. Sjekk at frontmatter inkluderer `name` og `description` -3. Sørg for at ferdighetsnavnene er unike på alle steder -4. Sjekk tillatelser – ferdigheter med `deny` er skjult for agenter diff --git a/packages/web/src/content/docs/nb/themes.mdx b/packages/web/src/content/docs/nb/themes.mdx deleted file mode 100644 index 2284848e31..0000000000 --- a/packages/web/src/content/docs/nb/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -title: Temaer -description: Velg et innebygd tema eller definer ditt eget. ---- - -Med OpenCode kan du velge fra ett av flere innebygde temaer, bruke et tema som tilpasser seg terminaltemaet ditt, eller definere ditt eget tilpassede tema. - -Som standard bruker OpenCode vårt eget `opencode`-tema. - ---- - -## Terminalkrav - -For at temaer skal vises riktig med fullfargepalett, må terminalen din støtte **truecolor** (24-biters farger). De fleste moderne terminaler støtter dette som standard, men du må kanskje aktivere det: - -- **Sjekk støtte**: Kjør `echo $COLORTERM` - den skal gi ut `truecolor` eller `24bit` -- **Aktiver truecolor**: Sett miljøvariabelen `COLORTERM=truecolor` i shell-profilen din -- **Terminalkompatibilitet**: Sørg for at terminalemulatoren din støtter 24-bits farger (de fleste moderne terminaler som iTerm2, Alacritty, Kitty, Windows Terminal og nyere versjoner av GNOME Terminal gjør det) - -Uten truecolor-støtte kan temaer vises med redusert fargenøyaktighet eller falle tilbake til nærmeste 256-fargers tilnærming. - ---- - -## Innebygde temaer - -OpenCode kommer med flere innebygde temaer. - -| Navn | Beskrivelse | -| ---------------------- | ------------------------------------------------------------------------- | -| `system` | Tilpasser seg terminalens bakgrunnsfarge | -| `tokyonight` | Basert på [tokyonight](https://github.com/folke/tokyonight.nvim)-temaet | -| `everforest` | Basert på [Everforest](https://github.com/sainnhe/everforest)-temaet | -| `ayu` | Basert på [Ayu](https://github.com/ayu-theme) mørke tema | -| `catppuccin` | Basert på [Catppuccin](https://github.com/catppuccin)-temaet | -| `catppuccin-macchiato` | Basert på [Catppuccin](https://github.com/catppuccin)-temaet | -| `gruvbox` | Basert på [Gruvbox](https://github.com/morhetz/gruvbox)-temaet | -| `kanagawa` | Basert på [Kanagawa](https://github.com/rebelot/kanagawa.nvim)-temaet | -| `nord` | Basert på [Nord](https://github.com/nordtheme/nord)-temaet | -| `matrix` | Hacker-stil grønt på svart tema | -| `one-dark` | Basert på [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) Mørkt tema | - -Og mer, vi legger stadig til nye temaer. - ---- - -## Systemtema - -`system`-temaet er designet for å automatisk tilpasse seg terminalens fargeskjema. I motsetning til tradisjonelle temaer som bruker faste farger, er _system_-temaet: - -- **Genererer gråtone**: Oppretter en tilpasset gråskala basert på terminalens bakgrunnsfarge, og sikrer optimal kontrast. -- **Bruker ANSI-farger**: Bruker standard ANSI farger (0-15) for syntaksutheving og UI elementer, som respekterer terminalens fargepalett. -- **Bevarer terminalens standardinnstillinger**: Bruker `none` for tekst- og bakgrunnsfarger for å opprettholde terminalens opprinnelige utseende. - -Systemtemaet er for brukere som: - -- Vil at OpenCode skal matche terminalens utseende -- Bruker tilpassede terminalfargeskjemaer -- Foretrekker et konsistent utseende på tvers av alle terminalapplikasjoner - ---- - -## Bruke et tema - -Du kan velge et tema ved å åpne temavelgeren med kommandoen `/theme`. Eller du kan spesifisere det i `tui.json`. - -```json title="tui.json" {3} -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - ---- - -## Egendefinerte temaer - -OpenCode støtter et fleksibelt JSON-basert temasystem som lar brukere enkelt lage og tilpasse temaer. - ---- - -### Hierarki - -Temaer lastes inn fra flere kataloger i følgende rekkefølge der senere kataloger overstyrer tidligere: - -1. **Innebygde temaer** - Disse er innebygd i binæren -2. **Brukerkonfigurasjonskatalog** - Definert i `~/.config/opencode/themes/*.json` eller `$XDG_CONFIG_HOME/opencode/themes/*.json` -3. **Prosjektrotkatalog** - Definert i `/.opencode/themes/*.json` -4. **Gjeldende arbeidskatalog** - Definert i `./.opencode/themes/*.json` - -Hvis flere kataloger inneholder et tema med samme navn, vil temaet fra katalogen med høyere prioritet bli brukt. - ---- - -### Opprette et tema - -For å lage et tilpasset tema, lag en JSON-fil i en av temakatalogene. - -For brukerspesifikke temaer: - -```bash no-frame -mkdir -p ~/.config/opencode/themes -vim ~/.config/opencode/themes/my-theme.json -``` - -Og for prosjektspesifikke temaer. - -```bash no-frame -mkdir -p .opencode/themes -vim .opencode/themes/my-theme.json -``` - ---- - -### JSON-format - -Temaer bruker et fleksibelt JSON-format med støtte for: - -- **Hex-farger**: `"#ffffff"` -- **ANSI-farger**: `3` (0-255) -- **Fargereferanser**: `"primary"` eller egendefinerte definisjoner -- **Mørke/lyse varianter**: `{"dark": "#000", "light": "#fff"}` -- **Ingen farge**: `"none"` - Bruker terminalens standardfarge eller transparent - ---- - -### Fargedefinisjoner - -`defs`-delen er valgfri, og den lar deg definere gjenbrukbare farger som kan refereres til i temaet. - ---- - -### Terminalstandarder - -Spesialverdien `"none"` kan brukes for hvilken som helst farge for å arve terminalens standardfarge. Dette er spesielt nyttig for å lage temaer som passer sømløst med terminalens fargeskjema: - -- `"text": "none"` - Bruker terminalens standard forgrunnsfarge -- `"background": "none"` - Bruker terminalens standard bakgrunnsfarge - ---- - -### Eksempel - -Her er et eksempel på et tilpasset tema: - -```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" - } - } -} -``` diff --git a/packages/web/src/content/docs/nb/tools.mdx b/packages/web/src/content/docs/nb/tools.mdx deleted file mode 100644 index 2e6f61ba07..0000000000 --- a/packages/web/src/content/docs/nb/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -title: Verktøy -description: Administrer verktøyene en LLM kan bruke. ---- - -Verktøy lar LLM utføre handlinger i kodebasen din. OpenCode kommer med et sett med innebygde verktøy, men du kan utvide det med [egendefinerte verktøy](/docs/custom-tools) eller [MCP servere](/docs/mcp-servers). - -Som standard er alle verktøy **aktivert** og trenger ikke tillatelse for å kjøre. Du kan kontrollere verktøyets oppførsel gjennom [tillatelser](/docs/permissions). - ---- - -## Konfigurasjon - -Bruk feltet `permission` for å kontrollere verktøyets oppførsel. Du kan tillate, avslå eller kreve godkjenning for hvert verktøy. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny", - "bash": "ask", - "webfetch": "allow" - } -} -``` - -Du kan også bruke jokertegn for å kontrollere flere verktøy samtidig. For eksempel, for å kreve godkjenning for alle verktøy fra en MCP-server: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "mymcp_*": "ask" - } -} -``` - -[Finn ut mer](/docs/permissions) om konfigurering av tillatelser. - ---- - -## Innebygd - -Her er alle de innebygde verktøyene som er tilgjengelige i OpenCode. - ---- - -### bash - -Utfør skallkommandoer i prosjektmiljøet ditt. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "bash": "allow" - } -} -``` - -Dette verktøyet lar LLM kjøre terminalkommandoer som `npm install`, `git status` eller en hvilken som helst annen skallkommando. - ---- - -### edit - -Endre eksisterende filer ved å bruke eksakte strengerstatninger. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Dette verktøyet utfører nøyaktige redigeringer av filer ved å erstatte eksakte teksttreff. Det er den primære måten LLM endrer kode på. - ---- - -### write - -Opprett nye filer eller overskriv eksisterende. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Bruk denne for å la LLM lage nye filer. Den vil overskrive eksisterende filer hvis de allerede eksisterer. - -:::note -`write`-verktøyet kontrolleres av tillatelsen `edit`, som dekker alle filendringer (`edit`, `write`, `patch`). -::: - ---- - -### read - -Les filinnholdet fra kodebasen din. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "read": "allow" - } -} -``` - -Dette verktøyet leser filer og returnerer innholdet. Den støtter lesing av spesifikke linjeområder for store filer. - ---- - -### grep - -Søk i filinnhold ved hjelp av regulære uttrykk. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "grep": "allow" - } -} -``` - -Rask innholdssøk på tvers av kodebasen din. Støtter full regex-syntaks og filmønsterfiltrering. - ---- - -### glob - -Finn filer etter mønstermatching. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "glob": "allow" - } -} -``` - -Søk etter filer ved å bruke glob-mønstre som `**/*.js` eller `src/**/*.ts`. Returnerer samsvarende filbaner sortert etter endringstid. - ---- - -### lsp (eksperimentell) - -Samhandle med dine konfigurerte LSP-servere for å få kodeintelligens-funksjoner som definisjoner, referanser, hover-informasjon og kallhierarki. - -:::note -Dette verktøyet er bare tilgjengelig når `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (eller `OPENCODE_EXPERIMENTAL=true`). -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "lsp": "allow" - } -} -``` - -Støttede operasjoner inkluderer `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` og `outgoingCalls`. - -For å konfigurere hvilke LSP-servere som er tilgjengelige for prosjektet ditt, se [LSP-servere](/docs/lsp). - ---- - -### patch - -Bruk patcher på filer. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Dette verktøyet bruker oppdateringsfiler til kodebasen din. Nyttig for å påføre diffs og patcher fra forskjellige kilder. - -:::note -`patch`-verktøyet kontrolleres av tillatelsen `edit`, som dekker alle filendringer (`edit`, `write`, `patch`). -::: - ---- - -### skill - -Last inn en [ferdighet](/docs/skills) (en `SKILL.md` fil) og returner innholdet i samtalen. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "skill": "allow" - } -} -``` - ---- - -### todowrite - -Administrer gjøremålslister under kodingsøkter. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "todowrite": "allow" - } -} -``` - -Oppretter og oppdaterer oppgavelister for å spore fremdrift under komplekse operasjoner. LLM bruker dette til å organisere flertrinnsoppgaver. - -:::note -Dette verktøyet er deaktivert for subagenter som standard, men du kan aktivere det manuelt. [Finn ut mer](/docs/agents/#permissions) -::: - ---- - -### webfetch - -Hent nettinnhold. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "webfetch": "allow" - } -} -``` - -Lar LLM hente og lese nettsider. Nyttig for å slå opp dokumentasjon eller forske på nettressurser. - ---- - -### websearch - -Søk på nettet for informasjon. - -:::note -Dette verktøyet er bare tilgjengelig når du bruker OpenCode-leverandøren eller når miljøvariabelen `OPENCODE_ENABLE_EXA` er satt til en sann verdi (f.eks. `true` eller `1`). - -Slik aktiverer du når du starter OpenCode: - -```bash -OPENCODE_ENABLE_EXA=1 opencode -``` - -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "websearch": "allow" - } -} -``` - -Utfører nettsøk med Exa AI for å finne relevant informasjon på nettet. Nyttig for å undersøke emner, finne aktuelle hendelser eller samle informasjon utover treningsdataavbruddet. - -Ingen API-nøkkel kreves — verktøyet kobles direkte til Exa AIs vertsbaserte MCP-tjeneste uten autentisering. - -:::tip -Bruk `websearch` når du trenger å finne informasjon (oppdagelse), og `webfetch` når du trenger å hente innhold fra en bestemt URL (henting). -::: - ---- - -### question - -Still brukeren spørsmål under utførelse. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "question": "allow" - } -} -``` - -Dette verktøyet lar LLM stille spørsmål til brukeren under en oppgave. Det er nyttig for: - -- Samle brukerpreferanser eller krav -- Avklarende tvetydige instruksjoner -- Få beslutninger om gjennomføringsvalg -- Tilbyr valg om hvilken retning du skal ta - -Hvert spørsmål inkluderer en overskrift, spørsmålsteksten og en liste over alternativer. Brukere kan velge fra de angitte alternativene eller skrive inn et tilpasset svar. Når det er flere spørsmål, kan brukerne navigere mellom dem før de sender inn alle svarene. - ---- - -## Egendefinerte verktøy - -Egendefinerte verktøy lar deg definere dine egne funksjoner som LLM kan kalle. Disse er definert i konfigurasjonsfilen din og kan kjøre vilkårlig kode. - -[Finn ut mer](/docs/custom-tools) om å lage tilpassede verktøy. - ---- - -## MCP servere - -MCP (Model Context Protocol) servere lar deg integrere eksterne verktøy og tjenester. Dette inkluderer databasetilgang, API-integrasjoner og tredjepartstjenester. - -[Les mer](/docs/mcp-servers) om konfigurering av MCP-servere. - ---- - -## Internaler - -Internt bruker verktøy som `grep` og `glob` [ripgrep](https://github.com/BurntSushi/ripgrep) i bakgrunnen. Som standard respekterer ripgrep `.gitignore`-mønstre, noe som betyr at filer og kataloger som er oppført i `.gitignore` vil bli ekskludert fra søk og oppføringer. - ---- - -### Ignorer mønstre - -For å inkludere filer som normalt vil bli ignorert, lag en `.ignore`-fil i prosjektroten. Denne filen kan eksplisitt tillate visse stier. - -```text title=".ignore" -!node_modules/ -!dist/ -!build/ -``` - -For eksempel lar denne `.ignore` filen ripgrep søke i `node_modules/`, `dist/` og `build/` kataloger selv om de er oppført i `.gitignore`. diff --git a/packages/web/src/content/docs/nb/troubleshooting.mdx b/packages/web/src/content/docs/nb/troubleshooting.mdx deleted file mode 100644 index 0060084156..0000000000 --- a/packages/web/src/content/docs/nb/troubleshooting.mdx +++ /dev/null @@ -1,225 +0,0 @@ ---- -title: Feilsøking -description: Vanlige problemer og hvordan de kan løses. ---- - -For å feilsøke problemer med OpenCode, start med å sjekke loggene og lokale data den lagrer på disken. - ---- - -## Logger - -Loggfiler skrives til: - -- **macOS/Linux**: `~/.local/share/opencode/log/` -- **Windows**: Trykk `WIN+R` og lim inn `%USERPROFILE%\.local\share\opencode\log` - -Loggfiler navngis med tidsstempler (f.eks. `2025-01-09T123456.log`) og de siste 10 loggfilene beholdes. - -Du kan angi loggnivået med kommandolinjealternativet `--log-level` for å få mer detaljert feilsøkingsinformasjon. For eksempel `opencode --log-level DEBUG`. - ---- - -## Lagring - -OpenCode lagrer øktdata og andre applikasjonsdata på disken på: - -- **macOS/Linux**: `~/.local/share/opencode/` -- **Windows**: Trykk `WIN+R` og lim inn `%USERPROFILE%\.local\share\opencode` - -Denne katalogen inneholder: - -- `auth.json` - Autentiseringsdata som API-nøkler, OAuth-tokens -- `log/` - Applikasjonslogger -- `project/` - Prosjektspesifikke data som økt- og meldingsdata - - Hvis prosjektet er innenfor en Git-repo, lagres det i `.//storage/` - - Hvis det ikke er en Git-repo, lagres det i `./global/storage/` - ---- - -## Skrivebordsapp - -OpenCode Desktop kjører en lokal OpenCode-server (`opencode-cli` sidevognen) i bakgrunnen. De fleste problemene er forårsaket av en plugin som fungerer dårlig, en ødelagt cache eller en dårlig serverinnstilling. - -### Raske sjekker - -- Avslutt og start appen på nytt. -- Hvis appen viser en feilskjerm, klikker du på **Start på nytt** og kopierer feildetaljene. -- Bare macOS: `OpenCode`-meny -> **Last nettvisning på nytt** (hjelper hvis UI er tom/frosset). - ---- - -### Deaktiver plugins - -Hvis skrivebordsappen krasjer ved oppstart, henger eller oppfører seg merkelig, start med å deaktivere plugins. - -#### Sjekk den globale konfigurasjonen - -Åpne den globale konfigurasjonsfilen og se etter en `plugin`-nøkkel. - -- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (eller `~/.config/opencode/opencode.json`) -- **macOS/Linux** (eldre installasjoner): `~/.local/share/opencode/opencode.jsonc` -- **Windows**: Trykk `WIN+R` og lim inn `%USERPROFILE%\.config\opencode\opencode.jsonc` - -Hvis du har konfigurert plugins, deaktiver dem midlertidig ved å fjerne nøkkelen eller sette den til en tom matrise: - -```jsonc -{ - "$schema": "https://opencode.ai/config.json", - "plugin": [], -} -``` - -#### Sjekk plugin-kataloger - -OpenCode kan også laste lokale plugins fra disken. Flytt disse midlertidig ut av veien (eller gi nytt navn til mappen) og start skrivebordsappen på nytt: - -- **Globale plugins** - - **macOS/Linux**: `~/.config/opencode/plugins/` - - **Windows**: Trykk `WIN+R` og lim inn `%USERPROFILE%\.config\opencode\plugins` -- **Prosjektplugins** (bare hvis du bruker konfigurasjon per prosjekt) - - `/.opencode/plugins/` - -Hvis appen begynner å fungere igjen, aktiverer du plugins én om gangen for å finne ut hvilken som forårsaker problemet. - ---- - -### Tøm hurtigbufferen - -Hvis deaktivering av plugins ikke hjelper (eller en plugin-installasjon sitter fast), tøm hurtigbufferen slik at OpenCode kan gjenoppbygge den. - -1. Avslutt OpenCode Desktop helt. -2. Slett hurtigbufferkatalogen: - -- **macOS**: Finder -> `Cmd+Shift+G` -> lim inn `~/.cache/opencode` -- **Linux**: slett `~/.cache/opencode` (eller kjør `rm -rf ~/.cache/opencode`) -- **Windows**: Trykk `WIN+R` og lim inn `%USERPROFILE%\.cache\opencode` - -3. Start OpenCode Desktop på nytt. - ---- - -### Løs problemer med servertilkobling - -OpenCode Desktop kan enten starte sin egen lokale server (standard) eller koble til en server URL du har konfigurert. - -Hvis du ser en **"Tilkobling mislyktes"**-dialogboks (eller appen kommer aldri forbi splash-skjermen), se etter en tilpasset server URL. - -#### Slett skrivebordsappens standardserver-URL - -Fra startskjermen klikker du på servernavnet (med statusprikken) for å åpne servervelgeren. I delen **Standardserver** klikker du på **Slett**. - -#### Fjern `server.port` / `server.hostname` fra konfigurasjonen din - -Hvis `opencode.json(c)` inneholder en `server`-del, fjern den midlertidig og start skrivebordsappen på nytt. - -#### Sjekk miljøvariabler - -Hvis du har `OPENCODE_PORT` satt i miljøet ditt, vil skrivebordsappen prøve å bruke den porten for den lokale serveren. - -- Deaktiver `OPENCODE_PORT` (eller velg en ledig port) og start på nytt. - ---- - -### Linux: Wayland / X11 problemer - -På Linux kan noen Wayland-oppsett forårsake tomme vinduer eller kompositorfeil. - -- Hvis du er på Wayland og appen er tom/krasj, prøv å starte med `OC_ALLOW_WAYLAND=1`. -- Hvis det gjør ting verre, fjern det og prøv å starte under en X11-økt i stedet. - ---- - -### Windows: WebView2 kjøretid - -På Windows krever OpenCode Desktop Microsoft Edge **WebView2 Runtime**. Hvis appen åpnes i et tomt vindu eller ikke starter, installer/oppdater WebView2 og prøv igjen. - ---- - -### Windows: Generelle ytelsesproblemer - -Hvis du opplever treg ytelse, problemer med filtilgang eller terminalproblemer på Windows, kan du prøve å bruke [WSL (Windows Subsystem for Linux)](/docs/windows-wsl). WSL gir et Linux-miljø som fungerer mer sømløst med funksjonene til OpenCode. - ---- - -### Varsler vises ikke - -OpenCode Desktop viser bare systemvarsler når: - -- varsler er aktivert for OpenCode i OS-innstillingene dine, og -- appvinduet er ikke fokusert. - ---- - -### Tilbakestill skrivebordsapplagring (siste utvei) - -Hvis appen ikke starter og du ikke kan slette innstillingene fra UI-et, tilbakestill skrivebordsappens lagrede tilstand. - -1. Avslutt OpenCode Desktop. -2. Finn og slett disse filene (de finnes i OpenCode Desktop-appens datakatalog): - -- `opencode.settings.dat` (stasjonær standardserver URL) -- `opencode.global.dat` og `opencode.workspace.*.dat` (UI tilstand som nylige servere/prosjekter) - ---- - -### Modellen er ikke tilgjengelig - -1. Sjekk at du har autentisert deg med leverandøren -2. Kontroller at modellnavnet i konfigurasjonen er riktig -3. Noen modeller kan kreve spesifikk tilgang eller abonnement - -Hvis du støter på `ProviderModelNotFoundError` refererer du mest sannsynlig feil -til en modell et sted. -Modeller skal refereres slik: `/` - ---- - -### AI_APICallError og leverandørpakkeproblemer - -Hvis du støter på API-anropsfeil, kan dette skyldes utdaterte provider-pakker. OpenCode installerer dynamisk provider-pakker (OpenAI, Anthropic, Google, etc.) etter behov og cacher dem lokalt. - -For å løse problemer med leverandørpakke: - -1. Tøm leverandørens pakkebuffer: - - ```bash - rm -rf ~/.cache/opencode - ``` - - På Windows, trykk `WIN+R` og slett: `%USERPROFILE%\.cache\opencode` - -2. Start OpenCode på nytt for å installere de nyeste provider-pakkene på nytt - -Dette vil tvinge OpenCode til å laste ned de nyeste versjonene av provider-pakkene, som ofte løser kompatibilitetsproblemer med modellparametere og API-endringer. - ---- - -### Kopier/lim inn fungerer ikke på Linux - -Linux-brukere må ha ett av følgende utklippstavle-verktøy installert for at kopier/lim inn-funksjonalitet skal fungere: - -**For X11-systemer:** - -```bash -apt install -y xclip -# or -apt install -y xsel -``` - -**For Wayland-systemer:** - -```bash -apt install -y wl-clipboard -``` - -**For headless-miljøer:** - -```bash -apt install -y xvfb -# and run: -Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & -export DISPLAY=:99.0 -``` - -OpenCode vil oppdage om du bruker Wayland og foretrekker `wl-clipboard`, ellers vil den prøve å finne utklippstavle-verktøy i rekkefølgen: `xclip` og `xsel`. diff --git a/packages/web/src/content/docs/nb/tui.mdx b/packages/web/src/content/docs/nb/tui.mdx deleted file mode 100644 index 485e7d9969..0000000000 --- a/packages/web/src/content/docs/nb/tui.mdx +++ /dev/null @@ -1,429 +0,0 @@ ---- -title: TUI -description: Bruke opencode-terminalbrukergrensesnittet. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode gir et interaktivt terminalgrensesnitt (TUI) for å jobbe med prosjektene dine med en LLM. - -Å kjøre OpenCode starter TUI for gjeldende katalog. - -```bash -opencode -``` - -Eller du kan starte den for en spesifikk arbeidskatalog. - -```bash -opencode /path/to/project -``` - -Når du er i TUI, kan du stille den spørsmål med en prompt. - -```text -Give me a quick summary of the codebase. -``` - ---- - -## Filreferanser - -Du kan referere til filer i meldingene dine ved å bruke `@`. Dette gjør et fuzzy-filsøk i gjeldende arbeidskatalog. - -:::tip -Du kan også bruke `@` til å referere til filer i meldingene dine. -::: - -```text "@packages/functions/src/api/index.ts" -How is auth handled in @packages/functions/src/api/index.ts? -``` - -Innholdet i filen legges automatisk til samtalen. - ---- - -## Bash-kommandoer - -Start en melding med `!` for å kjøre en skallkommando. - -```bash frame="none" -!ls -la -``` - -Utdataene fra kommandoen legges til samtalen som et verktøyresultat. - ---- - -## Kommandoer - -Når du bruker OpenCode TUI, kan du skrive `/` etterfulgt av et kommandonavn for raskt å utføre handlinger. For eksempel: - -```bash frame="none" -/help -``` - -De fleste kommandoer har også tastebinding som bruker `ctrl+x` som leader-tast, der `ctrl+x` er standard leader-tast. [Finn ut mer](/docs/keybinds). - -Her er alle tilgjengelige slash-kommandoer: - ---- - -### connect - -Legg til en leverandør til OpenCode. Lar deg velge fra tilgjengelige leverandører og legge til deres API-nøkler. - -```bash frame="none" -/connect -``` - ---- - -### compact - -Komprimer gjeldende økt. _Alias_: `/summarize` - -```bash frame="none" -/compact -``` - -**Nøkkelbinding:** `ctrl+x c` - ---- - -### details - -Veksle visning av verktøydetaljer. - -```bash frame="none" -/details -``` - -**Nøkkelbinding:** `ctrl+x d` - ---- - -### editor - -Åpne eksternt tekstredigeringsprogram for å skrive meldinger. Bruker redigeringssettet i miljøvariabelen `EDITOR`. [Finn ut mer](#editor-setup). - -```bash frame="none" -/editor -``` - -**Nøkkelbinding:** `ctrl+x e` - ---- - -### exit - -Avslutt OpenCode. _Aliaser_: `/quit`, `/q` - -```bash frame="none" -/exit -``` - -**Nøkkelbinding:** `ctrl+x q` - ---- - -### export - -Eksporter gjeldende samtale til Markdown og åpne i standardredigeringsprogrammet. Bruker redigeringssettet i miljøvariabelen `EDITOR`. [Finn ut mer](#editor-setup). - -```bash frame="none" -/export -``` - -**Nøkkelbinding:** `ctrl+x x` - ---- - -### help - -Vis hjelpedialogen. - -```bash frame="none" -/help -``` - -**Nøkkelbinding:** `ctrl+x h` - ---- - -### init - -Opprett eller oppdater `AGENTS.md`-fil. [Finn ut mer](/docs/rules). - -```bash frame="none" -/init -``` - -**Nøkkelbinding:** `ctrl+x i` - ---- - -### models - -Liste over tilgjengelige modeller. - -```bash frame="none" -/models -``` - -**Nøkkelbinding:** `ctrl+x m` - ---- - -### new - -Start en ny økt. _Alias_: `/clear` - -```bash frame="none" -/new -``` - -**Nøkkelbinding:** `ctrl+x n` - ---- - -### redo - -Gjenta en tidligere angret melding. Kun tilgjengelig etter bruk av `/undo`. - -:::tip -Eventuelle filendringer vil også bli gjenopprettet. -::: - -Internt bruker dette Git til å administrere filendringene. Så ditt prosjekt **må -være et Git-repo**. - -```bash frame="none" -/redo -``` - -**Nøkkelbinding:** `ctrl+x r` - ---- - -### sessions - -List opp og bytt mellom økter. _Aliaser_: `/resume`, `/continue` - -```bash frame="none" -/sessions -``` - -**Nøkkelbinding:** `ctrl+x l` - ---- - -### share - -Del gjeldende økt. [Finn ut mer](/docs/share). - -```bash frame="none" -/share -``` - -**Nøkkelbinding:** `ctrl+x s` - ---- - -### themes - -Liste over tilgjengelige temaer. - -```bash frame="none" -/themes -``` - -**Nøkkelbinding:** `ctrl+x t` - ---- - -### thinking - -Veksle mellom synligheten av tenke-/resonneringsblokker i samtalen. Når den er aktivert, kan du se modellens resonneringsprosess for modeller som støtter utvidet tenkning. - -:::note -Denne kommandoen kontrollerer bare om tenkeblokker **vises** - den aktiverer eller deaktiverer ikke modellens resonneringsmuligheter. For å veksle mellom faktiske resonneringsmuligheter, bruk `ctrl+t` for å bla gjennom modellvarianter. -::: - -```bash frame="none" -/thinking -``` - ---- - -### undo - -Angre siste melding i samtalen. Fjerner den siste brukermeldingen, alle påfølgende svar og eventuelle filendringer. - -:::tip -Eventuelle filendringer vil også bli tilbakestilt. -::: - -Internt bruker dette Git til å administrere filendringene. Så ditt prosjekt **må -være et Git-repo**. - -```bash frame="none" -/undo -``` - -**Nøkkelbinding:** `ctrl+x u` - ---- - -### unshare - -Opphev deling av gjeldende økt. [Finn ut mer](/docs/share#un-sharing). - -```bash frame="none" -/unshare -``` - ---- - -## Oppsett av editor - -Både kommandoene `/editor` og `/export` bruker editoren som er spesifisert i miljøvariabelen `EDITOR`. - - - - ```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" - ``` - - For å gjøre det permanent, legg dette til i shell-profilen din; - `~/.bashrc`, `~/.zshrc` osv. - - - - - ```bash - set EDITOR=notepad - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - set EDITOR=code --wait - ``` - - For å gjøre det permanent, bruk **Systemegenskaper** > **Miljø - Variabler**. - - - - - ```powershell - $env:EDITOR = "notepad" - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - $env:EDITOR = "code --wait" - ``` - - For å gjøre det permanent, legg dette til i PowerShell-profilen din. - - - - -Populære editor-alternativer inkluderer: - -- `code` - Visual Studio Code -- `cursor` - Cursor -- `windsurf` - Windsurf -- `nvim` - Neovim-editor -- `vim` - Vim editor -- `nano` - Nano-editor -- `notepad` - Windows Notisblokk -- `subl` - Sublime Text - -:::note -Noen editorer som VS Code må startes med flagget `--wait`. -::: - -Noen editorer trenger kommandolinjeargumenter for å kjøre i blokkeringsmodus. `--wait`-flagget gjør at editor-prosessen blokkeres til den lukkes. - ---- - -## Konfigurasjon - -Du kan tilpasse TUI-oppførselen gjennom `tui.json` (eller `tui.jsonc`). - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -Dette er atskilt fra `opencode.json`, som konfigurerer server-/kjøretidsoppførsel. - -`keybinds` slås sammen med de innebygde standardverdiene, så du trenger bare å konfigurere snarveiene du vil endre. - -### Alternativer - -- `theme` - Angir UI-temaet ditt. [Finn ut mer](/docs/themes). -- `keybinds` - Tilpasser hurtigtaster. [Finn ut mer](/docs/keybinds). -- `leader_timeout` - Styrer hvor lenge OpenCode venter etter leader key. Standard er `2000`. -- `scroll_acceleration.enabled` - Aktiver rulleakselerasjon i macOS-stil for jevn, naturlig rulling. Når aktivert, øker rullehastigheten med raske rullebevegelser og forblir presis for langsommere bevegelser. **Denne innstillingen har forrang over `scroll_speed` og overstyrer den når den er aktivert.** -- `scroll_speed` - Styrer hvor raskt TUI ruller når du bruker rullekommandoer (minimum: `0.001`, støtter desimalverdier). Standard er `3`. **Merk: Dette ignoreres hvis `scroll_acceleration.enabled` er satt til `true`.** -- `diff_style` - Kontrollerer diff-gjengivelse. `"auto"` tilpasser seg terminalbredden, `"stacked"` viser alltid en enkeltkolonneoppsett. -- `mouse` - Aktiverer eller deaktiverer musefangst i TUI (standard: `true`). Når dette er deaktivert, bevares terminalens opprinnelige oppførsel for musemarkering og rulling. -- `attention` - Konfigurerer skrivebordsvarsler og lyder for TUI. Deaktivert som standard. - -Bruk `OPENCODE_TUI_CONFIG` for å laste en egendefinert TUI-konfigurasjonsbane. - -### Attention - -Attention lar TUI varsle deg når OpenCode venter på et svar, trenger godkjenning av en tillatelse, rapporterer en øktfeil eller har fullført en økt. Aktiver dette med `attention.enabled`; innebygde hendelser spiller av en lyd når de skjer. Skrivebordsvarsler sendes bare når terminalvinduet ikke er i fokus, og brukes ikke for subagent-hendelser. - -- `enabled` - Aktiverer alle varsler og lyder for Attention. Standard er `false`. -- `notifications` - Når Attention er aktivert, lar dette TUI sende skrivebordsvarsler via terminalen. Standard er `true`. -- `sound` - Når Attention er aktivert, tillater dette varslingslyder. Standard er `true`. -- `volume` - Standard volum for varslingslyder fra `0` til `1`. Standard er `0.4`. -- `sound_pack` - Sound pack-ID som skal brukes. Standard er `opencode.default`. -- `sounds` - Angir egendefinerte lydfiler for `default`, `question`, `permission`, `error`, `done` eller `subagent_done`. Stier kan være absolutte, `file://` URL-er eller relative til `tui.json`. - ---- - -## Tilpasning - -Du kan tilpasse ulike aspekter av TUI-visningen ved å bruke kommandopaletten (`ctrl+x h` eller `/help`). Disse innstillingene vedvarer ved omstarter. - ---- - -#### Visning av brukernavn - -Veksle om brukernavnet ditt vises i chat-meldinger. Få tilgang til dette gjennom: - -- Kommandopalett: Søk etter "brukernavn" eller "skjul brukernavn" -- Innstillingen vedvarer automatisk og vil bli husket over TUI økter diff --git a/packages/web/src/content/docs/nb/web.mdx b/packages/web/src/content/docs/nb/web.mdx deleted file mode 100644 index c8cc9d413f..0000000000 --- a/packages/web/src/content/docs/nb/web.mdx +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Web -description: Bruke OpenCode i nettleseren din. ---- - -OpenCode kan kjøres som en nettapplikasjon i nettleseren din, og gir den samme kraftige AI-kodingsopplevelsen uten at du trenger en terminal. - -![OpenCode Web - Ny økt](../../../assets/web/web-homepage-new-session.png) - -## Komme i gang - -Start web-grensesnittet ved å kjøre: - -```bash -opencode web -``` - -Dette starter en lokal server på `127.0.0.1` med en tilfeldig tilgjengelig port og åpner automatisk OpenCode i standard nettleser. - ---- - -## Konfigurasjon - -Du kan konfigurere webserveren ved å bruke kommandolinjeflagg eller i [konfigurasjonsfilen](/docs/config). - -### Port - -Som standard velger OpenCode en tilgjengelig port. Du kan spesifisere en port: - -```bash -opencode web --port 4096 -``` - -### Vertsnavn - -Som standard binder serveren seg til `127.0.0.1` (kun localhost). Slik gjør du OpenCode tilgjengelig på nettverket ditt: - -```bash -opencode web --hostname 0.0.0.0 -``` - ---- - -### Autentisering - -For å beskytte tilgang, angi et passord ved hjelp av miljøvariabelen `OPENCODE_SERVER_PASSWORD`: - -```bash -OPENCODE_SERVER_PASSWORD=secret opencode web -``` - -Brukernavnet er satt til `opencode` som standard, men kan endres med `OPENCODE_SERVER_USERNAME`. - ---- - -## Bruke webgrensesnittet - -Når den er startet, gir nettgrensesnittet tilgang til dine OpenCode-økter. - -### Sesjoner - -Se og administrer øktene dine fra hjemmesiden. Du kan se aktive økter og starte nye. - -![OpenCode Web - Active Session](../../../assets/web/web-homepage-active-session.png) - -### Serverstatus - -Klikk på "Se servere" for å se tilkoblede servere og deres status. - -![OpenCode Web - Se servere](../../../assets/web/web-homepage-see-servers.png) - ---- - -## Koble til en terminal - -Du kan koble en terminal TUI til en kjørende webserver: - -```bash -# Start the web server -opencode web --port 4096 - -# In another terminal, attach the TUI -opencode attach http://localhost:4096 -``` - -Dette lar deg bruke både nettgrensesnittet og terminalen samtidig, og deler samme økter og tilstand. - ---- - -## Konfigurasjonsfil - -Du kan også konfigurere serverinnstillinger i `opencode.json` konfigurasjonsfilen: - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -Kommandolinjeflagg har forrang over konfigurasjonsfilinnstillinger. diff --git a/packages/web/src/content/docs/nb/windows-wsl.mdx b/packages/web/src/content/docs/nb/windows-wsl.mdx deleted file mode 100644 index 7ffc141cdd..0000000000 --- a/packages/web/src/content/docs/nb/windows-wsl.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Windows (WSL) -description: Kjør OpenCode på Windows med WSL for best opplevelse. ---- - -import { Steps } from "@astrojs/starlight/components" - -Selv om OpenCode kan kjøre direkte på Windows, anbefaler vi å bruke [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) for best mulig opplevelse. WSL gir et Linux-miljø som fungerer godt med funksjonene i OpenCode. - -:::tip[Hvorfor WSL?] -WSL gir bedre filsystemytelse, full terminalstøtte og kompatibilitet med utviklingsverktøyene OpenCode er avhengig av. -::: - ---- - -## Oppsett - - - -1. **Installer WSL** - - Hvis du ikke har gjort det ennå, [installer WSL](https://learn.microsoft.com/en-us/windows/wsl/install) med den offisielle guiden fra Microsoft. - -2. **Installer OpenCode i WSL** - - Når WSL er satt opp, åpner du WSL-terminalen og installerer OpenCode med en av [installasjonsmetodene](/docs/). - - ```bash - curl -fsSL https://opencode.ai/install | bash - ``` - -3. **Bruk OpenCode fra WSL** - - Gå til prosjektmappen din (Windows-filer er tilgjengelige via `/mnt/c/`, `/mnt/d/` osv.) og kjør OpenCode. - - ```bash - cd /mnt/c/Users/YourName/project - opencode - ``` - - - ---- - -## Skrivebordsapp + WSL-server - -Hvis du foretrekker OpenCode-skrivebordsappen, men vil kjøre serveren i WSL: - -1. **Start serveren i WSL** med `--hostname 0.0.0.0` for å tillate eksterne tilkoblinger: - - ```bash - opencode serve --hostname 0.0.0.0 --port 4096 - ``` - -2. **Koble skrivebordsappen** til `http://localhost:4096` - -:::note -Hvis `localhost` ikke fungerer i oppsettet ditt, bruk WSL-IP-adressen i stedet (fra WSL: `hostname -I`) og koble til `http://:4096`. -::: - -:::caution -Når du bruker `--hostname 0.0.0.0`, sett `OPENCODE_SERVER_PASSWORD` for å sikre serveren. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0 -``` - -::: - ---- - -## Web-klient + WSL - -For best web-opplevelse på Windows: - -1. **Kjør `opencode web` i WSL-terminalen** i stedet for PowerShell: - - ```bash - opencode web --hostname 0.0.0.0 - ``` - -2. **Åpne i Windows-nettleseren** på `http://localhost:` (OpenCode skriver ut URL-en) - -Når du kjører `opencode web` fra WSL, får du riktig filsystemtilgang og terminalintegrasjon, samtidig som det er tilgjengelig fra Windows-nettleseren din. - ---- - -## Tilgang til Windows-filer - -WSL kan få tilgang til alle Windows-filer via `/mnt/`-katalogen: - -- `C:`-stasjon → `/mnt/c/` -- `D:`-stasjon → `/mnt/d/` -- Og så videre... - -Eksempel: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -For en jevnere opplevelse kan du klone/kopiere repoet ditt inn i WSL-filsystemet (for eksempel under `~/code/`) og kjøre OpenCode der. -::: - ---- - -## Tips - -- Kjør OpenCode i WSL for prosjekter lagret på Windows-stasjoner: filtilgang fungerer smidig -- Bruk [WSL-utvidelsen i VS Code](https://code.visualstudio.com/docs/remote/wsl) sammen med OpenCode for en integrert utviklingsflyt -- OpenCode-konfigurasjon og sesjoner lagres i WSL-miljøet på `~/.local/share/opencode/` diff --git a/packages/web/src/content/docs/nb/zen.mdx b/packages/web/src/content/docs/nb/zen.mdx deleted file mode 100644 index b08ee2e5f1..0000000000 --- a/packages/web/src/content/docs/nb/zen.mdx +++ /dev/null @@ -1,319 +0,0 @@ ---- -title: Zen -description: Utvalgt liste over modeller levert av OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen er en liste over testede og verifiserte modeller levert av OpenCode-teamet. - -Zen fungerer som enhver annen leverandør i OpenCode. Du logger inn på OpenCode Zen og får -API-nøkkelen din. Det er **helt valgfritt**, og du trenger ikke bruke det for å bruke -OpenCode. - ---- - -## Bakgrunn - -Det finnes svært mange modeller der ute, men bare noen få av -disse modellene fungerer godt som kodeagenter. I tillegg er de fleste leverandører -konfigurert svært ulikt, så du får veldig ulik ytelse og kvalitet. - -:::tip -Vi testet en utvalgt gruppe modeller og leverandører som fungerer godt med OpenCode. -::: - -Så hvis du bruker en modell gjennom noe som OpenRouter, kan du aldri være -sikker på om du får den beste versjonen av modellen du vil ha. - -For å løse dette gjorde vi et par ting: - -1. Vi testet en utvalgt gruppe modeller og snakket med teamene deres om hvordan de - best kunne kjøres. -2. Deretter samarbeidet vi med noen få leverandører for å sikre at disse ble levert - riktig. -3. Til slutt benchmarket vi kombinasjonen av modell/leverandør og laget - en liste vi føler oss trygge på å anbefale. - -OpenCode Zen er en AI gateway som gir deg tilgang til disse modellene. - ---- - -## Slik fungerer det - -OpenCode Zen fungerer som enhver annen leverandør i OpenCode. - -1. Du logger inn på **OpenCode Zen**, legger til - faktureringsdetaljene dine og kopierer API-nøkkelen din. -2. Du kjører kommandoen `/connect` i TUI, velger OpenCode Zen og limer inn API-nøkkelen din. -3. Kjør `/models` i TUI for å se listen over modeller vi anbefaler. - -Du blir belastet per forespørsel, og du kan legge til kreditt på kontoen din. - ---- - -## Endepunkter - -Du kan også få tilgang til modellene våre gjennom følgende API-endepunkter. - -| Modell | Modell-ID | Endepunkt | AI SDK-pakke | -| ---------------------- | ---------------------- | ---------------------------------------------------- | --------------------------- | -| 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -[modell-id](/docs/config/#models) i OpenCode-konfigurasjonen din -bruker formatet `opencode/`. For eksempel, for GPT 5.5, ville du -brukt `opencode/gpt-5.5` i konfigurasjonen din. - ---- - -### Modeller - -Du kan hente hele listen over tilgjengelige modeller og metadataene deres fra: - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## Priser - -Vi støtter en pay-as-you-go-modell. Nedenfor er prisene **per 1M tokens**. - -| Modell | Inndata | Utdata | Bufret lesing | Bufret skriving | -| --------------------------------- | ------- | ------- | ------------- | --------------- | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -Du vil kanskje legge merke til _Claude Haiku 3.5_ i brukshistorikken din. Dette er en [lavprismodell](/docs/config/#models) som brukes til å generere titlene på øktene dine. - -:::note -Kredittkortgebyrer videreføres til kostpris (4.4% + $0.30 per transaction); vi tar ikke betalt noe utover det. -::: - -Gratis-modellene: - -- DeepSeek V4 Flash Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. -- MiMo-V2.5 Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. -- North Mini Code Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. -- Nemotron 3 Ultra Free er tilgjengelig på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. -- Big Pickle er en stealth-modell som er gratis på OpenCode i en begrenset periode. Teamet bruker denne tiden til å samle inn tilbakemeldinger og forbedre modellen. - -Kontakt oss hvis du har spørsmål. - ---- - -### Automatisk påfyll - -Hvis saldoen din går under $5, vil Zen automatisk fylle på $20. - -Du kan endre beløpet for automatisk påfyll. Du kan også deaktivere automatisk påfyll helt. - ---- - -### Månedlige grenser - -Du kan også sette en månedlig bruksgrense for hele arbeidsområdet og for hvert -medlem av teamet ditt. - -La oss for eksempel si at du setter en månedlig bruksgrense på $20. Da vil Zen ikke bruke -mer enn $20 i løpet av en måned. Men hvis du har automatisk påfyll aktivert, kan Zen ende opp -med å belaste deg mer enn $20 hvis saldoen din går under $5. - ---- - -### Utfasede modeller - -| Modell | Utfasingsdato | -| ------------------ | ----------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## Personvern - -Alle modellene våre hostes i US. Leverandørene våre følger en policy for zero-retention og bruker ikke dataene dine til modelltrening, med følgende unntak: - -- Big Pickle: I gratisperioden kan innsamlede data brukes til å forbedre modellen. -- DeepSeek V4 Flash Free: I gratisperioden kan innsamlede data brukes til å forbedre modellen. -- MiMo-V2.5 Free: I gratisperioden kan innsamlede data brukes til å forbedre modellen. -- North Mini Code Free: I gratisperioden kan innsamlede data bli oppbevart og brukt til å forbedre modellen. Ikke send inn personopplysninger eller konfidensielle opplysninger. Se våre [Vilkår for bruk](https://cohere.com/terms-of-use) og vår [Personvernerklæring](https://cohere.com/privacy). -- Nemotron 3 Ultra Free (gratis NVIDIA-endepunkter): Kun for prøvebruk — ikke send inn personopplysninger eller konfidensielle data. Bruken din logges av sikkerhetshensyn og for å forbedre NVIDIAs produkter og tjenester. Sesjonsdataene som logges for forbedringsformål, er ikke knyttet til identiteten din eller noen vedvarende identifikator. For mer informasjon om vår databehandlingspraksis, se vår [personvernerklæring](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ved å samhandle med dette endepunktet samtykker du til at vi samler inn, registrerer og bruker slik informasjon, samt til [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). -- OpenAI APIs: Forespørsler lagres i 30 dager i samsvar med [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). -- Anthropic APIs: Forespørsler lagres i 30 dager i samsvar med [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). - ---- - -## For team - -Zen fungerer også svært godt for team. Du kan invitere teammedlemmer, tildele roller, kuratere -modellene teamet ditt bruker og mer. - -:::note -Arbeidsområder er for øyeblikket gratis for team som en del av betaen. -::: - -Administrasjon av arbeidsområdet ditt er for øyeblikket gratis for team som en del av betaen. Vi kommer til -å dele flere detaljer om prising snart. - ---- - -### Roller - -Du kan invitere teammedlemmer til arbeidsområdet ditt og tildele roller: - -- **Admin**: Administrer modeller, medlemmer, API Nøkler og fakturering -- **Member**: Administrer bare egne API Nøkler - -Admins kan også sette månedlige forbruksgrenser for hvert medlem for å holde kostnadene under kontroll. - ---- - -### Modelltilgang - -Admins kan aktivere eller deaktivere bestemte modeller for arbeidsområdet. Forespørsler til en deaktivert modell vil returnere en feil. - -Dette er nyttig i tilfeller der du vil deaktivere bruken av en modell som -samler inn data. - ---- - -### Ta med egen nøkkel - -Du kan bruke dine egne OpenAI- eller Anthropic API Nøkler samtidig som du fortsatt har tilgang til andre modeller i Zen. - -Når du bruker egne nøkler, faktureres tokens direkte av leverandøren, ikke av Zen. - -For eksempel kan organisasjonen din allerede ha en nøkkel for OpenAI eller Anthropic, -og du vil bruke den i stedet for den Zen tilbyr. - ---- - -## Mål - -Vi opprettet OpenCode Zen for å: - -1. **Benchmarke** de beste modellene/leverandørene for kodeagenter. -2. Ha tilgang til alternativene med **høyest kvalitet** og ikke nedgradere ytelsen eller rute til billigere leverandører. -3. Videreføre eventuelle **prisreduksjoner** ved å selge til kostpris, slik at det eneste påslaget er for å dekke behandlingsgebyrene våre. -4. Ha **ingen lock-in** ved å la deg bruke det med enhver annen kodeagent. Og alltid la deg bruke enhver annen leverandør med OpenCode også. diff --git a/packages/web/src/content/docs/pl/acp.mdx b/packages/web/src/content/docs/pl/acp.mdx deleted file mode 100644 index 3b3c4720ec..0000000000 --- a/packages/web/src/content/docs/pl/acp.mdx +++ /dev/null @@ -1,158 +0,0 @@ ---- -title: ACP -description: Używanie OpenCode z protokołem Agent Client Protocol (ACP). ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode obsługuje [Agent Client Protocol](https://agentclientprotocol.com) (ACP), który umożliwia korzystanie z OpenCode bezpośrednio w edytorach i środowiskach IDE. - -:::tip -Listę edytorów i narzędzi obsługujących ACP znajdziesz w [raporcie postępu ACP](https://zed.dev/blog/acp-progress-report#available-now). -::: - -ACP to otwarty standard, który ujednolica komunikację między edytorami kodu a agentami kodującymi AI. - ---- - -## Konfiguracja - -Aby używać OpenCode przez ACP, skonfiguruj swój edytor tak, aby uruchamiał polecenie `opencode acp`. - -Uruchamia to OpenCode jako podproces zgodny z ACP, który komunikuje się z edytorem za pomocą JSON-RPC przez stdio. - -Poniżej znajdują się przykłady dla edytorów obsługujących ACP. - ---- - -### Zed - -Dodaj do konfiguracji [Zed](https://zed.dev) (`~/.config/zed/settings.json`): - -```json title="~/.config/zed/settings.json" -{ - "agent_servers": { - "OpenCode": { - "command": "opencode", - "args": ["acp"] - } - } -} -``` - -Aby użyć, wybierz `agent: new thread` w **Palecie poleceń** (Command Palette). - -Możesz także przypisać skrót klawiszowy, edytując `keymap.json`: - -```json title="keymap.json" -[ - { - "bindings": { - "cmd-alt-o": [ - "agent::NewExternalAgentThread", - { - "agent": { - "custom": { - "name": "OpenCode", - "command": { - "command": "opencode", - "args": ["acp"] - } - } - } - } - ] - } - } -] -``` - ---- - -### JetBrains IDE - -Dodaj do swojego [JetBrains IDE](https://www.jetbrains.com/) plik `acp.json` zgodnie z [dokumentacją](https://www.jetbrains.com/help/ai-assistant/acp.html): - -```json title="acp.json" -{ - "agent_servers": { - "OpenCode": { - "command": "/absolute/path/bin/opencode", - "args": ["acp"] - } - } -} -``` - -Następnie wybierz „OpenCode” w selektorze agentów AI Chat. - ---- - -### Avante.nvim - -Dodaj do konfiguracji [Avante.nvim](https://github.com/yetone/avante.nvim): - -```lua -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" } - } - } -} -``` - -Jeśli potrzebujesz przekazać klucz API: - -```lua {6-8} -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" }, - env = { - OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY") - } - } - } -} -``` - ---- - -### CodeCompanion.nvim - -Aby używać OpenCode jako agenta ACP w [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), dodaj następującą konfigurację do Neovim: - -```lua -require("codecompanion").setup({ - interactions = { - chat = { - adapter = { - name = "opencode", - model = "claude-sonnet-4", - }, - }, - }, -}) -``` - -Ta konfiguracja sprawia, że CodeCompanion używa OpenCode jako agenta ACP do czatu. - -Jeśli wymagany jest `OPENCODE_API_KEY`, zapoznaj się z sekcją [Konfigurowanie adapterów: Zmienne środowiskowe](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) w dokumentacji CodeCompanion.nvim, aby uzyskać szczegółowe informacje. - -## Wsparcie - -OpenCode działa przez ACP tak samo, jak w terminalu. Obsługiwane są wszystkie główne funkcje: - -:::note -Niektóre polecenia z ukośnikiem, takie jak `/undo` i `/redo`, nie są obecnie obsługiwane przez ACP. -::: - -- Narzędzia wbudowane (operacje na plikach, terminal itp.) -- Niestandardowe narzędzia i polecenia z ukośnikiem -- Serwery MCP zdefiniowane w konfiguracji OpenCode -- Zasady projektu z `AGENTS.md` -- Niestandardowe formatery i lintery -- Agenci systemowi i uprawnienia diff --git a/packages/web/src/content/docs/pl/agents.mdx b/packages/web/src/content/docs/pl/agents.mdx deleted file mode 100644 index 8cf9561e16..0000000000 --- a/packages/web/src/content/docs/pl/agents.mdx +++ /dev/null @@ -1,754 +0,0 @@ ---- -title: Agenci -description: Konfiguruj i używaj potężnych agentów. ---- - -Agenci to asystenci AI, których można przypisać do ról i workflow. Umożliwiają tworzenie ukierunkowanych narzędzi z niestandardowymi promptami, modelami i dostępem do narzędzi. - -:::tip -Użyj agenta Plan, aby uzyskać dostęp do kodu i przeglądać informacje bez wprowadzania zmian w kodzie. -::: - -Możesz przełączać się między agentami podczas sesji lub wywoływać ich za pomocą wzmianki `@`. - ---- - -## Typy - -W OpenCode obowiązuje zasada dwóch typów agentów: Primary (Główni) i Subagents (Subagenci). - ---- - -### Primary Agents (Agenci główni) - -Główni asystenci, z którymi prowadzisz interakcję. Możesz przełączać się między nimi za pomocą klawisza **Tab** lub skrótu klawiszowego `switch_agent`. Ci agenci obsługują główną pętlę. Dostęp do narzędzi jest konfigurowany za pomocą uprawnień — na przykład w agencie Build wszystkie narzędzia są dostępne, a w agencie Plan są ograniczone. - -:::tip -Użyj klawisza **Tab**, aby przełączać się między agentami podczas sesji. -::: - -OpenCode zawiera dwa wbudowane agenty główne: **Build** i **Plan**. Przyjrzymy się im poniżej. - ---- - -### Subagents (Subagenci) - -Subagenci to asystenci pomocniczy, których mogą przywoływać agenci główni w celu wykonania konkretnych zadań. Możesz także wywoływać ich ręcznie, **wzmiankując ich (@)** w swoich wiadomościach. - -OpenCode ma trzech wbudowanych subagentów: **General**, **Explore** i **Scout**. Przyjrzymy się im poniżej. - ---- - -## Wbudowane - -OpenCode ma dwa wbudowane agenty główne i trzech wbudowanych subagentów. - ---- - -### Build - -_Mode_: `primary` - -Build to **domyślny** agent ogólnego przeznaczenia z pełnym zestawem narzędzi. Jest to standardowy agent do prac programistycznych, który ma dostęp do operacji na plikach i poleceń systemowych. - ---- - -### Plan - -_Mode_: `primary` - -Dedykowany agent do analizy. Używa zestawu narzędzi tylko do odczytu, aby zmniejszyć ryzyko i zapobiec niezamierzonym zmianom. -Domyślnie uprawnienia są ustawione na `ask` dla: - -- `file edits`: Wszystkie zapisy, patche i edycje -- `bash`: Wszystkie polecenia bash - -Ten agent jest zalecany, gdy chcesz, aby LLM zapoznał się z kodem, stworzył plan lub odpowiedział na pytania bez ryzyka modyfikacji bazy kodu. - ---- - -### General - -_Mode_: `subagent` - -Rozwiązuje złożone zadania wieloetapowe. Pełny dostęp do narzędzi (z możliwością modyfikacji plików), dzięki czemu może w razie potrzeby wprowadzać zmiany w plikach. Używany przez agenta nadrzędnego do delegowania jednostek pracy. - ---- - -### Explore - -_Mode_: `subagent` - -Szybki agent tylko do odczytu do eksploracji baz kodu. Nie może modyfikować plików. Używany, gdy chcesz szybko znaleźć pliki według wzorców, wyszukać w kodzie słowa kluczowe lub uzyskać odpowiedzi na pytania dotyczące bazy kodu. - ---- - -### Scout - -_Mode_: `subagent` - -Agent tylko do odczytu do pracy z zewnętrzną dokumentacją i badaniem zależności. Używaj go, gdy chcesz sklonować repozytorium zależności do zarządzanej pamięci podręcznej OpenCode, przejrzeć kod źródłowy biblioteki albo porównać lokalny kod z implementacjami upstream bez modyfikowania swojego workspace. - ---- - -### Compaction - -_Mode_: `primary` - -Ukryty agent systemowy, który kompresuje kontekst w zwięzłe podsumowanie. Działa automatycznie i nie jest widoczny w interfejsie użytkownika. - ---- - -### Title - -_Mode_: `primary` - -Ukryty agent systemowy, który generuje krótki tytuł sesji. Działa automatycznie i nie jest widoczny w interfejsie użytkownika. - ---- - -### Summary - -_Mode_: `primary` - -Ukryty agent systemowy, który generuje podsumowanie sesji. Działa automatycznie i nie jest widoczny w interfejsie użytkownika. - ---- - -## Użycie - -1. W przypadku agentów głównych użyj klawisza **Tab**, aby przełączać się między nimi podczas sesji. Można to również zrobić za pomocą skrótu klawiszowego `switch_agent`. - -2. Subagentów można wywoływać: - - **Automatycznie** przez głównych agentów do specjalistycznych zadań na podstawie ich opisów. - - Ręcznie, **wzmiankując (@)** subagenta w swoich wiadomościach. Na przykład: - - ```txt frame="none" - @explore help me search for this function - ``` - -3. **Nawigacja pomiędzy sesjami**: Kiedy sesja ma sesje podrzędne, możesz nawigować pomiędzy sesją nadrzędną a sesjami podrzędnymi za pomocą: - - **\+Prawo** (lub skonfigurowanego klawisza `session_child_cycle`), aby przełączać się w dół: rodzic → dziecko 1 → dziecko 2 → ... → rodzic - - **\+Lewo** (lub skonfigurowanego klawisza `session_child_cycle_reverse`), aby przełączać się w górę: rodzic ← dziecko 1 ← dziecko 2 ← ... ← rodzic - - Umożliwia to płynne przełączanie się między główną rozmową a pracą specjalistyczną wykonywaną przez subagentów. - ---- - -## Konfiguracja - -Możesz tworzyć własnych agentów lub dostosowywać istniejących. Agentów można definiować na dwa sposoby: - ---- - -### JSON - -Skonfiguruj agenta w pliku `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 - -Możesz także definiować agentów za pomocą plików markdown. Przechowuj je w: - -- Globalnie: `~/.config/opencode/agents/` -- W projekcie: `.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. -``` - -Nazwa pliku markdown staje się nazwą agenta. Na przykład `review.md` tworzy agenta `review`. - ---- - -## Opcje - -Przyjrzyjmy się szczegółowo opcjom konfiguracji. - ---- - -### Description (Opis) - -Użyj `description`, aby krótko opisać, co robi agent i kiedy go używać. - -```json title="opencode.json" -{ - "agent": { - "review": { - "description": "Reviews code for best practices and potential issues" - } - } -} -``` - -Jest to **wymagana** opcja konfiguracji. - ---- - -### Temperature (Temperatura) - -Kontroluj losowość i kreatywność odpowiedzi LLM za pomocą konfiguracji `temperature`. - -Niższe wartości sprawiają, że odpowiedzi są bardziej skupione i deterministyczne, podczas gdy wyższe wartości wprowadzają więcej różnorodności i kreatywności. - -```json title="opencode.json" -{ - "agent": { - "plan": { - "temperature": 0.1 - }, - "creative": { - "temperature": 0.8 - } - } -} -``` - -Wartość temperatury zwykle waha się od 0.0 do 1.0: - -- **0.0-0.2**: Bardzo skoncentrowane i deterministyczne odpowiedzi, idealne do analizy kodu i debugowania -- **0.3-0.5**: Zrównoważone odpowiedzi, dobre do ogólnych zadań programistycznych -- **0.6-1.0**: Bardziej kreatywne i zróżnicowane odpowiedzi, przydatne podczas burzy mózgów i eksploracji - -```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}" - } - } -} -``` - -Jeśli nie zostanie skonfigurowana, OpenCode używa wartości domyślnej dla danego modelu; 0 dla modeli rozumowania (reasoning models), 0.55 dla modeli Qwen. - ---- - -### Steps (Kroki) - -Kontroluj maksymalną liczbę iteracji, jaką agent może wykonać, zanim poprosi o interwencję użytkownika. Pomaga to kontrolować koszty i zapobiegać pętlom. - -Jeśli ta opcja nie zostanie skonfigurowana, agent będzie kontynuował iterację, dopóki model nie zakończy zadania lub użytkownik nie przerwie działania. - -```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 - } - } -} -``` - -Po osiągnięciu limitu agent otrzymuje specjalny monit systemowy nakazujący podsumowanie swojej pracy i zarekomendowanie kolejnych kroków. - -:::caution -Starsze pole `maxSteps` jest przestarzałe. Zamiast tego użyj `steps`. -::: - ---- - -### Disabled (Wyłączony) - -Ustaw na `true`, aby wyłączyć agenta. - -```json title="opencode.json" -{ - "agent": { - "review": { - "disable": true - } - } -} -``` - ---- - -### Prompt (Monit) - -Podaj niestandardowy prompt systemowy dla tego agenta za pomocą konfiguracji `prompt`. Prompt powinien zawierać instrukcje dotyczące celu i zachowania agenta. - -```json title="opencode.json" -{ - "agent": { - "review": { - "prompt": "{file:./prompts/code-review.txt}" - } - } -} -``` - -Ścieżka jest względna do miejsca, w którym znajduje się plik konfiguracyjny. Działa to zarówno w przypadku globalnej konfiguracji OpenCode, jak i konfiguracji specyficznej dla projektu. - ---- - -### Model - -Użyj `model`, aby określić model dla tego agenta. Przydatne do używania różnych modeli do różnych zadań. Na przykład użycie modelu rozumowania do planowania, ale szybszego modelu do edycji. - -:::tip -Jeśli model nie zostanie określony, agenci główni używają [modelu skonfigurowanego globalnie](/docs/config#models), a agenci podrzędni używają modelu agenta, który ich wywołał. -::: - -```json title="opencode.json" -{ - "agent": { - "plan": { - "model": "anthropic/claude-haiku-4-20250514" - } - } -} -``` - -Identyfikator modelu jest taki sam, jak w konfiguracji OpenCode w `provider/model-id`. Na przykład, [OpenCode Zen](/docs/zen), użyj `opencode/gpt-5.1-codex` dla GPT 5.1 Codex. - ---- - -### Tools (Narzędzia) - -Kontroluj, które narzędzia są dostępne dla tego agenta, za pomocą konfiguracji `tools`. Możesz włączyć lub wyłączyć określone narzędzia, ustawiając je na `true` lub `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 -Konfiguracja specyficzna dla agenta nadpisuje konfigurację globalną. -::: - -Możesz także używać symboli wieloznacznych (wildcards), aby kontrolować wiele narzędzi jednocześnie. Na przykład, aby wyłączyć wszystkie narzędzia z serwera MCP: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "readonly": { - "tools": { - "mymcp_*": false, - "write": false, - "edit": false - } - } - } -} -``` - -[Dowiedz się więcej o narzędziach](/docs/tools). - ---- - -### Permissions (Uprawnienia) - -Możesz skonfigurować uprawnienia dla potencjalnie wrażliwych działań wykonywanych przez agenta. Obecnie obsługiwane dla narzędzi `edit`, `bash` i `webfetch`: - -- `"ask"` — Pytaj o zatwierdzenie przed użyciem narzędzia -- `"allow"` — Zezwalaj na użycie bez zatwierdzenia -- `"deny"` — Zabroń użycia narzędzia - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - } -} -``` - -Możesz nadpisać to dla każdego agenta. - -```json title="opencode.json" {3-5,8-10} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - }, - "agent": { - "build": { - "permission": { - "edit": "ask" - } - } - } -} -``` - -Można to również ustawić w agentach 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. -``` - -Możesz to skonfigurować szczegółowo dla poleceń bash. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git push": "ask", - "grep *": "allow" - } - } - } - } -} -``` - -Można to połączyć z globalnym symbolem wieloznacznym. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git *": "ask" - } - } - } - } -} -``` - -Możesz także użyć symbolu wieloznacznego `*`, aby zarządzać wszystkimi innymi poleceniami. -Najbardziej szczegółowa reguła ma pierwszeństwo, symbol wieloznaczny `*` jest sprawdzany na końcu. - -```json title="opencode.json" {8} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "*": "ask", - "git status *": "allow" - } - } - } - } -} -``` - -[Dowiedz się więcej o uprawnieniach](/docs/permissions). - ---- - -### Mode (Tryb) - -Kontroluj tryb agenta za pomocą konfiguracji `mode`. Opcja `mode` określa, w jaki sposób agent może być używany. - -```json title="opencode.json" -{ - "agent": { - "review": { - "mode": "subagent" - } - } -} -``` - -Opcję `mode` można ustawić na `primary`, `subagent` lub `all`. Jeśli nie podano `mode`, domyślnie jest to `all`. - ---- - -### Hidden (Ukryty) - -Ukryj subagenta w menu autouzupełniania `@` za pomocą `hidden: true`. Przydatne w przypadku subagentów narzędziowych, którzy powinni być wywoływani tylko programowo przez innych agentów, a nie bezpośrednio przez użytkownika. - -```json title="opencode.json" -{ - "agent": { - "internal-helper": { - "mode": "subagent", - "hidden": true - } - } -} -``` - -Wpływa to tylko na widoczność w menu autouzupełniania. Model nadal może wywoływać ukrytych agentów za pomocą narzędzia zadania, jeśli ma do nich dostęp. - -:::note -Dotyczy tylko agentów z `mode: subagent`. -::: - ---- - -### Task Permissions (Uprawnienia zadań) - -Kontroluj, których subagentów może wywołać ten agent za pomocą narzędzia zadania, używając `permission.task`. Używa wzorców glob do elastycznego dopasowywania. - -```json title="opencode.json" -{ - "agent": { - "orchestrator": { - "mode": "primary", - "permission": { - "task": { - "*": "deny", - "orchestrator-*": "allow", - "code-reviewer": "ask" - } - } - } - } -} -``` - -Po ustawieniu wartości `deny` subagent zostanie usunięty z definicji narzędzia Zadania, więc model nie będzie nawet wiedział o jego istnieniu. - -:::tip -Reguły są oceniane w kolejności i **wygrywa ostatnia pasująca reguła**. W powyższym przykładzie `orchestrator-planner` pasuje zarówno do `*` (odmowa), jak i `orchestrator-*` (zezwolenie), ale ponieważ `orchestrator-*` występuje po `*`, wynikiem jest `allow`. -::: - -:::tip -Zawsze możesz wywołać subagenta ręcznie, wspominając go bezpośrednio (`@`), nawet jeśli obecny agent ma uprawnienia ustawione na `deny`. -::: - ---- - -### Color (Kolor) - -Dostosuj wygląd agenta w interfejsie użytkownika za pomocą opcji `color`. Wpływa to na ikonę i obramowanie agenta w interfejsie. - -Użyj kodu hex (np. `#FF5733`) lub nazwy koloru motywu: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`. - -```json title="opencode.json" -{ - "agent": { - "creative": { - "color": "#ff6b6b" - }, - "code-reviewer": { - "color": "accent" - } - } -} -``` - ---- - -### Top P - -Kontroluj różnorodność odpowiedzi za pomocą opcji `top_p`. Alternatywa dla temperatury w celu kontrolowania losowości. - -```json title="opencode.json" -{ - "agent": { - "brainstorm": { - "top_p": 0.9 - } - } -} -``` - -Wartość waha się od 0.0 do 1.0. Niższe wartości są bardziej skoncentrowane, wyższe wartości są bardziej zróżnicowane. - ---- - -### Passthrough (Przekazywanie) - -Wszelkie inne konfiguracje w agentach są **przekazywane bezpośrednio** do dostawcy modelu. Pozwala to na korzystanie z funkcji i parametrów specyficznych dla dostawcy. - -Na przykład, używając modelu rozumowania OpenAI, możesz kontrolować wysiłek rozumowania: - -```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" - } - } -} -``` - -Te dodatkowe właściwości zależą od modelu i dostawcy. Sprawdź dokumentację swojego dostawcy pod kątem dostępnych parametrów. - -:::tip -Uruchom `opencode models`, aby zobaczyć dostępne modele. -::: - ---- - -## Tworzenie agentów - -Możesz stworzyć nowych agentów interaktywnie za pomocą polecenia: - -```bash -opencode agent create -``` - -Poprowadzi Cię to przez proces: - -1. Pytanie o miejsce zapisu agenta (globalnie lub dla projektu). -2. Opis tego, co agent powinien robić. -3. Wygenerowanie odpowiedniego promptu systemowego i identyfikatora. -4. Wybór narzędzi, do których agent powinien mieć dostęp. -5. Zapisanie pliku markdown z konfiguracją agenta. - ---- - -## Przypadki użycia - -Oto kilka typowych zastosowań różnych agentów: - -- **Agent programista**: Pełne prace programistyczne z dostępem do wszystkich narzędzi. -- **Agent Plan**: Analiza i planowanie bez ryzyka modyfikacji kodu. -- **Agent recenzujący**: Przegląd kodu z dostępem do odczytu plików i narzędzi dokumentacyjnych. -- **Agent debugujący**: Koncentruje się na rozwiązywaniu problemów z dostępem do narzędzi bash i odczytu plików. -- **Agent Documentation**: Tworzenie i utrzymywanie dokumentacji z dostępem do operacji na plikach, ale bez poleceń systemowych. - ---- - -## Przykłady - -Oto kilka przykładowych agentów, którzy mogą być przydatni. - -:::tip -Masz agenta, którym warto się podzielić? [Prześlij PR](https://github.com/anomalyco/opencode). -::: - ---- - -### Agent Documentation - -```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 -``` - ---- - -### Security Auditor - -```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 -``` diff --git a/packages/web/src/content/docs/pl/cli.mdx b/packages/web/src/content/docs/pl/cli.mdx deleted file mode 100644 index eee6d3e162..0000000000 --- a/packages/web/src/content/docs/pl/cli.mdx +++ /dev/null @@ -1,617 +0,0 @@ ---- -title: CLI -description: Opcje i polecenia wiersza poleceń OpenCode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -CLI OpenCode domyślnie uruchamia [TUI](/docs/tui), gdy wywołasz je bez argumentów. - -```bash -opencode -``` - -CLI obsługuje też polecenia opisane na tej stronie, więc możesz używać OpenCode programowo. - -```bash -opencode run "Explain how closures work in JavaScript" -``` - ---- - -### tui - -Uruchamia interfejs terminalowy (TUI) OpenCode. - -```bash -opencode [project] -``` - -#### Flagi - -| Flaga | Skrót | Opis | -| ---------------------------------------- | ----- | ----------------------------------------------------------------------- | -| {"--continue"} | `-c` | Kontynuuj ostatnią sesję | -| {"--session"} | `-s` | Identyfikator sesji do kontynuowania | -| {"--fork"} | | Sklonuj sesję podczas kontynuacji (użyj z `--continue` lub `--session`) | -| {"--prompt"} | | Monit do użycia | -| {"--model"} | `-m` | Model do użycia w formacie dostawca/model | -| {"--agent"} | | Agent do użycia | -| {"--port"} | | Port do nasłuchiwania | -| {"--hostname"} | | Nazwa hosta, do której należy się powiązać | - ---- - -## Polecenia - -Interfejs CLI OpenCode zawiera także dodatkowe polecenia. - ---- - -### agent - -Zarządzaj agentami OpenCode. - -```bash -opencode agent [command] -``` - ---- - -### attach - -Dołącz terminal do już działającego serwera backendu OpenCode uruchomionego za pomocą `serve` lub `web`. - -```bash -opencode attach [url] -``` - -Pozwala to połączyć TUI ze zdalnym backendem OpenCode. Na przykład: - -```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 -``` - -#### Flagi - -| Flaga | Skrót | Opis | -| ---------------------------------------- | ----- | ----------------------------------------------------------------------------------------------------- | -| {"--dir"} | | Katalog roboczy, w którym uruchomić TUI | -| {"--continue"} | `-c` | Kontynuuj ostatnią sesję | -| {"--session"} | `-s` | Identyfikator sesji do kontynuowania | -| {"--fork"} | | Rozgałęź sesję podczas kontynuowania (użyj z `--continue` lub `--session`) | -| {"--password"} | `-p` | Hasło uwierzytelniania podstawowego (domyślnie `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Nazwa użytkownika uwierzytelniania podstawowego (domyślnie `OPENCODE_SERVER_USERNAME` lub `opencode`) | - ---- - -#### create - -Utwórz nowego agenta z niestandardową konfiguracją. - -```bash -opencode agent create -``` - -To polecenie poprowadzi Cię przez proces tworzenia nowego agenta z niestandardowym promptem systemowym i konfiguracją narzędzi. - ---- - -#### list - -Wyświetl listę wszystkich agentów. - -```bash -opencode agent list -``` - ---- - -### auth - -Zarządzaj danymi uwierzytelniającymi i logowaniem dla dostawców. - -```bash -opencode auth [command] -``` - ---- - -#### login - -OpenCode integruje się z wieloma dostawcami. Możesz użyć `opencode auth login`, aby skonfigurować klucz API dla dowolnego obsługiwanego dostawcy. Klucze są bezpiecznie przechowywane w `~/.local/share/opencode/auth.json`. - -```bash -opencode auth login -``` - -Podczas uruchamiania OpenCode ładuje dostawców z pliku poświadczeń, a także ze zmiennych środowiskowych lub pliku `.env` w Twoim projekcie. - ---- - -#### list - -Wyświetl listę wszystkich uwierzytelnionych dostawców przechowywanych w pliku poświadczeń. - -```bash -opencode auth list -``` - -Lub skrócona wersja: - -```bash -opencode auth ls -``` - ---- - -#### logout - -Wyloguj się z dostawcy, usuwając go z pliku poświadczeń. - -```bash -opencode auth logout -``` - ---- - -### github - -Zarządzaj agentem GitHub w celu automatyzacji repozytorium. - -```bash -opencode github [command] -``` - ---- - -#### install - -Zainstaluj agenta GitHub w swoim repozytorium. - -```bash -opencode github install -``` - -Spowoduje to utworzenie pliku workflow GitHub Actions i poprowadzi Cię przez proces konfiguracji. [Dowiedz się więcej](/docs/github). - ---- - -#### run - -Uruchom agenta na GitHubie. Zwykle używane w GitHub Actions. - -```bash -opencode github run -``` - -##### Flagi - -| Flaga | Opis | -| ------------------------------------- | ---------------------------------------- | -| {"--event"} | Zdarzenie GitHub, które wyzwoliło agenta | -| {"--token"} | Osobisty token dostępu GitHub | - ---- - -### mcp - -Zarządzaj serwerami Model Context Protocol (MCP). - -```bash -opencode mcp [command] -``` - ---- - -#### add - -Dodaj serwer MCP do swojej konfiguracji. - -```bash -opencode mcp add -``` - -To polecenie poprowadzi Cię przez proces dodawania lokalnego lub zdalnego serwera MCP. - ---- - -#### list - -Wyświetl listę wszystkich skonfigurowanych serwerów MCP i ich status. - -```bash -opencode mcp list -``` - -Lub skrócona wersja: - -```bash -opencode mcp ls -``` - ---- - -#### auth - -Uwierzytelnij się w serwerze MCP z włączoną funkcją OAuth. - -```bash -opencode mcp auth [name] -``` - -Jeśli nie podasz nazwy serwera, zostaniesz poproszony o wybranie jednego z serwerów wymagających uwierzytelnienia. - -Możesz także wyświetlić listę serwerów obsługujących OAuth i ich status uwierzytelnienia. - -```bash -opencode mcp auth list -``` - -Lub skrócona wersja: - -```bash -opencode mcp auth ls -``` - ---- - -#### logout - -Usuń tokeny OAuth dla serwera MCP. - -```bash -opencode mcp logout [name] -``` - ---- - -#### debug - -Debuguj problemy z połączeniem OAuth dla serwera MCP. - -```bash -opencode mcp debug -``` - ---- - -### models - -Wyświetl listę modeli ze wszystkich skonfigurowanych dostawców. - -```bash -opencode models [provider] -``` - -Pokazuje modele dostępne do użycia w `provider/model`. - -Jest to identyfikator modelu, którego używasz w [konfiguracji](/docs/config). - -Opcjonalnie możesz podać identyfikator dostawcy, aby filtrować modele według tego dostawcy. - -```bash -opencode models anthropic -``` - -#### Flagi - -| Flaga | Opis | -| --------------------------------------- | ------------------------------------------------------------------------------- | -| {"--refresh"} | Odśwież pamięć podręczną modeli | -| {"--verbose"} | Bardziej szczegółowe dane wyjściowe modelu (zawiera metadane, takie jak koszty) | - -Użyj flagi `--refresh`, aby zaktualizować listę modeli w pamięci podręcznej. Jest to przydatne, gdy dostawca dodał nowe modele, które chcesz zobaczyć w OpenCode. - -```bash -opencode models --refresh -``` - ---- - -### run - -Uruchom OpenCode w trybie nieinteraktywnym, przekazując bezpośrednio prompt. - -```bash -opencode run [message..] -``` - -Jest to przydatne do tworzenia skryptów, automatyzacji lub gdy chcesz wysłać szybkie zapytanie bez uruchamiania TUI. Na przykład: - -```bash "opencode run" -opencode run Explain the use of context in Go -``` - -Można również użyć tego z działającym `opencode serve`, aby uniknąć zimnego startu serwera MCP przy każdym uruchomieniu: - -```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" -``` - -#### Flagi - -| Flaga | Skrót | Opis | -| ---------------------------------------- | ----- | ----------------------------------------------------------------------------------------------------- | -| {"--command"} | | Polecenie do uruchomienia, reszta to argumenty | -| {"--continue"} | `-c` | Kontynuuj ostatnią sesję | -| {"--session"} | `-s` | Identyfikator sesji do kontynuowania | -| {"--fork"} | | Sklonuj sesję podczas kontynuacji (użyj z `--continue` lub `--session`) | -| {"--share"} | | Udostępnij sesję po zakończeniu | -| {"--model"} | `-m` | Model do użycia w formacie dostawca/model | -| {"--agent"} | | Agent do użycia | -| {"--file"} | `-f` | Pliki do załączenia do wiadomości | -| {"--format"} | | Format wyjściowy: `default` (sformatowany) lub `json` (surowy JSON) | -| {"--title"} | | Tytuł sesji (jeśli nie podano, zostanie wygenerowany z promptu) | -| {"--attach"} | | Dołącz do działającego serwera OpenCode (np. http://localhost:4096) | -| {"--password"} | `-p` | Hasło uwierzytelniania podstawowego (domyślnie `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Nazwa użytkownika uwierzytelniania podstawowego (domyślnie `OPENCODE_SERVER_USERNAME` lub `opencode`) | -| {"--dir"} | | Katalog do uruchomienia lub ścieżka na zdalnym serwerze podczas dołączania | -| {"--variant"} | | Wariant modelu (poziom wnioskowania specyficzny dla dostawcy) | -| {"--thinking"} | | Pokaż bloki myślenia | -| {"--port"} | | Port dla serwera lokalnego (domyślnie losowy) | - ---- - -### serve - -Uruchom serwer OpenCode (bez interfejsu) w celu uzyskania dostępu do API. Pełny opis API HTTP znajduje się w [dokumentacji serwera](/docs/server). - -```bash -opencode serve -``` - -Uruchamia to serwer HTTP, który zapewnia dostęp do API OpenCode bez interfejsu TUI. Ustaw `OPENCODE_SERVER_PASSWORD`, aby włączyć podstawowe uwierzytelnianie HTTP (domyślna nazwa użytkownika to `opencode`). - -#### Flagi - -| Flaga | Opis | -| ---------------------------------------- | ------------------------------------------ | -| {"--port"} | Port do nasłuchiwania | -| {"--hostname"} | Nazwa hosta, do której należy się powiązać | -| {"--mdns"} | Włącz wykrywanie mDNS | -| {"--cors"} | Dodatkowe dozwolone źródła CORS | - ---- - -### session - -Zarządzaj sesjami OpenCode. - -```bash -opencode session [command] -``` - ---- - -#### list - -Lista wszystkich sesji OpenCode. - -```bash -opencode session list -``` - -##### Flagi - -| Flaga | Skrót | Opis | -| ----------------------------------------- | ----- | ------------------------------------------ | -| {"--max-count"} | `-n` | Ogranicz do ostatnich N sesji | -| {"--format"} | | Format wyjściowy: tabela lub json (tabela) | - ---- - -### stats - -Pokaż statystyki wykorzystania tokenów i sesji OpenCode. - -```bash -opencode stats -``` - -#### Flagi - -| Flaga | Opis | -| --------------------------------------- | ------------------------------------------------------------------------------------- | -| {"--days"} | Pokaż statystyki z ostatnich N dni (domyślnie: cały czas) | -| {"--tools"} | Pokaż użycie poszczególnych narzędzi (domyślnie: wszystkie) | -| {"--models"} | Pokaż podział na modele (domyślnie ukryty). Podaj liczbę, aby pokazać N najczęstszych | -| {"--project"} | Filtruj według projektu (domyślnie: wszystkie projekty, pusty ciąg: bieżący projekt) | - ---- - -### export - -Eksportuj dane sesji jako JSON. - -```bash -opencode export [sessionID] -``` - -Jeśli nie podasz identyfikatora sesji, zostaniesz poproszony o wybranie jednej z ostatnich sesji. - ---- - -### import - -Importuj dane sesji z pliku JSON lub adresu URL udostępniania OpenCode. - -```bash -opencode import -``` - -Możesz importować z pliku lokalnego lub adresu URL. - -```bash -opencode import session.json -opencode import https://opncd.ai/s/abc123 -``` - ---- - -### web - -Uruchom serwer OpenCode z interfejsem internetowym. - -```bash -opencode web -``` - -Uruchamia to serwer HTTP i udostępnia OpenCode przez interfejs przeglądarkowy. Ustaw `OPENCODE_SERVER_PASSWORD`, aby włączyć podstawowe uwierzytelnianie HTTP (domyślna nazwa użytkownika to `opencode`). - -#### Flagi - -| Flaga | Opis | -| ---------------------------------------- | ------------------------------------------ | -| {"--port"} | Port do nasłuchiwania | -| {"--hostname"} | Nazwa hosta, do której należy się powiązać | -| {"--mdns"} | Włącz wykrywanie mDNS | -| {"--cors"} | Dodatkowe dozwolone źródła CORS | - ---- - -### acp - -Uruchom serwer ACP (Agent Client Protocol). - -```bash -opencode acp -``` - -Uruchamia serwer ACP, który komunikuje się przez stdin/stdout przy użyciu JSON-RPC. - -#### Flagi - -| Flaga | Opis | -| ---------------------------------------- | ------------------------------------------ | -| {"--cwd"} | Katalog roboczy | -| {"--port"} | Port do nasłuchiwania | -| {"--hostname"} | Nazwa hosta, do której należy się powiązać | - ---- - -### uninstall - -Odinstaluj OpenCode i usuń wszystkie powiązane pliki. - -```bash -opencode uninstall -``` - -#### Flagi - -| Flaga | Skrót | Opis | -| ------------------------------------------- | ----- | ----------------------------- | -| {"--keep-config"} | `-c` | Zachowaj pliki konfiguracyjne | -| {"--keep-data"} | `-d` | Zachowaj dane sesji i migawki | -| {"--dry-run"} | | Pokaż co zostanie usunięte | -| {"--force"} | `-f` | Pomiń monity o potwierdzenie | - ---- - -### upgrade - -Aktualizuj OpenCode do najnowszej lub określonej wersji. - -```bash -opencode upgrade [target] -``` - -Aby zaktualizować do najnowszej wersji: - -```bash -opencode upgrade -``` - -Aby zaktualizować do konkretnej wersji: - -```bash -opencode upgrade v0.1.48 -``` - -#### Flagi - -| Flaga | Skrót | Opis | -| -------------------------------------- | ----- | --------------------------------------------------- | -| {"--method"} | `-m` | Wymuś metodę instalacji: curl, npm, pnpm, bun, brew | - ---- - -## Flagi globalne - -Interfejs CLI OpenCode przyjmuje następujące flagi globalne dla każdego polecenia. - -| Flaga | Skrót | Opis | -| ------------------------------------------ | ----- | ------------------------------------------- | -| {"--help"} | `-h` | Wyświetl pomoc | -| {"--version"} | `-v` | Wydrukuj numer wersji | -| {"--print-logs"} | | Drukuj logi na stderr | -| {"--log-level"} | | Poziom logowania (DEBUG, INFO, WARN, ERROR) | - ---- - -## Zmienne środowiskowe - -OpenCode można skonfigurować za pomocą zmiennych środowiskowych. - -| Zmienna | Typ | Opis | -| ------------------------------------- | ------- | ---------------------------------------------------------- | -| `OPENCODE_AUTO_SHARE` | boolean | Automatycznie udostępniaj sesje | -| `OPENCODE_GIT_BASH_PATH` | string | Ścieżka do pliku wykonywalnego Git Bash w systemie Windows | -| `OPENCODE_CONFIG` | string | Ścieżka do pliku konfiguracyjnego | -| `OPENCODE_TUI_CONFIG` | string | Ścieżka do pliku konfiguracyjnego TUI | -| `OPENCODE_CONFIG_DIR` | string | Ścieżka do katalogu konfiguracyjnego | -| `OPENCODE_CONFIG_CONTENT` | string | Treść konfiguracji JSON (inline) | -| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | Wyłącz automatyczne sprawdzanie aktualizacji | -| `OPENCODE_DISABLE_PRUNE` | boolean | Wyłącz czyszczenie starych wyników (pruning) | -| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | Wyłącz automatyczne ustawianie tytułu terminala | -| `OPENCODE_PERMISSION` | string | Konfiguracja uprawnień w JSON (inline) | -| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | Wyłącz domyślne wtyczki | -| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | Wyłącz automatyczne pobieranie serwerów LSP | -| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | Włącz modele eksperymentalne | -| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | Wyłącz automatyczne kompaktowanie kontekstu | -| `OPENCODE_DISABLE_CLAUDE_CODE` | boolean | Wyłącz integrację z `.claude` (prompt + skills) | -| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | Wyłącz czytanie `~/.claude/CLAUDE.md` | -| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | Wyłącz ładowanie `.claude/skills` | -| `OPENCODE_DISABLE_MODELS_FETCH` | boolean | Wyłącz pobieranie modeli ze źródeł zewnętrznych | -| `OPENCODE_FAKE_VCS` | string | Fałszywy dostawca VCS do celów testowych | -| `OPENCODE_CLIENT` | string | Identyfikator klienta (domyślnie `cli`) | -| `OPENCODE_ENABLE_EXA` | boolean | Włącz narzędzie wyszukiwania internetowego Exa | -| `OPENCODE_SERVER_PASSWORD` | string | Włącz uwierzytelnianie podstawowe dla `serve`/`web` | -| `OPENCODE_SERVER_USERNAME` | string | Nazwa użytkownika do autoryzacji (domyślnie `opencode`) | -| `OPENCODE_MODELS_URL` | string | Niestandardowy adres URL do pobierania konfiguracji modeli | - ---- - -### Eksperymentalne - -Te zmienne włączają funkcje eksperymentalne, które mogą ulec zmianie lub zostać usunięte. - -| Zmienna | Typ | Opis | -| ----------------------------------------------- | ------- | --------------------------------------------------- | -| `OPENCODE_EXPERIMENTAL` | boolean | Włącz funkcje eksperymentalne objęte flagą zbiorczą | -| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | Włącz wykrywanie ikon | -| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | Wyłącz kopiowanie przy zaznaczaniu w TUI | -| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | Domyślny limit czasu dla narzędzia bash w ms | -| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | Maksymalne tokeny wyjściowe dla LLM | -| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Włącz obserwatora plików dla całego katalogu | -| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Włącz formater oxfmt | -| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | Włącz eksperymentalne narzędzie LSP | -| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | Wyłącz obserwatora plików | -| `OPENCODE_EXPERIMENTAL_EXA` | boolean | Włącz funkcje eksperymentalne Exa | -| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolean | Włącz TY LSP dla plików python | -| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | Włącz tryb planowania | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | boolean | Włącz zadania subagentów w tle | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | boolean | Włącz eksperymentalny system zdarzeń | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | boolean | Włącz natywną ścieżkę żądań LLM | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | boolean | Włącz równoległe wykonywanie wyszukiwania web | -| `OPENCODE_EXPERIMENTAL_SCOUT` | boolean | Włącz subagenta Scout | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | boolean | Włącz obsługę obszarów roboczych | diff --git a/packages/web/src/content/docs/pl/commands.mdx b/packages/web/src/content/docs/pl/commands.mdx deleted file mode 100644 index 4c5dad7d6f..0000000000 --- a/packages/web/src/content/docs/pl/commands.mdx +++ /dev/null @@ -1,323 +0,0 @@ ---- -title: Polecenia -description: Twórz polecenia dla powtarzalnych zadań. ---- - -Polecenia to zdefiniowane prompty, które można uruchomić w TUI. - -```bash frame="none" -/my-command -``` - -Polecenia są dodatkiem do wbudowanych, takich jak `/init`, `/undo`, `/redo`, `/share`, `/help`. [Dowiedz się więcej](/docs/tui#commands). - ---- - -## Utwórz pliki źródłowe - -Utwórz pliki Markdown w katalogu `commands/`, aby zdefiniować polecenia. - -Utwórz `.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 definiuje właściwości. Treść staje się szablonem. - -Uruchom polecenie, wpisując `/`, a następnie nazwę polecenia. - -```bash frame="none" -"/test" -``` - ---- - -## Konfiguracja - -Możesz zdefiniować polecenia w `opencode.json` lub w plikach w katalogu `commands/`. - ---- - -### JSON - -Użyj opcji `command` w swojej konfiguracji opencode: - -```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" - } - } -} -``` - -Teraz możesz wybrać opcję w TUI: - -```bash frame="none" -/test -``` - ---- - -### Markdown - -Można także definiować polecenia za pomocą plików Markdown. Trzymaj je w: - -- Globalnie: `~/.config/opencode/commands/` -- Na 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. -``` - -Nazwa pliku Markdown staje się nazwą polecenia. Na przykład `test.md` pozwala -uruchomić: - -```bash frame="none" -/test -``` - ---- - -## Składnia promptu - -Prompty niestandardowych poleceń obsługują kilka specjalnych symboli zastępczych. - ---- - -### Argumenty - -Przekazuj argumenty do promptu, używając symbolu zastępczego `$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. -``` - -Uruchomienie polecenia z argumentami: - -```bash frame="none" -/component Button -``` - -`$ARGUMENTS` zostanie zastąpione przez `Button`. - -Dostęp do poszczególnych argumentów można uzyskać za pomocą parametrów pozycyjnych: - -- `$1` - Pierwszy argument -- `$2` - Drugi argument -- `$3` - Trzeci argument -- I tak dalej... - -Na przykład: - -```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 -``` - -Uruchomienie polecenia: - -```bash frame="none" -/create-file config.json src "{ \"key\": \"value\" }" -``` - -Wartości: - -- `$1` to `config.json` -- `$2` to `src` -- `$3` to `{ "key": "value" }` - ---- - -### Dane wyjściowe poleceń - -Użyj `!command`, aby wstawić dane wyjściowe [polecenia bash](/docs/tui#bash-commands) do promptu. - -Na przykład, aby przeanalizować pokrycie testami: - -```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. -``` - -Lub aby przejrzeć ostatnie zmiany: - -```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. -``` - -Polecenia są uruchamiane w powłoce, a ich dane wyjściowe są wstawiane do promptu. - ---- - -### Odwołania do plików - -Dołącz pliki do swojego polecenia, używając `@` i ścieżki do pliku. - -```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. -``` - -Zawartość pliku jest automatycznie wstawiana do promptu. - ---- - -## Opcje - -Przyjrzyjmy się szczegółowo opcjom konfiguracji. - ---- - -### Template - -Opcja `template` to prompt wysyłany do LLM po wykonaniu polecenia. - -```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." - } - } -} -``` - -Jest to **wymagana** opcja konfiguracji. - ---- - -### Description - -Użyj `description`, aby dodać krótki opis działania polecenia. - -```json title="opencode.json" -{ - "command": { - "test": { - "description": "Run tests with coverage" - } - } -} -``` - -Jest wyświetlany jako opis w TUI po wpisaniu polecenia. - ---- - -### Agent - -Użyj opcji `agent`, aby określić, który [agent](/docs/agents) powinien wykonać to polecenie. -Jeśli jest to [subagent](/docs/agents/#subagents), zostanie on użyty. -Aby to zmienić, ustaw `subtask` na `false`. - -```json title="opencode.json" -{ - "command": { - "review": { - "agent": "plan" - } - } -} -``` - -Jest to **opcjonalna** opcja konfiguracji. Jeśli nie podano, użyty zostanie domyślny agent. - ---- - -### Subtask - -Użyj `subtask`, aby wymusić wywołanie polecenia jako subzadania. -Jest to przydatne, jeśli chcesz, aby polecenie nie zanieczyszczało kontekstu i **zmusiło** agenta do działania jako subagent, -nawet jeśli `mode` jest ustawiony na `primary` w konfiguracji [agent](/docs/agents). - -```json title="opencode.json" -{ - "command": { - "analyze": { - "subtask": true - } - } -} -``` - -Jest to **opcjonalna** opcja konfiguracji. - ---- - -### Model - -Użyj `model`, aby określić model dla tego polecenia. - -```json title="opencode.json" -{ - "command": { - "analyze": { - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -Jest to **opcjonalna** opcja konfiguracji. - ---- - -## Wbudowane - -opencode zawiera kilka wbudowanych poleceń, takich jak `/init`, `/undo`, `/redo`, `/share`, `/help`; [dowiedz się więcej](/docs/tui#commands). - -:::note -Polecenia wbudowane mogą zostać nadpisane. -::: - -Jeśli zdefiniujesz tę samą nazwę, twoje polecenie będzie miało pierwszeństwo. diff --git a/packages/web/src/content/docs/pl/config.mdx b/packages/web/src/content/docs/pl/config.mdx deleted file mode 100644 index 176d4ac7d6..0000000000 --- a/packages/web/src/content/docs/pl/config.mdx +++ /dev/null @@ -1,680 +0,0 @@ ---- -title: Konfiguracja -description: Ustawienia OpenCode w pliku JSON. ---- - -Możesz dostosować OpenCode za pomocą pliku konfiguracyjnego JSON. - ---- - -## Format - -OpenCode obsługuje formaty **JSON** i **JSONC** (JSON z komentarzami). - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - // Theme configuration - "theme": "opencode", - "model": "anthropic/claude-sonnet-4-5", - "autoupdate": true, -} -``` - ---- - -## Lokalizacje - -Możesz umieścić swoją konfigurację w kilku różnych lokalizacjach, które mają ustaloną kolejność pierwszeństwa. - -:::note -Pliki konfiguracyjne są **łączone**, a nie nadpisywane. -::: - -Pliki konfiguracyjne są łączone ze sobą. Ustawienia z lokalizacji o wyższym priorytecie nadpisują ustawienia z lokalizacji o niższym priorytecie tylko w przypadku konfliktów kluczy. Ustawienia niekolidujące ze wszystkich źródeł są zachowywane. - -Na przykład, jeśli konfiguracja globalna ustawi `theme: "opencode"` i `autoupdate: true`, a konfiguracja projektu ustawi `model: "anthropic/claude-sonnet-4-5"`, ostateczna konfiguracja będzie zawierać wszystkie trzy ustawienia. - ---- - -### Kolejność pierwszeństwa - -Źródła konfiguracji są ładowane w następującej kolejności (źródła występujące później mają pierwszeństwo): - -1. **Konfiguracja zdalna** (z `.well-known/opencode`) – ustawienia wymuszane przez organizację -2. **Konfiguracja globalna** (`~/.config/opencode/opencode.json`) – preferencje użytkownika -3. **Konfiguracja niestandardowa** (zmienna `OPENCODE_CONFIG`) — jawne nadpisanie -4. **Konfiguracja projektu** (`opencode.json` w projekcie) - ustawienia specyficzne dla projektu -5. **Katalogi `.opencode`** - agenci, polecenia, umiejętności -6. **Konfiguracja wbudowana** (zmienna `OPENCODE_CONFIG_CONTENT`) — nadpisanie środowiska uruchomieniowego - -Oznacza to, że konfiguracje projektu mogą nadpisywać konfiguracje globalne, a konfiguracje globalne mogą nadpisywać konfiguracje zdalne. - -:::note -W katalogach `.opencode` i `~/.config/opencode` używane są **nazwy w liczbie mnogiej** dla podkatalogów: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` i `themes/`. Nazwy w liczbie pojedynczej (np. `agent/`) są również obsługiwane dla kompatybilności wstecznej. -::: - ---- - -### Zdalna - -Organizacje mogą publikować konfigurację pod adresem `.well-known/opencode`. Jest ona pobierana automatycznie po uwierzytelnieniu u dostawcy, który ją obsługuje. - -Konfiguracja zdalna jest ładowana jako pierwsza i stanowi bazę. Wszystkie inne źródła konfiguracji (globalne, projektowe) mogą ją nadpisywać. - -Na przykład, jeśli Twoja organizacja udostępnia serwery MCP, które są domyślnie wyłączone: - -```json title="Remote config from .well-known/opencode" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": false - } - } -} -``` - -Możesz włączyć serwer w konfiguracji projektu: - -```json title="opencode.json" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - ---- - -### Globalna - -Umieść swoją globalną konfigurację OpenCode w `~/.config/opencode/opencode.json`. Użyj jej do ustawień ogólnych dla użytkownika, takich jak dostawcy, modele i uprawnienia. - -Dla ustawień specyficznych dla TUI, użyj `~/.config/opencode/tui.json`. - -Konfiguracja globalna ma pierwszeństwo przed konfiguracją zdalną. - ---- - -### Projekt - -Dodaj `opencode.json` w katalogu głównym projektu. Konfiguracja projektu ma najwyższy priorytet wśród plików konfiguracyjnych — nadpisuje konfiguracje globalne i zdalne. - -Dla ustawień TUI specyficznych dla projektu, dodaj plik `tui.json` obok niego. - -:::tip -Umieść konfigurację specyficzną dla projektu w katalogu głównym projektu. -::: - -Kiedy OpenCode się uruchamia, szuka pliku konfiguracyjnego w katalogu głównym repozytorium Git. - -Może on być przechowywany w Git i mieć ten sam schemat, co konfiguracja globalna. - ---- - -### Niestandardowa ścieżka - -Możesz załadować niestandardowy plik konfiguracyjny, ustawiając zmienną środowiskową `OPENCODE_CONFIG`. - -```bash -export OPENCODE_CONFIG=/path/to/my/custom-config.json -opencode run "Hello world" -``` - -Konfiguracja niestandardowa jest ładowana po konfiguracji globalnej i przed konfiguracją projektu w kolejności priorytetów. - ---- - -### Niestandardowy katalog - -Możesz ustawić niestandardowy katalog konfiguracyjny za pomocą zmiennej środowiskowej `OPENCODE_CONFIG_DIR`. Katalog ten będzie przeszukiwany pod kątem agentów, poleceń, trybów i wtyczek, tak jak standardowy katalog `.opencode` i powinien zachować tę samą strukturę. - -```bash -export OPENCODE_CONFIG_DIR=/path/to/my/config-directory -opencode run "Hello world" -``` - -Katalog niestandardowy jest ładowany po globalnej konfiguracji i katalogach `.opencode`, więc **może być łączony** z ich zawartością. - ---- - -## Schemat - -Plik konfiguracyjny ma schemat JSON dostępny pod adresem [**`opencode.ai/config.json`**](https://opencode.ai/config.json). - -Twój edytor powinien zapewniać walidację i autouzupełnianie na podstawie tego schematu. - ---- - -### TUI - -Użyj dedykowanego pliku `tui.json` (lub `tui.jsonc`) dla ustawień specyficznych dla TUI. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": true - }, - "diff_style": "auto" -} -``` - -Użyj `OPENCODE_TUI_CONFIG`, aby wskazać niestandardowy plik konfiguracyjny TUI. - -Przestarzałe klucze `theme`, `keybinds` i `tui` w `opencode.json` są wycofywane i automatycznie migrowane, gdy to możliwe. - -[Dowiedz się więcej o konfiguracji TUI tutaj](/docs/tui#configure). - ---- - -### Server (Serwer) - -Możesz skonfigurować serwer dla `opencode serve` i `opencode web` za pomocą opcji `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"] - } -} -``` - -Dostępne opcje: - -- `port` - Port do nasłuchiwania. -- `hostname` — Nazwa hosta, z którą należy się powiązać. Gdy `mdns` jest włączone i nie ustawiono innej nazwy hosta, domyślnie jest to `0.0.0.0`. -- `mdns` - Włącz wykrywanie usług mDNS. Dzięki temu inne urządzenia w sieci mogą łatwo znaleźć Twój serwer OpenCode. -- `mdnsDomain` - Niestandardowa nazwa domeny dla usług mDNS. Domyślnie `opencode.local`. Przydatne do uruchamiania wielu instancji w tej samej sieci. -- `cors` - Dozwolone źródła CORS podczas korzystania z serwera HTTP z przeglądarki. Wartość musi być listą źródeł (schemat + host + opcjonalny port), np. `https://app.example.com`. - -[Dowiedz się więcej o serwerze](/docs/server). - ---- - -### Tools (Narzędzia) - -Kontroluj, które narzędzia są dostępne dla LLM, za pomocą opcji `tools`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "tools": { - "write": false, - "bash": false - } -} -``` - -[Dowiedz się więcej o narzędziach](/docs/tools). - ---- - -### Models (Modele) - -Możesz skonfigurować dostawców i modele, których chcesz używać, za pomocą opcji `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" -} -``` - -Opcja `small_model` konfiguruje oddzielny model do lżejszych zadań, takich jak generowanie tytułów. Domyślnie OpenCode wybiera tańszy model od tego samego dostawcy, jeśli jest dostępny, w przeciwnym razie powraca do modelu głównego. - -Opcje dostawcy mogą zawierać `timeout` i `setCacheKey`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "timeout": 600000, - "setCacheKey": true - } - } - } -} -``` - -- `timeout` - Limit czasu żądania w milisekundach (domyślnie: 300000). Ustaw na `false`, aby wyłączyć. -- `setCacheKey` — Wymuś ustawienie klucza pamięci podręcznej dla dostawcy. - -Możesz także skonfigurować [modele lokalne](/docs/models#local). [Dowiedz się więcej o modelach](/docs/models). - ---- - -#### Opcje specyficzne dla dostawców - -Niektórzy dostawcy obsługują dodatkowe opcje konfiguracji poza `timeout` i `apiKey`. - -##### Amazon Bedrock - -Amazon Bedrock umożliwia konfigurację połączenia z 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` — Region AWS dla Bedrock (domyślnie `AWS_REGION` env var lub `us-east-1`) -- `profile` - Nazwa profilu AWS z `~/.aws/credentials` (domyślnie `AWS_PROFILE` env var) -- `endpoint` — Niestandardowy adres URL punktu końcowego (np. dla punktów końcowych VPC). Jest to alias dla opcji ogólnej `baseURL` przy użyciu terminologii AWS. Jeśli podano oba, pierwszeństwo ma `endpoint`. - -:::note -Token okaziciela (`AWS_BEARER_TOKEN_BEDROCK` lub `/connect`) ma pierwszeństwo przed uwierzytelnianiem opartym na profilu. Aby uzyskać szczegółowe informacje, zobacz [pierwszeństwo uwierzytelniania](/docs/providers#authentication-precedence). -::: - -[Dowiedz się więcej o Amazon Bedrock](/docs/providers#amazon-bedrock). - ---- - -### Theme (Motyw) - -Ustaw motyw interfejsu użytkownika w `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - -[Dowiedz się więcej tutaj](/docs/themes). - ---- - -### Agents (Agenci) - -Możesz zdefiniować i skonfigurować agentów za pomocą opcji `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, - }, - }, - }, -} -``` - -Możesz także definiować agentów przy użyciu plików markdown w `~/.config/opencode/agents/` lub `.opencode/agents/`. [Dowiedz się więcej o agentach](/docs/agents). - ---- - -### Default Agent (Domyślny agent) - -Domyślnego agenta można ustawić za pomocą opcji `default_agent`. Określa to agenta, który jest używany, jeśli nie wybrano żadnego innego. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "default_agent": "plan" -} -``` - -Agent domyślny musi być agentem typu `primary` (nie `subagent`). Może to być agent wbudowany, taki jak `"build"` lub `"plan"`, albo zdefiniowany przez Ciebie [agent niestandardowy](/docs/agents). Jeśli agent nie istnieje lub jest subagentem, OpenCode powróci do `"build"` z ostrzeżeniem. - -Dotyczy to wszystkich interfejsów: TUI, CLI (`opencode run`), aplikacji desktopowej i GitHub Actions. - ---- - -### Share (Udostępnianie) - -Możesz skonfigurować [udostępnianie](/docs/share) za pomocą opcji `share`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - -Opcje: - -- `"manual"` – Zezwalaj na ręczne udostępnianie (domyślnie) -- `"auto"` - Automatycznie udostępniaj nowe rozmowy -- `"disabled"` - Całkowicie wyłącz udostępnianie - -Domyślnie ustawiony jest tryb ręczny, w którym należy jawnie udostępniać rozmowy za pomocą polecenia `/share`. - ---- - -### Commands (Polecenia) - -Możesz zdefiniować niestandardowe polecenia dla powtarzalnych zadań za pomocą opcji `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", - }, - }, -} -``` - -Możesz także definiować polecenia przy użyciu plików Markdown w `~/.config/opencode/commands/` lub `.opencode/commands/`. [Dowiedz się więcej o poleceniach](/docs/commands). - ---- - -### Keybinds (Skróty klawiszowe) - -Dostosuj skróty klawiszowe w `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": {} -} -``` - -[Dowiedz się więcej tutaj](/docs/keybinds). - ---- - -### Autoupdate (Automatyczna aktualizacja) - -OpenCode może automatycznie pobierać nowe wersje. Możesz to kontrolować za pomocą opcji `autoupdate`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "autoupdate": false -} -``` - -Jeśli nie chcesz automatycznych aktualizacji, ale chcesz być powiadamiany o nowych wersjach, ustaw `autoupdate` na `"notify"`. -Działa to tylko wtedy, gdy OpenCode nie został zainstalowany przez menedżera pakietów, takiego jak Homebrew. - ---- - -### Formatters (Formatery) - -Możesz skonfigurować formatery kodu za pomocą opcji `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"] - } - } -} -``` - -[Dowiedz się więcej o formaterach](/docs/formatters). - ---- - -### Permissions (Uprawnienia) - -Domyślnie OpenCode **zezwala na wszystkie działania** bez konieczności zatwierdzania. Możesz to zmienić za pomocą opcji `permission`. - -Na przykład, aby wymagać zatwierdzenia dla narzędzi `edit` i `bash`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "ask", - "bash": "ask" - } -} -``` - -[Dowiedz się więcej o uprawnieniach](/docs/permissions). - ---- - -### Compaction (Kompaktowanie) - -Możesz kontrolować zachowanie kompaktowania kontekstu za pomocą opcji `compaction`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "compaction": { - "auto": true, - "prune": false - } -} -``` - -- `auto` - Automatycznie kompaktuj, gdy kontekst jest pełny (domyślnie: `true`). -- `prune` - Usuń stare wyniki narzędzi, aby zaoszczędzić tokeny (domyślnie: `false`). - ---- - -### Watcher (Obserwator) - -Skonfiguruj ignorowane wzorce plików dla obserwatora plików za pomocą `watcher`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "watcher": { - "ignore": ["node_modules/**", "dist/**", ".git/**"] - } -} -``` - -Wzorce są zgodne ze składnią glob. Użyj tej opcji, aby wykluczyć często zmieniające się lub duże katalogi z monitorowania. - ---- - -### MCP Servers (Serwery MCP) - -Skonfiguruj serwery MCP, których chcesz używać, za pomocą opcji `mcp`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": {} -} -``` - -[Dowiedz się więcej o serwerach MCP](/docs/mcp-servers). - ---- - -### Plugins (Wtyczki) - -[Wtyczki](/docs/plugins) rozszerzają OpenCode o niestandardowe narzędzia, hooki i integracje. - -Umieść pliki wtyczek w `.opencode/plugins/` lub `~/.config/opencode/plugins/`. Możesz także załadować wtyczkę z npm za pomocą opcji `plugin`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "@my-org/custom-plugin"] -} -``` - -[Dowiedz się więcej o wtyczkach](/docs/plugins). - ---- - -### Instructions (Instrukcje) - -Określ pliki instrukcji dla modelu, używając opcji `instructions`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -Załadowane pliki są dołączane do promptu systemowego. Obsługuje wzorce glob. [Dowiedz się więcej o zasadach](/docs/rules). - ---- - -### Disabled Providers (Wyłączeni dostawcy) - -Zapobiegaj automatycznemu ładowaniu dostawców za pomocą opcji `disabled_providers`. Jest to przydatne, gdy chcesz wyłączyć niektórych dostawców, nawet jeśli masz dla nich dane uwierzytelniające. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "disabled_providers": ["openai", "gemini"] -} -``` - -:::note -`disabled_providers` ma pierwszeństwo przed `enabled_providers`. -::: - -Opcja `disabled_providers` przyjmuje tablicę identyfikatorów dostawców. Gdy dostawca jest wyłączony: - -- Nie zostanie załadowany podczas startu. -- Nie zostanie załadowany, nawet jeśli podasz klucz API za pomocą `/connect`. -- Modele tego dostawcy nie pojawią się na liście wyboru modeli. - ---- - -### Enabled Providers (Włączeni dostawcy) - -Możesz określić listę dozwolonych dostawców za pomocą `enabled_providers`. Po ustawieniu, tylko wymienieni dostawcy będą ładowani. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "enabled_providers": ["anthropic", "openai"] -} -``` - -Jest to przydatne, gdy chcesz ograniczyć użycie OpenCode tylko do określonych dostawców. - -:::note -`disabled_providers` ma pierwszeństwo przed `enabled_providers`. -::: - -Jeśli dostawca jest wymieniony zarówno w `enabled_providers`, jak i `disabled_providers`, `disabled_providers` wygrywa. - ---- - -### Experimental (Eksperymentalne) - -Klucz `experimental` zawiera opcje, które są we wczesnej fazie rozwoju. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "experimental": {} -} -``` - -:::caution -Opcje eksperymentalne nie są stabilne. Mogą ulec zmianie lub zostać usunięte bez ostrzeżenia. -::: - ---- - -## Zmienne - -Możesz używać specjalnej składni w plikach konfiguracyjnych, aby odwoływać się do zmiennych środowiskowych i zawartości plików. - ---- - -### Env vars (Zmienne środowiskowe) - -Użyj `{env:VARIABLE_NAME}`, aby wstawić wartość zmiennej środowiskowej: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "model": "{env:OPENCODE_MODEL}", - "provider": { - "anthropic": { - "models": {}, - "options": { - "apiKey": "{env:ANTHROPIC_API_KEY}" - } - } - } -} -``` - -Jeśli zmienna środowiskowa nie jest ustawiona, zostanie zastąpiona pustym ciągiem. - ---- - -### Files (Pliki) - -Użyj `{file:path/to/file}`, aby wstawić zawartość pliku: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["./custom-instructions.md"], - "provider": { - "openai": { - "options": { - "apiKey": "{file:~/.secrets/openai-key}" - } - } - } -} -``` - -Ścieżki plików mogą być: - -- Względne do pliku konfiguracyjnego -- Lub absolutne, zaczynające się od `/` lub `~` - -Zalecamy używanie tego do: - -- Przechowywania wrażliwych danych, takich jak klucze API, w oddzielnych plikach. -- Ładowania dużych promptów bez zaśmiecania konfiguracji. -- Dzielenia fragmentów konfiguracji między wieloma plikami. diff --git a/packages/web/src/content/docs/pl/custom-tools.mdx b/packages/web/src/content/docs/pl/custom-tools.mdx deleted file mode 100644 index 7a38512c18..0000000000 --- a/packages/web/src/content/docs/pl/custom-tools.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: Narzędzia specjalistyczne -description: Twórz narzędzi, które LLM mogą być uruchamiane w otwartym kodzie. ---- - -Narzędzia specjalistyczne to funkcje, które tworzysz i które LLM może wywoływać podczas rozmów. Współpracują one z [wbudowanymi narzędziami](/docs/tools) opencode, takimi jak `read`, `write` i `bash`. - ---- - -## Tworzenie narzędzia - -Narzędzia tworzą pliki **TypeScript** lub **JavaScript**. Definicja narzędzia może być odwoływana do skryptów napisanych w **dowolnym języku** — TypeScript lub JavaScript są używane tylko w tym samym narzędziu. - ---- - -### Lokalizacja - -Można je uruchomić: - -- Lokalnie, umieszczając je w katalogu `.opencode/tools/` swojego projektu. -- Lub globalnie, umieszczając je w `~/.config/opencode/tools/`. - ---- - -### Struktura - -Najłatwiejszym sposobem tworzenia narzędzia jest pomocnika `tool()`, który zapewnia bezpieczeństwo i sprawdzanie poprawności. - -```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}` - }, -}) -``` - -**Nazwa pliku** staje się **nazwą narzędzia**. Pierwotne narzędzie `database`. - ---- - -#### Wiele narzędzi na plik - -Można także eksportować wiele narzędzi z jednego pliku. Każdy eksport staje się **oddzielnym językiem** o nazwie **`_`**: - -```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 - }, -}) -``` - -Tworzy to dwa narzędzia: `math_add` i `math_multiply`. - ---- - -#### Kolizje nazw z wbudowanymi narzędziami - -Niestandardowe narzędzia są identyfikowane według nazwy narzędzia. Jeśli niestandardowe narzędzie używa tej samej nazwy co wbudowane narzędzie, niestandardowe narzędzie ma pierwszeństwo. - -Na przykład ten plik zastępuje wbudowane narzędzie `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 -Preferuj unikalne nazwy, chyba że celowo chcesz zastąpić wbudowane narzędzie. Jeśli chcesz wyłączyć wbudowane narzędzie, ale go nie nadpisywać, użyj [uprawnień](/docs/permissions). -::: - ---- - -### Argumenty - -Do zdefiniowania argumentów można zastosować `tool.schema`, czyli po prostu [Zod](https://zod.dev). - -```ts "tool.schema" -args: { - query: tool.schema.string().describe("SQL query to execute") -} -``` - -Można także bezpośrednio zaimportować [Zod](https://zod.dev) i zwyczajowo zwykły obiekt: - -```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 - -Narzędzia kontekstowe charakterystycznej sesji: - -```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` jako katalogowy pracodawczy. -`context.worktree` dla katalogu głównego zwalczającego git. - ---- - -## Przykład - -### Napisz narzędzie w Pythonie - -Możesz pisać swoje narzędzia w dowolnym języku. Oto przykład dodania dwóch liczb przy użyciu języka Python. - -Najpierw utwórz narzędzie jako skrypt w języku Python: - -```python title=".opencode/tools/add.py" -import sys - -a = int(sys.argv[1]) -b = int(sys.argv[2]) -print(a + b) -``` - -Następnie utwórz definicję narzędzia, która go wywołuje: - -```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() - }, -}) -``` - -Tutaj używamy narzędzia [`Bun.$`](https://bun.com/docs/runtime/shell) do uruchomienia skryptu w języku Python. diff --git a/packages/web/src/content/docs/pl/ecosystem.mdx b/packages/web/src/content/docs/pl/ecosystem.mdx deleted file mode 100644 index f7a9048e64..0000000000 --- a/packages/web/src/content/docs/pl/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Ekosystem -description: Projekty i integracje zbudowane przy użyciu OpenCode. ---- - -Zbiór projektów społeczności zbudowanych na OpenCode. - -:::note -Chcesz dodać swój projekt związany z OpenCode do tej listy? Prześlij PR. -::: - -Możesz również sprawdzić [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) oraz [opencode.cafe](https://opencode.cafe), społeczność agregującą ekosystem i społeczność. - ---- - -## Wtyczki - -| Nazwa | Opis | -| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | -| [opencode-daytona](https://github.com/daytonaio/daytona/tree/main/libs/opencode-plugin) | Automatyczne uruchamianie sesji OpenCode w izolowanych piaskownicach Daytona z synchronizacją git i podglądem na żywo | -| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | Automatyczne wstrzykiwanie nagłówków sesji Helicone do grupowania żądań | -| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | Automatyczne wstrzykiwanie typów TypeScript/Svelte do odczytów plików za pomocą narzędzi wyszukiwania | -| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Użyj subskrypcji ChatGPT Plus/Pro zamiast kredytów API | -| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Użyj istniejącego planu Gemini zamiast płatności za API | -| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | Użyj darmowych modeli Antigravity zamiast płatności za API | -| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Izolacja kontenerów deweloperskich dla wielu gałęzi z płytkim klonowaniem i automatycznie przypisywanymi portami | -| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Wtyczka Google Antigravity OAuth ze wsparciem dla wyszukiwarki Google i bardziej niezawodną obsługą API | -| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Optymalizacja zużycia tokenów poprzez usuwanie przestarzałych wyników narzędzi | -| [opencode-vibeguard](https://github.com/inkdust2021/opencode-vibeguard) | Redagowanie sekretów/danych osobowych do placeholderów w stylu VibeGuard przed wywołaniem LLM; przywracanie lokalnie | -| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Dodaj natywną obsługę wyszukiwania w sieci dla wspieranych dostawców w stylu Google grounded | -| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Umożliwia agentom AI uruchamianie procesów w tle w PTY i wysyłanie do nich interaktywnych danych wejściowych. | -| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Instrukcje dla nieinteraktywnych poleceń powłoki - zapobiega zawieszeniom operacji zależnych od TTY | -| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Śledź użycie OpenCode za pomocą Wakatime | -| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Oczyść tabele markdown generowane przez LLM | -| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | Edycja Fast Apply, wyszukiwanie kodu WarpGrep i kompaktowanie kontekstu przez Morph | -| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Agenci w tle, wbudowane narzędzia LSP/AST/MCP, wyselekcjonowani agenci, kompatybilność z Claude Code | -| [opencode-notificator](https://github.com/panta82/opencode-notificator) | Powiadomienia na pulpicie i alerty dźwiękowe dla sesji OpenCode | -| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | Powiadomienia na pulpicie i alerty dźwiękowe dla uprawnień, zakończeń zadań i błędów | -| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | Automatyczne nazywanie sesji Zellij oparte na AI w oparciu o kontekst OpenCode | -| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | Pozwól agentom OpenCode na leniwe ładowanie promptów na żądanie z odkrywaniem umiejętności i wstrzykiwaniem | -| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Trwała pamięć między sesjami przy użyciu Supermemory | -| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Interaktywny przegląd planów z wizualnymi adnotacjami i prywatnym/offline udostępnianiem | -| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Rozszerz komendy /commands OpenCode w potężny system orkiestracji ze szczegółową kontrolą przepływu | -| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Planuj cykliczne zadania używając launchd (Mac) lub systemd (Linux) ze składnią cron | -| [micode](https://github.com/vtemian/micode) | Ustrukturyzowany przepływ pracy Burza mózgów → Plan → Implementacja z ciągłością sesji | -| [octto](https://github.com/vtemian/octto) | Interaktywny interfejs przeglądarkowy do burzy mózgów AI z formularzami wielopytaniowymi | -| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Agenci w tle w stylu Claude Code z asynchronicznym delegowaniem i trwałością kontekstu | -| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | Natywne powiadomienia systemowe dla OpenCode – wiedz, kiedy zadania się zakończą | -| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | Zestaw orkiestracji wieloagentowej – 16 komponentów, jedna instalacja | -| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | Bezproblemowe drzewa robocze git dla OpenCode | -| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | Śledź i debuguj swoich agentów AI za pomocą Sentry AI Monitoring | - ---- - -## Projekty - -| Nazwa | Opis | -| ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- | -| [kimaki](https://github.com/remorses/kimaki) | Bot Discord do sterowania sesjami OpenCode, zbudowany na SDK | -| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Wtyczka Neovim dla promptów świadomych edytora, zbudowana na API | -| [portal](https://github.com/hosenur/portal) | Interfejs webowy mobile-first dla OpenCode przez Tailscale/VPN | -| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | Szablon do tworzenia wtyczek OpenCode | -| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Frontend Neovim dla OpenCode - terminalowy agent kodujący AI | -| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Dostawca Vercel AI SDK do używania OpenCode przez @opencode-ai/sdk | -| [OpenChamber](https://github.com/btriapitsyn/openchamber) | Aplikacja Web / Desktop i rozszerzenie VS Code dla OpenCode | -| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Wtyczka Obsidian osadzająca OpenCode w interfejsie Obsidian | -| [OpenWork](https://github.com/different-ai/openwork) | Otwartoźródłowa alternatywa dla Claude Cowork, napędzana przez OpenCode | -| [ocx](https://github.com/kdcokenny/ocx) | Menedżer rozszerzeń OpenCode z przenośnymi, izolowanymi profilami. | -| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | Aplikacja kliencka Desktop, Web, Mobile i Remote dla OpenCode | - ---- - -## Agenci - -| Nazwa | Opis | -| ----------------------------------------------------------------- | ------------------------------------------------------------------------ | -| [Agentic](https://github.com/Cluster444/agentic) | Modułowi agenci AI i komendy do strukturalnego rozwoju | -| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Konfiguracje, prompty, agenci i wtyczki dla ulepszonych przepływów pracy | diff --git a/packages/web/src/content/docs/pl/enterprise.mdx b/packages/web/src/content/docs/pl/enterprise.mdx deleted file mode 100644 index e5dbd19640..0000000000 --- a/packages/web/src/content/docs/pl/enterprise.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: Przedsiębiorstwo -description: Bezpieczne korzystanie z opencode w Twojej organizacji. ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -opencode Przedsiębiorstwo jest przeznaczone dla organizacji, która ma dostęp do zasobów, że ich kod i dane nigdy nie opuszczą infrastruktury. Może zostać zarejestrowany za pomocą zapachuralizowanej konfiguracji, która integruje się z logowaniem jednokrotnym i uruchomieniem bramą AI. - -:::note -opencode nie przechowuje żadnego kodu ani danych kontekstowych. -::: - -Aby skorzystać z pracy z opencode Przedsiębiorstwo: - -1. Przeprowadź próbę wewnętrzną ze swoim systemem. -2. **Skontaktuj się z nami**, aby omówić ceny i opcję konfiguracji. - ---- - -## Test - -opencode jest oprogramowaniem typu open source i nie przechowuje żadnego kodu ani danych kontekstowych, więc programiści mogą po prostu [zacząć](/docs/) i próbować próbną. - ---- - -### Obsługa danych - -**opencode nie dotyczy kodu źródłowego ani danych kontekstowych.** Całe zdarzenie odbywa się lokalnie lub poprzez bezpośrednio wywołane API do twojego dostawcy AI. - -to, że korzystasz z usług dostawcy, lub dostawcy zaufania -Brama AI, możesz bezpłatnie korzystać z opencode. - -Zastrzeżeniem jest opcjonalna funkcja `/share`. - ---- - -#### Dzielenie się rozmowami - -Jeśli użytkownicy są połączeni z `/share`, połączenie jest połączone z danymi, które zostały przesłane do usług, które są udostępniane przez hosty tych użytkowników w opencode.ai. - -Dane są aktualnie dostępne przez sieć brzegową naszego CDN i są buforowane na brzegu w pobliżu Twoich użytkowników. - -Zalecamy tę opcję na okres próbny. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -[Więcej informacji o udostępnianiu](/docs/share). - ---- - -### Własność kodu - -**Jesteś właścicielem całości kodu źródłowego przez opencode.** Nie ma żadnych ograniczeń licencyjnych ani należących do własności. - ---- - -## Wycena - -W przypadku opencode Enterprise model per-seat. Jeśli posiadasz własną bramkę LLM, nie pobieramy opłat za korzystanie z tokenów. Aby uzyskać więcej informacji na temat, jeśli jest możliwe, **skontaktuj się z nami**. - ---- - -## Zastosowanie - -Gdy zasięgsz okres próbny i nadzorujesz użytkowanie z opencode na -swoją organizację, możesz **skontaktować się z nami**, aby omówić te dźwięki -opcja cenowa i wdrożeniowa. - ---- - -### Konfiguracja centralna - -Możliwości wykorzystania opencode tak, aby skorzystać z jednego zastosowania dla całej organizacji. - -Tę zapachową konfigurację można zintegrować z dostawcą SSO i specyfikacje wszyscy użytkownicy mają dostęp wyłącznie do bram wewnętrznych AI. - ---- - -### Integracja SSO - -Dzięki zastosowaniu konfiguracji opencode może zostać włączone z dostawcą SSO Twojej organizacji w celu uwierzytelnienia. - -Dzięki temu opencode może uzyskać dane uwierzytelniające dla wewnętrznej bramy AI za pośrednictwem transmisji systemu zarządzania tożsamością. - ---- - -### Wewnętrzna bramka AI - -Dzięki zastosowaniu konfiguracji opencode można również skorzystać z tego, że można korzystać tylko z wewnętrznych bram AI. - -Możesz także dołączyć do wszystkich innych dostawców sztucznej inteligencji, upewniając się, że wszystkie elementy przechodzą przez zatwierdzenie wykorzystania Twojej organizacji. - ---- - -### Hosting własny - -Zalecamy, aby można było je udostępnić, aby Twoje dane nigdy nie zostały opuszczone -Twoja organizacja może być pomocna w utrzymaniu ich w Twojej infrastrukturze. - -Jest to obecnie w naszym planie działania. Jeśli jesteś zainteresowany, **daj nam znać**. - ---- - -## Często zadawane pytania - -

-What is opencode Enterprise? - -opencode Przedsiębiorstwo jest przeznaczone dla organizacji, która ma dostęp do zasobów, że ich kod i dane nigdy nie opuszczą infrastruktury. Może zostać zarejestrowany za pomocą zapachuralizowanej konfiguracji, która integruje się z logowaniem jednokrotnym i uruchomieniem bramą AI. - -
- -
-How do I get started with opencode Enterprise? - -Po prostu uruchom wersję próbną ze swoim. opencode urządzenia niezabezpieczone kodu ani danych kontekstowych, co ułatwia uruchomienie pracy. - -**skontaktuj się z nami**, aby omówić ceny i wybrać opcję. - -
- -
-How does enterprise pricing work? - -Oferujemy ceny korporacyjne za jedno stanowisko. Jeśli posiadasz własną bramkę LLM, nie pobieramy opłat za korzystanie z tokenów. Aby uzyskać więcej informacji, **skontaktuj się z nami**, aby uzyskać wynik określony dla potrzeb Twojej organizacji. - -
- -
-Is my data secure with opencode Enterprise? - -Tak. opencode nie przechowuje kodu ani danych kontekstowych. Całe zdarzenie odbywa się lokalnie lub poprzez bezpośrednie wywołanie API przez dostawcę AI. Dostęp do konfiguracji i integracji z logowaniem jednokrotnym Twoje dane pozostają bezpieczne w infrastrukturze organizacji. - -
- -
-Can we use our own private NPM registry? - -opencode obsługuje prywatny rejestry npm poprzez natywną usługę plików `.npmrc` Buna. Jeśli Twoja organizacja korzysta z rejestru prywatnego, takiego jak JFrog Artifactory, Nexus lub wylot, przed uruchomieniem opencode się, że programiści zostali uwierzytelnieni. - -Aby zapewnić uwierzytelnianie w rejestrze prywatnym: - -```bash -npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/ -``` - -Spowoduje to do `~/.npmrc` ze szczegółami uwierzytelniania. opencode zrobi to automatycznie -podniesc do. - -:::caution -Przed uruchomieniem opencode musisz być zalogowany do rejestru prywatnego. -::: - -Alternatywnie możesz skorzystać z pliku `.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} -``` - -Programiści muszą się zgłosić do rejestru prywatnego przed uruchomieniem opencode, aby mieć dostęp, że pakiety będą dostępne z rejestru przedsiębiorstwa. - -
diff --git a/packages/web/src/content/docs/pl/formatters.mdx b/packages/web/src/content/docs/pl/formatters.mdx deleted file mode 100644 index 593e407f4f..0000000000 --- a/packages/web/src/content/docs/pl/formatters.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: Formatery -description: OpenCode używa formaterów specyficznych dla języka. ---- - -OpenCode automatycznie formatuje pliki po ich zapisaniu lub edycji przy użyciu formaterów specyficznych dla języka. Zapewnia to, że wygenerowany kod jest zgodny ze stylem kodu Twojego projektu. - ---- - -## Wbudowane - -OpenCode zawiera kilka wbudowanych formaterów dla popularnych języków i frameworków. Poniższa tabela zawiera listę formaterów, obsługiwanych plików oraz wymagań konfiguracyjnych. - -| Formater | Rozszerzenia | Wymagania | -| -------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -| gofmt | .go | Dostępne polecenie `gofmt` | -| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | Dostępne polecenie `mix` | -| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml i [więcej](https://prettier.io/docs/en/index.html) | Zależność `prettier` w `package.json` | -| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml i [więcej](https://biomejs.dev/) | Plik konfiguracyjny `biome.json(c)` | -| zig | .zig, .zon | Dostępne polecenie `zig` | -| clang-format | .c, .cpp, .h, .hpp, .ino i [więcej](https://clang.llvm.org/docs/ClangFormat.html) | Plik konfiguracyjny `.clang-format` | -| ktlint | .kt, .kts | Dostępne polecenie `ktlint` | -| ruff | .py, .pyi | Dostępne polecenie `ruff` | -| rustfmt | .rs | Dostępne polecenie `rustfmt` | -| cargo | .rs | Dostępne polecenie `cargo fmt` | -| uv | .py, .pyi | Dostępne polecenie `uv` | -| rubocop | .rb, .rake, .gemspec, .ru | Dostępne polecenie `rubocop` | -| standardrb | .rb, .rake, .gemspec, .ru | Dostępne polecenie `standardrb` | -| htmlbeautifier | .erb, .html.erb | Dostępne polecenie `htmlbeautifier` | -| air | .R | Dostępne polecenie `air` | -| dart | .dart | Dostępne polecenie `dart` | -| dfmt | .d | Dostępne polecenie `dfmt` | -| ocamlformat | .ml, .mli | Dostępne polecenie `ocamlformat` i plik konfiguracyjny `.ocamlformat` | -| terraform | .tf, .tfvars | Dostępne polecenie `terraform` | -| gleam | .gleam | Dostępne polecenie `gleam` | -| nixfmt | .nix | Dostępne polecenie `nixfmt` | -| shfmt | .sh, .bash | Dostępne polecenie `shfmt` | -| pint | .php | Zależność `laravel/pint` w `composer.json` | -| oxfmt (experimental) | .js, .jsx, .ts, .tsx | Zależność `oxfmt` w `package.json` i [eksperymentalna flaga](/docs/cli/#experimental) | -| ormolu | .hs | Dostępne polecenie `ormolu` | - -Jeśli więc Twój projekt zawiera `prettier` w `package.json`, OpenCode automatycznie go użyje. - ---- - -## Jak to działa - -Kiedy OpenCode zapisuje lub edytuje plik: - -1. Sprawdza plik pod kątem wszystkich dostępnych formaterów. -2. Uruchamia odpowiedni formater na pliku. -3. Automatycznie stosuje zmiany formatowania. - -Ten proces odbywa się w tle, zapewniając spójność stylu kodu bez konieczności ręcznej interwencji. - ---- - -## Konfiguracja - -Możesz dostosować formatery za pomocą sekcji `formatter` w konfiguracji OpenCode. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "formatter": {} -} -``` - -Każdy formater obsługuje następujące właściwości: - -| Właściwość | Typ | Opis | -| ------------- | -------- | -------------------------------------------------------- | -| `disabled` | boolean | Ustaw na `true`, aby wyłączyć ten formater | -| `command` | string[] | Polecenie uruchomienia formatera | -| `environment` | object | Zmienne środowiskowe ustawiane podczas uruchamiania | -| `extensions` | string[] | Rozszerzenia plików, które powinny używać tego formatera | - -Spójrzmy na kilka przykładów. - ---- - -### Wyłączanie formaterów - -Aby globalnie wyłączyć **wszystkie** formatery, ustaw `formatter` na `false`: - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": false -} -``` - -Aby wyłączyć **określony** formater, ustaw `disabled` na `true`: - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": { - "prettier": { - "disabled": true - } - } -} -``` - ---- - -### Niestandardowe formatery - -Możesz dodać niestandardowe formatery, podając polecenie, zmienne środowiskowe i rozszerzenia plików: - -```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"] - } - } -} -``` - -Symbol zastępczy **`$FILE`** w poleceniu jest zastępowany ścieżką do formatowanego pliku. diff --git a/packages/web/src/content/docs/pl/github.mdx b/packages/web/src/content/docs/pl/github.mdx deleted file mode 100644 index 9b22ac4d5b..0000000000 --- a/packages/web/src/content/docs/pl/github.mdx +++ /dev/null @@ -1,321 +0,0 @@ ---- -title: GitHub -description: Użyj opencode w problemach z GitHubem i zastosujch ściągnięcia. ---- - -opencode integruje się z przepływem pracy w GitHub. Wspomnij o `/opencode` lub `/oc` w swoim komentarzu, a opencode wykonaj zadania w ramach modułu uruchamiającego GitHub Actions. - ---- - -## Cechy - -- **Problem związany z segregacją**: Poproś opencode o szczegółowe wyjaśnienie problemu i wyjaśnienie go. -- **Napraw i zaimplementuj**: Poproś opencode o naprawienie problemu lub zaimplementowanie funkcji. Będzie dostępny w następnym oddziale i wysyłać PR ze stosowaniem dodatku. -- **Bezpieczny**: opencode działa w modułach sprzętowych GitHuba. - ---- - -## Instalacja - -Uruchomione dalsze postępowanie w przypadku wystąpienia w repozytorium GitHub: - -```bash -opencode github install -``` - -Aby przeprowadzić Cię przez proces instalacji aplikacji GitHub, utwórz działanie i skonfiguruj wpisy tajnych. - ---- - -### Konfiguracja ręczna - -Można też uszkodzić to rozwiązanie. - -1. **Zainstaluj aplikację GitHub** - - Wejdź na [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). wystąpienie się, że jest natychmiastowe w repozytorium usuwam. - -2. **Dodaj przepływ pracy** - - Dodaj zdalny plik pracy do `.github/workflows/opencode.yml` w swoim repozytorium. wystąpił, że ustawiłeś sędziego `model` i wymagany klucz API w `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. **Przechowuj klucze API w tajemnicy** - - W **ustawieniach** swojej organizacji lub projektu rozwiń **Sekretne i zmienne** po lewej stronie i wybierz **Działania**. Dodałem wymagane klucze API. - ---- - -## Konfiguracja - -- `model`: Model używany z opencode. Przyjmuje format `provider/model`. To **wymagane**. -- `agent`: Agent, którego należy używać. Musi być odległym agentem. Wraca do `default_agent` z konfiguracją lub `"build"`, jeśli nie został znaleziony. -- `share`: Czyć funkcję sesji opencode. Domyślnie **true** dla repozytoriów publicznych. -- `prompt`: Opcjonalny niestandardowy monit o zastąpienie przestrzegania zachowania. Wykorzystanie tego, aby dostosować sposób przetwarzania przez opencode. -- `token`: opcjonalny token dostępu GitHub podstawowe operacje, takie jak tworzenie komentarzy, zatwierdzanie zmian i otwieranie zastosowania ściągnięcia. Domyślnie opencode używa tokena dostępu do instalacji z aplikacji opencode GitHub, więc zatwierdzenia, komentarze i zasady ściągnięcia widoczne jako źródło z aplikacji. - - Alternatywnie możesz użyć [wbudowanego `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) modułu uruchamiającego GitHub Action bez instalacji aplikacji opencode GitHub. Pamiętaj tylko o przyznaniu wymaganych mocy w przepływie pracy: - - ```yaml - permissions: - id-token: write - contents: write - pull-requests: write - issues: write - ``` - - Jeśli chcesz, możesz także użyć [osobistych tokenów dostępu](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT). - ---- - -## Obsługiwane wydarzenia - -opencode może zostać wywołany przez zdarzenie GitHub: - -| Typ zdarzenia | Wywołane przez | Szczegóły | -| ----------------------------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -| `issue_comment` | Skomentuj problem lub PR | Wspomnij o `/opencode` lub `/oc` w swoim komentarzu. opencode odczytuje kontekst i może być częścią składową, otwieraną przez PR lub odpowiedzialną. | -| `pull_request_review_comment` | Komentarz określonym kodem w PR | Wspomnij o `/opencode` lub `/oc` podczas przeglądania kodu. opencode źródło pochodzenia, numery linii i kontekst różnicowy. | -| `issues` | Wydanie otwarte lub edytowane | Automatycznie wyzwalaj opencode po utworzeniu lub zmodyfikowaniu problemów. Wymaga wejścia `prompt`. | -| `pull_request` | PR otwarty lub zaktualizowany | Automatycznie wyzwalaj opencode, gdy PR są otwierane, synchronizowane lub ponownie otwierane. Przydatne w przypadku automatycznych znajomych. | -| `schedule` | Harmonogram oparty na Cron | Uruchom opencode zgodnie z harmonogramem. Wymagane wejście `prompt`. Dane wejściowe trafiają do dzienników i trafiań PR (nie ma problemu z recenzją). | -| `workflow_dispatch` | Ręczny wyłącznik z interfejsu użytkownika GitHub | Uruchom opencode na karcie Akcje. Wymagane wejście `prompt`. Dane wejściowe trafiają do dzienników i odbiorców PR. | - -### Przykład harmonogramu - -Uruchamiaj opencode zgodnie z harmonogramem, aby wykonać zautomatyzowane zadania: - -```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. -``` - -W przypadku wystąpienia danych wyjściowych `prompt` są **wymagane**, które nie są dostarczane, z których można wyodrębnić instrukcje. Zaplanowane przepływomierze pracy bez kontekstu użytkownika, który został uruchomiony, więc przepływ pracy musi `contents: write` i `pull-requests: write`, wystąpisz, że opencode utworzył główne lub PR. - ---- - -### Przykład żądania ściągnięcia - -Automatycznie przeglądaj żądania ściągnięcia po ich otwarciu lub aktualizacji: - -```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 -``` - -W przypadku zdarzenia `pull_request`, jeśli nie podano `prompt`, opencode użytkownika przeglądającego ściągnięcie. - ---- - -### Przykład segregacji problemów - -Automatycznie segreguj nowe problemy. Dziesięć przykładów filtruje do kont starszych niż 30 dni w celu ograniczenia spamu: - -```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. -``` - -W przypadku zdarzenia `issues` wprowadzenie `prompt` jest **wymagane**, ponieważ nie ma komentarza, z którego można wyodrębnić instrukcje. - ---- - -## Niestandardowe monity - -Zastąp domyślne monit, aby zastosować zachowanie opencode do twojego własnego pracy. - -```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 -``` - -Jest to przepis wykonawczy, który podlega przepisom kodowania lub zakresów tematycznych dla twojego projektu. - ---- - -## Przykłady - -Oto kilka możliwości wykorzystania opencode w GitHubie. - -- **Wyjaśnij problem** - - Dodaj dziesięć komentarzy w numerze GitHub. - - ``` - /opencode explain this issue - ``` - - opencode przeczytaj całość, zawierając dodatek z komentarzami i odpowiedzią z jasnym wyjaśnieniem. - -- **Napraw problem** - - W numerze GitHub powiedz: - - ``` - /opencode fix this - ``` - - A opencode utworzy nową podstawę, wdroży zmiany i zastąpi PR ze zmiany. - -- **Przegląd zmiany PR i wprowadzenie zmiany** - - Zostaw komentarz w PR GitHub. - - ``` - Delete the attachment from S3 when the note is removed /oc - ``` - - opencode zaimplementuje uruchomioną zmianę i zatwierdzi ją do tego samego PR. - -- **Przejrzyj konkretne linie kodu** - - Zostaw komentarz bezpośrednio w wierszu kodu w dodatku „Pliki” PR. opencode automatyczne wykrywanie pliku, numery linii i kontekst różnicowy, aby sprawdzić odpowiedzi. - - ``` - [Comment on specific lines in Files tab] - /oc add error handling here - ``` - - Komentując określone linie, opencode otrzymuje: - - Dokładny plik, który jest sprawdzany - - Konkretne linie kodu - - Otaczający kontekst różnicowy - - Informacje o numerze linii - - Dostępne na bardziej szczegółowe rozwiązanie bez konieczności stosowania ręcznego określania plików lub numerów wierszy. diff --git a/packages/web/src/content/docs/pl/gitlab.mdx b/packages/web/src/content/docs/pl/gitlab.mdx deleted file mode 100644 index 660ed467e9..0000000000 --- a/packages/web/src/content/docs/pl/gitlab.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: GitLab -description: użyj opencode w problemach z GitLabem i zastosujch scalania. ---- - -opencode integruje się z przepływem pracy GitLab poprzez potok GitLab CI/CD lub z GitLab Duo. - -W obu przypadkach opencode będzie modułem GitLab. - ---- - -## GitLab CI - -opencode działa w zwykłym potoku GitLab. Możesz wbudować go w potok jako [komponent CI](https://docs.gitlab.com/ee/ci/components/) - -Tutaj obowiązkowego przez społeczność komponentu CI/CD dla opencode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode). - ---- - -### Cechy - -- **Użyj konfiguracji dla każdego zadania**: Skonfiguruj opencode z niestandardowym katalogiem konfiguracyjnym, na przykładzie `./config/#custom-directory`, aby włączyć lub funkcjonalności na każde wywołanie opencode. -- **Konfiguracja minimalna**: Komponent CI konfiguruje opencode w tle, wystarczy skonfigurować opencode i początkowy monit. -- **Elastyczny**: Komponent CI obsługuje kilka danych, które są stosowane w celu dostosowania jego zachowania - ---- - -### Organizować coś - -1. Przechowuj dane uwierzytelniające opencode w formacie JSON jako zmienne parametry CI typu pliku w specyfikacji **Ustawienia** > **CI/CD** > **Zmienne**. Zachowaj, aby być oznaczony jako „Zamaskowane i ukryte”. -2. Dodaj elementy do swojego pliku `.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" - ``` - -Więcej danych dotyczących użycia [sprawdź opis](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) tego komponentu. - ---- - -## Duet GitLab - -opencode integruje się z przepływem pracy GitLab. -Wspomnij o `@opencode` w komentarzu, a opencode wykonaj zadania w ramach swojego potoku GitLab CI. - ---- - -### Cechy - -- **Problem związany z segregacją**: Poproś opencode o szczegółowe wyjaśnienie problemu i wyjaśnienie go. -- **Napraw i zaimplementuj**: Poproś opencode o naprawienie problemu lub zaimplementowanie funkcji. - Utworzył nowy oddział i zgłosi ataku ze sobą. -- **Bezpieczny**: opencode działa na modułach GitLab. - ---- - -### Organizować coś - -opencode działa w potoku CI/CD GitLab. Oto, czego potrzebujesz, aby przejść do: - -:::tip -Aktualne instrukcje dotyczące [**dokumentacji GitLab**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/). -::: - -1. Skonfiguruj swoje środowisko GitLab -2. Skonfiguruj CI/CD -3. Uzyskaj klucz API dostawca modelu AI -4. Utwórz konto usługi -5. Skonfiguruj zmienne CI/CD -6. Utwórz plik konfiguracyjny, oto przykład: - -
- - Flow configuration - - ```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. - - - 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. - - " - - 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 - ``` - -
- -Szczegółowe instrukcje w [dokumentacji agentów GitLab CLI](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/). - ---- - -### Przykłady - -Oto kilka możliwości wykorzystania opencode w GitLabie. - -:::tip -Można zastosować inną metodę ograniczającą niż `@opencode`. -::: - -- **Wyjaśnij problem** - - Dodaj dziesięć komentarzy w numerze GitLab. - - ``` - @opencode explain this issue - ``` - - opencode przeczytaj problem i odpowiedź z wyjaśnieniem. - -- **Napraw problem** - - W numerze GitLab powiedz: - - ``` - @opencode fix this - ``` - - opencode utworzy nową podstawę, zaimplementuje zmiany i spowoduje, że skalowanie będzie możliwe. - -- **Przejrzyj prośby o połączenie** - - Zostaw komentarz w sprawie rozwiązania połączenia GitLab. - - ``` - @opencode review this merge request - ``` - - opencode sprawdzenie rozwiązania i przepuszczenie. diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx deleted file mode 100644 index 66cb0a3775..0000000000 --- a/packages/web/src/content/docs/pl/go.mdx +++ /dev/null @@ -1,203 +0,0 @@ ---- -title: Go -description: Niskokosztowa subskrypcja na otwarte modele do kodowania. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Go to niskokosztowa subskrypcja — **5 $ za pierwszy miesiąc**, a następnie **10 $/miesiąc** — która zapewnia niezawodny dostęp do popularnych otwartych modeli do kodowania. - -Go działa jak każdy inny dostawca w OpenCode. Subskrybujesz OpenCode Go i -otrzymujesz swój klucz API. Jest to **całkowicie opcjonalne** i nie musisz z tego korzystać, aby -używać OpenCode. - -Jest przeznaczony przede wszystkim dla użytkowników międzynarodowych, a modele są hostowane w USA, UE i Singapurze, co zapewnia stabilny globalny dostęp. - ---- - -## Tło - -Otwarte modele stały się naprawdę dobre. Obecnie osiągają wydajność zbliżoną do modeli własnościowych w zadaniach związanych z kodowaniem. A ponieważ wielu dostawców może je oferować konkurencyjnie, są one zazwyczaj znacznie tańsze. - -Jednak uzyskanie do nich niezawodnego dostępu o niskich opóźnieniach może być trudne. Dostawcy różnią się pod względem jakości i dostępności. - -:::tip -Przetestowaliśmy wybraną grupę modeli i dostawców, którzy dobrze współpracują z OpenCode. -::: - -Aby to naprawić, zrobiliśmy kilka rzeczy: - -1. Przetestowaliśmy wybraną grupę otwartych modeli i porozmawialiśmy z ich zespołami na temat najlepszych sposobów ich uruchamiania. -2. Następnie nawiązaliśmy współpracę z kilkoma dostawcami, aby upewnić się, że są one obsługiwane poprawnie. -3. Na koniec przetestowaliśmy kombinację modelu/dostawcy i stworzyliśmy listę, którą możemy z przekonaniem polecić. - -OpenCode Go daje Ci dostęp do tych modeli za **5 $ za pierwszy miesiąc**, a następnie **10 $/miesiąc**. - ---- - -## Jak to działa - -OpenCode Go działa jak każdy inny dostawca w OpenCode. - -1. Logujesz się do **OpenCode Zen**, subskrybujesz Go i - kopiujesz swój klucz API. -2. Uruchamiasz komendę `/connect` w TUI, wybierasz `OpenCode Go` i wklejasz - swój klucz API. -3. Uruchom `/models` w TUI, aby zobaczyć listę modeli dostępnych w ramach Go. - -:::note -Tylko jeden członek na obszar roboczy (workspace) może zasubskrybować OpenCode Go. -::: - -Obecna lista modeli obejmuje: - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -Lista modeli może ulec zmianie w miarę testowania i dodawania nowych. - ---- - -## Limity użycia - -OpenCode Go zawiera następujące limity: - -- **Limit 5-godzinny** — użycie o wartości 12 $ -- **Limit tygodniowy** — użycie o wartości 30 $ -- **Limit miesięczny** — użycie o wartości 60 $ - -Limity są zdefiniowane w wartości w dolarach. Oznacza to, że rzeczywista liczba żądań zależy od używanego modelu. Tańsze modele, takie jak DeepSeek V4 Flash, pozwalają na więcej żądań, podczas gdy modele o wyższym koszcie, takie jak GLM-5.2, pozwalają na mniej. - -Poniższa tabela przedstawia szacunkową liczbę żądań na podstawie typowych wzorców korzystania z Go: - -| Model | żądania na 5 godzin | żądania na tydzień | żądania na miesiąc | -| ----------------- | ------------------- | ------------------ | ------------------ | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -Szacunki te opierają się na zaobserwowanych średnich wzorcach żądań: - -- GLM-5.2/5.1 — 700 tokenów wejściowych, 52 000 w pamięci podręcznej, 150 tokenów wyjściowych na żądanie -- Kimi K2.7 Code/K2.6 — 870 tokenów wejściowych, 55 000 w pamięci podręcznej, 200 tokenów wyjściowych na żądanie -- DeepSeek V4 Pro — 750 tokenów wejściowych, 82 000 w pamięci podręcznej, 290 tokenów wyjściowych na żądanie -- DeepSeek V4 Flash — 790 tokenów wejściowych, 68 000 w pamięci podręcznej, 280 tokenów wyjściowych na żądanie -- MiniMax M3 — 510 tokenów wejściowych, 56 000 w pamięci podręcznej, 190 tokenów wyjściowych na żądanie -- MiniMax M2.7 — 300 tokenów wejściowych, 55 000 w pamięci podręcznej, 125 tokenów wyjściowych na żądanie -- Qwen3.7 Max — 420 tokenów wejściowych, 66 000 w pamięci podręcznej, 200 tokenów wyjściowych na żądanie -- Qwen3.7 Plus — 500 tokenów wejściowych, 57 000 w pamięci podręcznej, 190 tokenów wyjściowych na żądanie -- Qwen3.6 Plus — 500 tokenów wejściowych, 57 000 w pamięci podręcznej, 190 tokenów wyjściowych na żądanie -- MiMo-V2.5 — 830 tokenów wejściowych, 71 500 w pamięci podręcznej, 295 tokenów wyjściowych na żądanie -- MiMo-V2.5-Pro — 790 tokenów wejściowych, 86 000 w pamięci podręcznej, 305 tokenów wyjściowych na żądanie - -Szacunki opierają się również na następujących cenach za 1M tokenów: - -| Model | Wejście | Wyjście | Odczyt z cache | Zapis do cache | -| ---------------------------- | ------- | ------- | -------------- | -------------- | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -Możesz śledzić swoje bieżące zużycie w **konsoli**. - -:::tip -Jeśli osiągniesz limit użycia, możesz nadal korzystać z darmowych modeli. -::: - -Limity użycia mogą ulec zmianie w miarę wyciągania wniosków z wczesnego użytkowania i opinii. - ---- - -### Użycie ponad limity - -Jeśli masz również środki na swoim saldzie Zen, możesz włączyć opcję **Użyj salda** (Use balance) w konsoli. Po włączeniu Go będzie korzystać z Twojego salda Zen po osiągnięciu limitów użycia zamiast blokować żądania. - ---- - -## Punkty końcowe - -Możesz również uzyskać dostęp do modeli Go za pośrednictwem następujących punktów końcowych API. - -| Model | ID modelu | Punkt końcowy | Pakiet AI SDK | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -[ID modelu](/docs/config/#models) w Twojej konfiguracji OpenCode -używa formatu `opencode-go/`. Na przykład dla Kimi K2.7 Code należy użyć -`opencode-go/kimi-k2.7-code` w swojej konfiguracji. - ---- - -### Modele - -Pełną listę dostępnych modeli i ich metadane możesz pobrać z: - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## Prywatność - -Plan został zaprojektowany przede wszystkim z myślą o użytkownikach międzynarodowych, a modele są hostowane w US, EU i Singapore, aby zapewnić stabilny dostęp na całym świecie. Nasi dostawcy stosują politykę zerowej retencji i nie wykorzystują Twoich danych do trenowania modeli. - ---- - -## Cele - -Stworzyliśmy OpenCode Go, aby: - -1. Uczynić kodowanie z pomocą sztucznej inteligencji **dostępnym** dla większej liczby osób dzięki niskokosztowej subskrypcji. -2. Zapewnić **niezawodny** dostęp do najlepszych otwartych modeli do kodowania. -3. Wybierać modele, które są **przetestowane i sprawdzone w testach wydajności** do użytku przez agentów kodujących. -4. Zapewnić **brak ograniczeń (no lock-in)**, pozwalając na korzystanie z dowolnego innego dostawcy wraz z OpenCode. diff --git a/packages/web/src/content/docs/pl/ide.mdx b/packages/web/src/content/docs/pl/ide.mdx deleted file mode 100644 index 6c78c80000..0000000000 --- a/packages/web/src/content/docs/pl/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: IDE -description: Rozszerzenie opencode dla VS Code, Cursor i innych IDE ---- - -opencode integruje się z VS Code, Cursorem lub obsługującym terminal IDE. Aby uruchomić, po prostu uruchom `opencode` w terminalu. - ---- - -## Stosowanie - -- **Szybkie uruchomienie**: użycie `Cmd+Esc` (Mac) lub `Ctrl+Esc` (Windows/Linux), aby uruchomić opencode w uruchamianiu terminala lub skoncentruj się na uruchamianiu terminala, jeśli jest już uruchomiony. -- **Nowa sesja**: `Cmd+Shift+Esc` (Mac) lub `Ctrl+Shift+Esc` (Windows/Linux), aby została nowa konfiguracja terminala opencode, nawet jeśli jest już otwarta. Możesz także kliknąć przycisk opencode w interfejsie użytkownika. -- **Świadomość kontekstu**: Automatycznie udostępnia wybór lub kartę za pomocą opencode. -- **Skróty do odwołania do plików**: `Cmd+Option+K` (Mac) lub `Alt+Ctrl+K` (Linux/Windows), aby wstawić odnośnik do plików. Na przykład `@File#L37-42`. - ---- - -## Instalacja - -Aby poznać opencode na VS Code w forkach, takich jak Cursor, Windsurf, VSCodium: - -1. Otwórz kod VS -2. Otwórz innowacyjny terminal -3. Uruchom `opencode` — rozszerzenie instaluje się automatycznie - -Jeśli z drugiej strony chcesz zainstalować własne IDE po uruchomieniu `/editor` lub `/export` z TUI, należy zainstalować `export EDITOR="code --wait"`. [Dowiedz się więcej](/docs/tui/#editor-setup). - ---- - -### Instalacja ręczna - -Wyszukaj **opencode** na rynku rozszerzonym i kliknij **Zainstaluj**. - ---- - -### Rozwiązywanie problemów - -Jeśli rozwiązanie nie zostanie zainstalowane automatycznie: - -- zastosowanie się, że użycie `opencode` w terminalu. -- zadziałanie, że CLI dla Twojego IDE jest zainstalowane: - - Dla kodu VS: polecenie `code` - - Dla kura: polecenie `cursor` - - Dla windsurfingu: decyzja `windsurf` - - Dla VSCodium: decyzja `codium` - - Jeśli nie, uruchom `Cmd+Shift+P` (Mac) lub `Ctrl+Shift+P` (Windows/Linux) i wyszukaj „Polecenie: zastosowanie decyzji„ kod ”w PATH” (lub właściwyk dla twojego IDE) -- zadziałanie, że VS Code ma pozwolenie na instalację rozszerzoną diff --git a/packages/web/src/content/docs/pl/index.mdx b/packages/web/src/content/docs/pl/index.mdx deleted file mode 100644 index fc571ec5d9..0000000000 --- a/packages/web/src/content/docs/pl/index.mdx +++ /dev/null @@ -1,347 +0,0 @@ ---- -title: Wstęp -description: Zacznij pracę z opencode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" -import config from "../../../../config.mjs" -export const console = config.console - -[**opencode**](/) to agent kodujący AI typu open source. Jest dostępny jako interfejs terminalowy, aplikacja desktopowa i rozszerzenie IDE. - -![opencode TUI z motywem opencode](../../../assets/lander/screenshot.png) - -Zacznijmy. - ---- - -#### Warunki wstępne - -Aby uzyskać dostęp do opencode w swoim terminalu, będziesz potrzebować: - -1. Nowoczesny emulator terminala, taki jak: - - [WezTerm](https://wezterm.org), wieloplatformowy - - [Alacritty](https://alacritty.org), wieloplatformowy - - [Ghostty](https://ghostty.org), Linux i macOS - - [Kitty](https://sw.kovidgoyal.net/kitty/), Linux i macOS - -2. Klucze API dla dostawców LLM, z których korzystasz. - ---- - -## Instalacja - -Najłatwiej zainstalować opencode za pomocą skryptu instalacyjnego. - -```bash -curl -fsSL https://opencode.ai/install | bash -``` - -Możesz też użyć poniższych metod instalacji: - -- **Przy użyciu Node.js** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **Korzystanie z Homebrew na macOS i Linux** - - ```bash - brew install anomalyco/tap/opencode - ``` - - > W celu uzyskania najbardziej aktualnej wersji zalecamy korzystanie z opencode. Oficjalna formuła `brew install opencode` jest utrzymywana przez zespół Homebrew i jest aktualizowana. - -- **Korzystanie z Paru na Arch Linux** - - ```bash - sudo pacman -S opencode # Arch Linux (Stable) - paru -S opencode-bin # Arch Linux (Latest from AUR) - ``` - -#### Windows - -:::tip[Zalecane: Uruchamianie w WSL] -Aby najlepiej wykorzystać działanie w systemie Windows, zalecamy włączenie [Podsystemu Windows dla systemu Linux (WSL)](/docs/windows-wsl). Zapewnia to pełną kompatybilność z funkcjami opencode. -::: - -- **Używając Chocolatey** - - ```bash - choco install opencode - ``` - -- **Korzystanie z Scoop** - - ```bash - scoop install opencode - ``` - -- **Przy użyciu NPM** - - ```bash - npm install -g opencode-ai - ``` - -- **Używając Mise’a** - - ```bash - mise use -g github:anomalyco/opencode - ``` - -- **Korzystanie z Dockera** - - ```bash - docker run -it --rm ghcr.io/anomalyco/opencode - ``` - -Obecnie pracujemy nad instalacją opencode w systemie Windows za pomocą Bun. - -Możesz także pobrać plik binarny z [Releases](https://github.com/anomalyco/opencode/releases). - ---- - -## Konfiguracja - -Dzięki opencode możesz korzystać z dowolnego dostawcy LLM, konfigurując jego klucze API. - -Jeśli będziesz korzystać z wielu dostawców LLM, zalecamy skorzystanie z [OpenCode Zen](/docs/zen). -Aby uzyskać dostęp do wyselekcjonowanej listy modeli, które zostały zatwierdzone i zweryfikowane przez zespół opencode. - -1. Uruchom polecenie `/connect` w TUI, wybierz opencode i przejdź do [opencode.ai/auth](https://opencode.ai/auth). - - ```txt - /connect - ``` - -2. Zaloguj się, dodaj szczegóły rozliczeniowe i skopiuj klucz API. - -3. Wklej swój klucz API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -Alternatywnie możesz wybrać jednego z dodatkowych dostawców. [Dowiedz się więcej](/docs/providers#directory). - ---- - -## Inicjalizacja - -Po skonfigurowaniu dostawcy możesz przejść do projektu, nad którym chcesz pracować. - -```bash -cd /path/to/project -``` - -Uruchom opencode. - -```bash -opencode -``` - -Następnie zainicjuj opencode dla projektu, uruchamiając odpowiednie polecenie. - -```bash frame="none" -/init -``` - -Spowoduje to, że opencode przeanalizuje Twój projekt i utworzy plik `AGENTS.md` w katalogu głównym projektu. - -:::tip -Powinieneś zacommitować plik `AGENTS.md` swojego projektu w Git. -::: - -Pomaga to opencode zrozumieć strukturę projektu i stosowane wzorce kodowania. - ---- - -## Użycie - -Teraz możesz pracować nad swoim projektem. Możesz zapytać o wszystko! - -Jeśli dopiero zaczynasz korzystać z agenta kodującego AI, oto kilka wskazówek, które mogą być pomocne. - ---- - -### Zadawaj pytania - -Możesz poprosić opencode o wyjaśnienie bazy kodu. - -:::tip -Użyj `@` do wyszukiwania rozmytego plików w projekcie. -::: - -```txt frame="none" "@packages/functions/src/api/index.ts" -How is authentication handled in @packages/functions/src/api/index.ts -``` - -Jest to pomocne, jeśli istnieje część bazy kodu, nad którą nie pracowałeś. - ---- - -### Dodaj funkcje - -Możesz poprosić opencode o dodanie nowej funkcji do Twojego projektu. Najpierw zalecamy poproszenie o przygotowanie planu. - -1. **Stwórz Plan** - - opencode ma _Plan Mode_, który umożliwia wyłączenie zmian i - zamiast tego zasugeruje, jak zaimplementować tę funkcję. - - Przejdź do niego za pomocą klawisza **Tab**. Zobaczysz odpowiedni wskaźnik w prawym dolnym rogu. - - ```bash frame="none" title="Switch to Plan mode" - - ``` - - Opiszmy teraz, co chcemy, żeby zrobił. - - ```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. - ``` - - Wersja opencode jest bardzo inteligentna, aby zrozumieć, czego chcesz. To pomaga - rozmawiaj z nim tak, jakbyś rozmawiał z młodszym programistą w swoim zespole. - - :::tip - Podaj opencode kontekst, aby zrozumiał, czego chcesz. - ::: - -2. **Udoskonalanie planu** - - Gdy będziesz mieć plan, możesz zostawić go lub dodać więcej. - - ```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 - Przeciągnij i upuść obrazy do terminala, aby dodać je do monitu. - ::: - - opencode może zeskanować obrazy, które mu przekażesz i zrozumieć je. Możesz to zrobić, przeciągając i upuszczając obraz do terminala. - -3. **Wprowadź zmiany** - - Kiedy już będziesz zadowolony z planu, przełącz się z powrotem do _Act Mode_ naciskając klawisz **Tab**. - - ```bash frame="none" - - ``` - - Poproś o wprowadzenie zmian. - - ```bash frame="none" - Sounds good! Go ahead and make the changes. - ``` - ---- - -### Wprowadź zmiany - -Aby wprowadzić kolejną zmianę, możesz poprosić opencode lub zrobić to bezpośrednio bez konieczności wcześniejszego przeglądania planu. - -```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 -``` - -Musisz upewnić się, że dostarczyłeś odpowiednie pliki, aby opencode mógł wprowadzić zmiany. - ---- - -### Cofnij zmiany - -Załóżmy, że prosisz opencode o wprowadzenie zmian. - -```txt frame="none" "@packages/functions/src/api/index.ts" -Can you refactor the function in @packages/functions/src/api/index.ts? -``` - -Ale zdajesz sobie sprawę, że to nie jest to, czego chciałeś. **Możesz cofnąć** zmiany -za pomocą polecenia `/undo`. - -```bash frame="none" -/undo -``` - -opencode cofnie teraz zmiany i wyświetli wiadomość ponownie. - -```txt frame="none" "@packages/functions/src/api/index.ts" -Can you refactor the function in @packages/functions/src/api/index.ts? -``` - -Możesz edytować monit i poprosić opencode o ponowną próbę. - -:::tip -Możesz użyć `/undo` wiele razy, aby cofnąć wiele zmian. -::: - -Możesz też **przywrócić** zmianę za pomocą polecenia `/redo`. - -```bash frame="none" -/redo -``` - ---- - -## Udostępnianie - -Rozmowy z opencode można [udostępniać swojemu zespołowi](/docs/share). - -```bash frame="none" -/share -``` - -Spowoduje to, że link do bieżącej rozmowy zostanie skopiowany do schowka. - -:::note -Rozmowy nie są ogólnodostępne. -::: - -Oto [przykładowa rozmowa](https://opencode.ai/s/4XP1fce5) z opencode. - ---- - -## Dostosuj - -To tyle! Jesteś teraz profesjonalistą w korzystaniu z opencode. - -Aby dostosować go do potrzeb, zalecamy [wybranie motywu](/docs/themes), [dostosowanie skrótów klawiaturowych](/docs/keybinds), [konfigurowanie programów formatujących kod](/docs/formatters), [tworzenie niestandardowych poleceń](/docs/commands) lub zabawę z [konfiguracją opencode](/docs/config). diff --git a/packages/web/src/content/docs/pl/keybinds.mdx b/packages/web/src/content/docs/pl/keybinds.mdx deleted file mode 100644 index 0d3068feaf..0000000000 --- a/packages/web/src/content/docs/pl/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Skróty klawiszowe -description: Dostosuj swoje skróty klawiszowe. ---- - -OpenCode zawiera listę skrótów klawiszowych, które można dostosować za pomocą `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "h", - "display_thinking": "none" - } -} -``` - ---- - -## Klucz lidera - -opencode używa klucza `leader` dla głównych skrótów klawiszowych. Rozwiązanie problemu konfliktów w terminalu. - -Domyślnie `ctrl+x` jest klawiszem głównym i główną akcją wymaga najpierw naciśnięcia klawisza lidera, a następnie skrótu. Na przykład, aby ponownie zastosować, następnie następuje `ctrl+x`, a następnie następuje `n`. - -Nie musisz mieć klawisza wiodącego do skrótów klawiszowych, ale zalecamy to Reg. - ---- - -## Wyłącz powiązanie klawiszy - -Możesz wyłączyć skrót klawiszowy, dodając klucz do `tui.json` z wartością "none". - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "session_compact": "none" - } -} -``` - ---- - -## Skróty monitów na pulpicie - -Pole sprawdzania aplikacji komputerowej opencode obsługuje popularne skróty w stylu Readline/Emacs do edycji tekstu. Są one dostępne i obecnie nie można ich skonfigurować za pomocą `opencode.json`. - -| Skrót | Akcja | -| -------- | ------------------------------------------------------------- | -| `ctrl+a` | Przejdź do źródła regularnej linii | -| `ctrl+e` | Przejdź na koniec bieżącej linii | -| `ctrl+b` | Przesuń kursor do tyłu o jeden znak | -| `ctrl+f` | Przesuń kursor o jeden znak do przodu | -| `alt+b` | Przesuń kursor o jedno słowo wstecz | -| `alt+f` | Przesuń kursor do przodu o jedno słowo | -| `ctrl+d` | Usuń znak pod kursorem | -| `ctrl+k` | Zabij do końca linii | -| `ctrl+u` | Zabij na początek linii | -| `ctrl+w` | Zabij poprzednie słowo | -| `alt+d` | Zabij następne słowo | -| `ctrl+t` | Transponuj znaki | -| `ctrl+g` | Anuluj wyskakujące okienka / przerwij uruchamianie odpowiedzi | - ---- - -## Shift+Enter - -Istnieją terminale, które nie wysyłają klawiszy modyfikujących z Enterem. Może być konieczne skonfigurowanie terminala tak, aby wysłać `Shift+Enter` jako przerwanie zakończenia. - -### Terminal Windowsowy - -Otwórz swój `settings.json` pod adresem: - -``` -%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json -``` - -Dodaj do tablicy `actions` na poziomie wyższym: - -```json -"actions": [ - { - "command": { - "action": "sendInput", - "input": "\u001b[13;2u" - }, - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Dodaj do tablicy `keybindings` na poziomie wyższym: - -```json -"keybindings": [ - { - "keys": "shift+enter", - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Zapisz plik i uruchom ponownie terminal Windows lub otwórz nową kartę. diff --git a/packages/web/src/content/docs/pl/lsp.mdx b/packages/web/src/content/docs/pl/lsp.mdx deleted file mode 100644 index 5d7048f270..0000000000 --- a/packages/web/src/content/docs/pl/lsp.mdx +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: Serwery LSP -description: OpenCode integruje się z serwerami LSP. ---- - -OpenCode może integrować się z serwerami Language Server Protocol (LSP), aby używać diagnostyki jako informacji zwrotnej dla agenta. - ---- - -## Wbudowane - -OpenCode posiada kilka wbudowanych serwerów LSP dla następujących języków: - -| Serwer LSP | Rozszerzenia | Wymagania | -| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------ | -| astro | .astro | Automatyczna instalacja dla Astro | -| bash | .sh, .bash, .zsh, .ksh | Automatycznie instaluje serwer języka bash | -| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Automatyczna instalacja dla C/C++ | -| csharp | .cs | Zainstalowany `.NET SDK` | -| clojure-lsp | .clj, .cljs, .cljc, .edn | Dostępne polecenie `clojure-lsp` | -| dart | .dart | Dostępne polecenie `dart` | -| deno | .ts, .tsx, .js, .jsx, .mjs | Dostępne polecenie `deno` (automatyczne wykrywanie deno.json/deno.jsonc) | -| elixir-ls | .ex, .exs | Dostępne polecenie `elixir` | -| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | Zależność `eslint` w projekcie | -| fsharp | .fs, .fsi, .fsx, .fsscript | Zainstalowany `.NET SDK` | -| gleam | .gleam | Dostępne polecenie `gleam` | -| gopls | .go | Dostępne polecenie `go` | -| hls | .hs, .lhs | Dostępne polecenie `haskell-language-server-wrapper` | -| jdtls | .java | Zainstalowany `Java SDK (version 21+)` | -| julials | .jl | Zainstalowane `julia` i `LanguageServer.jl` | -| kotlin-ls | .kt, .kts | Automatyczna instalacja dla Kotlin | -| lua-ls | .lua | Automatyczna instalacja dla Lua | -| nixd | .nix | Dostępne polecenie `nixd` | -| ocaml-lsp | .ml, .mli | Dostępne polecenie `ocamllsp` | -| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | Zależność `oxlint` w projekcie | -| php intelephense | .php | Automatyczna instalacja dla PHP | -| prisma | .prisma | Dostępne polecenie `prisma` | -| pyright | .py, .pyi | Zainstalowana zależność `pyright` | -| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | Dostępne polecenie `ruby` i `gem` | -| rust | .rs | Dostępne polecenie `rust-analyzer` | -| sourcekit-lsp | .swift, .objc, .objcpp | Zainstalowany `swift` (`xcode` na macOS) | -| svelte | .svelte | Automatyczna instalacja dla aplikacji Svelte | -| terraform | .tf, .tfvars | Automatyczna instalacja z wydań GitHub | -| tinymist | .typ, .typc | Automatyczna instalacja z wydań GitHub | -| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | Zależność `typescript` w projekcie | -| vue | .vue | Automatyczna instalacja dla Vue | -| yaml-ls | .yaml, .yml | Automatycznie instaluje serwer języka yaml Red Hat | -| zls | .zig, .zon | Dostępne polecenie `zig` | - -LSP jest domyślnie wyłączone. Gdy jest włączone, serwery uruchamiają się po wykryciu jednego z obsługiwanych rozszerzeń plików i spełnieniu wymagań. - -:::note -Możesz wyłączyć automatyczne pobieranie serwerów LSP, ustawiając zmienną środowiskową `OPENCODE_DISABLE_LSP_DOWNLOAD` na `true`. -::: - ---- - -## Jak to działa - -Gdy LSP jest włączony i OpenCode otwiera plik: - -1. Sprawdza plik pod kątem wszystkich dostępnych serwerów LSP. -2. Uruchamia odpowiedni serwer LSP, jeśli jeszcze nie działa. - ---- - -## Dobre praktyki - -LSP może pomóc agentowi znajdować i naprawiać problemy, dostarczając diagnostykę z serwerów językowych. Jest to przydatne w niektórych projektach, ale nie zawsze jest jednoznaczną korzyścią. - -Serwery językowe mogą wypaść z synchronizacji, zużywać dużo pamięci, różnić się między wersjami lub projektami i spowalniać workflow agenta. W wielu projektach lepiej, aby agent uruchamiał lint, typecheck lub inne diagnostyczne narzędzia CLI bezpośrednio; wtedy błędy wracają do pętli agenta bez tych kompromisów. Udokumentuj te komendy w plikach instrukcji, takich jak `AGENTS.md` lub skills, aby agent wiedział, co uruchomić. Włącz LSP, gdy Twój projekt korzysta z dodatkowej informacji zwrotnej z serwera językowego. - ---- - -## Konfiguracja - -Możesz włączać i dostosowywać serwery LSP poprzez sekcję `lsp` w konfiguracji OpenCode. - -Aby włączyć wszystkie wbudowane serwery LSP, ustaw `lsp` na `true`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -Użyj obiektu, aby pozostawić wbudowane serwery włączone i jednocześnie skonfigurować nadpisania lub serwery niestandardowe. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": {} -} -``` - -Każdy serwer LSP obsługuje następujące właściwości: - -| Właściwość | Typ | Opis | -| ---------------- | -------- | ------------------------------------------------------ | -| `disabled` | boolean | Ustaw na `true`, aby wyłączyć ten serwer LSP | -| `command` | string[] | Polecenie uruchomienia serwera LSP | -| `extensions` | string[] | Rozszerzenia plików, które powinny używać tego serwera | -| `env` | object | Zmienne środowiskowe ustawiane podczas uruchamiania | -| `initialization` | object | Opcje inicjalizacji do wysłania do serwera LSP | - -Spójrzmy na kilka przykładów. - ---- - -### Zmienne środowiskowe - -Użyj `env`, aby ustawić zmienne środowiskowe podczas uruchamiania serwera LSP: - -```json title="opencode.json" {5-7} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "rust": { - "env": { - "RUST_LOG": "debug" - } - } - } -} -``` - ---- - -### Opcje inicjalizacji - -Użyj właściwości `initialization`, aby przekazać niestandardowe opcje inicjalizacji do serwera LSP. Są one wysyłane w żądaniu `initialize` protokołu LSP: - -```json title="opencode.json" {5-9} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "initialization": { - "preferences": { - "importModuleSpecifierPreference": "relative" - } - } - } - } -} -``` - -:::note -Opcje inicjalizacji różnią się w zależności od serwera LSP. Sprawdź dokumentację swojego serwera LSP. -::: - ---- - -### Wyłączanie serwerów LSP - -Jeśli `lsp` zostanie pominięte, wszystkie serwery LSP są wyłączone. Aby wyłączyć wszystkie serwery LSP po tym, jak inna konfiguracja je włączyła, ustaw `lsp` na `false`: - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": false -} -``` - -Aby wyłączyć **określony** serwer LSP, ustaw `disabled` na `true`: - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "disabled": true - } - } -} -``` - ---- - -### Niestandardowe serwery LSP - -Możesz dodać niestandardowe serwery LSP, podając polecenie i rozszerzenia plików: - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "custom-lsp": { - "command": ["custom-lsp-server", "--stdio"], - "extensions": [".custom"] - } - } -} -``` - ---- - -## Dodatkowe informacje - -### PHP Intelephense - -PHP Intelephense oferuje funkcje premium poprzez klucz licencyjny. Możesz użyć klucza licencyjnego, umieszczając go (sam klucz) w pliku tekstowym pod adresem: - -- macOS/Linux: `$HOME/intelephense/license.txt` -- Windows: `%USERPROFILE%/intelephense/license.txt` - -Plik powinien zawierać wyłącznie klucz licencyjny, bez białych znaków. diff --git a/packages/web/src/content/docs/pl/mcp-servers.mdx b/packages/web/src/content/docs/pl/mcp-servers.mdx deleted file mode 100644 index 6aea7a4754..0000000000 --- a/packages/web/src/content/docs/pl/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -title: Serwery MCP -description: Dodaj lokalne i zdalne narzędzie MCP. ---- - -Możesz dodać dodatkowe informacje do opencode za pomocą _Model Context Protocol_, w skrócie MCP. opencode obsługuje zarówno serwery lokalne, jak i zdalne. - -Po dodaniu narzędzi MCP są automatycznie dostępne dla LLM wraz z narzędziami narzędziowymi. - ---- - -#### Zastrzeżenia - -Kiedy używasz serwera MCP, zmieniając kontekst. Może szybko się sumować, jeśli masz dużo narzędzia. Zalecamy ostrożność, z jakich serwerów MCP korzystasz. - -:::tip -Serwery MCP dodają do twojego kontekstu, dlatego należy zachować ostrożność przy wyłączaniu tych serwerów. -::: - -Niektóre serwery MCP, takie jak serwer MCP GitHub, mają szerokie możliwości dodawania wielu tokenów i mogą łatwo przekraczać limit kontekstu. - ---- - -## Włączać - -Dostępny serwery MCP w [opencode Config](https://opencode.ai/docs/config/) w `mcp`. Dodaj każdy MCP z unikalną nazwą. Możesz zgłosić się do tego MCP po nazwie, pytając LLM. - -```jsonc title="opencode.jsonc" {6} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "name-of-mcp-server": { - // ... - "enabled": true, - }, - "name-of-other-mcp-server": { - // ... - }, - }, -} -``` - -Możesz także wyłączyć serwer, ustawiając `enabled` na `false`. Jest to urządzenie, które jest urządzeniem biologicznym, bez usuwania z urządzenia. - ---- - -### Zastępowanie zdalnych ustawień domyślnych - -Organizacje mogą udostępniać serwery MCP za pośrednictwem punktu końcowego `.well-known/opencode`. Serwer może być podłączony, dzięki czemu użytkownicy mogą wybrać te, których. - -Aby włączyć serwer ze zdalnej konfiguracji organizacji, dodaj go do wyłączenia za pomocą `enabled: true`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - -Lokalne wartości konfiguracyjne za występujące zdalne wartości. Aby uzyskać więcej informacji, zobacz [pierwszeństwo konfiguracji](/docs/config#precedence-order). - ---- - -## Lokalny - -Dodaj lokalne serwery MCP za pomocą `type` do `"local"` w obiekcie 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", - }, - }, - }, -} -``` - -Polecenie sposobu uruchamiania lokalnego serwera MCP. Można także zainstalować listę konfiguracyjną. - -Oto przykładowy sposób dodania testowego serwera 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"], - }, - }, -} -``` - -Aby z niego skorzystać, można dodać `use the mcp_everything tool` do moich podpowiedzi. - -```txt "mcp_everything" -use the mcp_everything tool to add the number 3 and 4 -``` - ---- - -#### Opcje - -Oto wszystkie opcje lokalnego serwera MCP. - -| Opcja | Wpisz | Wymagane | Opis | -| ------------- | ------- | -------- | -------------------------------------------------------------------------------------------- | -| `type` | String | Y | Typ połączenia z serwerem MCP musi być `"local"`. | -| `command` | Array | Y | Polecenie i argumenty uruchamiające serwer MCP. | -| `environment` | Object | | Zmienne ustawienia podczas uruchamiania serwera. | -| `enabled` | Boolean | | Włącz lub wyłącz serwer MCP podczas uruchamiania. | -| `timeout` | Number | | Limit czasu w ms na pobieranie narzędzia z serwera MCP. Wartość domyślna do 5000 (5 sekund). | - ---- - -## Zdalny - -Dodaj zdalne serwery MCP, ustawiając `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` na adres URL zdalnego serwera MCP i za pomocą opcji `headers` można znaleźć listę nagłówków. - ---- - -#### Opcje - -| Opcja | Wpisz | Wymagane | Opis | -| --------- | ------- | -------- | -------------------------------------------------------------------------------------------- | -| `type` | String | Y | Typ połączenia z serwerem MCP musi być `"remote"`. | -| `url` | String | Y | Adres URL zdalnego serwera MCP. | -| `enabled` | Boolean | | Włącz lub wyłącz serwer MCP podczas uruchamiania. | -| `headers` | Object | | Nagłówki do wysłania z wprowadzenia. | -| `oauth` | Object | | Konfiguracja uwierzytelniania OAuth. Zobacz sekcję [OAuth](#oauth) poniżej. | -| `timeout` | Number | | Limit czasu w ms na pobieranie narzędzia z serwera MCP. Wartość domyślna do 5000 (5 sekund). | - ---- - -## OAuth - -opencode automatyczne uwierzytelnianie OAuth dla zdalnych serwerów MCP. Gdy serwer wymaga uwierzytelnienia, opencode: - -1. Wykryj odpowiedź 401 i zainijuj przepływ OAuth -2. używa **Dynamicznej rejestracji klienta (RFC 7591)**, jeśli jest obsługiwana przez serwer -3. Bezpiecznie przechowuj tokeny na wypadek ewentualnego zastosowania - ---- - -### Automatyczny - -W innym serwerze MCP z włączoną funkcją OAuth nie jest wymagana specjalna funkcja. Dostępny serwer bezprzewodowy: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "my-oauth-server": { - "type": "remote", - "url": "https://mcp.example.com/mcp" - } - } -} -``` - -Jeśli serwer wymaga uwierzytelnienia, opencode poprosi Cię o uwierzytelnienie przy próbie jego użycia. Jeśli nie, możesz [ręcznie podłączyć przepływ] (#authenticating) za pomocą `opencode mcp auth `. - ---- - -### Wstępnie zarejestrowany - -Jeśli posiadasz dostęp do klienta od dostawcy serwera MCP, możesz je udostępnić: - -```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" - } - } - } -} -``` - ---- - -### Uwierzytelnianie - -Możesz podać potwierdzenie lub potwierdzenie poświadczenia. - -Uwierzytelnij się za pomocą standardowego serwera MCP: - -```bash -opencode mcp auth my-oauth-server -``` - -Lista wszystkich serwerów MCP i ich status uwierzytelnienia: - -```bash -opencode mcp list -``` - -Usuń zapisane dane uwierzytelniające: - -```bash -opencode mcp logout my-oauth-server -``` - -Komenda `mcp auth` została udostępniona w celu autoryzacji. Po autoryzacji opencode bezpieczne przechowa tokeny w `~/.local/share/opencode/mcp-auth.json`. - ---- - -#### Wyłączanie OAuth - -Jeśli chcesz włączyć automatyczne OAuth dla serwera (np. dla serwerów, które zamiast tego używać kluczy API), ustaw `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}" - } - } - } -} -``` - ---- - -#### Opcje OAuth - -| Opcja | Wpisz | Opis | -| -------------- | --------------- | ---------------------------------------------------------------------------------------------------------------- | -| `oauth` | Object \| false | Obiekt konfiguracyjny OAuth lub `false`, aby wyłączyć automatyczne wykrywanie OAuth. | -| `clientId` | String | Identyfikator klienta OAuth. Jeżeli nie zostanie podany, zostanie podjęta próba dynamicznej rejestracji klienta. | -| `clientSecret` | String | Sekret klienta OAuth, plik jest wymagany przez serwer autoryzacji. | -| `scope` | String | Zakresy protokołu OAuth, których należy żądać podczas autoryzacji. | - -#### Debugowanie - -Jeśli serwer MCP nie może zostać uwierzytelniony, możesz zdiagnozować problemy z: - -```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 -``` - -Komenda `mcp debug` wyświetlanie stanu uwierzytelniania, testuje sprawdzanie protokołu HTTP i sprawdzenie sprawdzenia procesu OAuth. - ---- - -## Zarządzać - -Twoje MCP są dostępne jako narzędzie w opencode, obok narzędzi dodatkowych. Można to zrobić poprzez podłączenie opencode, jak również w innym przypadku. - ---- - -### Światowy - -Możesz to włączyć lub wyłączyć globalnie. - -```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 - } -} -``` - -Dostępne są również wzorca globu, aby wyłączyć wszystkie dyski 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 - } -} -``` - -Tutaj znajdziesz wzorca globalnego `my-mcp*`, aby wyłączyć wszystkie MCP. - ---- - -### Na agenta - -Jeśli masz największe serwery MCP, możesz włączyć je tylko dla poszczególnych agentów i być globalnie. Aby to zrobić: - -1. Wyłącz go jako narzędzie globalnie. -2. W [konfiguracji agenta](/docs/agents#tools) włącz serwer MCP jako narzędzie. - -```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 - } - } - } -} -``` - ---- - -#### Wzory globusów - -Wzorzec glob wykorzystuje proste wzorce globowania regularnych: - -- `*` dopasowuje zero lub więcej dowolnego znaku (np. `"my-mcp*"` dopasowuje `my-mcp_search`, `my-mcp_list` itd.) -- `?` odpowiada dokładnie jednemu znakowi -- Wszystkie pozostałe znaki pasują dosłownie - -:::note -Narzędzia serwera MCP są rejestrowane z nazwą serwera jako prefiksem, więc aby uzyskać dostęp do wszystkich narzędzi dla serwera, po prostu dostęp do: - -``` -"mymcpservername_*": false -``` - -::: - ---- - -## Przykłady - -Poniżej znajdują się przykłady niektórych serwerów MCP. Twój prywatny PR, udostępniany przez inne serwery. - ---- - -### Sentry - -Dodaj [serwer Sentry MCP](https://mcp.sentry.dev), aby móc wejść w interakcję z projektem i udostępnić Sentry. - -```json title="opencode.json" {4-8} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "sentry": { - "type": "remote", - "url": "https://mcp.sentry.dev/mcp", - "oauth": {} - } - } -} -``` - -Po dodaniu konfiguracji uwierzytelnij się za pomocą Sentry: - -```bash -opencode mcp auth sentry -``` - -Spowoduje otwarcie okna konfiguracji, w którym można zakończyć proces OAuth i połączyć opencode z kontem Sentry. - -Po uwierzytelnieniu oprogramowania Sentry w swoich monitach, aby rozprzestrzeniać zagrożenia, dane i błędy. - -```txt "use sentry" -Show me the latest unresolved issues in my project. use sentry -``` - ---- - -### Context7 - -Dodaj [serwer Context7 MCP](https://github.com/upstash/context7), aby przeszukać dokumenty. - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "context7": { - "type": "remote", - "url": "https://mcp.context7.com/mcp" - } - } -} -``` - -Jeśli założyłeś darmowe konto, możesz użyć klucza API i uzyskać wyższy limit stawek. - -```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}" - } - } - } -} -``` - -Załóż tutaj, że masz ustawioną zmienną środowiskową `CONTEXT7_API_KEY`. - -Dodaj `use context7` do swoich podpowiedzi, aby skorzystać z serwera Context7 MCP. - -```txt "use context7" -Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7 -``` - -Alternatywnie możesz zadać coś takiego do pliku [AGENTS.md](/docs/rules/). - -```md title="AGENTS.md" -When you need to search docs, use `context7` tools. -``` - ---- - -### Grep by Vercel - -Dodaj serwer MCP [Grep by Vercel](https://grep.app), aby przeszukać fragmenty kodu w serwisie GitHub. - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "gh_grep": { - "type": "remote", - "url": "https://mcp.grep.app" - } - } -} -``` - -Nazwaliśmy nasz serwer MCP `gh_grep`, możesz dodać `use the gh_grep tool` do swoich podpowiedzi, aby agent mógł z niego korzystać. - -```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 -``` - -Alternatywnie możesz zadać coś takiego do pliku [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. -``` diff --git a/packages/web/src/content/docs/pl/models.mdx b/packages/web/src/content/docs/pl/models.mdx deleted file mode 100644 index e1c7922904..0000000000 --- a/packages/web/src/content/docs/pl/models.mdx +++ /dev/null @@ -1,223 +0,0 @@ ---- -title: Modele -description: Konfigurowanie dostawcy i modelu LLM. ---- - -opencode używa [AI SDK](https://ai-sdk.dev/) i [Models.dev](https://models.dev) do obsługi **ponad 75 dostawców LLM** i obsługi uruchamiania modeli pierwszych. - ---- - -## Dostawcy - -Dostępna usługa dostawcy jest dostępna. Jeśli otrzymasz poświadczenie dostawcy za pomocą polecenia `/connect`, będzie on dostępny po uruchomieniu opencode. - -Dowiedz się więcej o [dostawcach](/docs/providers). - ---- - -## Wybierz model - -Po skonfigurowaniu dostawcy możesz wybrać dostępny model, wpisując: - -```bash frame="none" -/models -``` - ---- - -## Polecane modele - -Na rynku jest mnóstwo modeli, co tydzień pojawia się nowe. - -:::tip -Rozważ skorzystanie z jednego z rekomendowanych przez nas modeli. -::: - -Jednak tylko kilka z nich jest dobrych przy generowaniu kodu, jak i wywołaniu narzędzia. - -Oto kilka modeli, które dobrze współpracują z opencode, w kolejności. (Nie jest to lista wyczerpująca i nie jest konieczna aktualna): - -- GPT 5.2 -- Kodeks GPT 5.1 -- Klaudiusz Opus 4.5 -- Claude Sonnet 4.5 -- Minimax M2.1 -- Bliźnięta 3Pro - ---- - -## Ustaw wartość domyślną - -Aby zainstalować jeden z nich jako model domyślny, możesz zainstalować klucz `model` w swoim -opencode konfiguracja - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "model": "lmstudio/google/gemma-3n-e4b" -} -``` - -Tutaj pełny identyfikator do `provider_id/model_id`. Na przykład, użycie [OpenCode Zen](/docs/zen), przestrzeganie `opencode/gpt-5.1-codex` dla Kodeksu GPT 5.1. - -Jeśli skonfigurowałeś [dostawcę zwykłegogo] (./providers#custom), `provider_id` jest kluczem z części `provider` twojej konfiguracji, a `model_id` jest kluczem z `provider.models`. - ---- - -## Skonfiguruj modele - -Można globalnie skorzystać z opcji modelu poprzez plik 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, - }, - }, - }, - }, - }, - }, -} -``` - -Tutaj konfigurujemy urządzenia globalne dla dwóch modeli: `gpt-5` w przypadku dostępu za pośrednictwem dostawcy `openai` i `claude-sonnet-4-20250514` w przypadku dostępu za pośrednictwem dostawcy `anthropic`. -Wbudowane nazwy dostawców i modele można znaleźć na [Models.dev](https://models.dev). - -Można także skorzystać z opcji dla dowolnych agentów, których używa się. Konfiguracja agenta jest dostępna jako opcja globalna. [Dowiedz się więcej](/docs/agents/#additional). - -Można również zastosować alternatywne warianty, które wykluczają. Warianty konfiguracji ustawień konfiguracyjnych dla tego samego modelu bez tworzenia duplikatów wpisów: - -```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", - }, - }, - }, - }, - }, - }, -} -``` - ---- - -## Warianty - -Wiele modeli obsługuje wiele wariantów lub różnych wybranych. opencode jest dostarczany z podstawowymi wariantami wariantów dla dostawców. - -### Wbudowane warianty - -opencode jest dostarczany z domyślnymi wariantami dla wielu dostawców: - -**Antropiczny**: - -- `high` – Wysoki budżet na przemyślenie (domyślnie) -- `max` - Maksymalny budżet na myślenie - -**OpenAI**: - -Różni się zależnością od modelu, ale mniej więcej: - -- `none` – Brak uzasadnienia -- `minimal` - Minimalny wysiłek rozumowania -- `low` - Niewielki wysiłek w zakresie rozumowania -- `medium` – Średni wysiłek rozumowania -- `high` - Duży wysiłek w zakresie rozumowania -- `xhigh` - Bardzo duży wysiłek w zakresie rozumowania - -**Google**: - -- `low` — Mniejszy nakład pracy/budżet tokena -- `high` — Większy nakład pracy/budżet tokena - -:::tip -Lista ta nie jest kompletna. Wielu innych dostawców oferuje także opcję odchylenia ustawień. -::: - -### Warianty niestandardowe - -Można uwzględnić warianty lub dodać własne: - -```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, - }, - }, - }, - }, - }, - }, -} -``` - -### Przełączanie wariantów - -Naciśnij klawisza `variant_cycle`, aby szybko przełączać się między wariantami. [Dowiedz się więcej](/docs/keybinds). - ---- - -## Ładowanie modeli - -Po uruchomieniu opencode sprawdzanie modeli w następującej kolejności: - -1. Flaga wiersza autora `--model` lub `-m`. Format jest taki sam jak w pliku konfiguracyjnym: `provider_id/model_id`. - -2. Lista modeli w konstrukcji opencode. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-20250514" - } - ``` - - Sformatuj tutaj na `provider/model`. - -3. Ostatni używany model. - -4. Pierwszy model sterujący priorytetem wewnętrznym. diff --git a/packages/web/src/content/docs/pl/network.mdx b/packages/web/src/content/docs/pl/network.mdx deleted file mode 100644 index d010343eca..0000000000 --- a/packages/web/src/content/docs/pl/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Sieć -description: Skonfiguruj serwery proxy i certyfikaty uwierzytelniające. ---- - -opencode obsługa standardowego zmiennego proxy i certyfikatów dla usług sieciowych przedsiębiorstw. - ---- - -## Pełnomocnik - -opencode respektuje standardowe zmienne środowiskowe proxy. - -```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 komunikuje się z popularnym serwerem HTTP. Aby zapobiec łączem routingu, należy ominąć serwer proxy dla tego połączenia. -::: - -Możesz pozostawić port serwera i hosta za pomocą [flaga CLI](/docs/cli#run). - ---- - -### Uwierzytelniać - -Jeśli Twój serwer proxy wymaga podstawowego uwierzytelniania, dołącz dane uwierzytelniające w adresie URL. - -```bash -export HTTPS_PROXY=http://username:password@proxy.example.com:8080 -``` - -:::caution -Unikaj kodowania haseł na stałe. Użyj testów kontrolnych lub oprogramowania poświadczeń. -::: - -W przypadku serwera proxy zaawansowanego uwierzytelniania, jak NTLM lub Kerberos, dostęp do bram LLM, który umożliwia uwierzytelnianie. - ---- - -## Certyfikaty niestandardowe - -Jeśli Twoje przedsiębiorstwo korzysta z niestandardowych usług, urzędów dostępu do HTTPS, skonfiguruj opencode tak, aby im ufać. - -```bash -export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem -``` - -Działają tylko w przypadku proxy, jak i bezpośredniego dostępu do API. diff --git a/packages/web/src/content/docs/pl/permissions.mdx b/packages/web/src/content/docs/pl/permissions.mdx deleted file mode 100644 index c33857277d..0000000000 --- a/packages/web/src/content/docs/pl/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -title: Uprawnienia -description: Kontroluj, które Akcje wymagają zatwierdzenia do uruchomienia. ---- - -opencode używa `permission`, aby uniknąć, czy dana akcja została wykonana automatycznie, zachowana monit lub została zablokowana. - -Od `v1.1.1` starsza stworzona logiczna `tools` jest przestarzała i została stworzona scalona z `permission`. Stara wersja `tools` jest nadal obsługiwana w celu zapewnienia zgodności wstecznej. - ---- - -## Działania - -Każda reguła uprawnień skutkuje jedną z: - -- `"allow"` — uruchamiany bez zgody -- `"ask"` — monit o zatwierdzenie -- `"deny"` — zablokuj akcję - ---- - -## Konfiguracja - -Możesz zainstalować uprawnienia globalnie (za pomocą `*`) i znajdującego się w nim narzędzia. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "*": "ask", - "bash": "allow", - "edit": "deny" - } -} -``` - -Możesz także zainstalować wszystkie uprawnienia na raz: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": "allow" -} -``` - ---- - -## Szczegółowe reguły (składnia obiektu) - -Można skorzystać z różnych działań, które zależą od danych użytkowych. - -```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" - } - } -} -``` - -Reguły są zalecane na podstawie odpowiedniego wzorca, przy czym **ostatnia wynikaca reguła wygrywa**. Powszechnym wzorcem jest umieszczenie na pierwszym miejscu odpowiedniego catch-all `"*"`, a po bardziej szczegółowe zasady. - -### Symbole wieloznaczne - -Wzorce uprawnień z prostych dopasowywania symboli wieloznacznych: - -- `*` dopasowuje zero lub więcej dowolnego znaku -- `?` odpowiada dokładnie jednemu znakowi -- Wszystkie pozostałe znaki pasują dosłownie - -### Rozszerzenie katalogu domowego - -Możesz używać `~` lub `$HOME` na początku wzorca, aby zastosować się do swojego katalogu domowego. Jest to szczególnie szczególne w przypadku reguły [`external_directory`](#external-directories). - -- `~/projects/*` -> `/Users/username/projects/*` -- `$HOME/projects/*` -> `/Users/username/projects/*` -- `~` -> `/Users/username` - -### Katalogi zewnętrzne - -Użycie `external_directory`, aby zezwolić na wywołanie narzędzia, które obsługuje obsługę poza katalogiem roboczym, z uruchomieniem opencode. Dotyczy każdego narzędzia, które jako dane wejściowe zostało przyjęte (na przykład `read`, `edit`, `glob`, `grep` i wiele założycieli `bash`). - -Rozszerzenie domu (jak `~/...`) wpływa tylko na sposób za zwyczajowy wzorca. Nie powoduje to, że strategie zewnętrzne stają się stosowane przez `external_directory`. - -Na przykład umożliwia dostęp do wszystkiego pod `~/projects/personal/`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - } - } -} -``` - -Każdy dopuszczony tutaj katalog jest dziedziczy tych samych ustawień, co dostęp do obszaru roboczego. Ponieważ [`read` ma wartość domyślną `allow`](#defaults), odczyty są również dostępne dla wpisów poniżej `external_directory`, chyba że zagłębione. Dodaj dodatkowe rozwiązanie, kiedy narzędzie powinno być rozwiązaniem w tych ścieżkach, np. blokowanie edycji przy zachowaniu odczytów: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - }, - "edit": { - "~/projects/personal/**": "deny" - } - } -} -``` - -Skoncentruj listę na zaufanych ścieżkach i dodaj dodatkowe zezwolenie lub odmowę, jeśli jest potrzebne w innych narzędziach (na przykład `bash`). - ---- - -## Dostępne uprawnienia - -Uprawnienia opencode są określane na podstawie nazwy narzędzia i kilku zabezpieczeń: - -- `read` — odczyt pliku (odpowiada ścieżce pliku) -- `edit` — wszystkie modyfikacje plików (obejmuje `edit`, `write`, `patch`) -- `glob` — maglowanie plików (pasuje do wzorców globowania) -- `grep` — wyszukiwanie treści (pasuje do wzorca regularnego) -- `bash` — uruchamianie poleceń shell (pasuje do poleceń przeanalizowanych, takich jak `git status --porcelain`) -- `task` — uruchamianie podagentów (odpowiada typowi podagenta) -- `skill` — ładowanie umiejętności (pasuje do nazwy umiejętności) -- `lsp` — uruchamianie zapytań LSP (obecnie nieszczegółowych) -- `webfetch` — pobieranie adresu URL (pasuje do adresu URL) -- `websearch` — wyszukiwanie sieci (pasuje do zapytań) -- `external_directory` — wywoływacz, gdy narzędzie jest dostępne poza katalogiem roboczym projektu -- `doom_loop` — wyzwalane, gdy samo wywołanie narzędzia zostanie powtórzone 3 razy z tymi samymi danymi podstawowymi - ---- - -## Domyślne - -Jeżeli nic nie jest określone, opencode zostanie uruchomione od dopuszczalnych rozwiązań diagnostycznych: - -- Dostępne uprawnienia ma wartość domyślną `"allow"`. -- `doom_loop` i `external_directory` zamek ma wartość `"ask"`. -- `read` do `"allow"`, ale pliki `.env` są odrzucane: - -```json title="opencode.json" -{ - "permission": { - "read": { - "*": "allow", - "*.env": "deny", - "*.env.*": "deny", - "*.env.example": "allow" - } - } -} -``` - ---- - -## Co robi „Zapytaj”. - -Gdy opencode poprosi o zatwierdzenie, interfejs użytkownika oferujący trzy wyniki: - -- `once` — zatwierdź tylko tę prośbę -- `always` — zastosowanie, które następuje po zastosowaniu sugerowanych wzorców (przez następczą bieżącą sesję opencode) -- `reject` — odrzucić - -Zestaw wzorców, które `always` zatwierdziłby, jest udostępniony przez narzędzie (na przykładzie zatwierdzenia bash zazwyczaj umieszczają na częstotliwości bezpiecznej prefiksy polecenia, takie jak `git status*`). - ---- - -## Agenci - -Można uzyskać dostęp do poszczególnych agentów. Uprawnienia agenta są skalowane z konfiguracją globalną, a następnie agenta ma pierwszeństwo. [Dowiedz się więcej](/docs/agents#permissions) o prawach agenta. - -:::note -Bardziej szczegółowe przykłady dopasowywania wzorców można znaleźć w sekcji [Reguły szczegółowe (składnia obiektu) (#granular-rules-object-syntax) powyżej. -::: - -```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" - } - } - } - } -} -``` - -Możesz także mieć pozwolenie na agenta w 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 -zastosowanie dopasowywania wzorców dla pierwotnych z argumentami. `"grep *"` pozwala na `grep pattern file.txt`, podczas gdy sam `"grep"` blokuje to. Polecenia takie jak `git status` w przypadku postępowania dyscyplinarnego, ale ostatecznego zastosowania (np. `"git status *"`) podczas stosowania argumentów. -::: diff --git a/packages/web/src/content/docs/pl/plugins.mdx b/packages/web/src/content/docs/pl/plugins.mdx deleted file mode 100644 index 510c8a22e4..0000000000 --- a/packages/web/src/content/docs/pl/plugins.mdx +++ /dev/null @@ -1,385 +0,0 @@ ---- -title: Wtyczki -description: Napisz własną wtyczkę, aby rozszerzyć opencode. ---- - -Wtyczki umożliwiające wyłączenie opencode poprzez podjęcie różnych zdarzeń i zachowanie. Można utworzyć wtyczkę, aby sprawdzić nowe funkcje, integrować się z usługami lub sprawdzaniem zachowania opencode. - -Aby znaleźć się z przykładami, przejrzyj [wtyczki](/docs/ecosystem#plugins) utworzone przez społeczność. - ---- - -## Użyj wtyczki - -Istnieją dwa sposoby ładowania wtyczek. - ---- - -### Z plików lokalnych - -Miejsce plików JavaScript lub TypeScript w katalogu wtyczki. - -- `.opencode/plugins/` - Wtyczki na poziomie projektu -- `~/.config/opencode/plugins/` - Wtyczki globalne - -Pliki w tych katalogach są automatycznie ładowane podczas uruchamiania. - ---- - -### Z npm - -szczegółowy pakiet npm w pliku konfiguracyjnym. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"] -} -``` - -Obsługiwane są zarówno pakiety zwykłe, jak i pakiety npm o określonym zakresie. - -Przeglądaj dostępną wtyczkę w [ekosystemie](/docs/ecosystem#plugins). - ---- - -### Sposób instalacji wtyczek - -**wtyczki npm** są instalowane automatycznie przy użyciu Bun podczas uruchamiania. Pakiety i ich zależności są buforowane w `~/.cache/opencode/node_modules/`. - -**Wtyczki lokalne** są ładowane bezpośrednio z katalogu wtyczek. Aby uzyskać dostęp do zewnętrznych pakietów, musisz zainstalować `package.json` w swoim katalogu konfiguracyjnym (zobacz [Zależności](#dependencies)) lub opublikować wtyczkę w npm i [dodaj ją do swojej konfiguracji](/docs/config#plugins). - ---- - -### Kolejność ładowania - -Wtyczki są ładowane ze wszystkich źródeł, a wszystkie hooki napisane po kolei. Kolejność ładowania do: - -1. Konfiguracja globalna (`~/.config/opencode/opencode.json`) -2. Konfiguracja projektu (`opencode.json`) -3. Globalny katalog wtyczek (`~/.config/opencode/plugins/`) -4. Katalog wtyczek projektu (`.opencode/plugins/`) - -Zduplikowane pakiety npm o tej samej nazwie i wersji są ładowane raz. Równie ważny jest dostęp lokalny i zewnętrzny npm o dodatkowych nazwach, które są zewnętrzne. - ---- - -## Utwórz wtyczkę - -Wtyczka do **moduł JavaScript/TypeScript**, który eksportuje jeden lub więcej wtyczek -funkcje. dostępna funkcja korzystania z obiektu kontekstu i głównego obiektu hooks. - ---- - -### Zależności - -Lokalne narzędzie i narzędzie, które można wykorzystać z zewnętrznych pakietów npm. Dodaj `package.json` do swojego katalogu konfiguracyjnego z zależnościami. - -```json title=".opencode/package.json" -{ - "dependencies": { - "shescape": "^2.1.0" - } -} -``` - -opencode uruchomienie `bun install` przy uruchomieniu, aby je uruchomić. Twoje dodatkowe funkcje będą dostępne po zaimportowaniu. - -```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) - } - }, - } -} -``` - ---- - -### Podstawowa struktura - -```js title=".opencode/plugins/example.js" -export const MyPlugin = async ({ project, client, $, directory, worktree }) => { - console.log("Plugin initialized!") - - return { - // Hook implementations go here - } -} -``` - -Funkcja dostępu do: - -- `project`: Aktualne informacje o projekcie. -- `directory`: Bieżący katalog roboczy. -- `worktree`: Ścieżka eksploatacyjna Git. -- `client`: Klient SDK z opencode do sztucznej inteligencji. -- `$`: [API obudowy](https://bun.com/docs/runtime/shell) Buna do wykonywania oprogramowania. - ---- - -### Obsługa TypeScriptu - -W przypadku wtyczek TypeScript możesz importować typy z pakietu wtyczek: - -```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 - } -} -``` - ---- - -### Wydarzenia - -Wtyczki mogą subskrybować zdarzenia, jak zastosować poniżej sekcji Przykłady. Oto lista różnych działań. - -#### Wydarzenia dowodzenia - -- `command.executed` - -#### Plik Wydarzenia - -- `file.edited` -- `file.watcher.updated` - -#### Wydarzenia instalacyjne - -- `installation.updated` - -#### Wydarzenia LSP - -- `lsp.client.diagnostics` -- `lsp.updated` - -#### Wydarzenia w wiadomościach - -- `message.part.removed` -- `message.part.updated` -- `message.removed` -- `message.updated` - -#### Wydarzenia związane z uprawnieniami - -- `permission.asked` -- `permission.replied` - -#### Wydarzenia serwerowe - -- `server.connected` - -#### Wydarzenia sesyjne - -- `session.created` -- `session.compacted` -- `session.deleted` -- `session.diff` -- `session.error` -- `session.idle` -- `session.status` -- `session.updated` - -#### Wydarzenia do zrobienia - -- `todo.updated` - -#### Wydarzenia shell - -- `shell.env` - -#### Wydarzenia narzędziowe - -- `tool.execute.after` -- `tool.execute.before` - -#### Wydarzenia TUI - -- `tui.prompt.append` -- `tui.command.execute` -- `tui.toast.show` - ---- - -## Przykłady - -Oto kilka dostępnych wtyczek, które można udostępnić do opencode. - ---- - -### Wysyłaj powiadomienia - -Wysyłaj powiadomienia, gdy wystąpią określone zdarzenia: - -```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"'` - } - }, - } -} -``` - -Używamy `osascript` do uruchamiania AppleScript na macOS. Tutaj możesz przejść do wysyłania pozostałości. - -:::note -Jeśli korzystasz z aplikacji komputerowej opencode, może ona automatycznie wysłać wiadomość systemową, gdy odpowiedź jest gotowa lub gdy wystąpią błędy sesji. -::: - ---- - -### ochrona .env - -Zablokuj opencode czytanie plików `.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") - } - }, - } -} -``` - ---- - -### Wstrzyknij zmienne środowiskowe - -Wstrzyknij zmienne konsekwencje dla wszystkich wykonań (narzędzia AI i terminale użytkownika): - -```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 - }, - } -} -``` - ---- - -### Niestandardowe narzędzia - -Wtyczki mogą również dodawać niestandardowe narzędzia do 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})` - }, - }), - }, - } -} -``` - -Pomocnik `tool` tworzy narzędzie użytkowe, które może wywołać kod opencode. Pobierane schematu Zoda i narzędzie wyszukiwania za pomocą: - -- `description`: Co robi do narzędzia -- `args`: Schemat Zoda dla narzędzi argumentów -- `execute`: Funkcja uruchamiania po wywołaniu narzędzia - -Twoje narzędzie będzie dostępne dla otwartego kodu wraz z narzędziami użytkowymi. - ---- - -### Logowanie - -użyj `client.app.log()` zamiast `console.log` do rejestracji strukturalnego: - -```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" }, - }, - }) -} -``` - -Poziomy: `debug`, `info`, `warn`, `error`. Aby uzyskać szczegółowe informacje, zobacz [dokumentację pakietu SDK](https://opencode.ai/docs/sdk). - ---- - -### Haki zagęszczające - -Dostosuj kontekst dołączony podczas kompaktowania sesji: - -```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 -`) - }, - } -} -``` - -Hak `experimental.session.compacting` jest uruchamiany, zanim LLM wygeneruje podsumowanie kontynuacji. go, aby wstrzyknąć kontekst kontekstu dla domeny, której nie dostrzeżono przez domyślny monit o zagęszczenie. - -Można także umieścić kompletny monit o zagęszczenie, ustawiając `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. -` - }, - } -} -``` - -Gdy urządzenie jest `output.prompt`, jest całkowicie dostępne na domyślnym monit o zagęszczanie. Tablica `output.context` jest w tym przypadku poniesiona. diff --git a/packages/web/src/content/docs/pl/providers.mdx b/packages/web/src/content/docs/pl/providers.mdx deleted file mode 100644 index 0e722d5fde..0000000000 --- a/packages/web/src/content/docs/pl/providers.mdx +++ /dev/null @@ -1,1986 +0,0 @@ ---- -title: Dostawcy -description: Korzystanie z dowolnego dostawcy LLM w opencode. ---- - -import config from "../../../../config.mjs" -export const console = config.console - -opencode używa [AI SDK](https://ai-sdk.dev/) i [Models.dev](https://models.dev) do obsługi **ponad 75 dostawców LLM** i obsługuje uruchamianie modeli lokalnych. - -Aby dodać dostawcę należy: - -1. Dodaj klucze API dla dostawcy za pomocą komendy `/connect`. -2. Skonfiguruj dostawcę w konfiguracji opencode. - ---- - -### Credentials - -Po dodaniu kluczy API dostawcy za pomocą polecenia `/connect` są one przechowywane -w `~/.local/share/opencode/auth.json`. - ---- - -### Konfiguracja - -Możesz dostosować dostawców za pomocą sekcji `provider` w swoim opencode -config. - ---- - -#### Base URL - -Możesz dostosować podstawowy adres URL dla dowolnego dostawcy, ustawiając opcję `baseURL`. Jest to przydatne podczas korzystania z usług proxy lub niestandardowych punktów końcowych. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen to lista modeli dostarczonych przez zespół opencode, które zostały -przetestowane i zweryfikowane, aby dobrze współpracować z opencode. [Dowiedz się więcej](/docs/zen). - -:::tip -Jeśli jesteś nowy, zalecamy rozpoczęcie od OpenCode Zen. -::: - -1. Uruchom polecenie `/connect` w TUI, wybierz `OpenCode Zen` i przejdź do [opencode.ai/auth](https://opencode.ai/zen). - - ```txt - /connect - ``` - -2. Zaloguj się, dodaj szczegóły rozliczeniowe i skopiuj klucz API. - -3. Wklej swój klucz API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom `/models` w TUI, aby zobaczyć listę zalecanych przez nas modeli. - - ```txt - /models - ``` - -Działa jak każdy inny dostawca w opencode i jest całkowicie opcjonalny w użyciu. - ---- - -## OpenCode Go - -OpenCode Go to tani plan subskrypcji, który zapewnia niezawodny dostęp do popularnych modeli open coding dostarczanych przez zespół opencode, które zostały przetestowane i zweryfikowane pod kątem dobrej współpracy z opencode. - -1. Uruchom polecenie `/connect` w TUI, wybierz `OpenCode Go` i przejdź do [opencode.ai/auth](https://opencode.ai/zen). - - ```txt - /connect - ``` - -2. Zaloguj się, dodaj szczegóły rozliczeniowe i skopiuj klucz API. - -3. Wklej swój klucz API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom `/models` w TUI, aby zobaczyć listę zalecanych przez nas modeli. - - ```txt - /models - ``` - -Działa jak każdy inny dostawca w opencode i jest całkowicie opcjonalny w użyciu. - ---- - -## Katalog - -Przyjrzyjmy się szczegółowo niektórym dostawcom. Jeśli chcesz dodać dostawcę do -listę, możesz otworzyć PR. - -:::note -Nie widzisz tutaj dostawcy? Prześlij PR. -::: - ---- - -### 302.AI - -1. Przejdź do [konsoli 302.AI](https://302.ai/), utwórz konto i wygeneruj klucz API. - -2. Uruchom komendę `/connect` i wyszukaj **302.AI**. - - ```txt - /connect - ``` - -3. Wpisz swój klucz API 302.AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom komendę `/models`, aby wybrać model. - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -Aby używać Amazon Bedrock z opencode: - -1. Przejdź do **Katalogu modeli** w konsoli Amazon Bedrock i poproś - dostęp do wybranych modeli. - - :::tip - Musisz mieć dostęp do żądanego modelu w Amazon Bedrock. - ::: - -2. **Skonfiguruj uwierzytelnianie** przy użyciu jednej z następujących metod: - - #### Zmienne środowiskowe (Szybki start) - - Ustaw jedną z tych zmiennych środowiskowych podczas uruchamiania opencode: - - ```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - Lub dodaj je do swojego profilu bash: - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - #### Plik konfiguracyjny (zalecane) - - W przypadku konfiguracji specyficznej dla projektu lub trwałej użyj `opencode.json`: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **Dostępne opcje:** - - `region` - region AWS (np. `us-east-1`, `eu-west-1`) - - `profile` - profil nazwany AWS z `~/.aws/credentials` - - `endpoint` — niestandardowy adres URL punktu końcowego dla punktów końcowych VPC (alias dla ogólnej opcji `baseURL`) - - :::tip - Opcje z pliku konfiguracyjnego mają pierwszeństwo przed zmiennymi środowiskowymi. - ::: - - #### Zaawansowane: Punkty końcowe VPC - - Jeśli używasz punktów końcowych VPC dla Bedrock: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } - } - ``` - - :::note - Opcja `endpoint` jest aliasem ogólnej opcji `baseURL`, używając terminologii specyficznej dla AWS. Jeśli określono zarówno `endpoint`, jak i `baseURL`, pierwszeństwo ma `endpoint`. - ::: - - #### Metody uwierzytelniania - - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: Utwórz użytkownika IAM i wygeneruj klucze dostępu w konsoli AWS - - **`AWS_PROFILE`**: Użyj nazwanych profili z `~/.aws/credentials`. Najpierw skonfiguruj za pomocą `aws configure --profile my-profile` lub `aws sso login` - - **`AWS_BEARER_TOKEN_BEDROCK`**: Wygeneruj długoterminowe klucze API z konsoli Amazon Bedrock - - **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**: Dla EKS IRSA (Role IAM dla kont usług) lub innych środowisk Kubernetes z federacją OIDC. Te zmienne środowiskowe są automatycznie wstrzykiwane przez Kubernetes podczas korzystania z adnotacji konta usługi. - - #### Kolejność uwierzytelniania - - Amazon Bedrock wykorzystuje następujący priorytet uwierzytelniania: - 1. **Token nośnika** - zmienna środowiskowa `AWS_BEARER_TOKEN_BEDROCK` lub token z komendy `/connect` - 2. **AWS Credential Chain** - Profile, access keys, shared credentials, IAM roles, Web Identity Tokens (EKS IRSA), instance metadata - - :::note - Gdy ustawisz bearer token (przez `/connect` lub `AWS_BEARER_TOKEN_BEDROCK`), ma on pierwszeństwo nad wszystkimi metodami poświadczeń AWS, w tym profilami. - ::: - -3. Uruchom komendę `/models`, aby wybrać żądany model. - - ```txt - /models - ``` - -:::note -W przypadku niestandardowych profili wnioskowania użyj nazwy modelu i dostawcy w kluczu i ustaw właściwość `id` na wartość arn. Zapewnia to prawidłowe buforowanie: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - -::: - ---- - -### Anthropic - -1. Po zarejestrowaniu się uruchom komendę `/connect` i wybierz opcję Anthropic. - - ```txt - /connect - ``` - -2. Tutaj możesz wybrać opcję **Claude Pro/Max**, co spowoduje otwarcie przeglądarki - i poproś o uwierzytelnienie. - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. Teraz wszystkie modele antropiczne powinny być dostępne po użyciu polecenia `/models`. - - ```txt - /models - ``` - -:::info -Korzystanie z subskrypcji Claude Pro/Max w opencode nie jest oficjalnie obsługiwane przez [Anthropic](https://anthropic.com). -::: - -##### Użycie kluczy API - -Możesz także wybrać opcję **Utwórz klucz API**, jeśli nie masz subskrypcji Pro/Max. Otworzy się także Twoja przeglądarka i poprosi Cię o zalogowanie się do Anthropic i poda kod, który możesz wkleić w terminalu. - -Lub jeśli masz już klucz API, możesz wybrać **Wprowadź klucz API ręcznie** i wkleić go w terminalu. - ---- - -### Atomic Chat - -Możesz skonfigurować opencode do korzystania z modeli lokalnych przez [Atomic Chat](https://atomic.chat) — aplikację desktopową uruchamiającą lokalne LLM-y za serwerem API zgodnym z OpenAI (domyślny endpoint `http://127.0.0.1:1337/v1`). - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -W tym przykładzie: - -- `atomic-chat` to niestandardowy identyfikator dostawcy. Może to być dowolny ciąg znaków. -- `npm` określa pakiet używany dla tego dostawcy. Tutaj `@ai-sdk/openai-compatible` jest używany dla każdego API zgodnego z OpenAI. -- `name` to nazwa wyświetlana dostawcy w interfejsie. -- `options.baseURL` to endpoint serwera lokalnego. Zmień host i port, aby pasowały do twojej konfiguracji Atomic Chat. -- `models` to mapa identyfikatorów modeli na ich nazwy wyświetlane. Każdy identyfikator musi odpowiadać `id` zwracanemu przez `GET /v1/models` — uruchom `curl http://127.0.0.1:1337/v1/models`, aby wyświetlić identyfikatory aktualnie załadowane w Atomic Chat. - -:::tip -Jeśli wywołania narzędzi nie działają dobrze, wybierz załadowany model z dobrym wsparciem tool calling (na przykład wariant Qwen-Coder lub DeepSeek-Coder). -::: - ---- - -### Azure OpenAI - -:::note -Jeśli napotkasz błędy „Przykro mi, ale nie mogę pomóc w tej prośbie”, spróbuj zmienić filtr zawartości z **DefaultV2** na **Default** w zasobie platformy Azure. -::: - -1. Przejdź do [Azure portal](https://portal.azure.com/) i utwórz zasób **Azure OpenAI**. Będziesz potrzebować: - - **Nazwa zasobu**: staje się częścią punktu końcowego API (`https://RESOURCE_NAME.openai.azure.com/`) - - **Klucz API**: `KEY 1` lub `KEY 2` z Twojego zasobu - -2. Przejdź do [Azure AI Foundry](https://ai.azure.com/) i wdróż model. - - :::note - Aby kod opencode działał poprawnie, nazwa wdrożenia musi być zgodna z nazwą modelu. - ::: - -3. Uruchom polecenie `/connect` i wyszukaj **Azure**. - - ```txt - /connect - ``` - -4. Wpisz swój klucz API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Ustaw nazwę zasobu jako zmienną środowiskową: - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - - Lub dodaj go do swojego profilu bash: - - ```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX - ``` - -6. Uruchom komendę `/models`, aby wybrać wdrożony model. - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. Przejdź do [Azure portal](https://portal.azure.com/) i utwórz zasób **Azure OpenAI**. Będziesz potrzebować: - - **Nazwa zasobu**: staje się częścią punktu końcowego API (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) - - **Klucz API**: `KEY 1` lub `KEY 2` z Twojego zasobu - -2. Przejdź do [Azure AI Foundry](https://ai.azure.com/) i wdróż model. - - :::note - Aby kod opencode działał poprawnie, nazwa wdrożenia musi być zgodna z nazwą modelu. - ::: - -3. Uruchom polecenie `/connect` i wyszukaj **Azure Cognitive Services**. - - ```txt - /connect - ``` - -4. Wpisz swój klucz API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Ustaw nazwę zasobu jako zmienną środowiskową: - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - - Lub dodaj go do swojego profilu bash: - - ```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX - ``` - -6. Uruchom komendę `/models`, aby wybrać wdrożony model. - - ```txt - /models - ``` - ---- - -### Baseten - -1. Udaj się do [Baseten](https://app.baseten.co/), utwórz konto i wygeneruj klucz API. - -2. Uruchom komendę `/connect` i wyszukaj **Baseten**. - - ```txt - /connect - ``` - -3. Wprowadź swój klucz API Baseten. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom komendę `/models`, aby wybrać model. - - ```txt - /models - ``` - ---- - -### Cerebras - -1. Przejdź do [konsoli Cerebras](https://inference.cerebras.ai/), utwórz konto i wygeneruj klucz API. - -2. Uruchom komendę `/connect` i wyszukaj **Cerebras**. - - ```txt - /connect - ``` - -3. Wprowadź swój klucz API Cerebras. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom polecenie `/models`, aby wybrać model taki jak _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -Cloudflare AI Gateway umożliwia dostęp do modeli z OpenAI, Anthropic, Workers AI i innych za pośrednictwem ujednoliconego punktu końcowego. Dzięki [Ujednoliconemu rozliczeniu](https://developers.cloudflare.com/ai-gateway/features/unified-billing/) nie potrzebujesz oddzielnych kluczy API dla każdego dostawcy. - -1. Przejdź do [panelu Cloudflare](https://dash.cloudflare.com/), przejdź do **AI** > **AI Gateway** i utwórz nową bramę. - -2. Ustaw identyfikator konta i identyfikator bramy jako zmienne środowiskowe. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. Uruchom polecenie `/connect` i wyszukaj **Cloudflare AI Gateway**. - - ```txt - /connect - ``` - -4. Wprowadź swój token API Cloudflare. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - - Lub ustaw go jako zmienną środowiskową. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token - ``` - -5. Uruchom komendę `/models`, aby wybrać model. - - ```txt - /models - ``` - - Możesz także dodawać modele za pomocą konfiguracji opencode. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } - } - ``` - ---- - -### Cortecs - -1. Przejdź do [konsoli Cortecs](https://cortecs.ai/), utwórz konto i wygeneruj klucz API. - -2. Uruchom komendę `/connect` i wyszukaj **Cortecs**. - - ```txt - /connect - ``` - -3. Wprowadź klucz API Cortecs. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom polecenie `/models`, aby wybrać model taki jak _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. Przejdź do [konsoli DeepSeek](https://platform.deepseek.com/), utwórz konto i kliknij **Utwórz nowy klucz API**. - -2. Uruchom polecenie `/connect` i wyszukaj **DeepSeek**. - - ```txt - /connect - ``` - -3. Wprowadź klucz API DeepSeek. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom polecenie `/models`, aby wybrać model DeepSeek, np. _DeepSeek V4 Pro_. - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. Przejdź do [panelu Deep Infra](https://deepinfra.com/dash), utwórz konto i wygeneruj klucz API. - -2. Uruchom komendę `/connect` i wyszukaj **Deep Infra**. - - ```txt - /connect - ``` - -3. Wprowadź swój klucz API Deep Infra. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom komendę `/models`, aby wybrać model. - - ```txt - /models - ``` - ---- - -### FrogBot - -1. Przejdź do [FrogBot dashboard](https://app.frogbot.ai/signup), utwórz konto i wygeneruj klucz API. - -2. Uruchom polecenie `/connect` i wyszukaj **FrogBot**. - - ```txt - /connect - ``` - -3. Wprowadź klucz API FrogBot. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom komendę `/models`, aby wybrać model. - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. Przejdź do [konsoli Fireworks AI](https://app.fireworks.ai/), utwórz konto i kliknij **Utwórz klucz API**. - -2. Uruchom polecenie `/connect` i wyszukaj **Fireworks AI**. - - ```txt - /connect - ``` - -3. Wprowadź klucz API programu Fireworks AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom polecenie `/models`, aby wybrać model taki jak _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo zapewnia czat agentowy oparty na sztucznej inteligencji z natywnymi możliwościami wywoływania narzędzi za pośrednictwem Anthropic proxy GitLab. - -1. Uruchom komendę `/connect` i wybierz GitLab. - - ```txt - /connect - ``` - -2. Wybierz metodę uwierzytelniania: - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### Using OAuth (Recommended) - - Wybierz **OAuth**, a Twoja przeglądarka otworzy się w celu autoryzacji. - - #### Użycie osobistego tokenu dostępu - 1. Przejdź do [Ustawienia użytkownika GitLab > Tokeny dostępu](https://gitlab.com/-/user_settings/personal_access_tokens) - 2. Click **Add new token** - 3. Name: `OpenCode`, Scopes: `api` - 4. Skopiuj token (zaczyna się od `glpat-`) - 5. Wpisz go w terminalu - -3. Uruchom komendę `/models`, aby zobaczyć dostępne modele. - - ```txt - /models - ``` - - Dostępne są trzy modele oparte na Claude: - - **duo-chat-haiku-4-5** (Domyślnie) - Szybkie odpowiedzi dla szybkich zadań - - **duo-chat-sonnet-4-5** - Zrównoważona wydajność dla większości przepływów pracy - - **duo-chat-opus-4-5** - Najbardziej zdolny do złożonej analizy - -:::note -Jeśli nie chcesz, możesz także określić zmienną środowiskową „GITLAB_TOKEN”. -to store token in opencode auth storage. -::: - -##### Self-Hosted GitLab - -:::note[compliance note] -opencode używa małego modelu do niektórych zadań AI, takich jak generowanie tytułu sesji. -Domyślnie jest skonfigurowany do używania gpt-5-nano, hostowanego przez Zen. Aby zablokować opencode -aby używać tylko własnej instancji hostowanej przez GitLab, dodaj następujące elementy do pliku -`opencode.json` plik. Zalecane jest również wyłączenie udostępniania sesji. - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -W przypadku samodzielnie hostowanych instancji GitLab: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -Jeśli w Twojej instancji działa niestandardowa brama AI: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -Lub dodaj do swojego profilu bash: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -Twój administrator GitLab musi włączyć następujące opcje: - -1. [Platforma Duo Agent](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) dla użytkownika, grupy lub instancji -2. Feature flags (via Rails console): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### OAuth dla instancji hostowanych samodzielnie - -Aby Oauth mógł działać w przypadku Twojej instancji hostowanej samodzielnie, musisz utworzyć -nową aplikację (Ustawienia → Aplikacje) z -Adres URL wywołania zwrotnego `http://127.0.0.1:8080/callback` i następujące zakresy: - -- api (Uzyskaj dostęp do API w swoim imieniu) -- read_user (Przeczytaj swoje dane osobowe) -- read_repository (umożliwia dostęp do repozytorium tylko do odczytu) - -Następnie ustaw ID aplikacji jako zmienną środowiskową: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -Więcej informacji znajdziesz na stronie [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth). - -##### Konfiguracja - -Customize through `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### Narzędzia GitLab API (opcjonalne, ale wysoce zalecane) - -To access GitLab tools (merge requests, issues, pipelines, CI/CD, etc.): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -Ta wtyczka zapewnia kompleksowe możliwości zarządzania repozytorium GitLab, w tym recenzje MR, śledzenie problemów, monitorowanie rurociągów i inne. - ---- - -### GitHub Copilot - -Aby korzystać z subskrypcji GitHub Copilot z kodem opencode: - -:::note -Niektóre modele mogą wymagać [subskrypcji Pro+](https://github.com/features/Copilot/plans), aby z nich korzystać. - -Niektóre modele należy włączyć ręcznie w [ustawieniach GitHub Copilot](https://docs.github.com/en/Copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use). -::: - -1. Uruchom komendę `/connect` i wyszukaj GitHub Copilot. - - ```txt - /connect - ``` - -2. Przejdź do [github.com/login/device](https://github.com/login/device) i wpisz kod. - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - └ Waiting for authorization... - ``` - -3. Teraz uruchom polecenie `/models`, aby wybrać żądany model. - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -Aby używać Google Vertex AI z opencode: - -1. Przejdź do **Model Garden** w Google Cloud Console i sprawdź - modele dostępne w Twoim regionie. - - :::note - Musisz mieć projekt Google Cloud z włączonym interfejsem API Vertex AI. - ::: - -2. Ustaw wymagane zmienne środowiskowe: - - `GOOGLE_CLOUD_PROJECT`: identyfikator Twojego projektu Google Cloud - - `VERTEX_LOCATION` (opcjonalnie): region Vertex AI (domyślnie `global`) - - Uwierzytelnianie (wybierz jedno): - - `GOOGLE_APPLICATION_CREDENTIALS`: Ścieżka do pliku klucza JSON konta usługi - - Uwierzytelnij się za pomocą interfejsu CLI gcloud: `gcloud auth application-default login` - - Ustaw je podczas uruchamiania opencode. - - ```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode - ``` - - Lub dodaj je do swojego profilu bash. - - ```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global - ``` - -:::tip -Region `global` poprawia dostępność i zmniejsza liczbę błędów bez dodatkowych kosztów. Użyj regionalnych punktów końcowych (np. `us-central1`) w celu spełnienia wymagań dotyczących miejsca przechowywania danych. [Dowiedz się więcej](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. Uruchom komendę `/models`, aby wybrać żądany model. - - ```txt - /models - ``` - ---- - -### Groq - -1. Przejdź do [konsoli Groq](https://console.groq.com/), kliknij **Utwórz klucz API** i skopiuj klucz. - -2. Uruchom komendę `/connect` i wyszukaj Groq. - - ```txt - /connect - ``` - -3. Wprowadź klucz API dla dostawcy. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom polecenie `/models`, aby wybrać żądany. - - ```txt - /models - ``` - ---- - -### Hugging Face - -[Inference Providers Hugging Face](https://huggingface.co/docs/inference-providers) zapewniają dostęp do otwartych modeli obsługiwanych przez ponad 17 dostawców. - -1. Przejdź do [ustawień Hugging Face](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained), aby utworzyć token z uprawnieniami do wykonywania połączeń z dostawcami wnioskowania. - -2. Uruchom komendę `/connect` i wyszukaj **Hugging Face**. - - ```txt - /connect - ``` - -3. Wprowadź swój token Hugging Face. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom polecenie `/models`, aby wybrać model taki jak _Kimi-K2-Instruct_ lub _GLM-4.6_. - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) to platforma obserwowalności LLM, która zapewnia rejestrowanie, monitorowanie i analizy dla aplikacji AI. Helicone AI Gateway automatycznie kieruje Twoje żądania do odpowiedniego dostawcy w oparciu o model. - -1. Udaj się do [Helicone](https://helicone.ai), utwórz konto i wygeneruj klucz API ze swojego panelu. - -2. Uruchom komendę `/connect` i wyszukaj **Helicone**. - - ```txt - /connect - ``` - -3. Wprowadź swój klucz API Helicone. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom komendę `/models`, aby wybrać model. - - ```txt - /models - ``` - -Więcej dostawców i zaawansowanych funkcji, takich jak buforowanie i ograniczanie szybkości, znajdziesz w [dokumentacji Helicone](https://docs.helicone.ai). - -#### Opcjonalna konfiguracja - -Jeśli zobaczysz funkcję lub model firmy Helicone, która nie jest konfigurowana automatycznie za pomocą opencode, zawsze możesz ją skonfigurować samodzielnie. - -Oto [Katalog modeli Helicone](https://helicone.ai/models), będziesz go potrzebować, aby pobrać identyfikatory modeli, które chcesz dodać. - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### Niestandardowe nagłówki - -Helicone obsługuje niestandardowe nagłówki dla funkcji takich jak buforowanie, śledzenie użytkowników i zarządzanie sesjami. Dodaj je do konfiguracji dostawcy za pomocą `options.headers`: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### Śledzenie sesji - -Funkcja [Sesje](https://docs.helicone.ai/features/sessions) firmy Helicone umożliwia grupowanie powiązanych żądań LLM. Użyj wtyczki [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session), aby automatycznie rejestrować każdą konwersację opencode jako sesję w Helicone. - -```bash -npm install -g opencode-helicone-session -``` - -Dodaj go do swojej konfiguracji. - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -Wtyczka wstawia nagłówki `Helicone-Session-Id` i `Helicone-Session-Name` do Twoich żądań. Na stronie Sesje Helicone każda konwersacja opencode będzie wymieniona jako osobna sesja. - -##### Najczęstsze nagłówki Helicone - -| Header | Description | -| -------------------------- | ------------------------------------------------------------- | -| `Helicone-Cache-Enabled` | Enable response caching (`true`/`false`) | -| `Helicone-User-Id` | Track metrics by user | -| `Helicone-Property-[Name]` | Add custom properties (e.g., `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | Powiąż żądania z wersjami podpowiedzi | - -Zobacz [Katalog nagłówków Helicone](https://docs.helicone.ai/helicone-headers/header-directory), aby poznać wszystkie dostępne nagłówki. - ---- - -### llama.cpp - -Możesz skonfigurować opencode tak, aby korzystał z modeli lokalnych, za pomocą narzędzia llama-server [llama.cpp](https://github.com/ggml-org/llama.cpp) - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -W tym przykładzie: - -- `llama.cpp` to niestandardowy identyfikator dostawcy. Może to być dowolny ciąg znaków. -- `npm` określa pakiet, który ma być używany dla tego dostawcy. Tutaj `@ai-sdk/openai-compatible` jest używany dla dowolnego API zgodnego z OpenAI. -- `name` to nazwa wyświetlana dostawcy w interfejsie użytkownika. -- `options.baseURL` jest punktem końcowym serwera lokalnego. -- `models` to mapa identyfikatorów modeli do ich konfiguracji. Nazwa modelu zostanie wyświetlona na liście wyboru modelu. - ---- - -### IO.NET - -IO.NET oferuje 17 modeli zoptymalizowanych pod kątem różnych zastosowań: - -1. Przejdź do [konsoli IO.NET](https://ai.io.net/), utwórz konto i wygeneruj klucz API. - -2. Uruchom komendę `/connect` i wyszukaj **IO.NET**. - - ```txt - /connect - ``` - -3. Wprowadź swój klucz API IO.NET. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom komendę `/models`, aby wybrać model. - - ```txt - /models - ``` - ---- - -### LM Studio - -Możesz skonfigurować opencode tak, aby korzystał z modeli lokalnych poprzez LM Studio. - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -W tym przykładzie: - -- `lmstudio` to niestandardowy identyfikator dostawcy. Może to być dowolny ciąg znaków. -- `npm` określa pakiet, który ma być używany dla tego dostawcy. Tutaj `@ai-sdk/openai-compatible` jest używany dla dowolnego API zgodnego z OpenAI. -- `name` to nazwa wyświetlana dostawcy w interfejsie użytkownika. -- `options.baseURL` jest punktem końcowym serwera lokalnego. -- `models` to mapa identyfikatorów modeli do ich konfiguracji. Nazwa modelu zostanie wyświetlona na liście wyboru modelu. - ---- - -### Moonshot AI - -Aby użyć Kimi K2 z Moonshot AI: - -1. Przejdź do [konsoli Moonshot AI](https://platform.moonshot.ai/console), utwórz konto i kliknij **Utwórz klucz API**. - -2. Uruchom polecenie `/connect` i wyszukaj **Moonshot AI**. - - ```txt - /connect - ``` - -3. Wprowadź klucz API Moonshot. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom komendę `/models`, aby wybrać _Kimi K2_. - - ```txt - /models - ``` - ---- - -### MiniMax - -1. Przejdź do [konsoli API MiniMax](https://platform.minimax.io/login), utwórz konto i wygeneruj klucz API. - -2. Uruchom komendę `/connect` i wyszukaj **MiniMax**. - - ```txt - /connect - ``` - -3. Wprowadź swój klucz API MiniMax. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom komendę `/models`, aby wybrać model taki jak _M2.1_. - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. Przejdź do [konsoli Nebius Token Factory](https://tokenfactory.nebius.com/), utwórz konto i kliknij **Dodaj klucz**. - -2. Uruchom komendę `/connect` i wyszukaj **Nebius Token Factory**. - - ```txt - /connect - ``` - -3. Wprowadź klucz API Nebius Token Factory. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom polecenie `/models`, aby wybrać model taki jak _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Ollama - -Możesz skonfigurować opencode tak, aby korzystał z modeli lokalnych poprzez Ollamę. - -:::tip -Ollama może automatycznie skonfigurować się pod kątem opencode. Aby uzyskać szczegółowe informacje, zobacz [dokumentację integracji Ollama](https://docs.ollama.com/integrations/opencode). -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -W tym przykładzie: - -- `ollama` to niestandardowy identyfikator dostawcy. Może to być dowolny ciąg znaków. -- `npm` określa pakiet, który ma być używany dla tego dostawcy. Tutaj `@ai-sdk/openai-compatible` jest używany dla dowolnego API zgodnego z OpenAI. -- `name` to nazwa wyświetlana dostawcy w interfejsie użytkownika. -- `options.baseURL` jest punktem końcowym serwera lokalnego. -- `models` to mapa identyfikatorów modeli do ich konfiguracji. Nazwa modelu zostanie wyświetlona na liście wyboru modelu. - -:::tip -Jeśli wywołania narzędzi nie działają, spróbuj zwiększyć `num_ctx` w Ollama. Zacznij około 16 tys. - 32 tys. -::: - ---- - -### Ollama Cloud - -Aby korzystać z Ollama Cloud z opencode: - -1. Udaj się do [https://ollama.com/](https://ollama.com/) i zaloguj się lub utwórz konto. - -2. Przejdź do **Ustawienia** > **Klucze** i kliknij **Dodaj klucz API**, aby wygenerować nowy klucz API. - -3. Skopiuj klucz API do użycia w opencode. - -4. Uruchom polecenie `/connect` i wyszukaj **Ollama Cloud**. - - ```txt - /connect - ``` - -5. Wprowadź swój klucz API Ollama Cloud. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **Ważne**: Przed użyciem modeli chmurowych w opencode musisz pobrać informacje o modelu lokalnie: - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. Uruchom polecenie `/models`, aby wybrać model Ollama Cloud. - - ```txt - /models - ``` - ---- - -### OpenAI - -Zalecamy zarejestrowanie się w [ChatGPT Plus lub Pro](https://chatgpt.com/pricing). - -1. Po zarejestrowaniu się uruchom komendę `/connect` i wybierz OpenAI. - - ```txt - /connect - ``` - -2. Tutaj możesz wybrać opcję **ChatGPT Plus/Pro**, co spowoduje otwarcie przeglądarki - i poproś o uwierzytelnienie. - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. Teraz wszystkie modele OpenAI powinny być dostępne po użyciu polecenia `/models`. - - ```txt - /models - ``` - -##### Użycie kluczy API - -Jeśli posiadasz już klucz API, możesz wybrać opcję **Wprowadź klucz API ręcznie** i wkleić go w terminalu. - ---- - -### OpenCode Zen - -OpenCode Zen to lista przetestowanych i zweryfikowanych modeli udostępniona przez zespół opencode. [Dowiedz się więcej](/docs/zen). - -1. Zaloguj się do **OpenCode Zen** i kliknij **Utwórz klucz API**. - -2. Uruchom polecenie `/connect` i wyszukaj **OpenCode Zen**. - - ```txt - /connect - ``` - -3. Wprowadź klucz API opencode. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom polecenie `/models`, aby wybrać model taki jak _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. Przejdź do [panelu OpenRouter](https://openrouter.ai/settings/keys), kliknij **Utwórz klucz API** i skopiuj klucz. - -2. Uruchom komendę `/connect` i wyszukaj OpenRouter. - - ```txt - /connect - ``` - -3. Wprowadź klucz API dla dostawcy. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Wiele modeli OpenRouter jest domyślnie załadowanych fabrycznie. Uruchom komendę `/models`, aby wybrać ten, który chcesz. - - ```txt - /models - ``` - - Możesz także dodać dodatkowe modele za pomocą konfiguracji opencode. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. Możesz je także dostosować za pomocą konfiguracji opencode. Oto przykład określenia dostawcy - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI Core zapewnia dostęp do ponad 40 modeli z OpenAI, Anthropic, Google, Amazon, Meta, Mistral i AI21 za pośrednictwem ujednoliconej platformy. - -1. Przejdź do [SAP BTP Cockpit](https://account.hana.ondemand.com/), przejdź do instancji usługi SAP AI Core i utwórz klucz usługi. - - :::tip - Klucz usługi to obiekt JSON zawierający `clientid`, `clientsecret`, `url` i `serviceurls.AI_API_URL`. Instancję AI Core znajdziesz w sekcji **Usługi** > **Instancje i subskrypcje** w Kokpicie BTP. - ::: - -2. Uruchom polecenie `/connect` i wyszukaj **SAP AI Core**. - - ```txt - /connect - ``` - -3. Wpisz swój klucz usługi JSON. - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - Lub ustaw zmienną środowiskową `AICORE_SERVICE_KEY`: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - Lub dodaj go do swojego profilu bash: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. Opcjonalnie ustaw identyfikator wdrożenia i grupę zasobów: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - Te ustawienia są opcjonalne i należy je skonfigurować zgodnie z konfiguracją SAP AI Core. - ::: - -5. Uruchom polecenie `/models`, aby wybrać spośród ponad 40 dostępnych modeli. - - ```txt - /models - ``` - ---- - -### STACKIT - -STACKIT AI Model Serving zapewnia w pełni zarządzane suwerenne środowisko hostingu dla modeli AI, koncentrując się na LLM, takich jak Llama, Mistral i Qwen, z maksymalną suwerennością danych na infrastrukturze europejskiej. - -1. Przejdź do [portalu STACKIT](https://portal.stackit.cloud), przejdź do **AI Model Serving**, i utwórz token autoryzacyjny dla swojego projektu. - - :::tip - Musisz posiadać konto klienta STACKIT, konto użytkownika i projekt przed utworzeniem tokenów autoryzacyjnych. - ::: - -2. Uruchom polecenie `/connect` i wyszukaj **STACKIT**. - - ```txt - /connect - ``` - -3. Wprowadź swój token autoryzacyjny STACKIT AI Model Serving. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom polecenie `/models`, aby wybrać jeden z dostępnych modeli, np. _Qwen3-VL 235B_ lub _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. Przejdź do [panelu OVHcloud](https://ovh.com/manager). Przejdź do sekcji `Public Cloud`, `AI & Machine Learning` > `AI Endpoints` i na karcie `API Keys` kliknij **Utwórz nowy klucz API**. - -2. Uruchom polecenie `/connect` i wyszukaj **Punkty końcowe AI OVHcloud**. - - ```txt - /connect - ``` - -3. Wpisz klucz API punktów końcowych AI OVHcloud. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom polecenie `/models`, aby wybrać model taki jak _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Scaleway - -Aby używać [generatywnych interfejsów API Scaleway](https://www.scaleway.com/en/docs/generative-apis/) z opencode: - -1. Przejdź do [Ustawień uprawnień konsoli Scaleway](https://console.scaleway.com/iam/api-keys), aby wygenerować nowy klucz API. - -2. Uruchom komendę `/connect` i wyszukaj **Scaleway**. - - ```txt - /connect - ``` - -3. Wprowadź swój klucz API Scaleway. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom komendę `/models`, aby wybrać model taki jak _devstral-2-123b-instruct-2512_ lub _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Together AI - -1. Przejdź do [konsoli Together AI](https://api.together.ai), utwórz konto i kliknij **Dodaj klucz**. - -2. Uruchom komendę `/connect` i wyszukaj **Together AI**. - - ```txt - /connect - ``` - -3. Wprowadź klucz API Together AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom polecenie `/models`, aby wybrać model taki jak _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Venice AI - -1. Przejdź do [konsoli Venice AI](https://venice.ai), utwórz konto i wygeneruj klucz API. - -2. Uruchom polecenie `/connect` i wyszukaj **Venice AI**. - - ```txt - /connect - ``` - -3. Wprowadź klucz API Venice AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom polecenie `/models`, aby wybrać model taki jak _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -Vercel AI Gateway umożliwia dostęp do modeli z OpenAI, Anthropic, Google, xAI i innych za pośrednictwem ujednoliconego punktu końcowego. Modele oferowane są po cenie katalogowej bez marży. - -1. Przejdź do [panelu Vercel](https://vercel.com/), przejdź do karty **AI Gateway** i kliknij **Klucze API**, aby utworzyć nowy klucz API. - -2. Uruchom polecenie `/connect` i wyszukaj **Vercel AI Gateway**. - - ```txt - /connect - ``` - -3. Wprowadź klucz API Vercel AI Gateway. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom komendę `/models`, aby wybrać model. - - ```txt - /models - ``` - -Możesz także dostosować modele za pomocą konfiguracji opencode. Oto przykład określenia kolejności routingu dostawcy. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -Przydatne opcje routingu: - -| Opcja | Opis | -| ------------------- | ---------------------------------------------------------------------------- | -| `order` | Sekwencja dostawcy do wypróbowania | -| `only` | Ograniczenie do wskazanych dostawców | -| `zeroDataRetention` | Korzystaj wyłącznie z dostawców, którzy nie mają zasad przechowywania danych | - ---- - -### xAI - -1. Przejdź do [konsoli xAI](https://console.x.ai/), utwórz konto i wygeneruj klucz API. - -2. Uruchom komendę `/connect` i wyszukaj **xAI**. - - ```txt - /connect - ``` - -3. Wprowadź swój klucz API xAI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom polecenie `/models`, aby wybrać model taki jak _Grok Beta_. - - ```txt - /models - ``` - ---- - -### Z.AI - -1. Przejdź do [konsoli API Z.AI](https://z.ai/manage-apikey/apikey-list), utwórz konto i kliknij **Utwórz nowy klucz API**. - -2. Uruchom komendę `/connect` i wyszukaj **Z.AI**. - - ```txt - /connect - ``` - - Jeżeli jesteś abonentem **Planu kodowania GLM**, wybierz **Plan kodowania Z.AI**. - -3. Wpisz swój klucz API Z.AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Uruchom komendę `/models`, aby wybrać model taki jak _GLM-4.7_. - - ```txt - /models - ``` - ---- - -### ZenMux - -1. Przejdź do [panelu ZenMux](https://zenmux.ai/settings/keys), kliknij **Utwórz klucz API** i skopiuj klucz. - -2. Uruchom polecenie `/connect` i wyszukaj ZenMux. - - ```txt - /connect - ``` - -3. Wprowadź klucz API dla dostawcy. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Wiele modeli ZenMux jest domyślnie załadowanych fabrycznie. Uruchom komendę `/models`, aby wybrać żądany model. - - ```txt - /models - ``` - - Możesz także dodać dodatkowe modele za pomocą konfiguracji opencode. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## Niestandardowy dostawca - -Aby dodać dowolnego dostawcę **kompatybilnego z OpenAI**, którego nie ma na liście w poleceniu `/connect`: - -:::tip -Możesz użyć dowolnego dostawcy kompatybilnego z OpenAI z opencode. Większość nowoczesnych dostawców sztucznej inteligencji oferuje interfejsy API kompatybilne z OpenAI. -::: - -1. Uruchom polecenie `/connect` i przewiń w dół do **Inne**. - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. Wprowadź unikalny identyfikator dostawcy. - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - Wybierz niezapomniany identyfikator, użyjesz go w swoim pliku konfiguracyjnym. - ::: - -3. Wprowadź klucz API dla dostawcy. - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. Utwórz lub zaktualizuj plik `opencode.json` w katalogu projektu: - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - - Oto opcje konfiguracji: - - **npm**: pakiet AI SDK do użycia, `@ai-sdk/openai-compatible` dla dostawców kompatybilnych z OpenAI - - **name**: Nazwa wyświetlana w UI. - - **modele**: Dostępne modele. - - **options.baseURL**: URL endpointu API. - - **options.apiKey**: Opcjonalnie ustaw klucz API, jeśli nie używasz autoryzacji. - - **options.headers**: Opcjonalnie ustaw niestandardowe nagłówki. - - Więcej o opcjach zaawansowanych w przykładzie poniżej. - -5. Uruchom polecenie `/models`, a niestandardowy dostawca i modele pojawią się na liście wyboru. - ---- - -##### Przykład - -Oto przykład ustawienia opcji `apiKey`, `headers` i modelu `limit`. - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -Szczegóły konfiguracji: - -- **apiKey**: Ustaw przy użyciu składni zmiennej `env`, [dowiedz się więcej](/docs/config#env-vars). -- **nagłówki**: niestandardowe nagłówki wysyłane z każdym żądaniem. -- **limit.context**: Maksymalna liczba tokenów wejściowych akceptowanych przez model. -- **limit.output**: Maksymalna liczba tokenów, które model może wygenerować. - -Pola `limit` pozwalają opencode zrozumieć, ile kontekstu pozostało. Standardowi dostawcy pobierają je automatycznie z models.dev. - ---- - -## Rozwiązywanie problemów - -Jeśli masz problemy z konfiguracją dostawcy, sprawdź następujące elementy: - -1. **Sprawdź konfigurację uwierzytelniania**: Uruchom `opencode auth list`, aby sprawdzić, czy poświadczenia - dla dostawcy są dodawane do Twojej konfiguracji. - - Nie dotyczy to dostawców takich jak Amazon Bedrock, którzy w procesie uwierzytelniania opierają się na zmiennych środowiskowych. - -2. W przypadku dostawców niestandardowych sprawdź konfigurację opencode i: - - Upewnij się, że identyfikator dostawcy użyty w poleceniu `/connect` jest zgodny z identyfikatorem w konfiguracji opencode. - - Dla dostawcy używany jest właściwy pakiet npm. Na przykład użyj `@ai-sdk/cerebras` dla Cerebras. W przypadku wszystkich innych dostawców zgodnych z OpenAI użyj `@ai-sdk/openai-compatible`. - - Sprawdź, czy w polu `options.baseURL` użyto prawidłowego punktu końcowego API. diff --git a/packages/web/src/content/docs/pl/rules.mdx b/packages/web/src/content/docs/pl/rules.mdx deleted file mode 100644 index 1b5876f22e..0000000000 --- a/packages/web/src/content/docs/pl/rules.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: Zasady -description: Ustaw niestandardowe instrukcje dla opencode. ---- - -Możesz dostarczyć niestandardowe instrukcje do opencode, tworząc plik `AGENTS.md`. Jest to podobne do zasad Cursora. Zawiera instrukcje, które zostaną uwzględnione w kontekście LLM, aby dostosować jego zachowanie do konkretnego projektu. - ---- - -## Inicjalizacja - -Aby utworzyć nowy plik `AGENTS.md`, możesz uruchomić komendę `/init` w otwartym kodzie. - -:::tip -Powinieneś zatwierdzić plik `AGENTS.md` swojego projektu w Git. -::: - -Spowoduje to przeskanowanie projektu i całej jego zawartości, aby zrozumieć, czego dotyczy projekt i wygenerować z nim plik `AGENTS.md`. Pomaga to otwartemu kodowi lepiej poruszać się po projekcie. - -Jeśli masz istniejący plik `AGENTS.md`, spróbujemy go dodać. - ---- - -## Przykład - -Możesz także po prostu utworzyć ten plik ręcznie. Oto przykład niektórych rzeczy, które można umieścić w pliku `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` -``` - -Dodajemy tutaj instrukcje dotyczące konkretnego projektu, które zostaną udostępnione całemu zespołowi. - ---- - -## Typy - -opencode obsługuje także odczytywanie pliku `AGENTS.md` z wielu lokalizacji. A to służy różnym celom. - -### Projekt - -Umieść `AGENTS.md` w katalogu głównym projektu, aby uzyskać reguły specyficzne dla projektu. Mają one zastosowanie tylko wtedy, gdy pracujesz w tym katalogu lub jego podkatalogach. - -### Globalne - -Możesz także mieć reguły globalne w pliku `~/.config/opencode/AGENTS.md`. Jest to stosowane we wszystkich sesjach opencode. - -Ponieważ nie jest to wymagane dla Git ani udostępniane Twojemu zespołowi, zalecamy użycie tego do określenia wszelkich osobistych zasad, których powinien przestrzegać LLM. - -### Kompatybilność z Claude Code - -W przypadku użytkowników migrujących z Claude Code opencode obsługuje konwencje plików Claude Code jako rozwiązania awaryjne: - -- **Zasady projektu**: `CLAUDE.md` w katalogu projektu (używane, jeśli nie istnieje `AGENTS.md`) -- **Zasady globalne**: `~/.claude/CLAUDE.md` (używane, jeśli nie istnieje `~/.config/opencode/AGENTS.md`) -- **Umiejętności**: `~/.claude/skills/` — szczegóły znajdziesz w [Umiejętnościach agenta](/docs/skills/) - -Aby wyłączyć kompatybilność z Claude Code, ustaw jedną z tych zmiennych środowiskowych: - -```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 -``` - ---- - -## Priorytet - -Po uruchomieniu opencode szuka plików reguł w następującej kolejności: - -1. **Pliki lokalne** poprzez przejście z bieżącego katalogu (`AGENTS.md`, `CLAUDE.md`) -2. **Plik globalny** w `~/.config/opencode/AGENTS.md` -3. **Plik Claude Code** w `~/.claude/CLAUDE.md` (chyba że wyłączony) - -Pierwszy pasujący plik wygrywa w każdej kategorii. Na przykład, jeśli masz zarówno `AGENTS.md`, jak i `CLAUDE.md`, używany jest tylko `AGENTS.md`. Podobnie `~/.config/opencode/AGENTS.md` ma pierwszeństwo przed `~/.claude/CLAUDE.md`. - ---- - -## Instrukcje niestandardowe - -Możesz określić niestandardowe pliki instrukcji w swoim `opencode.json` lub globalnym `~/.config/opencode/opencode.json`. Dzięki temu Ty i Twój zespół możecie ponownie wykorzystać istniejące reguły, zamiast duplikować je w pliku AGENTS.md. - -Przykład: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -Możesz także użyć zdalnych adresów URL, aby załadować instrukcje z Internetu. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"] -} -``` - -Instrukcje zdalne są pobierane z 5-sekundowym limitem czasu. - -Wszystkie pliki instrukcji są łączone z plikami `AGENTS.md`. - ---- - -## Odwoływanie się do plików zewnętrznych - -Chociaż opencode nie analizuje automatycznie odniesień do plików w `AGENTS.md`, możesz osiągnąć podobną funkcjonalność na dwa sposoby: - -### Używanie opencode.json - -Zalecanym podejściem jest użycie pola `instructions` w `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"] -} -``` - -### Ręczne instrukcje w AGENTS.md - -Możesz nauczyć opencode czytać pliki zewnętrzne, podając wyraźne instrukcje w swoim `AGENTS.md`. Oto praktyczny przykład: - -```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. -``` - -Takie podejście pozwala: - -- Twórz modułowe pliki reguł wielokrotnego użytku -- Share rules across projects via symlinks or git submodules -- Keep AGENTS.md concise while referencing detailed guidelines -- Upewnij się, że opencode ładuje pliki tylko wtedy, gdy są potrzebne do konkretnego zadania - -:::tip -W przypadku monorepo lub projektów ze wspólnymi standardami użycie `opencode.json` ze wzorami globalnymi (takimi jak `packages/*/AGENTS.md`) jest łatwiejsze w utrzymaniu niż instrukcje ręczne. -::: diff --git a/packages/web/src/content/docs/pl/sdk.mdx b/packages/web/src/content/docs/pl/sdk.mdx deleted file mode 100644 index 40099713ef..0000000000 --- a/packages/web/src/content/docs/pl/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: SDK -description: Typowany klient JS dla serwera OpenCode. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -Pakiet SDK JS/TS OpenCode zapewnia klienta z bezpiecznym typowaniem (type-safe) do interakcji z serwerem. -Użyj go do budowania integracji i programowej kontroli OpenCode. - -[Dowiedz się więcej](/docs/server) o działaniu serwera. Przykłady znajdziesz w [projektach](/docs/ecosystem#projects) stworzonych przez społeczność. - ---- - -## Instalacja - -Zainstaluj pakiet SDK z npm: - -```bash -npm install @opencode-ai/sdk -``` - ---- - -## Tworzenie klienta - -Utwórz instancję OpenCode: - -```javascript -import { createOpencode } from "@opencode-ai/sdk" - -const { client } = await createOpencode() -``` - -Spowoduje to uruchomienie zarówno serwera, jak i klienta. - -#### Opcje - -| Opcja | Typ | Opis | Domyślne | -| ---------- | ------------- | ----------------------------------------- | ----------- | -| `hostname` | `string` | Nazwa hosta serwera | `127.0.0.1` | -| `port` | `number` | Port serwera | `4096` | -| `signal` | `AbortSignal` | Sygnał przerwania w celu anulowania | `undefined` | -| `timeout` | `number` | Limit czasu w ms dla uruchomienia serwera | `5000` | -| `config` | `Config` | Obiekt konfiguracji | `{}` | - ---- - -## Konfiguracja - -Można przekazać obiekt konfiguracyjny, aby dostosować zachowanie. Instancja nadal pobiera `opencode.json`, ale możesz zastąpić lub dodać konfigurację bezpośrednio: - -```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() -``` - -## Tylko klient - -Jeśli masz już działającą instancję OpenCode, możesz utworzyć instancję klienta, aby się z nią połączyć: - -```javascript -import { createOpencodeClient } from "@opencode-ai/sdk" - -const client = createOpencodeClient({ - baseUrl: "http://localhost:4096", -}) -``` - -#### Opcje - -| Opcja | Typ | Opis | Domyślne | -| --------------- | ---------- | ----------------------------------- | ----------------------- | -| `baseUrl` | `string` | Adres URL serwera | `http://localhost:4096` | -| `fetch` | `function` | Niestandardowa implementacja fetch | `globalThis.fetch` | -| `parseAs` | `string` | Metoda parsowania odpowiedzi | `auto` | -| `responseStyle` | `string` | Styl zwracania: `data` lub `fields` | `fields` | -| `throwOnError` | `boolean` | Rzucaj błędy zamiast zwracać je | `false` | - ---- - -## Typy - -Zestaw SDK zawiera definicje TypeScript dla wszystkich typów API. Zaimportuj je bezpośrednio: - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -Wszystkie typy są generowane na podstawie specyfikacji OpenAPI serwera i dostępne w pliku typów. - ---- - -## Błędy - -SDK może generować błędy, które można przechwycić i obsłużyć: - -```typescript -try { - await client.session.get({ path: { id: "invalid-id" } }) -} catch (error) { - console.error("Failed to get session:", (error as Error).message) -} -``` - ---- - -## Ustrukturyzowane Dane Wyjściowe - -Możesz zażądać ustrukturyzowanych danych wyjściowych JSON od modelu, określając `format` za pomocą schematu JSON. Model użyje narzędzia `StructuredOutput`, aby zwrócić zweryfikowany kod JSON pasujący do Twojego schematu. - -### Podstawowe użycie - -```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"] } -``` - -### Typy formatu wyjściowego - -| Typ | Opis | -| ------------- | ------------------------------------------------------------------------- | -| `text` | Domyślny. Standardowa odpowiedź tekstowa (brak ustrukturyzowanych danych) | -| `json_schema` | Zwraca zweryfikowany JSON pasujący do dostarczonego schematu | - -### Format JSON Schema - -Używając `type: 'json_schema'`, podaj: - -| Pole | Typ | Opis | -| ------------ | --------------- | ------------------------------------------------------------ | -| `type` | `'json_schema'` | Wymagane. Określa tryb schematu JSON | -| `schema` | `object` | Wymagane. Obiekt JSON Schema definiujący strukturę wyjściową | -| `retryCount` | `number` | Opcjonalne. Liczba ponownych prób walidacji (domyślnie: 2) | - -### Obsługa błędów - -Jeśli model nie wygeneruje prawidłowych ustrukturyzowanych danych wyjściowych po wszystkich próbach, odpowiedź będzie zawierać `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) -} -``` - -### Najlepsze praktyki - -1. **Podawaj jasne opisy** we właściwościach schematu, aby pomóc modelowi zrozumieć, jakie dane wyodrębnić -2. **Używaj `required`**, aby określić, które pola muszą być obecne -3. **Zachowaj schematy skoncentrowane** - złożone zagnieżdżone schematy mogą być trudniejsze dla modelu do poprawnego wypełnienia -4. **Ustaw odpowiedni `retryCount`** - zwiększ dla złożonych schematów, zmniejsz dla prostych - ---- - -## API - -Zestaw SDK udostępnia wszystkie interfejsy API serwera za pośrednictwem klienta bezpiecznego typu. - ---- - -### Globalne - -| Metoda | Opis | Odpowiedź | -| ----------------- | ----------------------------- | ------------------------------------ | -| `global.health()` | Sprawdź stan i wersję serwera | `{ healthy: true, version: string }` | - ---- - -#### Przykłady - -```javascript -const health = await client.global.health() -console.log(health.data.version) -``` - ---- - -### Aplikacja - -| Metoda | Opis | Odpowiedź | -| -------------- | ----------------------------------- | ------------------------------------------- | -| `app.log()` | Zapisz wpis logu | `boolean` | -| `app.agents()` | Lista wszystkich dostępnych agentów | Agent[] | - ---- - -#### Przykłady - -```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() -``` - ---- - -### Projekt - -| Metoda | Opis | Odpowiedź | -| ------------------- | -------------------------- | --------------------------------------------- | -| `project.list()` | Lista wszystkich projektów | Project[] | -| `project.current()` | Pobierz bieżący projekt | Project | - ---- - -#### Przykłady - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### Ścieżka - -| Metoda | Opis | Odpowiedź | -| ------------ | ----------------------- | ---------------------------------------- | -| `path.get()` | Pobierz bieżącą ścieżkę | Path | - ---- - -#### Przykłady - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### Konfiguracja - -| Metoda | Opis | Odpowiedź | -| -------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | Pobierz informacje o konfiguracji | Config | -| `config.providers()` | Lista dostawców i modeli domyślnych | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### Przykłady - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### Sesje - -| Metoda | Opis | Uwagi | -| ---------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| `session.list()` | Lista sesji | Zwraca Session[] | -| `session.get({ path })` | Pobierz sesję | Zwraca Session | -| `session.children({ path })` | Lista sesji podrzędnych | Zwraca Session[] | -| `session.create({ body })` | Utwórz sesję | Zwraca Session | -| `session.delete({ path })` | Usuń sesję | Zwraca `boolean` | -| `session.update({ path, body })` | Aktualizuj właściwości sesji | Zwraca Session | -| `session.init({ path, body })` | Przeanalizuj aplikację i utwórz `AGENTS.md` | Zwraca `boolean` | -| `session.abort({ path })` | Przerwij trwającą sesję | Zwraca `boolean` | -| `session.share({ path })` | Udostępnij sesję | Zwraca Session | -| `session.unshare({ path })` | Cofnij udostępnianie sesji | Zwraca Session | -| `session.summarize({ path, body })` | Podsumuj sesję | Zwraca `boolean` | -| `session.messages({ path })` | Lista wiadomości w sesji | Zwraca `{ info: `Message`, parts: `Part[]`}[]` | -| `session.message({ path })` | Pobierz szczegóły wiadomości | Zwraca `{ info: `Message`, parts: `Part[]`}` | -| `session.prompt({ path, body })` | Wyślij wiadomość | `body.noReply: true` zwraca UserMessage (tylko kontekst). Domyślnie zwraca AssistantMessage z odpowiedzią AI | -| `session.command({ path, body })` | Wyślij polecenie do sesji | Zwraca `{ info: `AssistantMessage`, parts: `Part[]`}` | -| `session.shell({ path, body })` | Uruchom polecenie shell | Zwraca AssistantMessage | -| `session.revert({ path, body })` | Cofnij wiadomość (revert) | Zwraca Session | -| `session.unrevert({ path })` | Przywróć cofnięte wiadomości | Zwraca Session | -| `postSessionByIdPermissionsByPermissionId({ path, body })` | Odpowiedz na żądanie uprawnienia | Zwraca `boolean` | - ---- - -#### Przykłady - -```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." }], - }, -}) -``` - ---- - -### Pliki - -| Metoda | Opis | Odpowiedź | -| ------------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------------- | -| `find.text({ query })` | Szukaj tekstu w plikach | Tablica obiektów dopasowania z `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `find.files({ query })` | Znajdź pliki i katalogi według nazwy | `string[]` (ścieżki) | -| `find.symbols({ query })` | Znajdź symbole w obszarze roboczym | Symbol[] | -| `file.read({ query })` | Odczytaj plik | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | Pobierz status śledzonych plików | File[] | - -`find.files` obsługuje kilka opcjonalnych pól zapytania: - -- `type`: `"file"` lub `"directory"` -- `directory`: zastąp katalog główny projektu dla wyszukiwania -- `limit`: maks. wyników (1–200) - ---- - -#### Przykłady - -```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 | Odpowiedź | -| ------------------------------ | --------------------------- | --------- | -| `tui.appendPrompt({ body })` | Dołącz tekst do promptu | `boolean` | -| `tui.openHelp()` | Otwórz okno pomocy | `boolean` | -| `tui.openSessions()` | Otwórz selektor sesji | `boolean` | -| `tui.openThemes()` | Otwórz selektor motywów | `boolean` | -| `tui.openModels()` | Otwórz selektor modelu | `boolean` | -| `tui.submitPrompt()` | Prześlij bieżący prompt | `boolean` | -| `tui.clearPrompt()` | Wyczyść prompt | `boolean` | -| `tui.executeCommand({ body })` | Wykonaj polecenie | `boolean` | -| `tui.showToast({ body })` | Pokaż powiadomienie (toast) | `boolean` | - ---- - -#### Przykłady - -```javascript -// Control TUI interface -await client.tui.appendPrompt({ - body: { text: "Add this to prompt" }, -}) - -await client.tui.showToast({ - body: { message: "Task completed", variant: "success" }, -}) -``` - ---- - -### Uwierzytelnianie - -| Metoda | Opis | Odpowiedź | -| ------------------- | ------------------------------------ | --------- | -| `auth.set({ ... })` | Ustaw poświadczenia uwierzytelniania | `boolean` | - ---- - -#### Przykłady - -```javascript -await client.auth.set({ - path: { id: "anthropic" }, - body: { type: "api", key: "your-api-key" }, -}) -``` - ---- - -### Zdarzenia - -| Metoda | Opis | Odpowiedź | -| ------------------- | ---------------------------------------- | ---------------------------------------- | -| `event.subscribe()` | Strumień zdarzeń wysyłanych przez serwer | Strumień zdarzeń wysyłanych przez serwer | - ---- - -#### Przykłady - -```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) -} -``` diff --git a/packages/web/src/content/docs/pl/server.mdx b/packages/web/src/content/docs/pl/server.mdx deleted file mode 100644 index 0efcf486f6..0000000000 --- a/packages/web/src/content/docs/pl/server.mdx +++ /dev/null @@ -1,287 +0,0 @@ ---- -title: Serwer -description: Interakcja z serwerem opencode za pośrednictwem protokołu HTTP. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -Komenda `opencode serve` uruchamia bezgłowy serwer HTTP, który udostępnia punkt końcowy OpenAPI, z którego może korzystać klient opencode. - ---- - -### Użycie - -```bash -opencode serve [--port ] [--hostname ] [--cors ] -``` - -#### Opcje - -| Flaga | Opis | Domyślne | -| --------------- | -------------------------------------------- | ---------------- | -| `--port` | Port nasłuchiwania | `4096` | -| `--hostname` | Nazwa hosta do nasłuchiwania | `127.0.0.1` | -| `--mdns` | Włącz wykrywanie mDNS | `false` | -| `--mdns-domain` | Niestandardowa nazwa domeny dla usługi mDNS | `opencode.local` | -| `--cors` | Dodatkowe originy przeglądarki do dozwolenia | `[]` | - -`--cors` można przekazać wiele razy: - -```bash -opencode serve --cors http://localhost:5173 --cors https://app.example.com -``` - ---- - -### Uwierzytelnianie - -Ustaw `OPENCODE_SERVER_PASSWORD`, aby chronić serwer za pomocą podstawowego uwierzytelniania HTTP. Domyślną nazwą użytkownika jest `opencode` lub ustaw `OPENCODE_SERVER_USERNAME`, aby ją zastąpić. Dotyczy to zarówno `opencode serve`, jak i `opencode web`. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve -``` - ---- - -### Jak to działa - -Kiedy uruchomisz `opencode`, uruchomi się TUI i serwer. Gdzie jest TUI -klient komunikujący się z serwerem. Serwer udostępnia specyfikację OpenAPI 3.1 -punkt końcowy. Ten punkt końcowy jest również używany do generowania [SDK](/docs/sdk). - -:::tip -Użyj serwera opencode do programowej interakcji z opencode. -::: - -Ta architektura umożliwia obsługę wielu klientów przez opencode i programową interakcję z kodem otwartym. - -Możesz uruchomić `opencode serve`, aby uruchomić samodzielny serwer. Jeśli masz -opencode TUI działa, `opencode serve` uruchomi nowy serwer. - ---- - -#### Połączenie z istniejącym serwerem - -Po uruchomieniu TUI losowo przypisuje port i nazwę hosta. Zamiast tego możesz przekazać `--hostname` i `--port` [flagi](/docs/cli). Następnie użyj tego, aby połączyć się z serwerem. - -Punktu końcowego [`/tui`](#TUI) można użyć do sterowania TUI przez serwer. Można na przykład wstępnie wypełnić lub uruchomić monit. Ta konfiguracja jest używana przez wtyczki opencode [IDE](/docs/ide). - ---- - -## Specyfikacja - -Serwer publikuje specyfikację OpenAPI 3.1, którą można obejrzeć pod adresem: - -``` -http://:/doc -``` - -Na przykład `http://localhost:4096/doc`. Użyj specyfikacji, aby wygenerować klientów lub sprawdzić typy żądań i odpowiedzi. Możesz też wyświetlić go w eksploratorze Swagger. - ---- - -## API - -Serwer opencode udostępnia następujące interfejsy API. - ---- - -### Globalne - -| Method | Path | Description | Response | -| ------ | ---------------- | ------------------------------ | ------------------------------------ | -| `GET` | `/global/health` | Uzyskaj stan i wersję serwera | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | Get global events (SSE stream) | Event stream | - ---- - -### Projekt - -| Method | Path | Description | Response | -| ------ | ------------------ | -------------------------- | --------------------------------------------- | -| `GET` | `/project` | Lista wszystkich projektów | Project[] | -| `GET` | `/project/current` | Pobierz bieżący projekt | Project | - ---- - -### Ścieżka i VCS - -| Method | Path | Description | Response | -| ------ | ------- | --------------------------------------------- | ------------------------------------------- | -| `GET` | `/path` | Pobierz bieżącą ścieżkę | Path | -| `GET` | `/vcs` | Uzyskaj informacje VCS dla bieżącego projektu | VcsInfo | - ---- - -### Instancja - -| Method | Path | Description | Response | -| ------ | ------------------- | ---------------------- | --------- | -| `POST` | `/instance/dispose` | Usuń bieżącą instancję | `boolean` | - ---- - -### Konfiguracja - -| Method | Path | Description | Response | -| ------- | ------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | Get config info | Config | -| `PATCH` | `/config` | Update config | Config | -| `GET` | `/config/providers` | Lista dostawców i modeli domyślnych | `{ providers: `Dostawca[]`, default: { [key: string]: string } }` | - ---- - -### Dostawca - -| Method | Path | Description | Response | -| ------ | -------------------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | Lista wszystkich dostawców | `{ all: `Dostawca[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | Uzyskaj metody uwierzytelniania dostawcy | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | Autoryzuj dostawcę za pomocą protokołu OAuth | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | Obsługa wywołania zwrotnego OAuth dla dostawcy | `boolean` | - ---- - -### Sesje - -| Method | Path | Description | Notes | -| -------- | ---------------------------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------- | -| `GET` | `/session` | Lista wszystkich sesji | Zwraca Session[] | -| `POST` | `/session` | Utwórz nową sesję | treść: `{ parentID?, title? }`, zwraca Session | -| `GET` | `/session/status` | Uzyskaj status sesji dla wszystkich sesji | Zwraca `{ [sessionID: string]: `Status sesji` }` | -| `GET` | `/session/:id` | Uzyskaj szczegóły sesji | Zwraca Session | -| `DELETE` | `/session/:id` | Usuń sesję i wszystkie jej dane | Zwraca `boolean` | -| `PATCH` | `/session/:id` | Aktualizuj właściwości sesji | treść: `{ title? }`, zwraca Session | -| `GET` | `/session/:id/children` | Pobierz sesje podrzędne sesji | Zwraca Session[] | -| `GET` | `/session/:id/todo` | Pobierz listę rzeczy do zrobienia dla sesji | Zwraca Todo[] | -| `POST` | `/session/:id/init` | Przeanalizuj aplikację i utwórz `AGENTS.md` | treść: `{ messageID, providerID, modelID }`, zwraca `boolean` | -| `POST` | `/session/:id/fork` | Rozwiń istniejącą sesję w wiadomości | treść: `{ messageID? }`, zwraca Session | -| `POST` | `/session/:id/abort` | Przerwij trwającą sesję | Zwraca `boolean` | -| `POST` | `/session/:id/share` | Udostępnij sesję | Zwraca Session | -| `DELETE` | `/session/:id/share` | Anuluj udostępnianie sesji | Zwraca Session | -| `GET` | `/session/:id/diff` | Pobierz różnicę dla tej sesji | zapytanie: `messageID?`, zwraca FileDiff[] | -| `POST` | `/session/:id/summarize` | Podsumuj sesję | treść: `{ providerID, modelID }`, zwraca `boolean` | -| `POST` | `/session/:id/revert` | Przywróć wiadomość | treść: `{ messageID, partID? }`, zwraca `boolean` | -| `POST` | `/session/:id/unrevert` | Przywróć wszystkie przywrócone wiadomości | Zwraca `boolean` | -| `POST` | `/session/:id/permissions/:permissionID` | Odpowiedz na prośbę o pozwolenie | treść: `{ response, remember? }`, zwraca `boolean` | - ---- - -### Wiadomości - -| Method | Path | Description | Notes | -| ------ | --------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `GET` | `/session/:id/message` | Lista wiadomości w sesji | zapytanie: `limit?`, zwraca `{ info: `Wiadomość`, parts: `Część[]`}[]` | -| `POST` | `/session/:id/message` | Wyślij wiadomość i poczekaj na odpowiedź | treść: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, zwraca `{ info: `Wiadomość`, parts: `Część[]`}` | -| `GET` | `/session/:id/message/:messageID` | Uzyskaj szczegóły wiadomości | Zwraca `{ info: `Wiadomość`, parts: `Część[]`}` | -| `POST` | `/session/:id/prompt_async` | Wyślij wiadomość asynchronicznie (bez czekania) | treść: taka sama jak `/session/:id/message`, zwraca `204 No Content` | -| `POST` | `/session/:id/command` | Wykonaj slash command | treść: `{ messageID?, agent?, model?, command, arguments }`, zwraca `{ info: `Wiadomość`, parts: `Część[]`}` | -| `POST` | `/session/:id/shell` | Uruchom polecenie shell | treść: `{ agent, model?, command }`, zwraca `{ info: `Wiadomość`, parts: `Część[]`}` | - ---- - -### Polecenia - -| Metoda | Ścieżka | Opis | Odpowiedź | -| ------ | ---------- | ------------------------ | --------------------------------------------- | -| `GET` | `/command` | Lista wszystkich poleceń | Command[] | - ---- - -### Pliki - -| Method | Path | Description | Response | -| ------ | ------------------------ | ------------------------------------ | ---------------------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | Szukaj tekstu w plikach | Tablica obiektów dopasowania z `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `GET` | `/find/file?query=` | Znajdź pliki i katalogi według nazwy | `string[]` (ścieżki) | -| `GET` | `/find/symbol?query=` | Find workspace symbols | Symbol[] | -| `GET` | `/file?path=` | Lista plików i katalogów | FileNode[] | -| `GET` | `/file/content?path=

` | Read a file | FileContent | -| `GET` | `/file/status` | Uzyskaj status śledzonych plików | File[] | - -#### `/find/file` query parameters - -- `query` (required) — search string (fuzzy match) -- `type` (optional) — limit results to `"file"` or `"directory"` -- `directory` (opcjonalnie) — zastąp katalog główny projektu dla wyszukiwania -- `limit` (optional) — max results (1–200) -- `dirs` (optional) — legacy flag (`"false"` returns only files) - ---- - -### Narzędzia (Eksperymentalne) - -| Method | Path | Description | Response | -| ------ | ------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -| `GET` | `/experimental/tool/ids` | Lista wszystkich identyfikatorów narzędzi | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | Lista narzędzi ze schematami JSON dla modelu | ToolList | - ---- - -### LSP, Formatery i MCP - -| Method | Path | Description | Response | -| ------ | ------------ | ---------------------------- | -------------------------------------------------------- | -| `GET` | `/lsp` | Uzyskaj status serwera LSP | LSPStatus[] | -| `GET` | `/formatter` | Get formatter status | FormatterStatus[] | -| `GET` | `/mcp` | Uzyskaj status serwera MCP | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | Dodaj dynamicznie serwer MCP | treść: `{ name, config }`, zwraca obiekt stanu MCP | - ---- - -### Agenci - -| Method | Path | Description | Response | -| ------ | -------- | ----------------------------------- | ------------------------------------------- | -| `GET` | `/agent` | Lista wszystkich dostępnych agentów | Agent[] | - ---- - -### Logowanie - -| Method | Path | Description | Response | -| ------ | ------ | ------------------------------------------------------------ | --------- | -| `POST` | `/log` | Write log entry. Body: `{ service, level, message, extra? }` | `boolean` | - ---- - -### TUI - -| Method | Path | Description | Response | -| ------ | ----------------------- | -------------------------------------------- | ----------------------- | -| `POST` | `/tui/append-prompt` | Dołącz tekst do promptu | `boolean` | -| `POST` | `/tui/open-help` | Otwórz okno pomocy | `boolean` | -| `POST` | `/tui/open-sessions` | Otwórz selektor sesji | `boolean` | -| `POST` | `/tui/open-themes` | Otwórz selektor motywów | `boolean` | -| `POST` | `/tui/open-models` | Otwórz selektor modelu | `boolean` | -| `POST` | `/tui/submit-prompt` | Prześlij bieżący prompt | `boolean` | -| `POST` | `/tui/clear-prompt` | Wyczyść prompt | `boolean` | -| `POST` | `/tui/execute-command` | Wykonaj polecenie (`{ command }`) | `boolean` | -| `POST` | `/tui/show-toast` | Pokaż toast (`{ title?, message, variant }`) | `boolean` | -| `GET` | `/tui/control/next` | Poczekaj na następne żądanie kontroli | Obiekt żądania kontroli | -| `POST` | `/tui/control/response` | Respond to a control request (`{ body }`) | `boolean` | - ---- - -### Uwierzytelnianie - -| Method | Path | Description | Response | -| ------ | ----------- | --------------------------------------------------------------------- | --------- | -| `PUT` | `/auth/:id` | Ustaw dane uwierzytelniające. Treść musi pasować do schematu dostawcy | `boolean` | - ---- - -### Zdarzenia - -| Method | Path | Description | Response | -| ------ | -------- | -------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | -| `GET` | `/event` | Strumień zdarzeń wysyłanych przez serwer. Pierwsze wydarzenie to `server.connected`, następnie wydarzenia autobusowe | Strumień zdarzeń wysłanych przez serwer | - ---- - -### Dokumentacja - -| Method | Path | Description | Response | -| ------ | ------ | ------------------------ | ----------------------------------- | -| `GET` | `/doc` | Specyfikacja OpenAPI 3.1 | Strona HTML ze specyfikacją OpenAPI | diff --git a/packages/web/src/content/docs/pl/share.mdx b/packages/web/src/content/docs/pl/share.mdx deleted file mode 100644 index 0389267b59..0000000000 --- a/packages/web/src/content/docs/pl/share.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Udostępnianie -description: Udostępnij swoje rozmowy dotyczące opencode. ---- - -Funkcja udostępniania opencode umożliwia tworzenie publicznych linków do konwersacji opencode, dzięki czemu możesz współpracować z członkami zespołu lub uzyskać pomoc od innych. - -:::note -Udostępnione konwersacje są publicznie dostępne dla każdej osoby mającej link. -::: - ---- - -## Jak to działa - -Kiedy udostępniasz rozmowę, opencode: - -1. Tworzy unikalny publiczny adres URL sesji -2. Synchronizuje historię rozmów z naszymi serwerami -3. Udostępnia rozmowę za pośrednictwem łącza do udostępniania — `opncd.ai/s/` - ---- - -## Udostępnianie - -opencode obsługuje trzy tryby udostępniania, które kontrolują sposób udostępniania rozmów: - ---- - -### Ręczne (domyślne) - -Domyślnie opencode korzysta z ręcznego trybu udostępniania. Sesje nie są udostępniane automatycznie, ale możesz je udostępnić ręcznie za pomocą polecenia `/share`: - -``` -/share -``` - -Spowoduje to wygenerowanie unikalnego adresu URL, który zostanie skopiowany do schowka. - -Aby jawnie ustawić tryb ręczny w [pliku konfiguracyjnym] (./config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - ---- - -### Automatyczne udostępnianie - -Możesz włączyć automatyczne udostępnianie dla wszystkich nowych rozmów, ustawiając opcję `share` na `"auto"` w [pliku konfiguracyjnym] (./config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "auto" -} -``` - -Po włączeniu automatycznego udostępniania każda nowa rozmowa będzie automatycznie udostępniana i generowany będzie link. - ---- - -### Wyłączone - -Możesz całkowicie wyłączyć udostępnianie, ustawiając opcję `share` na `"disabled"` w [pliku konfiguracyjnym] (./config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -Aby wymusić to w całym zespole dla danego projektu, dodaj go do `opencode.json` w swoim projekcie i sprawdź w Git. - ---- - -## Cofnięcie udostępnienia - -Aby zatrzymać udostępnianie rozmowy i usunąć ją z dostępu publicznego: - -``` -/unshare -``` - -Spowoduje to usunięcie łącza udostępniania i danych związanych z rozmową. - ---- - -## Prywatność - -Podczas udostępniania rozmowy należy pamiętać o kilku rzeczach. - ---- - -### Przechowywanie danych - -Udostępnione rozmowy pozostają dostępne, dopóki wyraźnie ich nie udostępnisz. Ten -includes: - -- Pełna historia rozmów -- Wszystkie wiadomości i odpowiedzi -- Metadane sesji - ---- - -### Zalecenia - -- Udostępniaj tylko rozmowy, które nie zawierają poufnych informacji. -- Przejrzyj treść rozmowy przed udostępnieniem. -- Cofnij udostępnianie rozmów po zakończeniu współpracy. -- Unikaj udostępniania rozmów zawierających zastrzeżony kod lub poufne dane. -- W przypadku wrażliwych projektów całkowicie wyłącz udostępnianie. - ---- - -## Dla przedsiębiorstw - -W przypadku wdrożeń korporacyjnych funkcją udostępniania może być: - -- **Wyłączone** całkowicie ze względu na bezpieczeństwo -- **Restricted** to users authenticated through SSO only -- **Własny hosting** na własnej infrastrukturze - -[Dowiedz się więcej](/docs/enterprise) o używaniu opencode w Twojej organizacji. diff --git a/packages/web/src/content/docs/pl/skills.mdx b/packages/web/src/content/docs/pl/skills.mdx deleted file mode 100644 index 8dbb730120..0000000000 --- a/packages/web/src/content/docs/pl/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: "Umiejętności Agenta" -description: "Definiuj powtarzalne zachowania za pomocą definicji SKILL.md" ---- - -Umiejętności agenta pozwalają opencode odkryć instrukcje wielokrotnego użytku z repozytorium lub katalogu domowego. -Umiejętności są ładowane na żądanie za pośrednictwem natywnego narzędzia `skill` — agenci widzą dostępne umiejętności i w razie potrzeby mogą załadować pełną zawartość. - ---- - -## Lokalizacja plików - -Utwórz jeden folder na nazwę umiejętności i umieść w nim `SKILL.md`. -opencode przeszukuje te lokalizacje: - -- Project config: `.opencode/skills//SKILL.md` -- Global config: `~/.config/opencode/skills//SKILL.md` -- Project Claude-compatible: `.claude/skills//SKILL.md` -- Global Claude-compatible: `~/.claude/skills//SKILL.md` -- Project agent-compatible: `.agents/skills//SKILL.md` -- Global agent-compatible: `~/.agents/skills//SKILL.md` - ---- - -## Zrozumienie wykrywania - -W przypadku ścieżek lokalnych projektu opencode przechodzi od bieżącego katalogu roboczego, aż dotrze do drzewa roboczego git. -Ładuje po drodze dowolne pasujące `skills/*/SKILL.md` w `.opencode/` i dowolne pasujące `.claude/skills/*/SKILL.md` lub `.agents/skills/*/SKILL.md`. - -Ładowane są także definicje globalne z `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` i `~/.agents/skills/*/SKILL.md`. - ---- - -## Tworzenie frontmatter - -Każdy `SKILL.md` musi zaczynać się od treści YAML. -Rozpoznawane są tylko te pola: - -- `name` (wymagane) -- `description` (wymagane) -- `license` (opcjonalnie) -- `compatibility` (opcjonalnie) -- `metadata` (opcjonalnie, mapa string-to-string) - -Nieznane pola frontmatter są ignorowane. - ---- - -## Walidacja nazw - -`name` musi: - -- Mieć od 1 do 64 znaków -- Należy używać małych liter alfanumerycznych i oddzielać je pojedynczym łącznikiem -- Nie zaczyna się ani nie kończy na `-` -- Nie może zawierać następujących po sobie `--` -- Dopasuj nazwę katalogu zawierającą `SKILL.md` - -Odpowiednik wyrażenia regularnego: - -```text -^[a-z0-9]+(-[a-z0-9]+)*$ -``` - ---- - -## Zasady dotyczące długości - -`description` musi mieć od 1 do 1024 znaków. -Zadbaj o to, aby agent mógł dokonać prawidłowego wyboru. - ---- - -## Przykład użycia - -Utwórz `.opencode/skills/git-release/SKILL.md` w ten sposób: - -```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 narzędzia - -opencode wymienia dostępne umiejętności w opisie narzędzia `skill`. -Każdy wpis zawiera nazwę i opis umiejętności: - -```xml - - - git-release - Create consistent releases and changelogs - - -``` - -Agent ładuje umiejętność wywołując narzędzie: - -``` -skill({ name: "git-release" }) -``` - ---- - -## Konfiguracja uprawnień - -Kontroluj, do których umiejętności agenci mogą uzyskać dostęp, używając uprawnień opartych na wzorcach w `opencode.json`: - -```json -{ - "permission": { - "skill": { - "*": "allow", - "pr-review": "allow", - "internal-*": "deny", - "experimental-*": "ask" - } - } -} -``` - -| Permission | Behavior | -| ---------- | ------------------------------------------------------ | -| `allow` | Umiejętność ładuje się natychmiast | -| `deny` | Umiejętność ukryta przed agentem, dostęp odrzucony | -| `ask` | Użytkownik proszony o zatwierdzenie przed załadowaniem | - -Wzorce obsługują symbole wieloznaczne: `internal-*` odpowiada `internal-docs`, `internal-tools` itd. - ---- - -## Nadpisywanie dla agenta - -Nadaj konkretnym agentom inne uprawnienia niż globalne ustawienia domyślne. - -**Dla agentów niestandardowych** (w temacie agentów): - -```yaml ---- -permission: - skill: - "documents-*": "allow" ---- -``` - -**Dla agentów wbudowanych** (w `opencode.json`): - -```json -{ - "agent": { - "plan": { - "permission": { - "skill": { - "internal-*": "allow" - } - } - } - } -} -``` - ---- - -## Wyłączanie narzędzia umiejętności - -Całkowicie wyłącz umiejętności agentów, którzy nie powinni ich używać: - -**Dla agentów niestandardowych** (w temacie agentów): - -```yaml ---- -tools: - skill: false ---- -``` - -**W przypadku agentów wbudowanych**: - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -Jeśli opcja jest wyłączona, sekcja `` jest całkowicie pomijana. - ---- - -## Rozwiązywanie problemów z ładowaniem - -Jeśli umiejętność nie pojawi się: - -1. Sprawdź, czy `SKILL.md` jest napisane wielkimi literami -2. Sprawdź, czy frontmatter zawiera `name` i `description` -3. Upewnij się, że nazwy umiejętności są unikalne we wszystkich lokalizacjach -4. Sprawdź uprawnienia — umiejętności z `deny` są ukryte przed agentami diff --git a/packages/web/src/content/docs/pl/themes.mdx b/packages/web/src/content/docs/pl/themes.mdx deleted file mode 100644 index 80a7808351..0000000000 --- a/packages/web/src/content/docs/pl/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -title: Themes -description: Wybierz wbudowany motyw lub zdefiniuj własny. ---- - -Dzięki opencode możesz wybrać jeden z kilku wbudowanych motywów, użyć motywu, który dostosowuje się do motywu terminala lub zdefiniować własny, niestandardowy motyw. - -Domyślnie opencode używa naszego własnego motywu `opencode`. - ---- - -## Wymagania terminala - -Aby motywy wyświetlały się poprawnie z pełną paletą kolorów, Twój terminal musi obsługiwać **truecolor** (kolor 24-bitowy). Większość nowoczesnych terminali domyślnie obsługuje tę opcję, ale może być konieczne jej włączenie: - -- **Sprawdź wsparcie**: Uruchom `echo $COLORTERM` - powinno wypisać `truecolor` lub `24bit` -- **Włącz truecolor**: Ustaw zmienną środowiskową `COLORTERM=truecolor` w swoim profilu shell -- **Zgodność terminala**: Upewnij się, że emulator terminala obsługuje 24-bitowy kolor (większość nowoczesnych terminali, takich jak iTerm2, Alacritty, Kitty, Windows Terminal i najnowsze wersje terminala GNOME tak) - -Bez obsługi Truecolor motywy mogą pojawiać się ze zmniejszoną dokładnością kolorów lub wracać do najbliższego przybliżenia 256 kolorów. - ---- - -## Wbudowane motywy - -opencode ma kilka wbudowanych motywów. - -| Name | Description | -| ---------------------- | --------------------------------------------------------------------------------- | -| `system` | Dopasowuje się do koloru tła terminala | -| `tokyonight` | Na podstawie motywu [tokyonight](https://github.com/folke/tokyonight.nvim) | -| `everforest` | Na podstawie motywu [Everforest](https://github.com/sainnhe/everforest) | -| `ayu` | Na podstawie ciemnego motywu [Ayu](https://github.com/ayu-theme) | -| `catppuccin` | Na podstawie motywu [Catppuccin](https://github.com/catppuccin) | -| `catppuccin-macchiato` | Na podstawie motywu [Catppuccin](https://github.com/catppuccin) | -| `gruvbox` | Na podstawie motywu [Gruvbox](https://github.com/morhetz/gruvbox) | -| `kanagawa` | Na podstawie motywu [Kanagawa](https://github.com/rebelot/kanagawa.nvim) | -| `nord` | Na podstawie motywu [Nord](https://github.com/nordtheme/nord) | -| `matrix` | Hacker-style green on black theme | -| `one-dark` | Na podstawie ciemnego motywu [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) | - -Co więcej, stale dodajemy nowe motywy. - ---- - -## Motyw systemowy - -Motyw `system` został zaprojektowany tak, aby automatycznie dostosowywał się do schematu kolorów terminala. W przeciwieństwie do tradycyjnych motywów, które używają stałych kolorów, motyw _system_: - -- **Generuje skalę szarości**: Tworzy niestandardową skalę szarości w oparciu o kolor tła terminala, zapewniając optymalny kontrast. -- **Używa kolorów ANSI**: Wykorzystuje standardowe kolory ANSI (0-15) do podświetlania składni i elementów interfejsu użytkownika, które odpowiadają palecie kolorów terminala. -- **Zachowuje ustawienia domyślne terminala**: Używa `none` dla kolorów tekstu i tła, aby zachować natywny wygląd terminala. - -Motyw systemu przeznaczony jest dla użytkowników, którzy: - -- Chcą, aby OpenCode pasował do wyglądu ich terminala -- Używają niestandardowych schematów kolorów terminala -- Preferują spójny wygląd we wszystkich aplikacjach terminalowych - ---- - -## Używanie motywu - -Możesz wybrać motyw, wywołując opcję wyboru motywu za pomocą polecenia `/theme`. Możesz też określić to w `tui.json`. - -```json title="tui.json" {3} -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - ---- - -## Motywy niestandardowe - -opencode obsługuje elastyczny system motywów oparty na JSON, który pozwala użytkownikom łatwo tworzyć i dostosowywać motywy. - ---- - -### Hierarchia - -Motywy są ładowane z wielu katalogów w następującej kolejności, przy czym późniejsze katalogi zastępują wcześniejsze: - -1. **Wbudowane motywy** – są osadzone w formacie binarnym -2. **Katalog konfiguracji użytkownika** - Zdefiniowany w `~/.config/opencode/themes/*.json` lub `$XDG_CONFIG_HOME/opencode/themes/*.json` -3. **Katalog główny projektu** - Zdefiniowany w `/.opencode/themes/*.json` -4. **Bieżący katalog roboczy** - Zdefiniowany w `./.opencode/themes/*.json` - -Jeśli wiele katalogów zawiera motyw o tej samej nazwie, zostanie użyty motyw z katalogu o wyższym priorytecie. - ---- - -### Tworzenie motywu - -Aby utworzyć niestandardowy motyw, utwórz plik JSON w jednym z katalogów motywów. - -W przypadku motywów dla całego użytkownika: - -```bash no-frame -mkdir -p ~/.config/opencode/themes -vim ~/.config/opencode/themes/my-theme.json -``` - -Oraz dla tematów specyficznych dla projektu. - -```bash no-frame -mkdir -p .opencode/themes -vim .opencode/themes/my-theme.json -``` - ---- - -### Format JSON - -Motywy korzystają z elastycznego formatu JSON z obsługą: - -- **Kolorów Hex**: `"#ffffff"` -- **Kolorów ANSI**: `3` (0-255) -- **Referencji kolorów**: `"primary"` lub definicje niestandardowe -- **Wariantów Ciemny/Jasny**: `{"dark": "#000", "light": "#fff"}` -- **Braku koloru**: `"none"` - Używa domyślnego koloru terminala lub przezroczystości - ---- - -### Definicje kolorów - -Sekcja `defs` jest opcjonalna i pozwala zdefiniować kolory wielokrotnego użytku, do których można się odwoływać w motywie. - ---- - -### Domyślne ustawienia terminala - -Wartość specjalna `"none"` może zostać użyta dla dowolnego koloru, aby przejąć domyślny kolor terminala. Jest to szczególnie przydatne do tworzenia motywów, które płynnie komponują się ze schematem kolorów terminala: - -- `"text": "none"` - Używa domyślnego koloru pierwszego planu terminala -- `"background": "none"` - Używa domyślnego koloru tła terminala - ---- - -### Przykład - -Oto przykład niestandardowego motywu: - -```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" - } - } -} -``` diff --git a/packages/web/src/content/docs/pl/tools.mdx b/packages/web/src/content/docs/pl/tools.mdx deleted file mode 100644 index 6b8a5eeb49..0000000000 --- a/packages/web/src/content/docs/pl/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -title: Narzędzia -description: Zarządzaj narzędziami, z których może korzystać LLM. ---- - -Narzędzia umożliwiają LLM wykonywanie działań w bazie kodu. OpenCode posiada zestaw wbudowanych narzędzi, ale możesz go rozszerzyć o [narzędzia niestandardowe](/docs/custom-tools) lub [serwery MCP](/docs/mcp-servers). - -Domyślnie wszystkie narzędzia są **włączone** i nie wymagają zatwierdzenia przed uruchomieniem. Możesz kontrolować zachowanie narzędzi poprzez [uprawnienia](/docs/permissions). - ---- - -## Konfiguracja - -Użyj pola `permission` do kontrolowania zachowania narzędzia. Dla każdego narzędzia możesz zezwolić (`allow`), odmówić (`deny`) lub wymagać zatwierdzenia (`ask`). - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny", - "bash": "ask", - "webfetch": "allow" - } -} -``` - -Możesz także używać symboli wieloznacznych do kontrolowania wielu narzędzi jednocześnie. Na przykład, aby wymagać zatwierdzenia dla wszystkich narzędzi z serwera MCP: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "mymcp_*": "ask" - } -} -``` - -[Dowiedz się więcej](/docs/permissions) o konfigurowaniu uprawnień. - ---- - -## Wbudowane narzędzia - -Oto wszystkie wbudowane narzędzia dostępne w OpenCode. - ---- - -### bash - -Wykonuj polecenia powłoki (shell) w środowisku projektu. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "bash": "allow" - } -} -``` - -To narzędzie umożliwia LLM uruchamianie poleceń terminalowych, takich jak `npm install`, `git status` lub dowolne inne polecenie powłoki. - ---- - -### edit - -Modyfikuj istniejące pliki poprzez precyzyjne zastępowanie tekstu. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -To narzędzie umożliwia precyzyjną edycję plików poprzez zastąpienie dokładnych dopasowań tekstu. Jest to główny sposób, w jaki LLM modyfikuje kod. - ---- - -### write - -Twórz nowe pliki lub nadpisuj istniejące. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Użyj tego, aby umożliwić LLM tworzenie nowych plików. Zastąpi istniejące pliki, jeśli już istnieją. - -:::note -Narzędzie `write` jest kontrolowane przez uprawnienie `edit`, które obejmuje wszystkie modyfikacje plików (`edit`, `write`, `patch`). -::: - ---- - -### read - -Odczytaj zawartość pliku z bazy kodu. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "read": "allow" - } -} -``` - -Narzędzie to odczytuje pliki i zwraca ich zawartość. Obsługuje czytanie określonych zakresów linii w przypadku dużych plików. - ---- - -### grep - -Przeszukuj zawartość plików za pomocą wyrażeń regularnych. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "grep": "allow" - } -} -``` - -Szybkie wyszukiwanie treści w całej bazie kodu. Obsługuje pełną składnię wyrażeń regularnych i filtrowanie wzorców plików. - ---- - -### glob - -Znajduj pliki na podstawie wzorców. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "glob": "allow" - } -} -``` - -Szukaj plików przy użyciu wzorców glob, takich jak `**/*.js` lub `src/**/*.ts`. Zwraca pasujące ścieżki plików posortowane według czasu modyfikacji. - ---- - -### LSP (eksperymentalne) - -Interakcja ze skonfigurowanymi serwerami LSP w celu uzyskania funkcji analizy kodu, takich jak definicje, referencje, podpowiedzi (hover) i hierarchia wywołań. - -:::note -To narzędzie jest dostępne tylko wtedy, gdy `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (lub `OPENCODE_EXPERIMENTAL=true`). -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "lsp": "allow" - } -} -``` - -Obsługiwane operacje obejmują `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` i `outgoingCalls`. - -Aby skonfigurować, które serwery LSP są dostępne dla Twojego projektu, zobacz [Serwery LSP](/docs/lsp). - ---- - -### patch - -Stosuj łatki (patches) do plików. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -To narzędzie stosuje pliki różnicowe (diffs) do bazy kodu. Przydatne do stosowania zmian z różnych źródeł. - -:::note -Narzędzie `patch` jest kontrolowane przez uprawnienie `edit`, które obejmuje wszystkie modyfikacje plików (`edit`, `write`, `patch`). -::: - ---- - -### skill - -Załaduj [umiejętność](/docs/skills) (plik `SKILL.md`) i zwróć jej treść w rozmowie. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "skill": "allow" - } -} -``` - ---- - -### todowrite - -Zarządzaj listami zadań (todo) podczas sesji kodowania. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "todowrite": "allow" - } -} -``` - -Tworzy i aktualizuje listy zadań w celu śledzenia postępu podczas złożonych operacji. LLM wykorzystuje to do organizowania zadań wieloetapowych. - -:::note -To narzędzie jest domyślnie wyłączone dla subagentów, ale można je włączyć ręcznie. [Dowiedz się więcej](/docs/agents/#permissions) -::: - ---- - -### webfetch - -Pobieraj treści z sieci. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "webfetch": "allow" - } -} -``` - -Umożliwia LLM pobieranie i odczytywanie stron internetowych. Przydatne do wyszukiwania dokumentacji lub zasobów online. - ---- - -### websearch - -Wyszukaj informacje w Internecie. - -:::note -To narzędzie jest dostępne tylko w przypadku korzystania z dostawcy OpenCode lub gdy zmienna środowiskowa `OPENCODE_ENABLE_EXA` jest ustawiona na dowolną wartość prawdziwą (np. `true` lub `1`). - -Aby włączyć przy uruchamianiu OpenCode: - -```bash -OPENCODE_ENABLE_EXA=1 opencode -``` - -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "websearch": "allow" - } -} -``` - -Przeszukuje Internet za pomocą Exa AI, aby znaleźć odpowiednie informacje. Przydatne do badania tematów, znajdowania bieżących wydarzeń lub zbierania informacji wykraczających poza zbiór danych treningowych. - -Nie jest wymagany żaden klucz API — narzędzie łączy się bezpośrednio z usługą MCP hostowaną przez Exa AI bez uwierzytelniania. - -:::tip -Użyj `websearch`, gdy chcesz znaleźć informacje (odkrywanie), i `webfetch`, gdy musisz pobrać treść z określonego adresu URL (pobieranie). -::: - ---- - -### question - -Zadawaj pytania użytkownikowi podczas wykonywania. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "question": "allow" - } -} -``` - -To narzędzie umożliwia LLM zadawanie pytań użytkownikowi podczas wykonywania zadania. Jest to przydatne do: - -- Zbierania preferencji i wymagań użytkownika -- Doprecyzowania niejednoznacznych instrukcji -- Podejmowania decyzji dotyczących implementacji -- Proponowania możliwych kierunków działania - -Każde pytanie zawiera nagłówek, tekst pytania i listę opcji. Użytkownicy mogą wybierać spośród dostępnych opcji lub wpisać niestandardową odpowiedź. Jeśli pytań jest wiele, użytkownicy mogą nawigować między nimi przed przesłaniem wszystkich odpowiedzi. - ---- - -## Narzędzia niestandardowe - -Niestandardowe narzędzia pozwalają zdefiniować własne funkcje, które LLM może wywołać. Są one zdefiniowane w pliku konfiguracyjnym i mogą wykonywać dowolny kod. - -[Więcej informacji](/docs/custom-tools) o tworzeniu narzędzi niestandardowych. - ---- - -## Serwery MCP - -Serwery MCP (Model Context Protocol) umożliwiają integrację zewnętrznych narzędzi i usług. Obejmuje to dostęp do baz danych, integracje API i usługi stron trzecich. - -[Dowiedz się więcej](/docs/mcp-servers) o konfigurowaniu serwerów MCP. - ---- - -## Szczegóły techniczne - -Wewnętrznie narzędzia takie jak `grep` i `glob` używają [ripgrep](https://github.com/BurntSushi/ripgrep). Domyślnie ripgrep respektuje wzorce `.gitignore`, co oznacza, że pliki i katalogi wymienione w Twoim `.gitignore` zostaną wykluczone z wyszukiwań i list. - ---- - -### Ignorowanie plików - -Aby uwzględnić pliki, które normalnie byłyby ignorowane, utwórz plik `.ignore` w katalogu głównym projektu. Ten plik może jawnie zezwalać na określone ścieżki. - -```text title=".ignore" -!node_modules/ -!dist/ -!build/ -``` - -Na przykład ten plik `.ignore` pozwala ripgrepowi przeszukiwać katalogi `node_modules/`, `dist/` i `build/`, nawet jeśli są one wymienione w `.gitignore`. diff --git a/packages/web/src/content/docs/pl/troubleshooting.mdx b/packages/web/src/content/docs/pl/troubleshooting.mdx deleted file mode 100644 index 2230cea35c..0000000000 --- a/packages/web/src/content/docs/pl/troubleshooting.mdx +++ /dev/null @@ -1,300 +0,0 @@ ---- -title: Rozwiązywanie problemów -description: Typowe problemy i sposoby ich rozwiązywania. ---- - -Aby debugować problemy z opencode, zacznij od sprawdzenia dzienników i danych lokalnych przechowywanych na dysku. - ---- - -## Dzienniki - -Pliki logów są zapisywane w: - -- **macOS/Linux**: `~/.local/share/opencode/log/` -- **Windows**: Naciśnij `WIN+R` i wklej `%USERPROFILE%\.local\share\opencode\log` - -Nazwy plików dziennika zawierają znaczniki czasu (np. `2025-01-09T123456.log`) i przechowywanych jest 10 ostatnich plików dziennika. - -Możesz ustawić poziom dziennika za pomocą opcji wiersza poleceń `--log-level`, aby uzyskać bardziej szczegółowe informacje debugowania. Na przykład `opencode --log-level DEBUG`. - ---- - -## Przechowywanie danych - -opencode przechowuje dane sesji i inne dane aplikacji na dysku pod adresem: - -- **macOS/Linux**: `~/.local/share/opencode/` -- **Windows**: Naciśnij `WIN+R` i wklej `%USERPROFILE%\.local\share\opencode` - -Ten katalog zawiera: - -- `auth.json` - Authentication data like API keys, OAuth tokens -- `log/` - Application logs -- `project/` — Dane specyficzne dla projektu, takie jak dane sesji i komunikatów - - Jeśli projekt znajduje się w repozytorium Git, jest on przechowywany w `.//storage/` - - If it is not a Git repo, it is stored in `./global/storage/` - ---- - -## Aplikacja desktopowa - -opencode Desktop uruchamia w tle lokalny serwer opencode (sidecar `opencode-cli`). Większość problemów jest spowodowana nieprawidłowo działającą wtyczką, uszkodzoną pamięcią podręczną lub złymi ustawieniami serwera. - -### Szybkie sprawdzenie - -- Całkowicie zakończ i uruchom ponownie aplikację. -- Jeśli aplikacja wyświetli ekran błędu, kliknij **Uruchom ponownie** i skopiuj szczegóły błędu. -- Tylko macOS: menu `OpenCode` -> **Załaduj ponownie przeglądarkę internetową** (pomaga, jeśli interfejs użytkownika jest pusty/zawieszony). - ---- - -### Wyłączanie wtyczek - -Jeśli aplikacja komputerowa ulega awarii podczas uruchamiania, zawiesza się lub zachowuje się dziwnie, zacznij od wyłączenia wtyczek. - -#### Sprawdź konfigurację globalną - -Otwórz globalny plik konfiguracyjny i poszukaj klucza `plugin`. - -- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (lub `~/.config/opencode/opencode.json`) -- **macOS/Linux** (starsze instalacje): `~/.local/share/opencode/opencode.jsonc` -- **Windows**: Naciśnij `WIN+R` i wklej `%USERPROFILE%\.config\opencode\opencode.jsonc` - -Jeśli masz skonfigurowane wtyczki, tymczasowo je wyłącz, usuwając klucz lub ustawiając go na pustą tablicę: - -```jsonc -{ - "$schema": "https://opencode.ai/config.json", - "plugin": [], -} -``` - -#### Sprawdź katalogi wtyczek - -opencode może także ładować lokalne wtyczki z dysku. Tymczasowo usuń je (lub zmień nazwę folderu) i uruchom ponownie aplikację komputerową: - -- **Wtyczki globalne** - - **macOS/Linux**: `~/.config/opencode/plugins/` - - **Windows**: Naciśnij `WIN+R` i wklej `%USERPROFILE%\.config\opencode\plugins` -- **Wtyczki projektowe** (tylko jeśli używasz konfiguracji dla poszczególnych projektów) - - `/.opencode/plugins/` - -Jeśli aplikacja ponownie zacznie działać, włączaj ponownie wtyczki pojedynczo, aby dowiedzieć się, która powoduje problem. - ---- - -### Wyczyść pamięć podręczną - -Jeśli wyłączenie wtyczek nie pomoże (lub instalacja wtyczki utknęła), wyczyść pamięć podręczną, aby opencode mógł ją odbudować. - -1. Całkowicie zamknij opencode Desktop. -2. Usuń katalog pamięci podręcznej: - -- **macOS**: Finder -> `Cmd+Shift+G` -> paste `~/.cache/opencode` -- **Linux**: usuń `~/.cache/opencode` (lub uruchom `rm -rf ~/.cache/opencode`) -- **Windows**: Naciśnij `WIN+R` i wklej `%USERPROFILE%\.cache\opencode` - -3. Uruchom ponownie opencode Desktop. - ---- - -### Napraw problemy z połączeniem z serwerem - -opencode Desktop może uruchomić własny serwer lokalny (domyślnie) lub połączyć się ze skonfigurowanym adresem URL serwera. - -Jeśli zobaczysz okno dialogowe **„Połączenie nie powiodło się”** (lub aplikacja nigdy nie wychodzi poza ekran powitalny), sprawdź, czy jest niestandardowy adres URL serwera. - -#### Wyczyść domyślny adres URL serwera na komputerze - -Na ekranie głównym kliknij nazwę serwera (z kropką stanu), aby otworzyć selektor serwerów. W sekcji **Serwer domyślny** kliknij **Wyczyść**. - -#### Usuń `server.port` / `server.hostname` ze swojej konfiguracji - -Jeśli Twój `opencode.json(c)` zawiera sekcję `server`, tymczasowo usuń ją i uruchom ponownie aplikację komputerową. - -#### Sprawdź zmienne środowiskowe - -Jeśli w swoim środowisku masz ustawiony `OPENCODE_PORT`, aplikacja komputerowa spróbuje użyć tego portu dla serwera lokalnego. - -- usuń `OPENCODE_PORT` (lub wybierz wolny port) i uruchom ponownie. - ---- - -### Linux: Problemy z Wayland / X11 - -W systemie Linux, niektóre konfiguracje Wayland mogą powodować puste okna lub błędy kompozytora. - -- Jeśli korzystasz z Wayland, a aplikacja jest pusta/ ulega awarii, spróbuj uruchomić ją za pomocą `OC_ALLOW_WAYLAND=1`. -- Jeśli to pogorszy sprawę, usuń go i zamiast tego spróbuj uruchomić w sesji X11. - ---- - -### Windows: Środowisko uruchomieniowe WebView2 - -W systemie Windows opencode Desktop wymaga Microsoft Edge **WebView2 Runtime**. Jeśli aplikacja otwiera się w pustym oknie lub nie uruchamia się, zainstaluj/zaktualizuj WebView2 i spróbuj ponownie. - ---- - -### Windows: Ogólne problemy z wydajnością - -Jeśli doświadczasz niskiej wydajności, problemów z dostępem do plików lub problemów z terminalem w systemie Windows, spróbuj użyć [WSL (podsystem Windows dla systemu Linux) (./windows-wsl). WSL zapewnia środowisko Linux, które płynniej współpracuje z funkcjami opencode. - ---- - -### Brak powiadomień - -opencode Desktop pokazuje powiadomienia systemowe tylko wtedy, gdy: - -- powiadomienia są włączone dla opencode w ustawieniach systemu operacyjnego, oraz -- okno aplikacji nie jest aktywne. - ---- - -### Resetowanie pamięci aplikacji - -Jeśli aplikacja nie uruchamia się i nie możesz wyczyścić ustawień w interfejsie użytkownika, zresetuj zapisany stan aplikacji komputerowej. - -1. Zamknij całkowicie opencode Desktop. -2. Znajdź i usuń te pliki (znajdują się w katalogu danych aplikacji opencode Desktop): - -- `opencode.settings.dat` (domyślny adres URL serwera na komputerze stacjonarnym) -- `opencode.global.dat` i `opencode.workspace.*.dat` (stan interfejsu użytkownika, taki jak najnowsze serwery/projekty) - -Aby szybko znaleźć katalog: - -- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (następnie wyszukaj nazwy plików powyżej) -- **Linux**: wyszukaj powyższe nazwy plików pod `~/.local/share` -- **Windows**: Naciśnij `WIN+R` -> `%APPDATA%` (następnie wyszukaj nazwy plików powyżej) - ---- - -## Uzyskiwanie pomocy - -Jeśli masz problemy z opencode: - -1. **Zgłoś problem na GitHub** - - Najlepszym sposobem zgłaszania błędów lub zgłaszania żądań funkcji jest skorzystanie z naszego repozytorium GitHub: - - [**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues) - - Przed utworzeniem nowego problemu przeszukaj istniejące i sprawdź, czy Twój problem nie został już zgłoszony. - -2. **Dołącz do naszego Discorda** - - Aby uzyskać pomoc w czasie rzeczywistym i dyskusję społeczności, dołącz do naszego serwera Discord: - - [**opencode.ai/discord**](https://opencode.ai/discord) - ---- - -## Typowe problemy - -Oto kilka typowych problemów i sposobów ich rozwiązania. - ---- - -### opencode nie uruchamia się - -1. Sprawdź dzienniki pod kątem komunikatów o błędach -2. Spróbuj uruchomić z `--print-logs`, aby zobaczyć dane wyjściowe w terminalu -3. Upewnij się, że masz najnowszą wersję z `opencode upgrade` - ---- - -### Problemy z uwierzytelnianiem - -1. Spróbuj ponownie uwierzytelnić się za pomocą polecenia `/connect` w TUI -2. Sprawdź, czy klucze API są ważne -3. Upewnij się, że Twoja sieć umożliwia połączenia z interfejsem API dostawcy - ---- - -### Model niedostępny - -1. Sprawdź, czy dokonałeś uwierzytelnienia u dostawcy -2. Sprawdź, czy nazwa modelu w konfiguracji jest poprawna -3. Niektóre modele mogą wymagać określonego dostępu lub subskrypcji - -Jeśli napotkasz `ProviderModelNotFoundError`, najprawdopodobniej -błędnie odwołujesz się gdzieś do modelu. -Modele powinny być wskazywane w ten sposób: `/` - -Przykłady: - -- `openai/gpt-4.1` -- `openrouter/google/gemini-2.5-flash` -- `opencode/kimi-k2` - -Aby dowiedzieć się, do jakich modeli masz dostęp, uruchom `opencode models` - ---- - -### ProviderInitError - -Jeśli napotkasz błąd ProviderInitError, prawdopodobnie masz nieprawidłową lub uszkodzoną konfigurację. - -Aby rozwiązać ten problem: - -1. Najpierw sprawdź, czy Twój dostawca jest prawidłowo skonfigurowany, postępując zgodnie z [przewodnikiem dostawców](/docs/providers) -2. Jeśli problem będzie się powtarzał, spróbuj wyczyścić zapisaną konfigurację: - - ```bash - rm -rf ~/.local/share/opencode - ``` - - W systemie Windows naciśnij `WIN+R` i usuń: `%USERPROFILE%\.local\share\opencode` - -3. Ponownie uwierzytelnij się u swojego dostawcy za pomocą polecenia `/connect` w TUI. - ---- - -### Błędy AI_APICallError i problemy z pakietami dostawców - -Jeśli napotkasz błędy wywołań API, może to wynikać z nieaktualnych pakietów dostawców. opencode dynamicznie instaluje pakiety dostawców (OpenAI, Anthropic, Google itp.) w razie potrzeby i przechowuje je lokalnie w pamięci podręcznej. - -Aby rozwiązać problemy z pakietem dostawcy: - -1. Wyczyść pamięć podręczną pakietu dostawcy: - - ```bash - rm -rf ~/.cache/opencode - ``` - - W systemie Windows naciśnij `WIN+R` i usuń: `%USERPROFILE%\.cache\opencode` - -2. Uruchom ponownie kod opencode, aby ponownie zainstalować najnowsze pakiety dostawców - -Zmusi to opencode do pobrania najnowszych wersji pakietów dostawców, co często rozwiązuje problemy ze zgodnością z parametrami modelu i zmianami API. - ---- - -### Kopiowanie/wklejanie nie działa na Linuxie - -Aby funkcja kopiowania/wklejania działała, użytkownicy systemu Linux muszą mieć zainstalowane jedno z następujących narzędzi schowka: - -**Dla systemów X11:** - -```bash -apt install -y xclip -# or -apt install -y xsel -``` - -**Dla systemów Wayland:** - -```bash -apt install -y wl-clipboard -``` - -**Dla środowisk headless:** - -```bash -apt install -y xvfb -# and run: -Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & -export DISPLAY=:99.0 -``` - -opencode wykryje, czy używasz Waylanda i wolisz `wl-clipboard`, w przeciwnym razie spróbuje znaleźć narzędzia schowka w kolejności: `xclip` i `xsel`. diff --git a/packages/web/src/content/docs/pl/tui.mdx b/packages/web/src/content/docs/pl/tui.mdx deleted file mode 100644 index 02728b81de..0000000000 --- a/packages/web/src/content/docs/pl/tui.mdx +++ /dev/null @@ -1,429 +0,0 @@ ---- -title: TUI -description: Korzystanie z interfejsu użytkownika terminala opencode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -opencode zapewnia interaktywny interfejs terminala lub TUI do pracy nad projektami za pomocą LLM. - -Uruchomienie opencode uruchamia TUI dla bieżącego katalogu. - -```bash -opencode -``` - -Możesz też uruchomić go dla określonego katalogu roboczego. - -```bash -opencode /path/to/project -``` - -Gdy znajdziesz się w TUI, możesz wyświetlić monit za pomocą komunikatu. - -```text -Give me a quick summary of the codebase. -``` - ---- - -## Referencje plików - -Możesz odwoływać się do plików w swoich wiadomościach, używając `@`. Spowoduje to rozmyte wyszukiwanie plików w bieżącym katalogu roboczym. - -:::tip -Możesz także użyć `@` do odwoływania się do plików w swoich wiadomościach. -::: - -```text "@packages/functions/src/api/index.ts" -How is auth handled in @packages/functions/src/api/index.ts? -``` - -Zawartość pliku jest automatycznie dodawana do rozmowy. - ---- - -## Polecenia Bash - -Rozpocznij wiadomość od `!`, aby uruchomić polecenie shell. - -```bash frame="none" -!ls -la -``` - -Dane wyjściowe polecenia są dodawane do konwersacji jako wynik narzędzia. - ---- - -## Komendy - -Korzystając z TUI opencode, możesz wpisać `/`, po którym następuje nazwa polecenia, aby szybko wykonać działania. Na przykład: - -```bash frame="none" -/help -``` - -Większość poleceń ma również skrót klawiszowy wykorzystujący `ctrl+x` jako klucz wiodący, gdzie `ctrl+x` jest domyślnym klawiszem wiodącym. [Dowiedz się więcej](/docs/keybinds). - -Oto wszystkie dostępne slash commands: - ---- - -### connect - -Dodaj dostawcę do opencode. Umożliwia wybór dostępnych dostawców i dodanie ich kluczy API. - -```bash frame="none" -/connect -``` - ---- - -### compact - -Kompaktuj bieżącą sesję. _Alias_: `/summarize` - -```bash frame="none" -/compact -``` - -**Keybind:** `ctrl+x c` - ---- - -### details - -Przełącz szczegóły wykonywania narzędzi. - -```bash frame="none" -/details -``` - -**Keybind:** `ctrl+x d` - ---- - -### editor - -Otwórz zewnętrzny edytor do tworzenia wiadomości. Używa edytora ustawionego w zmiennej środowiskowej `EDITOR`. [Dowiedz się więcej](#editor-setup). - -```bash frame="none" -/editor -``` - -**Keybind:** `ctrl+x e` - ---- - -### exit - -Zamknij opencode. _Aliasy_: `/quit`, `/q` - -```bash frame="none" -/exit -``` - -**Keybind:** `ctrl+x q` - ---- - -### export - -Wyeksportuj bieżącą rozmowę do Markdown i otwórz ją w domyślnym edytorze. Używa edytora ustawionego w zmiennej środowiskowej `EDITOR`. [Dowiedz się więcej](#editor-setup). - -```bash frame="none" -/export -``` - -**Keybind:** `ctrl+x x` - ---- - -### help - -Pokaż okno pomocy. - -```bash frame="none" -/help -``` - -**Keybind:** `ctrl+x h` - ---- - -### init - -Utwórz lub zaktualizuj plik `AGENTS.md`. [Dowiedz się więcej](/docs/rules). - -```bash frame="none" -/init -``` - -**Keybind:** `ctrl+x i` - ---- - -### models - -Lista dostępnych modeli. - -```bash frame="none" -/models -``` - -**Keybind:** `ctrl+x m` - ---- - -### new - -Rozpocznij nową sesję. _Alias_: `/clear` - -```bash frame="none" -/new -``` - -**Keybind:** `ctrl+x n` - ---- - -### redo - -Ponów cofniętą wcześniej wiadomość. Dostępne tylko po użyciu `/undo`. - -:::tip -Wszystkie zmiany plików również zostaną przywrócone. -::: - -Wewnętrznie używa Git do zarządzania zmianami plików. Więc Twój projekt ** musi -be a Git repository**. - -```bash frame="none" -/redo -``` - -**Keybind:** `ctrl+x r` - ---- - -### sessions - -Wyświetl listę i przełączaj się między sesjami. _Aliasy_: `/resume`, `/continue` - -```bash frame="none" -/sessions -``` - -**Keybind:** `ctrl+x l` - ---- - -### share - -Udostępnij bieżącą sesję. [Dowiedz się więcej](/docs/share). - -```bash frame="none" -/share -``` - -**Keybind:** `ctrl+x s` - ---- - -### themes - -Lista dostępnych motywów. - -```bash frame="none" -/theme -``` - -**Keybind:** `ctrl+x t` - ---- - -### thinking - -Przełącz widoczność bloków myślenia/rozumowania w rozmowie. Po włączeniu tej opcji można zobaczyć proces wnioskowania modelu w przypadku modeli obsługujących myślenie rozszerzone. - -:::note -To polecenie kontroluje jedynie, czy bloki myślowe są **wyświetlane** - nie włącza ani nie wyłącza możliwości wnioskowania modelu. Aby przełączyć rzeczywiste możliwości wnioskowania, użyj `ctrl+t` do przełączania wariantów modelu. -::: - -```bash frame="none" -/thinking -``` - ---- - -### undo - -Cofnij ostatnią wiadomość w rozmowie. Usuwa najnowszą wiadomość użytkownika, wszystkie kolejne odpowiedzi i wszelkie zmiany w plikach. - -:::tip -Wszystkie zmiany plików również zostaną cofnięte. -::: - -Wewnętrznie używa Git do zarządzania zmianami plików. Więc Twój projekt ** musi -be a Git repository**. - -```bash frame="none" -/undo -``` - -**Keybind:** `ctrl+x u` - ---- - -### unshare - -Anuluj udostępnianie bieżącej sesji. [Dowiedz się więcej](/docs/share#un-sharing). - -```bash frame="none" -/unshare -``` - ---- - -## Konfiguracja edytora - -Zarówno polecenia `/editor`, jak i `/export` korzystają z edytora określonego w zmiennej środowiskowej `EDITOR`. - - - - ```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" - ``` - - Aby było to trwałe, dodaj to do swojego profilu shell; - `~/.bashrc`, `~/.zshrc`, etc. - - - - - ```bash - set EDITOR=notepad - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - set EDITOR=code --wait - ``` - - Aby ustawić tę opcję na stałe, użyj opcji **Właściwości systemu** > **Środowisko - Variables**. - - - - - ```powershell - $env:EDITOR = "notepad" - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - $env:EDITOR = "code --wait" - ``` - - Aby uczynić to trwałym, dodaj to do swojego profilu PowerShell. - - - - -Popularne opcje edytora: - -- `code` - Visual Studio Code -- `cursor` - Cursor -- `windsurf` - Windsurf -- `nvim` - Neovim editor -- `vim` - Vim editor -- `nano` - Nano editor -- `notepad` - Windows Notepad -- `subl` - Sublime Text - -:::note -Niektóre edytory, takie jak VS Code, należy uruchamiać z flagą `--wait`. -::: - -Niektórzy edytory potrzebują argumentów wiersza poleceń, aby działać w trybie blokowania. Flaga `--wait` blokuje proces edytora aż do jego zamknięcia. - ---- - -## Skonfiguruj - -Możesz dostosować zachowanie TUI za pomocą pliku `tui.json` (lub `tui.jsonc`). - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -Jest to oddzielny plik od `opencode.json`, który konfiguruje zachowanie serwera/runtime. - -`keybinds` jest łączone z wbudowanymi wartościami domyślnymi, więc wystarczy skonfigurować tylko te skróty, które chcesz zmienić. - -### Opcje - -- `theme` - Ustawia motyw interfejsu. [Dowiedz się więcej](/docs/themes). -- `keybinds` - Dostosowuje skróty klawiszowe. [Dowiedz się więcej](/docs/keybinds). -- `leader_timeout` - Określa, jak długo OpenCode czeka po naciśnięciu leader key. Domyślnie `2000`. -- `scroll_acceleration.enabled` — Włącz przyspieszenie przewijania w stylu macOS, aby zapewnić płynne, naturalne przewijanie. Po włączeniu prędkość przewijania wzrasta wraz z szybkimi gestami przewijania i pozostaje precyzyjna w przypadku wolniejszych ruchów. **To ustawienie ma pierwszeństwo przed `scroll_speed` i zastępuje je, gdy jest włączone.** -- `scroll_speed` - Kontroluje szybkość przewijania TUI podczas korzystania z poleceń przewijania (minimum: `0.001`, obsługuje wartości dziesiętne). Wartość domyślna to `3`. **Uwaga: jest to ignorowane, jeśli `scroll_acceleration.enabled` jest ustawione na `true`.** -- `diff_style` - Steruje renderowaniem różnic. `"auto"` dostosowuje się do szerokości terminala, `"stacked"` zawsze pokazuje układ jednokolumnowy. -- `mouse` - Włącza lub wyłącza przechwytywanie myszy w TUI (domyślnie `true`). Po wyłączeniu zachowane zostaje natywne zachowanie terminala przy zaznaczaniu i przewijaniu myszą. -- `attention` - Konfiguruje powiadomienia pulpitu i dźwięki TUI. Domyślnie wyłączone. - -Użyj `OPENCODE_TUI_CONFIG`, aby załadować niestandardową ścieżkę konfiguracji TUI. - -### Attention - -Attention pozwala TUI powiadomić Cię, gdy OpenCode czeka na odpowiedź, wymaga zatwierdzenia uprawnienia, zgłasza błąd sesji albo informuje o zakończeniu sesji. Włącz tę funkcję za pomocą `attention.enabled`; wbudowane zdarzenia odtwarzają dźwięk, gdy wystąpią. Powiadomienia pulpitu są wysyłane tylko wtedy, gdy okno terminala nie jest aktywne, i nie są używane dla zdarzeń subagent. - -- `enabled` - Włącza wszystkie powiadomienia i dźwięki Attention. Domyślnie `false`. -- `notifications` - Gdy Attention jest włączone, pozwala TUI wysyłać powiadomienia pulpitu przez terminal. Domyślnie `true`. -- `sound` - Gdy Attention jest włączone, pozwala odtwarzać dźwięki powiadomień. Domyślnie `true`. -- `volume` - Domyślna głośność dźwięków powiadomień od `0` do `1`. Domyślnie `0.4`. -- `sound_pack` - ID sound pack do użycia. Domyślnie `opencode.default`. -- `sounds` - Ustawia niestandardowe pliki dźwiękowe dla `default`, `question`, `permission`, `error`, `done` lub `subagent_done`. Ścieżki mogą być bezwzględne, być URL-ami `file://` albo być względne względem `tui.json`. - ---- - -## Personalizacja - -Za pomocą palety poleceń (`ctrl+x h` lub `/help`) można dostosować różne aspekty widoku TUI. Te ustawienia są zachowywane po ponownym uruchomieniu. - ---- - -#### Wyświetlanie nazwy użytkownika - -Włącz lub wyłącz wyświetlanie Twojej nazwy użytkownika w wiadomościach na czacie. Dostęp do tego poprzez: - -- Paleta poleceń: Wyszukaj „nazwę użytkownika” lub „ukryj nazwę użytkownika” -- Ustawienie zostanie zapamiętane automatycznie i będzie pamiętane podczas sesji TUI diff --git a/packages/web/src/content/docs/pl/web.mdx b/packages/web/src/content/docs/pl/web.mdx deleted file mode 100644 index 2a2ada1cf6..0000000000 --- a/packages/web/src/content/docs/pl/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Web -description: Korzystanie z opencode w przeglądarce. ---- - -opencode może działać jako aplikacja internetowa w przeglądarce, zapewniając takie same możliwości kodowania AI bez konieczności korzystania z terminala. - -![Sieć opencode - Nowa sesja](../../../assets/web/web-homepage-new-session.png) - -## Pierwsze kroki - -Uruchom interfejs sieciowy, uruchamiając: - -```bash -opencode web -``` - -Spowoduje to uruchomienie lokalnego serwera na `127.0.0.1` z losowo dostępnym portem i automatyczne otwarcie opencode w domyślnej przeglądarce. - -:::caution -Jeśli `OPENCODE_SERVER_PASSWORD` nie jest ustawione, serwer będzie niezabezpieczony. Jest to dobre rozwiązanie do użytku lokalnego, ale powinno być ustawione na dostęp do sieci. -::: - -:::tip[Windows Users] -Aby uzyskać najlepsze wyniki, uruchom `opencode web` z [WSL](/docs/windows-wsl) zamiast programu PowerShell. Zapewnia to prawidłowy dostęp do systemu plików i integrację terminala. -::: - ---- - -## Konfiguracja - -Możesz skonfigurować serwer WWW za pomocą flag wiersza poleceń lub w [pliku konfiguracyjnym] (./config). - -### Port - -Domyślnie opencode wybiera dostępny port. Możesz określić port: - -```bash -opencode web --port 4096 -``` - -### Nazwa hosta - -Domyślnie serwer łączy się z `127.0.0.1` (tylko localhost). Aby udostępnić opencode w swojej sieci: - -```bash -opencode web --hostname 0.0.0.0 -``` - -Podczas korzystania z `0.0.0.0` opencode wyświetli zarówno adresy lokalne, jak i sieciowe: - -``` - Local access: http://localhost:4096 - Network access: http://192.168.1.100:4096 -``` - -### Wykrywanie mDNS - -Włącz mDNS, aby Twój serwer był wykrywalny w sieci lokalnej: - -```bash -opencode web --mdns -``` - -To automatycznie ustawia nazwę hosta na `0.0.0.0` i anonsuje serwer jako `opencode.local`. - -Możesz dostosować nazwę domeny mDNS, aby uruchamiała wiele instancji w tej samej sieci: - -```bash -opencode web --mdns --mdns-domain myproject.local -``` - -### CORS - -Aby zezwolić na dodatkowe domeny dla CORS (przydatne w przypadku niestandardowych interfejsów): - -```bash -opencode web --cors https://example.com -``` - -### Uwierzytelnianie - -Aby chronić dostęp, ustaw hasło za pomocą zmiennej środowiskowej `OPENCODE_SERVER_PASSWORD`: - -```bash -OPENCODE_SERVER_PASSWORD=secret opencode web -``` - -Domyślna nazwa użytkownika to `opencode`, ale można ją zmienić za pomocą `OPENCODE_SERVER_USERNAME`. - ---- - -## Korzystanie z interfejsu internetowego - -Po uruchomieniu interfejs sieciowy zapewnia dostęp do sesji opencode. - -### Sesje - -Przeglądaj sesje i zarządzaj nimi ze strony głównej. Możesz zobaczyć aktywne sesje i rozpocząć nowe. - -![opencode Web - Aktywna sesja](../../../assets/web/web-homepage-active-session.png) - -### Stan serwera - -Kliknij „Zobacz serwery”, aby wyświetlić podłączone serwery i ich status. - -![opencode Web - See Servers](../../../assets/web/web-homepage-see-servers.png) - ---- - -## Podłączanie terminala - -Możesz podłączyć terminal TUI do działającego serwera WWW: - -```bash -# Start the web server -opencode web --port 4096 - -# In another terminal, attach the TUI -opencode attach http://localhost:4096 -``` - -Umożliwia to jednoczesne korzystanie z interfejsu sieciowego i terminala, współdzieląc te same sesje i stan. - ---- - -## Plik konfiguracyjny - -Możesz także skonfigurować ustawienia serwera w pliku konfiguracyjnym `opencode.json`: - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -Flagi wiersza poleceń mają pierwszeństwo przed ustawieniami pliku konfiguracyjnego. diff --git a/packages/web/src/content/docs/pl/windows-wsl.mdx b/packages/web/src/content/docs/pl/windows-wsl.mdx deleted file mode 100644 index 85629c2e5f..0000000000 --- a/packages/web/src/content/docs/pl/windows-wsl.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Windows (WSL) -description: Uruchamiaj opencode na Windows z WSL dla najlepszych efektow. ---- - -import { Steps } from "@astrojs/starlight/components" - -Chociaz opencode moze dzialac bezposrednio na Windows, dla najlepszych rezultatow zalecamy [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install). WSL zapewnia srodowisko Linuksa, ktore bardzo dobrze wspolpracuje z funkcjami opencode. - -:::tip[Dlaczego WSL?] -WSL oferuje lepsza wydajnosc systemu plikow, pelna obsluge terminala i zgodnosc z narzedziami developerskimi, na ktorych opiera sie opencode. -::: - ---- - -## Konfiguracja - - - -1. **Zainstaluj WSL** - - Jesli jeszcze tego nie zrobiles, [zainstaluj WSL](https://learn.microsoft.com/en-us/windows/wsl/install) wedlug oficjalnego przewodnika Microsoft. - -2. **Zainstaluj opencode w WSL** - - Po skonfigurowaniu WSL otworz terminal WSL i zainstaluj opencode jedna z [metod instalacji](/docs/). - - ```bash - curl -fsSL https://opencode.ai/install | bash - ``` - -3. **Korzystaj z opencode przez WSL** - - Przejdz do katalogu projektu (pliki Windows sa dostepne przez `/mnt/c/`, `/mnt/d/` itd.) i uruchom opencode. - - ```bash - cd /mnt/c/Users/YourName/project - opencode - ``` - - - ---- - -## Aplikacja desktopowa + serwer WSL - -Jesli wolisz aplikacje desktopowa opencode, ale chcesz uruchamiac serwer w WSL: - -1. **Uruchom serwer w WSL** z `--hostname 0.0.0.0`, aby zezwolic na polaczenia zewnetrzne: - - ```bash - opencode serve --hostname 0.0.0.0 --port 4096 - ``` - -2. **Polacz aplikacje desktopowa** z `http://localhost:4096` - -:::note -Jesli `localhost` nie dziala w Twojej konfiguracji, polacz sie przez adres IP WSL (w WSL: `hostname -I`) i uzyj `http://:4096`. -::: - -:::caution -Przy uzyciu `--hostname 0.0.0.0` ustaw `OPENCODE_SERVER_PASSWORD`, aby zabezpieczyc serwer. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0 -``` - -::: - ---- - -## Klient web + WSL - -Dla najlepszej pracy w przegladarce na Windows: - -1. **Uruchamiaj `opencode web` w terminalu WSL**, a nie w PowerShell: - - ```bash - opencode web --hostname 0.0.0.0 - ``` - -2. **Otworz w przegladarce Windows** pod adresem `http://localhost:` (opencode wypisze URL) - -Uruchamianie `opencode web` z WSL zapewnia poprawny dostep do systemu plikow i integracje z terminalem, a nadal pozostaje dostepne z przegladarki Windows. - ---- - -## Dostep do plikow Windows - -WSL moze uzyskac dostep do wszystkich plikow Windows przez katalog `/mnt/`: - -- Dysk `C:` → `/mnt/c/` -- Dysk `D:` → `/mnt/d/` -- I tak dalej... - -Przyklad: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -Aby uzyskac najplynniejsza prace, rozwaz sklonowanie/skopiowanie repozytorium do systemu plikow WSL (np. do `~/code/`) i uruchamianie tam opencode. -::: - ---- - -## Wskazowki - -- Uruchamiaj opencode w WSL dla projektow zapisanych na dyskach Windows - dostep do plikow jest bezproblemowy -- Uzywaj [rozszerzenia WSL dla VS Code](https://code.visualstudio.com/docs/remote/wsl) razem z opencode, aby miec zintegrowany workflow -- Konfiguracja opencode i sesje sa przechowywane w srodowisku WSL pod `~/.local/share/opencode/` diff --git a/packages/web/src/content/docs/pl/zen.mdx b/packages/web/src/content/docs/pl/zen.mdx deleted file mode 100644 index 14f77c843e..0000000000 --- a/packages/web/src/content/docs/pl/zen.mdx +++ /dev/null @@ -1,319 +0,0 @@ ---- -title: Zen -description: Wyselekcjonowana lista modeli dostarczonych przez OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen to lista przetestowanych i zweryfikowanych modeli udostępniana przez zespół OpenCode. - -Zen działa jak każdy inny dostawca w OpenCode. Logujesz się do OpenCode Zen i otrzymujesz -swój klucz API. To **całkowicie opcjonalne** i nie musisz z tego korzystać, aby używać -OpenCode. - ---- - -## Tło - -Istnieje bardzo wiele modeli, ale tylko kilka z nich sprawdza się dobrze jako -agenci kodujący. Dodatkowo większość dostawców jest skonfigurowana bardzo różnie, -więc otrzymujesz bardzo różną wydajność i jakość. - -:::tip -Przetestowaliśmy wybraną grupę modeli i dostawców, którzy dobrze współpracują z OpenCode. -::: - -Jeśli więc używasz modelu przez coś takiego jak OpenRouter, nigdy nie masz -pewności, czy otrzymujesz najlepszą wersję modelu, którego chcesz używać. - -Aby to naprawić, zrobiliśmy kilka rzeczy: - -1. Przetestowaliśmy wybraną grupę modeli i rozmawialiśmy z ich zespołami o tym, - jak najlepiej je uruchamiać. -2. Następnie współpracowaliśmy z kilkoma dostawcami, aby upewnić się, że są - serwowane poprawnie. -3. Na końcu porównaliśmy wydajność kombinacji model/dostawca i stworzyliśmy - listę, którą z przekonaniem polecamy. - -OpenCode Zen to brama AI, która daje dostęp do tych modeli. - ---- - -## Jak to działa - -OpenCode Zen działa jak każdy inny dostawca w OpenCode. - -1. Logujesz się do **OpenCode Zen**, dodajesz dane - rozliczeniowe i kopiujesz swój klucz API. -2. Uruchamiasz polecenie `/connect` w TUI, wybierasz OpenCode Zen i wklejasz swój klucz API. -3. Uruchamiasz `/models` w TUI, aby zobaczyć listę modeli, które rekomendujemy. - -Płatność jest naliczana za każde żądanie i możesz doładować swoje konto. - ---- - -## Endpointy - -Możesz też uzyskać dostęp do naszych modeli przez poniższe endpointy API. - -| Model | ID modelu | Endpoint | Pakiet 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -[ID modelu](/docs/config/#models) w Twojej konfiguracji OpenCode używa formatu -`opencode/`. Na przykład dla GPT 5.5 użyjesz w konfiguracji -`opencode/gpt-5.5`. - ---- - -### Modele - -Pełną listę dostępnych modeli i ich metadane możesz pobrać z: - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## Cennik - -Obsługujemy model pay-as-you-go. Poniżej znajdują się ceny **za 1M tokenów**. - -| Model | Wejście | Wyjście | Odczyt z cache | Zapis do cache | -| --------------------------------- | ------- | ------- | -------------- | -------------- | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -Możesz zauważyć _Claude Haiku 3.5_ w historii użycia. To [niedrogi model](/docs/config/#models), -który służy do generowania tytułów Twoich sesji. - -:::note -Opłaty za karty kredytowe są przenoszone po kosztach (4.4% + $0.30 per transaction); nie naliczamy nic ponad to. -::: - -Darmowe modele: - -- DeepSeek V4 Flash Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. -- MiMo-V2.5 Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. -- North Mini Code Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. -- Nemotron 3 Ultra Free jest dostępny w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. -- Big Pickle to stealth model, który jest darmowy w OpenCode przez ograniczony czas. Zespół wykorzystuje ten czas do zbierania opinii i ulepszania modelu. - -Skontaktuj się z nami, jeśli masz pytania. - ---- - -### Auto-reload - -Jeśli Twoje saldo spadnie poniżej $5, Zen automatycznie doładuje $20. - -Możesz zmienić kwotę automatycznego doładowania. Możesz też całkowicie wyłączyć auto-reload. - ---- - -### Monthly limits - -Możesz też ustawić miesięczny limit użycia dla całego workspace i dla każdego -członka swojego zespołu. - -Na przykład, jeśli ustawisz miesięczny limit użycia na $20, Zen nie zużyje -więcej niż $20 w miesiącu. Ale jeśli masz włączony auto-reload, Zen może -ostatecznie obciążyć Cię kwotą wyższą niż $20, jeśli Twoje saldo spadnie poniżej $5. - ---- - -### Wycofane modele - -| Model | Data wycofania | -| ------------------ | ----------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## Prywatność - -Wszystkie nasze modele są hostowane w US. Nasi dostawcy stosują politykę zero-retention i nie wykorzystują Twoich danych do trenowania modeli, z następującymi wyjątkami: - -- Big Pickle: W czasie darmowego okresu zebrane dane mogą być wykorzystywane do ulepszania modelu. -- DeepSeek V4 Flash Free: W czasie darmowego okresu zebrane dane mogą być wykorzystywane do ulepszania modelu. -- MiMo-V2.5 Free: W czasie darmowego okresu zebrane dane mogą być wykorzystywane do ulepszania modelu. -- North Mini Code Free: W okresie bezpłatnego dostępu zebrane dane mogą być przechowywane i wykorzystywane do ulepszania modelu. Nie przesyłaj danych osobowych ani poufnych. Zapoznaj się z naszym [Regulaminem korzystania](https://cohere.com/terms-of-use) i [Polityką prywatności](https://cohere.com/privacy). -- Nemotron 3 Ultra Free (darmowe endpointy NVIDIA): Tylko do użytku próbnego — nie przesyłaj danych osobowych ani poufnych. Twoje korzystanie jest rejestrowane w celach bezpieczeństwa oraz w celu ulepszania produktów i usług NVIDIA. Rejestrowane dane sesji wykorzystywane do celów ulepszania nie są powiązane z Twoją tożsamością ani żadnym trwałym identyfikatorem. Aby uzyskać więcej informacji o naszych praktykach przetwarzania danych, zapoznaj się z naszą [Polityką prywatności](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Korzystając z tego endpointu, wyrażasz zgodę na gromadzenie, rejestrowanie i wykorzystywanie przez nas takich informacji oraz na [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). -- OpenAI APIs: Żądania są przechowywane przez 30 dni zgodnie z [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). -- Anthropic APIs: Żądania są przechowywane przez 30 dni zgodnie z [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). - ---- - -## Dla zespołów - -Zen świetnie sprawdza się też w zespołach. Możesz zapraszać członków zespołu, -przypisywać role, dobierać modele używane przez zespół i nie tylko. - -:::note -Workspaces są obecnie darmowe dla zespołów w ramach wersji beta. -::: - -Zarządzanie workspace jest obecnie darmowe dla zespołów w ramach wersji beta. Wkrótce -udostępnimy więcej szczegółów dotyczących cen. - ---- - -### Role - -Możesz zapraszać członków zespołu do swojego workspace i przypisywać role: - -- **Admin**: Zarządzanie modelami, członkami, kluczami API i rozliczeniami -- **Member**: Zarządzanie tylko własnymi kluczami API - -Admini mogą też ustawiać miesięczne limity wydatków dla każdego członka, aby utrzymać koszty pod kontrolą. - ---- - -### Dostęp do modeli - -Admini mogą włączać lub wyłączać konkretne modele dla workspace. Żądania wysłane do wyłączonego modelu zwrócą błąd. - -To przydaje się wtedy, gdy chcesz wyłączyć używanie modelu, który zbiera dane. - ---- - -### Użyj własnego klucza - -Możesz używać własnych kluczy API OpenAI lub Anthropic, a jednocześnie mieć dostęp do innych modeli w Zen. - -Gdy używasz własnych kluczy, tokeny są rozliczane bezpośrednio przez dostawcę, a nie przez Zen. - -Na przykład Twoja organizacja może już mieć klucz do OpenAI lub Anthropic i -chcesz używać go zamiast tego, który udostępnia Zen. - ---- - -## Cele - -Stworzyliśmy OpenCode Zen, aby: - -1. **Benchmarkować** najlepsze modele/dostawców dla agentów kodujących. -2. Mieć dostęp do opcji o **najwyższej jakości** i nie obniżać wydajności ani nie kierować ruchu do tańszych dostawców. -3. Przekazywać wszelkie **obniżki cen**, sprzedając po kosztach; jedyna marża pokrywa nasze opłaty za przetwarzanie. -4. Nie tworzyć **lock-in**, pozwalając używać tego z dowolnym innym agentem kodującym. I zawsze pozwalać Ci używać w OpenCode także dowolnego innego dostawcy. diff --git a/packages/web/src/content/docs/pt-br/acp.mdx b/packages/web/src/content/docs/pt-br/acp.mdx deleted file mode 100644 index 549f6cead7..0000000000 --- a/packages/web/src/content/docs/pt-br/acp.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: Suporte ACP -description: Use o opencode em qualquer editor compatível com ACP. ---- - -O opencode suporta o [Agent Client Protocol](https://agentclientprotocol.com) ou (ACP), permitindo que você o utilize diretamente em editores e IDEs compatíveis. - -:::tip -Para uma lista de editores e ferramentas que suportam ACP, confira o [relatório de progresso do ACP](https://zed.dev/blog/acp-progress-report#available-now). -::: - -O ACP é um protocolo aberto que padroniza a comunicação entre editores de código e agentes de codificação de IA. - ---- - -## Configuração - -Para usar opencode via ACP, configure seu editor para executar o comando `opencode acp`. - -Este comando inicia o opencode como um subprocesso compatível com ACP que se comunica com seu editor via JSON-RPC através do stdio. - -Abaixo estão exemplos para editores populares que suportam ACP. - ---- - -### Zed - -Adicione à sua configuração do [Zed](https://zed.dev) (`~/.config/zed/settings.json`): - -```json title="~/.config/zed/settings.json" -{ - "agent_servers": { - "OpenCode": { - "command": "opencode", - "args": ["acp"] - } - } -} -``` - -Para abri-lo, use a ação `agent: new thread` na **Paleta de Comandos**. - -Você também pode vincular um atalho de teclado editando seu `keymap.json`: - -```json title="keymap.json" -[ - { - "bindings": { - "cmd-alt-o": [ - "agent::NewExternalAgentThread", - { - "agent": { - "custom": { - "name": "OpenCode", - "command": { - "command": "opencode", - "args": ["acp"] - } - } - } - } - ] - } - } -] -``` - ---- - -### IDEs JetBrains - -Adicione ao seu acp.json do [JetBrains IDE](https://www.jetbrains.com/) de acordo com a [documentação](https://www.jetbrains.com/help/ai-assistant/acp.html): - -```json title="acp.json" -{ - "agent_servers": { - "OpenCode": { - "command": "/absolute/path/bin/opencode", - "args": ["acp"] - } - } -} -``` - -Para abri-lo, use o novo agente 'opencode' no seletor de agentes do AI Chat. - ---- - -### Avante.nvim - -Adicione à sua configuração do [Avante.nvim](https://github.com/yetone/avante.nvim): - -```lua -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" } - } - } -} -``` - -Se você precisar passar variáveis de ambiente: - -```lua {6-8} -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" }, - env = { - OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY") - } - } - } -} -``` - ---- - -### CodeCompanion.nvim - -Para usar opencode como um agente ACP no [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), adicione o seguinte à sua configuração do Neovim: - -```lua -require("codecompanion").setup({ - interactions = { - chat = { - adapter = { - name = "opencode", - model = "claude-sonnet-4", - }, - }, - }, -}) -``` - -Esta configuração configura o CodeCompanion para usar opencode como o agente ACP para chat. - -Se você precisar passar variáveis de ambiente (como `OPENCODE_API_KEY`), consulte [Configurando Adaptadores: Variáveis de Ambiente](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) na documentação do CodeCompanion.nvim para detalhes completos. - -## Suporte - -O opencode funciona da mesma forma via ACP como funciona no terminal. Todos os recursos são suportados: - -:::note -Alguns comandos de barra integrados, como `/undo` e `/redo`, atualmente não são suportados. -::: - -- Ferramentas integradas (operações de arquivo, comandos de terminal, etc.) -- Ferramentas personalizadas e comandos de barra -- Servidores MCP configurados na sua configuração do opencode -- Regras específicas do projeto do `AGENTS.md` -- Formatadores e linters personalizados -- Sistema de agentes e permissões diff --git a/packages/web/src/content/docs/pt-br/agents.mdx b/packages/web/src/content/docs/pt-br/agents.mdx deleted file mode 100644 index 815264d840..0000000000 --- a/packages/web/src/content/docs/pt-br/agents.mdx +++ /dev/null @@ -1,755 +0,0 @@ ---- -title: Agentes -description: Configure e use agentes especializados. ---- - -Agentes são assistentes de IA especializados que podem ser configurados para tarefas e fluxos de trabalho específicos. Eles permitem que você crie ferramentas focadas com prompts, modelos e acesso a ferramentas personalizados. - -:::tip -Use o agente de planejamento (plan) para analisar código e revisar sugestões sem fazer alterações no código. -::: - -Você pode alternar entre agentes durante uma sessão ou invocá-los com a menção `@`. - ---- - -## Tipos - -Existem dois tipos de agentes no opencode; agentes primários e subagentes. - ---- - -### Agentes primários - -Agentes primários são os principais assistentes com os quais você interage diretamente. Você pode alternar entre eles usando a tecla **Tab** ou sua tecla de atalho configurada `switch_agent`. Esses agentes lidam com sua conversa principal. O acesso às ferramentas é configurado por meio de permissões — por exemplo, Build tem todas as ferramentas habilitadas, enquanto Plan é restrito. - -:::tip -Você pode usar a tecla **Tab** para alternar entre agentes primários durante uma sessão. -::: - -opencode vem com dois agentes primários integrados, **Build** e **Plan**. Vamos -ver isso abaixo. - ---- - -### Subagentes - -Subagentes são assistentes especializados que agentes primários podem invocar para tarefas específicas. Você também pode invocá-los manualmente mencionando-os com **@** em suas mensagens. - -OpenCode vem com três subagentes integrados, **General**, **Explore** e **Scout**. Vamos ver isso abaixo. - ---- - -## Integrados - -OpenCode vem com dois agentes primários integrados e três subagentes integrados. - ---- - -### build - -_Modo_: `primary` - -Build é o agente primário **padrão** com todas as ferramentas habilitadas. Este é o agente padrão para trabalho de desenvolvimento onde você precisa de acesso total a operações de arquivo e comandos do sistema. - ---- - -### plan - -_Modo_: `primary` - -Um agente restrito projetado para planejamento e análise. Usamos um sistema de permissões para lhe dar mais controle e evitar alterações não intencionais. -Por padrão, todos os seguintes estão configurados para `ask`: - -- `file edits`: Todas as gravações, patches e edições -- `bash`: Todos os comandos bash - -Este agente é útil quando você deseja que o LLM analise código, sugira alterações ou crie planos sem fazer modificações reais em seu código. - ---- - -### general - -_Modo_: `subagent` - -Um agente de propósito geral para pesquisar questões complexas e executar tarefas em múltiplas etapas. Tem acesso total às ferramentas (exceto todo), portanto, pode fazer alterações em arquivos quando necessário. Use isso para executar várias unidades de trabalho em paralelo. - ---- - -### explore - -_Modo_: `subagent` - -Um agente rápido e somente leitura para explorar bases de código. Não pode modificar arquivos. Use isso quando você precisar encontrar rapidamente arquivos por padrões, pesquisar código por palavras-chave ou responder perguntas sobre a base de código. - ---- - -### Scout - -_Modo_: `subagent` - -Um agente somente leitura para pesquisa em documentação externa e dependências. Use-o quando você precisar clonar o repositório de uma dependência para o cache gerenciado do OpenCode, inspecionar o código-fonte de uma biblioteca ou cruzar o código local com implementações upstream sem modificar seu workspace. - ---- - -### compaction - -_Modo_: `primary` - -Agente de sistema oculto que compacta longos contextos em um resumo menor. Ele é executado automaticamente quando necessário e não é selecionável na interface. - ---- - -### title - -_Modo_: `primary` - -Agente de sistema oculto que gera títulos curtos para sessões. Ele é executado automaticamente e não é selecionável na interface. - ---- - -### summary - -_Modo_: `primary` - -Agente de sistema oculto que cria resumos de sessões. Ele é executado automaticamente e não é selecionável na interface. - ---- - -## Uso - -1. Para agentes primários, use a tecla **Tab** para alternar entre eles durante uma sessão. Você também pode usar sua tecla de atalho configurada `switch_agent`. - -2. Subagentes podem ser invocados: - - **Automaticamente** por agentes primários para tarefas especializadas com base em suas descrições. - - Manualmente mencionando um subagente em sua mensagem. Por exemplo. - - ```txt frame="none" - @general help me search for this function - ``` - -3. **Navegação entre sessões**: Quando subagentes criam suas próprias sessões filhas, você pode navegar entre a sessão pai e todas as sessões filhas usando: - - **\+Right** (ou sua tecla de atalho configurada `session_child_cycle`) para alternar para frente através de pai → child1 → child2 → ... → pai - - **\+Left** (ou sua tecla de atalho configurada `session_child_cycle_reverse`) para alternar para trás através de pai ← child1 ← child2 ← ... ← pai - - Isso permite que você mude perfeitamente entre a conversa principal e o trabalho especializado do subagente. - ---- - -## Configuração - -Você pode personalizar os agentes integrados ou criar os seus próprios através da configuração. Os agentes podem ser configurados de duas maneiras: - ---- - -### JSON - -Configure os agentes em seu arquivo de configuração `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": "Revisa código para melhores práticas e potenciais problemas", - "mode": "subagent", - "model": "anthropic/claude-sonnet-4-20250514", - "prompt": "Você é um revisor de código. Foque em segurança, performance e manutenibilidade.", - "tools": { - "write": false, - "edit": false - } - } - } -} -``` - ---- - -### Markdown - -Você também pode definir agentes usando arquivos markdown. Coloque-os em: - -- Global: `~/.config/opencode/agents/` -- Por projeto: `.opencode/agents/` - -```markdown title="~/.config/opencode/agents/review.md" ---- -description: Revisa código para qualidade e melhores práticas -mode: subagent -model: anthropic/claude-sonnet-4-20250514 -temperature: 0.1 -tools: - write: false - edit: false - bash: false ---- - -Você está no modo de revisão de código. Foque em: - -- Qualidade do código e melhores práticas -- Bugs potenciais e casos de borda -- Implicações de desempenho -- Considerações de segurança - -Forneça feedback construtivo sem fazer alterações diretas. -``` - -O nome do arquivo markdown se torna o nome do agente. Por exemplo, `review.md` cria um agente `review`. - ---- - -## Opções - -Vamos analisar essas opções de configuração em detalhes. - ---- - -### Descrição - -Use a opção `description` para fornecer uma breve descrição do que o agente faz e quando usá-lo. - -```json title="opencode.json" -{ - "agent": { - "review": { - "description": "Revisa código para melhores práticas e potenciais problemas" - } - } -} -``` - -Esta é uma opção de configuração **obrigatória**. - ---- - -### Temperatura - -Controle a aleatoriedade e criatividade das respostas do LLM com a configuração `temperature`. - -Valores mais baixos tornam as respostas mais focadas e determinísticas, enquanto valores mais altos aumentam a criatividade e variabilidade. - -```json title="opencode.json" -{ - "agent": { - "plan": { - "temperature": 0.1 - }, - "creative": { - "temperature": 0.8 - } - } -} -``` - -Os valores de temperatura geralmente variam de 0.0 a 1.0: - -- **0.0-0.2**: Respostas muito focadas e determinísticas, ideais para análise de código e planejamento -- **0.3-0.5**: Respostas equilibradas com alguma criatividade, boas para tarefas de desenvolvimento gerais -- **0.6-1.0**: Respostas mais criativas e variadas, úteis para brainstorming e exploração - -```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}" - } - } -} -``` - -Se nenhuma temperatura for especificada, o opencode usa padrões específicos do modelo; tipicamente 0 para a maioria dos modelos, 0.55 para modelos Qwen. - ---- - -### Máximo de etapas - -Controle o número máximo de iterações que um agente pode realizar antes de ser forçado a responder apenas com texto. Isso permite que usuários que desejam controlar custos definam um limite nas ações do agente. - -Se isso não for definido, o agente continuará a iterar até que o modelo decida parar ou o usuário interrompa a sessão. - -```json title="opencode.json" -{ - "agent": { - "quick-thinker": { - "description": "Raciocínio rápido com iterações limitadas", - "prompt": "Você é um pensador rápido. Resolva problemas com etapas mínimas.", - "steps": 5 - } - } -} -``` - -Quando o limite é alcançado, o agente recebe um prompt especial do sistema instruindo-o a responder com um resumo de seu trabalho e tarefas recomendadas restantes. - -:::caution -O campo legado `maxSteps` está obsoleto. Use `steps` em vez disso. -::: - ---- - -### Desativar - -Defina como `true` para desativar o agente. - -```json title="opencode.json" -{ - "agent": { - "review": { - "disable": true - } - } -} -``` - ---- - -### Prompt - -Especifique um arquivo de prompt do sistema personalizado para este agente com a configuração `prompt`. O arquivo de prompt deve conter instruções específicas para o propósito do agente. - -```json title="opencode.json" -{ - "agent": { - "review": { - "prompt": "{file:./prompts/code-review.txt}" - } - } -} -``` - -Este caminho é relativo ao local onde o arquivo de configuração está localizado. Portanto, isso funciona tanto para a configuração global do opencode quanto para a configuração específica do projeto. - ---- - -### Modelo - -Use a configuração `model` para substituir o modelo para este agente. Útil para usar diferentes modelos otimizados para diferentes tarefas. Por exemplo, um modelo mais rápido para planejamento, um modelo mais capaz para implementação. - -:::tip -Se você não especificar um modelo, os agentes primários usam o [modelo configurado globalmente](/docs/config#models) enquanto subagentes usarão o modelo do agente primário que invocou o subagente. -::: - -```json title="opencode.json" -{ - "agent": { - "plan": { - "model": "anthropic/claude-haiku-4-20250514" - } - } -} -``` - -O ID do modelo em sua configuração do opencode usa o formato `provider/model-id`. Por exemplo, se você estiver usando [OpenCode Zen](/docs/zen), você usaria `opencode/gpt-5.1-codex` para GPT 5.1 Codex. - ---- - -### Ferramentas - -Controle quais ferramentas estão disponíveis neste agente com a configuração `tools`. Você pode habilitar ou desabilitar ferramentas específicas definindo-as como `true` ou `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 -A configuração específica do agente substitui a configuração global. -::: - -Você também pode usar curingas para controlar várias ferramentas ao mesmo tempo. Por exemplo, para desativar todas as ferramentas de um servidor MCP: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "readonly": { - "tools": { - "mymcp_*": false, - "write": false, - "edit": false - } - } - } -} -``` - -[Saiba mais sobre ferramentas](/docs/tools). - ---- - -### Permissões - -Você pode configurar permissões para gerenciar quais ações um agente pode realizar. Atualmente, as permissões para as ferramentas `edit`, `bash` e `webfetch` podem ser configuradas para: - -- `"ask"` — Solicitar aprovação antes de executar a ferramenta -- `"allow"` — Permitir todas as operações sem aprovação -- `"deny"` — Desativar a ferramenta - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - } -} -``` - -Você pode substituir essas permissões por agente. - -```json title="opencode.json" {3-5,8-10} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - }, - "agent": { - "build": { - "permission": { - "edit": "ask" - } - } - } -} -``` - -Você também pode definir permissões em agentes Markdown. - -```markdown title="~/.config/opencode/agents/review.md" ---- -description: Revisão de código sem edições -mode: subagent -permission: - edit: deny - bash: - "*": ask - "git diff": allow - "git log*": allow - "grep *": allow - webfetch: deny ---- - -Apenas analise o código e sugira alterações. -``` - -Você pode definir permissões para comandos bash específicos. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git push": "ask", - "grep *": "allow" - } - } - } - } -} -``` - -Isso pode aceitar um padrão glob. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git *": "ask" - } - } - } - } -} -``` - -E você também pode usar o curinga `*` para gerenciar permissões para todos os comandos. -Como a última regra correspondente tem precedência, coloque o curinga `*` primeiro e regras específicas depois. - -```json title="opencode.json" {8} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "*": "ask", - "git status *": "allow" - } - } - } - } -} -``` - -[Saiba mais sobre permissões](/docs/permissions). - ---- - -### Modo - -Controle o modo do agente com a configuração `mode`. A opção `mode` é usada para determinar como o agente pode ser usado. - -```json title="opencode.json" -{ - "agent": { - "review": { - "mode": "subagent" - } - } -} -``` - -A opção `mode` pode ser definida como `primary`, `subagent` ou `all`. Se nenhum `mode` for especificado, o padrão é `all`. - ---- - -### Oculto - -Oculte um subagente do menu de autocompletar `@` com `hidden: true`. Útil para subagentes internos que devem ser invocados apenas programaticamente por outros agentes através da ferramenta Task. - -```json title="opencode.json" -{ - "agent": { - "internal-helper": { - "mode": "subagent", - "hidden": true - } - } -} -``` - -Isso afeta apenas a visibilidade do usuário no menu de autocompletar. Agentes ocultos ainda podem ser invocados pelo modelo através da ferramenta Task, se as permissões permitirem. - -:::note -Aplica-se apenas a agentes `mode: subagent`. -::: - ---- - -### Permissões de tarefa - -Controle quais subagentes um agente pode invocar através da ferramenta Task com `permission.task`. Usa padrões globais para correspondência flexível. - -```json title="opencode.json" -{ - "agent": { - "orchestrator": { - "mode": "primary", - "permission": { - "task": { - "*": "deny", - "orchestrator-*": "allow", - "code-reviewer": "ask" - } - } - } - } -} -``` - -Quando definido como `deny`, o subagente é removido da descrição da ferramenta Task completamente, então o modelo não tentará invocá-lo. - -:::tip -As regras são avaliadas em ordem, e a **última regra correspondente vence**. No exemplo acima, `orchestrator-planner` corresponde a ambos `*` (deny) e `orchestrator-*` (allow), mas como `orchestrator-*` vem depois de `*`, o resultado é `allow`. -::: - -:::tip -Os usuários sempre podem invocar qualquer subagente diretamente através do menu de autocompletar `@`, mesmo que as permissões de tarefa do agente o neguem. -::: - ---- - -### Cor - -Personalize a aparência visual do agente na interface com a opção `color`. Isso afeta como o agente aparece na interface. - -Use uma cor hex válida (por exemplo, `#FF5733`) ou cor de tema: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`. - -```json title="opencode.json" -{ - "agent": { - "creative": { - "color": "#ff6b6b" - }, - "code-reviewer": { - "color": "accent" - } - } -} -``` - ---- - -### Top P - -Controle a diversidade das respostas com a opção `top_p`. Alternativa à temperatura para controlar a aleatoriedade. - -```json title="opencode.json" -{ - "agent": { - "brainstorm": { - "top_p": 0.9 - } - } -} -``` - -Os valores variam de 0.0 a 1.0. Valores mais baixos são mais focados, valores mais altos são mais diversos. - ---- - -### Adicional - -Quaisquer outras opções que você especificar em sua configuração de agente serão **passadas diretamente** para o provedor como opções de modelo. Isso permite que você use recursos e parâmetros específicos do provedor. - -Por exemplo, com os modelos de raciocínio da OpenAI, você pode controlar o esforço de raciocínio: - -```json title="opencode.json" {6,7} -{ - "agent": { - "deep-thinker": { - "description": "Agente que usa alto esforço de raciocínio para problemas complexos", - "model": "openai/gpt-5", - "reasoningEffort": "high", - "textVerbosity": "low" - } - } -} -``` - -Essas opções adicionais são específicas do modelo e do provedor. Verifique a documentação do seu provedor para parâmetros disponíveis. - -:::tip -Execute `opencode models` para ver uma lista dos modelos disponíveis. -::: - ---- - -## Criando agentes - -Você pode criar novos agentes usando o seguinte comando: - -```bash -opencode agent create -``` - -Este comando interativo irá: - -1. Perguntar onde salvar o agente; global ou específico do projeto. -2. Descrição do que o agente deve fazer. -3. Gerar um prompt de sistema apropriado e identificador. -4. Permitir que você selecione quais ferramentas o agente pode acessar. -5. Finalmente, criar um arquivo markdown com a configuração do agente. - ---- - -## Casos de uso - -Aqui estão alguns casos de uso comuns para diferentes agentes. - -- **Agente Build**: Trabalho de desenvolvimento completo com todas as ferramentas habilitadas -- **Agente Plan**: Análise e planejamento sem fazer alterações -- **Agente Review**: Revisão de código com acesso somente leitura e ferramentas de documentação -- **Agente Debug**: Focado em investigação com ferramentas bash e de leitura habilitadas -- **Agente Docs**: Redação de documentação com operações de arquivo, mas sem comandos do sistema - ---- - -## Exemplos - -Aqui estão alguns agentes de exemplo que você pode achar úteis. - -:::tip -Você tem um agente que gostaria de compartilhar? [Envie um PR](https://github.com/anomalyco/opencode). -::: - ---- - -### Agente de documentação - -```markdown title="~/.config/opencode/agents/docs-writer.md" ---- -description: Escreve e mantém a documentação do projeto -mode: subagent -tools: - bash: false ---- - -Você é um escritor técnico. Crie documentação clara e abrangente. - -Foque em: - -- Explicações claras -- Estrutura adequada -- Exemplos de código -- Linguagem amigável ao usuário -``` - ---- - -### Auditor de segurança - -```markdown title="~/.config/opencode/agents/security-auditor.md" ---- -description: Realiza auditorias de segurança e identifica vulnerabilidades -mode: subagent -tools: - write: false - edit: false ---- - -Você é um especialista em segurança. Foque em identificar potenciais problemas de segurança. - -Procure por: - -- Vulnerabilidades de validação de entrada -- Falhas de autenticação e autorização -- Riscos de exposição de dados -- Vulnerabilidades de dependência -- Problemas de segurança de configuração -``` diff --git a/packages/web/src/content/docs/pt-br/cli.mdx b/packages/web/src/content/docs/pt-br/cli.mdx deleted file mode 100644 index 69b69e1f28..0000000000 --- a/packages/web/src/content/docs/pt-br/cli.mdx +++ /dev/null @@ -1,616 +0,0 @@ ---- -title: CLI -description: Opções e comandos da CLI do opencode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -A CLI do opencode, por padrão, inicia o [TUI](/docs/tui) quando executada sem argumentos. - -```bash -opencode -``` - -Mas também aceita comandos conforme documentado nesta página. Isso permite que você interaja com o opencode programaticamente. - -```bash -opencode run "Explain how closures work in JavaScript" -``` - ---- - -### tui - -Inicie a interface de usuário do terminal do opencode. - -```bash -opencode [project] -``` - -#### Opções - -| Flag | Curto | Descrição | -| ---------------------------------------- | ----- | -------------------------------------------------------------------------- | -| {"--continue"} | `-c` | Continue a última sessão | -| {"--session"} | `-s` | ID da sessão para continuar | -| {"--fork"} | | Criar um fork da sessão ao continuar (use com `--continue` ou `--session`) | -| {"--prompt"} | | Prompt a ser usado | -| {"--model"} | `-m` | Modelo a ser usado na forma de provider/model | -| {"--agent"} | | Agente a ser usado | -| {"--port"} | | Porta para escutar | -| {"--hostname"} | | Nome do host para escutar | - ---- - -## Comandos - -A CLI do opencode também possui os seguintes comandos. - ---- - -### agent - -Gerencie agentes para o opencode. - -```bash -opencode agent [command] -``` - ---- - -### attach - -Anexe um terminal a um servidor backend do opencode já em execução, iniciado via comandos `serve` ou `web`. - -```bash -opencode attach [url] -``` - -Isso permite usar o TUI com um backend opencode remoto. Por exemplo: - -```bash -# Inicie o servidor backend para acesso web/mobile -opencode web --port 4096 --hostname 0.0.0.0 - -# Em outro terminal, anexe o TUI ao backend em execução -opencode attach http://10.20.30.40:4096 -``` - -#### Opções - -| Flag | Curto | Descrição | -| ---------------------------------------- | ----- | --------------------------------------------------------------------------------- | -| {"--dir"} | | Diretório de trabalho para iniciar o TUI | -| {"--continue"} | `-c` | Continuar a última sessão | -| {"--session"} | `-s` | ID da sessão para continuar | -| {"--fork"} | | Bifurcar a sessão ao continuar (use com `--continue` ou `--session`) | -| {"--password"} | `-p` | Senha de autenticação básica (padrão: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Usuário de autenticação básica (padrão: `OPENCODE_SERVER_USERNAME` ou `opencode`) | - ---- - -#### create - -Crie um novo agente com configuração personalizada. - -```bash -opencode agent create -``` - -Este comando irá guiá-lo na criação de um novo agente com um prompt de sistema personalizado e configuração de ferramentas. - ---- - -#### list - -Liste todos os agentes disponíveis. - -```bash -opencode agent list -``` - ---- - -### auth - -Comando para gerenciar credenciais e login para provedores. - -```bash -opencode auth [command] -``` - ---- - -#### login - -O opencode é alimentado pela lista de provedores em [Models.dev](https://models.dev), então você pode usar `opencode auth login` para configurar chaves de API para qualquer provedor que você gostaria de usar. Isso é armazenado em `~/.local/share/opencode/auth.json`. - -```bash -opencode auth login -``` - -Quando o opencode é iniciado, ele carrega os provedores do arquivo de credenciais. E se houver chaves definidas em seus ambientes ou em um arquivo `.env` em seu projeto. - ---- - -#### list - -Lista todos os provedores autenticados conforme armazenado no arquivo de credenciais. - -```bash -opencode auth list -``` - -Ou a versão curta. - -```bash -opencode auth ls -``` - ---- - -#### logout - -Desconecta você de um provedor limpando-o do arquivo de credenciais. - -```bash -opencode auth logout -``` - ---- - -### github - -Gerencie o agente do GitHub para automação de repositórios. - -```bash -opencode github [command] -``` - ---- - -#### install - -Instale o agente do GitHub em seu repositório. - -```bash -opencode github install -``` - -Isso configura o fluxo de trabalho necessário do GitHub Actions e o guia pelo processo de configuração. [Saiba mais](/docs/github). - ---- - -#### run - -Execute o agente do GitHub. Isso é tipicamente usado em GitHub Actions. - -```bash -opencode github run -``` - -##### Opções - -| Flag | Descrição | -| ------------------------------------- | ------------------------------------------------ | -| {"--event"} | Evento simulado do GitHub para executar o agente | -| {"--token"} | Token de acesso pessoal do GitHub | - ---- - -### mcp - -Gerencie servidores do Model Context Protocol. - -```bash -opencode mcp [command] -``` - ---- - -#### add - -Adicione um servidor MCP à sua configuração. - -```bash -opencode mcp add -``` - -Este comando irá guiá-lo na adição de um servidor MCP local ou remoto. - ---- - -#### list - -Liste todos os servidores MCP configurados e seu status de conexão. - -```bash -opencode mcp list -``` - -Ou use a versão curta. - -```bash -opencode mcp ls -``` - ---- - -#### auth - -Autentique-se com um servidor MCP habilitado para OAuth. - -```bash -opencode mcp auth [name] -``` - -Se você não fornecer um nome de servidor, será solicitado que você selecione entre os servidores disponíveis habilitados para OAuth. - -Você também pode listar servidores habilitados para OAuth e seu status de autenticação. - -```bash -opencode mcp auth list -``` - -Ou use a versão curta. - -```bash -opencode mcp auth ls -``` - ---- - -#### logout - -Remova credenciais OAuth para um servidor MCP. - -```bash -opencode mcp logout [name] -``` - ---- - -#### debug - -Depure problemas de conexão OAuth para um servidor MCP. - -```bash -opencode mcp debug -``` - ---- - -### models - -Liste todos os modelos disponíveis dos provedores configurados. - -```bash -opencode models [provider] -``` - -Este comando exibe todos os modelos disponíveis entre seus provedores configurados no formato `provider/model`. - -Isso é útil para descobrir o nome exato do modelo a ser usado em [sua configuração](/docs/config/). - -Você pode opcionalmente passar um ID de provedor para filtrar modelos por esse provedor. - -```bash -opencode models anthropic -``` - -#### Opções - -| Flag | Descrição | -| --------------------------------------- | --------------------------------------------------------------------- | -| {"--refresh"} | Atualiza o cache de modelos a partir do models.dev | -| {"--verbose"} | Use uma saída de modelo mais detalhada (inclui metadados como custos) | - -Use a flag `--refresh` para atualizar a lista de modelos em cache. Isso é útil quando novos modelos foram adicionados a um provedor e você deseja vê-los no opencode. - -```bash -opencode models --refresh -``` - ---- - -### run - -Execute o opencode em modo não interativo passando um prompt diretamente. - -```bash -opencode run [message..] -``` - -Isso é útil para scripts, automação ou quando você deseja uma resposta rápida sem iniciar o TUI completo. Por exemplo. - -```bash "opencode run" -opencode run Explique o uso de context em Go -``` - -Você também pode se anexar a uma instância em execução do `opencode serve` para evitar tempos de inicialização a frio do servidor MCP em cada execução: - -```bash -# Inicie um servidor sem cabeça em um terminal -opencode serve - -# Em outro terminal, execute comandos que se anexam a ele -opencode run --attach http://localhost:4096 "Explique async/await em JavaScript" -``` - -#### Opções - -| Flag | Curto | Descrição | -| ---------------------------------------- | ----- | --------------------------------------------------------------------------------- | -| {"--command"} | | O comando a ser executado, use mensagem para argumentos | -| {"--continue"} | `-c` | Continue a última sessão | -| {"--session"} | `-s` | ID da sessão para continuar | -| {"--fork"} | | Criar um fork da sessão ao continuar (use com `--continue` ou `--session`) | -| {"--share"} | | Compartilhe a sessão | -| {"--model"} | `-m` | Modelo a ser usado na forma de provider/model | -| {"--agent"} | | Agente a ser usado | -| {"--file"} | `-f` | Arquivo(s) a serem anexados à mensagem | -| {"--format"} | | Formato: padrão (formatado) ou json (eventos JSON brutos) | -| {"--title"} | | Título para a sessão (usa o prompt truncado se nenhum valor for fornecido) | -| {"--attach"} | | Anexe a um servidor opencode em execução (por exemplo, http://localhost:4096) | -| {"--password"} | `-p` | Senha de autenticação básica (padrão: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Usuário de autenticação básica (padrão: `OPENCODE_SERVER_USERNAME` ou `opencode`) | -| {"--dir"} | | Diretório de execução, ou caminho no servidor remoto ao anexar | -| {"--variant"} | | Variante do modelo (nível de raciocínio específico do provedor) | -| {"--thinking"} | | Mostrar blocos de pensamento | -| {"--port"} | | Porta para o servidor local (padrão para porta aleatória) | - ---- - -### serve - -Inicie um servidor opencode sem cabeça para acesso à API. Confira a [documentação do servidor](/docs/server) para a interface HTTP completa. - -```bash -opencode serve -``` - -Isso inicia um servidor HTTP que fornece acesso à funcionalidade do opencode sem a interface TUI. Defina `OPENCODE_SERVER_PASSWORD` para habilitar a autenticação básica HTTP (o nome de usuário padrão é `opencode`). - -#### Opções - -| Flag | Descrição | -| ---------------------------------------- | ----------------------------------------------------- | -| {"--port"} | Porta para escutar | -| {"--hostname"} | Nome do host para escutar | -| {"--mdns"} | Habilitar descoberta mDNS | -| {"--cors"} | Origem(ns) de navegador adicionais para permitir CORS | - ---- - -### session - -Gerencie sessões do opencode. - -```bash -opencode session [command] -``` - ---- - -#### list - -Liste todas as sessões do opencode. - -```bash -opencode session list -``` - -##### Opções - -| Flag | Curto | Descrição | -| ----------------------------------------- | ----- | ----------------------------------------- | -| {"--max-count"} | `-n` | Limitar às N sessões mais recentes | -| {"--format"} | | Formato de saída: tabela ou json (tabela) | - ---- - -### stats - -Mostre o uso de tokens e estatísticas de custo para suas sessões do opencode. - -```bash -opencode stats -``` - -#### Opções - -| Flag | Descrição | -| --------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| {"--days"} | Mostre estatísticas dos últimos N dias (todo o tempo) | -| {"--tools"} | Número de ferramentas a serem mostradas (todas) | -| {"--models"} | Mostre a divisão do uso de modelos (oculto por padrão). Passe um número para mostrar os N principais | -| {"--project"} | Filtrar por projeto (todos os projetos, string vazia: projeto atual) | - ---- - -### export - -Exporte dados da sessão como JSON. - -```bash -opencode export [sessionID] -``` - -Se você não fornecer um ID de sessão, será solicitado que você selecione entre as sessões disponíveis. - ---- - -### import - -Importe dados da sessão de um arquivo JSON ou URL de compartilhamento do opencode. - -```bash -opencode import -``` - -Você pode importar de um arquivo local ou de uma URL de compartilhamento do opencode. - -```bash -opencode import session.json -opencode import https://opncd.ai/s/abc123 -``` - ---- - -### web - -Inicie um servidor opencode sem cabeça com uma interface web. - -```bash -opencode web -``` - -Isso inicia um servidor HTTP e abre um navegador para acessar o opencode através de uma interface web. Defina `OPENCODE_SERVER_PASSWORD` para habilitar a autenticação básica HTTP (o nome de usuário padrão é `opencode`). - -#### Opções - -| Flag | Descrição | -| ---------------------------------------- | ----------------------------------------------------- | -| {"--port"} | Porta para escutar | -| {"--hostname"} | Nome do host para escutar | -| {"--mdns"} | Habilitar descoberta mDNS | -| {"--cors"} | Origem(ns) de navegador adicionais para permitir CORS | - ---- - -### acp - -Inicie um servidor ACP (Agent Client Protocol). - -```bash -opencode acp -``` - -Este comando inicia um servidor ACP que se comunica via stdin/stdout usando nd-JSON. - -#### Opções - -| Flag | Descrição | -| ---------------------------------------- | ------------------------- | -| {"--cwd"} | Diretório de trabalho | -| {"--port"} | Porta para escutar | -| {"--hostname"} | Nome do host para escutar | - ---- - -### uninstall - -Desinstale o opencode e remova todos os arquivos relacionados. - -```bash -opencode uninstall -``` - -#### Opções - -| Flag | Curto | Descrição | -| ------------------------------------------- | ----- | ---------------------------------------- | -| {"--keep-config"} | `-c` | Manter arquivos de configuração | -| {"--keep-data"} | `-d` | Manter dados de sessão e snapshots | -| {"--dry-run"} | | Mostrar o que seria removido sem remover | -| {"--force"} | `-f` | Pular prompts de confirmação | - ---- - -### upgrade - -Atualiza o opencode para a versão mais recente ou uma versão específica. - -```bash -opencode upgrade [target] -``` - -Para atualizar para a versão mais recente. - -```bash -opencode upgrade -``` - -Para atualizar para uma versão específica. - -```bash -opencode upgrade v0.1.48 -``` - -#### Opções - -| Flag | Curto | Descrição | -| -------------------------------------- | ----- | ---------------------------------------------------------------- | -| {"--method"} | `-m` | O método de instalação que foi usado; curl, npm, pnpm, bun, brew | - ---- - -## Opções Globais - -A CLI do opencode aceita as seguintes flags globais. - -| Flag | Curto | Descrição | -| ------------------------------------------ | ----- | --------------------------------------- | -| {"--help"} | `-h` | Exibir ajuda | -| {"--version"} | `-v` | Imprimir número da versão | -| {"--print-logs"} | | Imprimir logs no stderr | -| {"--log-level"} | | Nível de log (DEBUG, INFO, WARN, ERROR) | - ---- - -## Variáveis de ambiente - -O opencode pode ser configurado usando variáveis de ambiente. - -| Variável | Tipo | Descrição | -| ------------------------------------- | ------- | --------------------------------------------------------------------- | -| `OPENCODE_AUTO_SHARE` | boolean | Compartilhar sessões automaticamente | -| `OPENCODE_GIT_BASH_PATH` | string | Caminho para o executável do Git Bash no Windows | -| `OPENCODE_CONFIG` | string | Caminho para o arquivo de configuração | -| `OPENCODE_CONFIG_DIR` | string | Caminho para o diretório de configuração | -| `OPENCODE_CONFIG_CONTENT` | string | Conteúdo de configuração json inline | -| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | Desabilitar verificações de atualização automática | -| `OPENCODE_DISABLE_PRUNE` | boolean | Desabilitar a poda de dados antigos | -| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | Desabilitar atualizações automáticas do título do terminal | -| `OPENCODE_PERMISSION` | string | Configuração de permissões json inline | -| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | Desabilitar plugins padrão | -| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | Desabilitar downloads automáticos do servidor LSP | -| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | Habilitar modelos experimentais | -| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | Desabilitar compactação automática de contexto | -| `OPENCODE_DISABLE_CLAUDE_CODE` | boolean | Desabilitar leitura de `.claude` (prompt + habilidades) | -| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | Desabilitar leitura de `~/.claude/CLAUDE.md` | -| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | Desabilitar carregamento de `.claude/skills` | -| `OPENCODE_DISABLE_MODELS_FETCH` | boolean | Desabilitar busca de modelos de fontes remotas | -| `OPENCODE_FAKE_VCS` | string | Provedor VCS falso para fins de teste | -| `OPENCODE_CLIENT` | string | Identificador do cliente (padrão é `cli`) | -| `OPENCODE_ENABLE_EXA` | boolean | Habilitar ferramentas de busca web Exa | -| `OPENCODE_SERVER_PASSWORD` | string | Habilitar autenticação básica para `serve`/`web` | -| `OPENCODE_SERVER_USERNAME` | string | Substituir nome de usuário de autenticação básica (padrão `opencode`) | -| `OPENCODE_MODELS_URL` | string | URL personalizada para buscar configuração de modelos | - ---- - -### Experimental - -Essas variáveis de ambiente habilitam recursos experimentais que podem mudar ou ser removidos. - -| Variável | Tipo | Descrição | -| ----------------------------------------------- | ------- | --------------------------------------------------------- | -| `OPENCODE_EXPERIMENTAL` | boolean | Habilitar recursos experimentais sob o sinalizador global | -| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | Habilitar descoberta de ícones | -| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | Desabilitar cópia ao selecionar no TUI | -| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | Tempo limite padrão para comandos bash em ms | -| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | Máximo de tokens de saída para respostas LLM | -| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Habilitar monitoramento de arquivos para todo o diretório | -| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Habilitar formatador oxfmt | -| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | Habilitar ferramenta LSP experimental | -| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | Desabilitar monitoramento de arquivos | -| `OPENCODE_EXPERIMENTAL_EXA` | boolean | Habilitar recursos experimentais do Exa | -| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolean | Habilitar TY LSP para arquivos python | -| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | Habilitar modo de plano | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | boolean | Habilitar tarefas de subagentes em segundo plano | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | boolean | Habilitar sistema de eventos experimental | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | boolean | Habilitar caminho nativo de requisição LLM | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | boolean | Habilitar execução paralela de busca web | -| `OPENCODE_EXPERIMENTAL_SCOUT` | boolean | Habilitar subagente Scout | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | boolean | Habilitar suporte a espaços de trabalho | diff --git a/packages/web/src/content/docs/pt-br/commands.mdx b/packages/web/src/content/docs/pt-br/commands.mdx deleted file mode 100644 index b4a8a306d8..0000000000 --- a/packages/web/src/content/docs/pt-br/commands.mdx +++ /dev/null @@ -1,322 +0,0 @@ ---- -title: Comandos -description: Crie comandos personalizados para tarefas repetitivas. ---- - -Comandos personalizados permitem que você especifique um prompt que deseja executar quando esse comando for executado no TUI. - -```bash frame="none" -/my-command -``` - -Comandos personalizados são adicionais aos comandos integrados como `/init`, `/undo`, `/redo`, `/share`, `/help`. [Saiba mais](/docs/tui#commands). - ---- - -## Criando arquivos de comando - -Crie arquivos markdown no diretório `commands/` para definir comandos personalizados. - -Crie `.opencode/commands/test.md`: - -```md title=".opencode/commands/test.md" ---- -description: Execute testes com cobertura -agent: build -model: anthropic/claude-3-5-sonnet-20241022 ---- - -Execute a suíte de testes completa com relatório de cobertura e mostre quaisquer falhas. -Concentre-se nos testes com falha e sugira correções. -``` - -O frontmatter define as propriedades do comando. O conteúdo se torna o template. - -Use o comando digitando `/` seguido pelo nome do comando. - -```bash frame="none" -"/test" -``` - ---- - -## Configuração - -Você pode adicionar comandos personalizados através da configuração do opencode ou criando arquivos markdown no diretório `commands/`. - ---- - -### JSON - -Use a opção `command` na sua [configuração](/docs/config) do opencode: - -```json title="opencode.jsonc" {4-12} -{ - "$schema": "https://opencode.ai/config.json", - "command": { - // Isso se torna o nome do comando - "test": { - // Este é o prompt que será enviado ao LLM - "template": "Execute a suíte de testes completa com relatório de cobertura e mostre quaisquer falhas.\nConcentre-se nos testes com falha e sugira correções.", - // Isso é exibido como a descrição no TUI - "description": "Execute testes com cobertura", - "agent": "build", - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -Agora você pode executar este comando no TUI: - -```bash frame="none" -/test -``` - ---- - -### Markdown - -Você também pode definir comandos usando arquivos markdown. Coloque-os em: - -- Global: `~/.config/opencode/commands/` -- Por projeto: `.opencode/commands/` - -```markdown title="~/.config/opencode/commands/test.md" ---- -description: Execute testes com cobertura -agent: build -model: anthropic/claude-3-5-sonnet-20241022 ---- - -Execute a suíte de testes completa com relatório de cobertura e mostre quaisquer falhas. -Concentre-se nos testes com falha e sugira correções. -``` - -O nome do arquivo markdown se torna o nome do comando. Por exemplo, `test.md` permite que você execute: - -```bash frame="none" -/test -``` - ---- - -## Configuração do prompt - -Os prompts para os comandos personalizados suportam vários espaços reservados e sintaxes especiais. - ---- - -### Argumentos - -Passe argumentos para os comandos usando o espaço reservado `$ARGUMENTS`. - -```md title=".opencode/commands/component.md" ---- -description: Crie um novo componente ---- - -Crie um novo componente React chamado $ARGUMENTS com suporte a TypeScript. -Inclua tipagem adequada e estrutura básica. -``` - -Execute o comando com argumentos: - -```bash frame="none" -/component Button -``` - -E `$ARGUMENTS` será substituído por `Button`. - -Você também pode acessar argumentos individuais usando parâmetros posicionais: - -- `$1` - Primeiro argumento -- `$2` - Segundo argumento -- `$3` - Terceiro argumento -- E assim por diante... - -Por exemplo: - -```md title=".opencode/commands/create-file.md" ---- -description: Crie um novo arquivo com conteúdo ---- - -Crie um arquivo chamado $1 no diretório $2 -com o seguinte conteúdo: $3 -``` - -Execute o comando: - -```bash frame="none" -/create-file config.json src "{ \"key\": \"value\" }" -``` - -Isso substitui: - -- `$1` por `config.json` -- `$2` por `src` -- `$3` por `{ "key": "value" }` - ---- - -### Saída do shell - -Use _!`command`_ para injetar a saída do [comando bash](/docs/tui#bash-commands) no seu prompt. - -Por exemplo, para criar um comando personalizado que analisa a cobertura de testes: - -```md title=".opencode/commands/analyze-coverage.md" ---- -description: Analise cobertura de testes ---- - -Aqui estão os resultados atuais dos testes: -!`npm test` - -Com base nesses resultados, sugira melhorias para aumentar a cobertura. -``` - -Ou para revisar alterações recentes: - -```md title=".opencode/commands/review-changes.md" ---- -description: Revise alterações recentes ---- - -Commits recentes do git: -!`git log --oneline -10` - -Revise essas alterações e sugira quaisquer melhorias. -``` - -Os comandos são executados no diretório raiz do seu projeto e sua saída se torna parte do prompt. - ---- - -### Referências de arquivo - -Inclua arquivos no seu comando usando `@` seguido pelo nome do arquivo. - -```md title=".opencode/commands/review-component.md" ---- -description: Revise componente ---- - -Revise o componente em @src/components/Button.tsx. -Verifique problemas de desempenho e sugira melhorias. -``` - -O conteúdo do arquivo é incluído automaticamente no prompt. - ---- - -## Opções - -Vamos analisar as opções de configuração em detalhes. - ---- - -### Template - -A opção `template` define o prompt que será enviado ao LLM quando o comando for executado. - -```json title="opencode.json" -{ - "command": { - "test": { - "template": "Execute a suíte de testes completa com relatório de cobertura e mostre quaisquer falhas.\nConcentre-se nos testes com falha e sugira correções." - } - } -} -``` - -Esta é uma opção de configuração **obrigatória**. - ---- - -### Descrição - -Use a opção `description` para fornecer uma breve descrição do que o comando faz. - -```json title="opencode.json" -{ - "command": { - "test": { - "description": "Execute testes com cobertura" - } - } -} -``` - -Isso é exibido como a descrição no TUI quando você digita o comando. - ---- - -### Agente - -Use a configuração `agent` para especificar opcionalmente qual [agente](/docs/agents) deve executar este comando. -Se este for um [subagente](/docs/agents/#subagents), o comando acionará uma invocação de subagente por padrão. -Para desativar esse comportamento, defina `subtask` como `false`. - -```json title="opencode.json" -{ - "command": { - "review": { - "agent": "plan" - } - } -} -``` - -Esta é uma opção de configuração **opcional**. Se não especificado, o padrão é o seu agente atual. - ---- - -### Subtarefa - -Use o booleano `subtask` para forçar o comando a acionar uma invocação de [subagente](/docs/agents/#subagents). -Isso é útil se você quiser que o comando não polua seu contexto principal e **forçará** o agente a agir como um subagente, -mesmo que `mode` esteja definido como `primary` na configuração do [agente](/docs/agents). - -```json title="opencode.json" -{ - "command": { - "analyze": { - "subtask": true - } - } -} -``` - -Esta é uma opção de configuração **opcional**. - ---- - -### Modelo - -Use a configuração `model` para substituir o modelo padrão para este comando. - -```json title="opencode.json" -{ - "command": { - "analyze": { - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -Esta é uma opção de configuração **opcional**. - ---- - -## Integrados - -opencode inclui vários comandos integrados como `/init`, `/undo`, `/redo`, `/share`, `/help`; [saiba mais](/docs/tui#commands). - -:::note -Comandos personalizados podem substituir comandos integrados. -::: - -Se você definir um comando personalizado com o mesmo nome, ele substituirá o comando integrado. diff --git a/packages/web/src/content/docs/pt-br/config.mdx b/packages/web/src/content/docs/pt-br/config.mdx deleted file mode 100644 index 3dc969a9b5..0000000000 --- a/packages/web/src/content/docs/pt-br/config.mdx +++ /dev/null @@ -1,687 +0,0 @@ ---- -title: Configuração -description: Usando a configuração JSON do opencode. ---- - -Você pode configurar o opencode usando um arquivo de configuração JSON. - ---- - -## Formato - -O opencode suporta os formatos **JSON** e **JSONC** (JSON com Comentários). - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-5", - "autoupdate": true, - "server": { - "port": 4096, - }, -} -``` - ---- - -## Locais - -Você pode colocar sua configuração em alguns locais diferentes e eles têm uma -ordem de precedência diferente. - -:::note -Os arquivos de configuração são **mesclados**, não substituídos. -::: - -Os arquivos de configuração são mesclados, não substituídos. As configurações das seguintes localizações de configuração são combinadas. Configurações posteriores substituem as anteriores apenas para chaves conflitantes. Configurações não conflitantes de todas as configurações são preservadas. - -Por exemplo, se sua configuração global define `autoupdate: true` e sua configuração de projeto define `model: "anthropic/claude-sonnet-4-5"`, a configuração final incluirá as duas configurações. - ---- - -### Ordem de precedência - -As fontes de configuração são carregadas nesta ordem (fontes posteriores substituem as anteriores): - -1. **Configuração remota** (de `.well-known/opencode`) - padrões organizacionais -2. **Configuração global** (`~/.config/opencode/opencode.json`) - preferências do usuário -3. **Configuração personalizada** (`OPENCODE_CONFIG` var de ambiente) - substituições personalizadas -4. **Configuração do projeto** (`opencode.json` no projeto) - configurações específicas do projeto -5. **Diretórios `.opencode`** - agentes, comandos, plugins -6. **Configuração inline** (`OPENCODE_CONFIG_CONTENT` var de ambiente) - substituições em tempo de execução - -Isso significa que as configurações do projeto podem substituir os padrões globais, e as configurações globais podem substituir os padrões organizacionais remotos. - -:::note -Os diretórios `.opencode` e `~/.config/opencode` usam **nomes no plural** para subdiretórios: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/`, e `themes/`. Nomes no singular (por exemplo, `agent/`) também são suportados para compatibilidade retroativa. -::: - ---- - -### Remoto - -As organizações podem fornecer configuração padrão através do endpoint `.well-known/opencode`. Isso é buscado automaticamente quando você se autentica com um provedor que o suporta. - -A configuração remota é carregada primeiro, servindo como a camada base. Todas as outras fontes de configuração (global, projeto) podem substituir esses padrões. - -Por exemplo, se sua organização fornece servidores MCP que estão desativados por padrão: - -```json title="Remote config from .well-known/opencode" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": false - } - } -} -``` - -Você pode habilitar servidores específicos em sua configuração local: - -```json title="opencode.json" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - ---- - -### Global - -Coloque sua configuração global do opencode em `~/.config/opencode/opencode.json`. Use a configuração global para preferências de todo o usuário, como provedores, modelos e permissões. - -Para configurações específicas do TUI, use `~/.config/opencode/tui.json`. - -A configuração global substitui os padrões organizacionais remotos. - ---- - -### Por projeto - -Adicione `opencode.json` na raiz do seu projeto. A configuração do projeto tem a maior precedência entre os arquivos de configuração padrão - ela substitui tanto as configurações globais quanto as remotas. - -Para configurações específicas do TUI do projeto, adicione `tui.json` junto a ele. - -:::tip -Coloque a configuração específica do projeto na raiz do seu projeto. -::: - -Quando o opencode é iniciado, ele procura um arquivo de configuração no diretório atual ou sobe até o diretório Git mais próximo. - -Isso também é seguro para ser verificado no Git e usa o mesmo esquema que o global. - ---- - -### Caminho personalizado - -Especifique um caminho de arquivo de configuração personalizado usando a variável de ambiente `OPENCODE_CONFIG`. - -```bash -export OPENCODE_CONFIG=/path/to/my/custom-config.json -opencode run "Hello world" -``` - -A configuração personalizada é carregada entre as configurações globais e do projeto na ordem de precedência. - ---- - -### Diretório personalizado - -Especifique um diretório de configuração personalizado usando a variável de ambiente `OPENCODE_CONFIG_DIR`. Este diretório será pesquisado por agentes, comandos, modos e plugins, assim como o diretório padrão `.opencode`, e deve seguir a mesma estrutura. - -```bash -export OPENCODE_CONFIG_DIR=/path/to/my/config-directory -opencode run "Hello world" -``` - -O diretório personalizado é carregado após a configuração global e os diretórios `.opencode`, então ele **pode substituir** suas configurações. - ---- - -## Esquema - -O esquema de configuração do servidor/tempo de execução é definido em [**`opencode.ai/config.json`**](https://opencode.ai/config.json). - -A configuração do TUI usa [**`opencode.ai/tui.json`**](https://opencode.ai/tui.json). - -Seu editor deve ser capaz de validar e autocompletar com base no esquema. - ---- - -### TUI - -Use um arquivo `tui.json` (ou `tui.jsonc`) dedicado para configurações específicas do TUI. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": true - }, - "diff_style": "auto" -} -``` - -Use `OPENCODE_TUI_CONFIG` para apontar para um arquivo de configuração TUI personalizado. - -Chaves legadas `theme`, `keybinds` e `tui` em `opencode.json` estão obsoletas e são migradas automaticamente quando possível. - -[Saiba mais sobre a configuração do TUI aqui](/docs/tui#configure). - ---- - -### Servidor - -Você pode configurar as configurações do servidor para os comandos `opencode serve` e `opencode web` através da opção `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"] - } -} -``` - -Opções disponíveis: - -- `port` - Porta para escutar. -- `hostname` - Nome do host para escutar. Quando `mdns` está habilitado e nenhum nome de host está definido, o padrão é `0.0.0.0`. -- `mdns` - Habilitar descoberta de serviço mDNS. Isso permite que outros dispositivos na rede descubram seu servidor opencode. -- `mdnsDomain` - Nome de domínio personalizado para o serviço mDNS. O padrão é `opencode.local`. Útil para executar várias instâncias na mesma rede. -- `cors` - Origens adicionais a serem permitidas para CORS ao usar o servidor HTTP de um cliente baseado em navegador. Os valores devem ser origens completas (esquema + host + porta opcional), por exemplo, `https://app.example.com`. - -[Saiba mais sobre o servidor aqui](/docs/server). - ---- - -### Ferramentas - -Você pode gerenciar as ferramentas que um LLM pode usar através da opção `tools`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "tools": { - "write": false, - "bash": false - } -} -``` - -[Saiba mais sobre ferramentas aqui](/docs/tools). - ---- - -### Modelos - -Você pode configurar os provedores e modelos que deseja usar em sua configuração do opencode através das opções `provider`, `model` e `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" -} -``` - -A opção `small_model` configura um modelo separado para tarefas leves, como geração de títulos. Por padrão, o opencode tenta usar um modelo mais barato se um estiver disponível do seu provedor, caso contrário, ele recua para seu modelo principal. - -As opções do provedor podem incluir `timeout` e `setCacheKey`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "timeout": 600000, - "setCacheKey": true - } - } - } -} -``` - -- `timeout` - Tempo limite da solicitação em milissegundos (padrão: 300000). Defina como `false` para desabilitar. -- `setCacheKey` - Garantir que uma chave de cache seja sempre definida para o provedor designado. - -Você também pode configurar [modelos locais](/docs/models#local). [Saiba mais](/docs/models). - ---- - -#### Opções Específicas do Provedor - -Alguns provedores suportam opções de configuração adicionais além das configurações genéricas `timeout` e `apiKey`. - -##### Amazon Bedrock - -Amazon Bedrock suporta configuração específica da 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` - Região AWS para Bedrock (padrão para `AWS_REGION` var de ambiente ou `us-east-1`) -- `profile` - Perfil nomeado da AWS em `~/.aws/credentials` (padrão para `AWS_PROFILE` var de ambiente) -- `endpoint` - URL de endpoint personalizada para endpoints VPC. Este é um alias para a opção genérica `baseURL` usando terminologia específica da AWS. Se ambos forem especificados, `endpoint` tem precedência. - -:::note -Tokens Bearer (`AWS_BEARER_TOKEN_BEDROCK` ou `/connect`) têm precedência sobre a autenticação baseada em perfil. Veja [precedência de autenticação](/docs/providers#authentication-precedence) para detalhes. -::: - -[Saiba mais sobre a configuração do Amazon Bedrock](/docs/providers#amazon-bedrock). - ---- - -### Temas - -Defina seu tema de interface em `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - -[Saiba mais aqui](/docs/themes). - ---- - -### Agentes - -Você pode configurar agentes especializados para tarefas específicas através da opção `agent`. - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "code-reviewer": { - "description": "Revisa código para melhores práticas e potenciais problemas", - "model": "anthropic/claude-sonnet-4-5", - "prompt": "Você é um revisor de código. Foque em segurança, performance e manutenibilidade.", - "tools": { - // Desabilitar ferramentas de modificação de arquivo para agente de apenas revisão - "write": false, - "edit": false, - }, - }, - }, -} -``` - -Você também pode definir agentes usando arquivos markdown em `~/.config/opencode/agents/` ou `.opencode/agents/`. [Saiba mais aqui](/docs/agents). - ---- - -### Agente padrão - -Você pode definir o agente padrão usando a opção `default_agent`. Isso determina qual agente é usado quando nenhum é explicitamente especificado. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "default_agent": "plan" -} -``` - -O agente padrão deve ser um agente primário (não um subagente). Isso pode ser um agente embutido como `"build"` ou `"plan"`, ou um [agente personalizado](/docs/agents) que você definiu. Se o agente especificado não existir ou for um subagente, o opencode recuará para `"build"` com um aviso. - -Essa configuração se aplica a todas as interfaces: TUI, CLI (`opencode run`), aplicativo desktop e GitHub Action. - ---- - -### Compartilhamento - -Você pode configurar o recurso [share](/docs/share) através da opção `share`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - -Isso aceita: - -- `"manual"` - Permitir compartilhamento manual via comandos (padrão) -- `"auto"` - Compartilhar novas conversas automaticamente -- `"disabled"` - Desabilitar compartilhamento completamente - -Por padrão, o compartilhamento é definido para o modo manual, onde você precisa compartilhar explicitamente as conversas usando o comando `/share`. - ---- - -### Comandos - -Você pode configurar comandos personalizados para tarefas repetitivas através da opção `command`. - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "command": { - "test": { - "template": "Execute a suíte de testes completa com relatório de cobertura e mostre quaisquer falhas.\nConcentre-se nos testes com falha e sugira correções.", - "description": "Execute testes com cobertura", - "agent": "build", - "model": "anthropic/claude-haiku-4-5", - }, - "component": { - "template": "Crie um novo componente React chamado $ARGUMENTS com suporte a TypeScript.\nInclua tipagem adequada e estrutura básica.", - "description": "Crie um novo componente", - }, - }, -} -``` - -Você também pode definir comandos usando arquivos markdown em `~/.config/opencode/commands/` ou `.opencode/commands/`. [Saiba mais aqui](/docs/commands). - ---- - -### Atalhos de teclado - -Personalize atalhos de teclado em `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": {} -} -``` - -[Saiba mais aqui](/docs/keybinds). - ---- - -### Atualização automática - -O opencode fará o download automaticamente de quaisquer novas atualizações quando for iniciado. Você pode desabilitar isso com a opção `autoupdate`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "autoupdate": false -} -``` - -Se você não quiser atualizações, mas deseja ser notificado quando uma nova versão estiver disponível, defina `autoupdate` como `"notify"`. -Observe que isso só funciona se não foi instalado usando um gerenciador de pacotes como o Homebrew. - ---- - -### Formatadores - -Você pode configurar formatadores de código através da opção `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"] - } - } -} -``` - -[Saiba mais sobre formatadores aqui](/docs/formatters). - ---- - -### Permissões - -Por padrão, o opencode **permite todas as operações** sem exigir aprovação explícita. Você pode mudar isso usando a opção `permission`. - -Por exemplo, para garantir que as ferramentas `edit` e `bash` exijam aprovação do usuário: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "ask", - "bash": "ask" - } -} -``` - -[Saiba mais sobre permissões aqui](/docs/permissions). - ---- - -### Compactação - -Você pode controlar o comportamento de compactação de contexto através da opção `compaction`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "compaction": { - "auto": true, - "prune": false, - "reserved": 10000 - } -} -``` - -- `auto` - Compactar automaticamente a sessão quando o contexto estiver cheio (padrão: `true`). -- `prune` - Remover saídas antigas de ferramentas para economizar tokens (padrão: `false`). -- `reserved` - Buffer de tokens para compactação. Deixa janela suficiente para evitar estouro durante a compactação - ---- - -### Observador - -Você pode configurar padrões de ignorar do observador de arquivos através da opção `watcher`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "watcher": { - "ignore": ["node_modules/**", "dist/**", ".git/**"] - } -} -``` - -Os padrões seguem a sintaxe glob. Use isso para excluir diretórios barulhentos da observação de arquivos. - ---- - -### Servidores MCP - -Você pode configurar servidores MCP que deseja usar através da opção `mcp`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": {} -} -``` - -[Saiba mais aqui](/docs/mcp-servers). - ---- - -### Plugins - -[Plugins](/docs/plugins) estendem o opencode com ferramentas, hooks e integrações personalizadas. - -Coloque arquivos de plugin em `.opencode/plugins/` ou `~/.config/opencode/plugins/`. Você também pode carregar plugins do npm através da opção `plugin`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "@my-org/custom-plugin"] -} -``` - -[Saiba mais aqui](/docs/plugins). - ---- - -### Instruções - -Você pode configurar as instruções para o modelo que está usando através da opção `instructions`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -Isso aceita um array de caminhos e padrões glob para arquivos de instrução. [Saiba mais sobre regras aqui](/docs/rules). - ---- - -### Provedores desabilitados - -Você pode desabilitar provedores que são carregados automaticamente através da opção `disabled_providers`. Isso é útil quando você deseja impedir que certos provedores sejam carregados, mesmo que suas credenciais estejam disponíveis. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "disabled_providers": ["openai", "gemini"] -} -``` - -:::note -A opção `disabled_providers` tem prioridade sobre `enabled_providers`. -::: - -A opção `disabled_providers` aceita um array de IDs de provedores. Quando um provedor é desabilitado: - -- Ele não será carregado, mesmo que variáveis de ambiente estejam definidas. -- Ele não será carregado, mesmo que chaves de API estejam configuradas através do comando `/connect`. -- Os modelos do provedor não aparecerão na lista de seleção de modelos. - ---- - -### Provedores habilitados - -Você pode especificar uma lista de permissão de provedores através da opção `enabled_providers`. Quando definida, apenas os provedores especificados serão habilitados e todos os outros serão ignorados. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "enabled_providers": ["anthropic", "openai"] -} -``` - -Isso é útil quando você deseja restringir o opencode para usar apenas provedores específicos, em vez de desabilitá-los um a um. - -:::note -A opção `disabled_providers` tem prioridade sobre `enabled_providers`. -::: - -Se um provedor aparecer em `enabled_providers` e `disabled_providers`, a `disabled_providers` tem prioridade para compatibilidade retroativa. - ---- - -### Experimental - -A chave `experimental` contém opções que estão em desenvolvimento ativo. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "experimental": {} -} -``` - -:::caution -Opções experimentais não são estáveis. Elas podem mudar ou ser removidas sem aviso prévio. -::: - ---- - -## Variáveis - -Você pode usar substituição de variáveis em seus arquivos de configuração para referenciar variáveis de ambiente e conteúdos de arquivos. - ---- - -### Variáveis de ambiente - -Use `{env:VARIABLE_NAME}` para substituir variáveis de ambiente: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "model": "{env:OPENCODE_MODEL}", - "provider": { - "anthropic": { - "models": {}, - "options": { - "apiKey": "{env:ANTHROPIC_API_KEY}" - } - } - } -} -``` - -Se a variável de ambiente não estiver definida, ela será substituída por uma string vazia. - ---- - -### Arquivos - -Use `{file:path/to/file}` para substituir o conteúdo de um arquivo: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["./custom-instructions.md"], - "provider": { - "openai": { - "options": { - "apiKey": "{file:~/.secrets/openai-key}" - } - } - } -} -``` - -Os caminhos dos arquivos podem ser: - -- Relativos ao diretório do arquivo de configuração -- Ou caminhos absolutos começando com `/` ou `~` -- - -Esses são úteis para: - -- Manter dados sensíveis, como chaves de API, em arquivos separados. -- Incluir grandes arquivos de instrução sem sobrecarregar sua configuração. -- Compartilhar trechos de configuração comuns entre vários arquivos de configuração. diff --git a/packages/web/src/content/docs/pt-br/custom-tools.mdx b/packages/web/src/content/docs/pt-br/custom-tools.mdx deleted file mode 100644 index 515b8985a0..0000000000 --- a/packages/web/src/content/docs/pt-br/custom-tools.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: Ferramentas Personalizadas -description: Crie ferramentas que o LLM pode chamar no opencode. ---- - -Ferramentas personalizadas são funções que você cria e que o LLM pode chamar durante as conversas. Elas funcionam junto com as [ferramentas integradas](/docs/tools) do opencode, como `read`, `write` e `bash`. - ---- - -## Criando uma ferramenta - -As ferramentas são definidas como arquivos **TypeScript** ou **JavaScript**. No entanto, a definição da ferramenta pode invocar scripts escritos em **qualquer linguagem** — TypeScript ou JavaScript é usado apenas para a definição da ferramenta em si. - ---- - -### Localização - -Elas podem ser definidas: - -- Localmente, colocando-as no diretório `.opencode/tools/` do seu projeto. -- Ou globalmente, colocando-as em `~/.config/opencode/tools/`. - ---- - -### Estrutura - -A maneira mais fácil de criar ferramentas é usando o helper `tool()`, que fornece segurança de tipo e validação. - -```ts title=".opencode/tools/database.ts" {1} -import { tool } from "@opencode-ai/plugin" - -export default tool({ - description: "Consultar o banco de dados do projeto", - args: { - query: tool.schema.string().describe("Consulta SQL para executar"), - }, - async execute(args) { - // Sua lógica de banco de dados aqui - return `Consulta executada: ${args.query}` - }, -}) -``` - -O **nome do arquivo** se torna o **nome da ferramenta**. O acima cria uma ferramenta `database`. - ---- - -#### Múltiplas ferramentas por arquivo - -Você também pode exportar várias ferramentas de um único arquivo. Cada exportação se torna **uma ferramenta separada** com o nome **`_`**: - -```ts title=".opencode/tools/math.ts" -import { tool } from "@opencode-ai/plugin" - -export const add = tool({ - description: "Adicionar dois números", - args: { - a: tool.schema.number().describe("Primeiro número"), - b: tool.schema.number().describe("Segundo número"), - }, - async execute(args) { - return args.a + args.b - }, -}) - -export const multiply = tool({ - description: "Multiplicar dois números", - args: { - a: tool.schema.number().describe("Primeiro número"), - b: tool.schema.number().describe("Segundo número"), - }, - async execute(args) { - return args.a * args.b - }, -}) -``` - -Isso cria duas ferramentas: `math_add` e `math_multiply`. - ---- - -#### Colisões de nome com ferramentas integradas - -Ferramentas personalizadas são chaveadas pelo nome da ferramenta. Se uma ferramenta personalizada usar o mesmo nome que uma ferramenta integrada, a ferramenta personalizada tem precedência. - -Por exemplo, este arquivo substitui a ferramenta `bash` integrada: - -```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 -Prefira nomes únicos, a menos que você queira intencionalmente substituir uma ferramenta integrada. Se você quiser desabilitar uma ferramenta integrada, mas não substituí-la, use [permissões](/docs/permissions). -::: - ---- - -### Argumentos - -Você pode usar `tool.schema`, que é apenas [Zod](https://zod.dev), para definir tipos de argumentos. - -```ts "tool.schema" -args: { - query: tool.schema.string().describe("Consulta SQL para executar") -} -``` - -Você também pode importar [Zod](https://zod.dev) diretamente e retornar um objeto simples: - -```ts {6} -import { z } from "zod" - -export default { - description: "Descrição da ferramenta", - args: { - param: z.string().describe("Descrição do parâmetro"), - }, - async execute(args, context) { - // Implementação da ferramenta - return "result" - }, -} -``` - ---- - -### Contexto - -As ferramentas recebem contexto sobre a sessão atual: - -```ts title=".opencode/tools/project.ts" {8} -import { tool } from "@opencode-ai/plugin" - -export default tool({ - description: "Obter informações do projeto", - args: {}, - async execute(args, context) { - // Acessar informações de contexto - const { agent, sessionID, messageID, directory, worktree } = context - return `Agent: ${agent}, Session: ${sessionID}, Message: ${messageID}, Directory: ${directory}, Worktree: ${worktree}` - }, -}) -``` - -Use `context.directory` para o diretório de trabalho da sessão. -Use `context.worktree` para a raiz do worktree do git. - ---- - -## Exemplos - -### Escrevendo uma ferramenta em Python - -Você pode escrever suas ferramentas em qualquer linguagem que desejar. Aqui está um exemplo que adiciona dois números usando Python. - -Primeiro, crie a ferramenta como um script Python: - -```python title=".opencode/tools/add.py" -import sys - -a = int(sys.argv[1]) -b = int(sys.argv[2]) -print(a + b) -``` - -Em seguida, crie a definição da ferramenta que a invoca: - -```ts title=".opencode/tools/python-add.ts" {10} -import { tool } from "@opencode-ai/plugin" -import path from "path" - -export default tool({ - description: "Adicionar dois números usando Python", - args: { - a: tool.schema.number().describe("Primeiro número"), - b: tool.schema.number().describe("Segundo número"), - }, - 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() - }, -}) -``` - -Aqui estamos usando o utilitário [`Bun.$`](https://bun.com/docs/runtime/shell) para executar o script Python. diff --git a/packages/web/src/content/docs/pt-br/ecosystem.mdx b/packages/web/src/content/docs/pt-br/ecosystem.mdx deleted file mode 100644 index 3d94334e6b..0000000000 --- a/packages/web/src/content/docs/pt-br/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Ecossistema -description: Projetos e integrações construídos com o OpenCode. ---- - -Uma coleção de projetos da comunidade construídos sobre o OpenCode. - -:::note -Quer adicionar seu projeto relacionado ao OpenCode a esta lista? Envie um PR. -::: - -Você também pode conferir [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) e [opencode.cafe](https://opencode.cafe), uma comunidade que agrega o ecossistema e a comunidade. - ---- - -## Plugins - -| Nome | Descrição | -| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -| [opencode-daytona](https://github.com/daytonaio/daytona/tree/main/libs/opencode-plugin) | Execute automaticamente sessões do OpenCode em sandboxes isoladas do Daytona com sincronização git e pré-visualizações ao vivo | -| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | Injete automaticamente cabeçalhos de sessão Helicone para agrupamento de requisições | -| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | Auto-injetar tipos TypeScript/Svelte em leituras de arquivos com ferramentas de busca | -| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Use sua assinatura ChatGPT Plus/Pro em vez de créditos de API | -| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Use seu plano Gemini existente em vez de cobrança de API | -| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | Use os modelos gratuitos do Antigravity em vez de cobrança de API | -| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Isolamento de devcontainer multi-branch com clones rasos e portas atribuídas automaticamente | -| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Plugin Google Antigravity OAuth, com suporte para Google Search e manuseio de API mais robusto | -| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Otimize o uso de tokens podando saídas de ferramentas obsoletas | -| [opencode-vibeguard](https://github.com/inkdust2021/opencode-vibeguard) | Oculte segredos/PII em marcadores estilo VibeGuard antes de chamadas LLM; restaure localmente | -| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Adicione suporte nativo de pesquisa na web para provedores suportados com estilo fundamentado no Google | -| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Permite que agentes de IA executem processos em segundo plano em um PTY, enviando entrada interativa para eles. | -| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Instruções para comandos de shell não interativos - evita travamentos de operações dependentes de TTY | -| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Acompanhe o uso do OpenCode com Wakatime | -| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Limpe tabelas markdown produzidas por LLMs | -| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | Edição Fast Apply, busca de código WarpGrep e compactação de contexto via Morph | -| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Agentes em segundo plano, ferramentas LSP/AST/MCP pré-construídas, agentes curados, compatível com Claude Code | -| [opencode-notificator](https://github.com/panta82/opencode-notificator) | Notificações de desktop e alertas sonoros para sessões do OpenCode | -| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | Notificações de desktop e alertas sonoros para eventos de permissão, conclusão e erro | -| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | Nomeação automática de sessões Zellij com suporte de IA com base no contexto do OpenCode | -| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | Permite que agentes do OpenCode carreguem prompts sob demanda com descoberta e injeção de habilidades | -| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Memória persistente entre sessões usando Supermemory | -| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Revisão de plano interativa com anotação visual e compartilhamento privado/offline | -| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Estenda opencode /commands em um poderoso sistema de orquestração com controle de fluxo granular | -| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Agende trabalhos recorrentes usando launchd (Mac) ou systemd (Linux) com sintaxe cron | -| [micode](https://github.com/vtemian/micode) | Fluxo de trabalho Estruturado Brainstorm → Planejar → Implementar com continuidade de sessão | -| [octto](https://github.com/vtemian/octto) | UI interativa do navegador para brainstorming de IA com formulários de múltiplas perguntas | -| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Agentes em segundo plano estilo Claude Code com delegação assíncrona e persistência de contexto | -| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | Notificações nativas do OS para OpenCode – saiba quando as tarefas são concluídas | -| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | Conjunto de orquestração multi-agente – 16 componentes, uma instalação | -| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | Worktrees git sem atrito para OpenCode | -| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | Rastreie e depure seus agentes de IA com o Sentry AI Monitoring | - ---- - -## Projetos - -| Nome | Descrição | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- | -| [kimaki](https://github.com/remorses/kimaki) | Bot do Discord para controlar sessões do OpenCode, construído sobre o SDK | -| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Plugin Neovim para prompts cientes do editor, construído sobre a API | -| [portal](https://github.com/hosenur/portal) | UI web mobile-first para OpenCode sobre Tailscale/VPN | -| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | Template para construir plugins do OpenCode | -| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Frontend Neovim para OpenCode - um agente de codificação IA baseado em terminal | -| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Provedor Vercel AI SDK para usar OpenCode via @opencode-ai/sdk | -| [OpenChamber](https://github.com/btriapitsyn/openchamber) | Aplicativo Web / Desktop e Extensão do VS Code para OpenCode | -| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Plugin Obsidian que incorpora OpenCode na UI do Obsidian | -| [OpenWork](https://github.com/different-ai/openwork) | Uma alternativa de código aberto ao Claude Cowork, alimentada pelo OpenCode | -| [ocx](https://github.com/kdcokenny/ocx) | Gerenciador de extensões OpenCode com perfis portáteis e isolados. | -| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | Aplicativo Desktop, Web, Mobile e Cliente Remoto para OpenCode | - ---- - -## Agentes - -| Nome | Descrição | -| ----------------------------------------------------------------- | ----------------------------------------------------------------------------- | -| [Agentic](https://github.com/Cluster444/agentic) | Agentes e comandos de IA modulares para desenvolvimento estruturado | -| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Configurações, prompts, agentes e plugins para fluxos de trabalho aprimorados | diff --git a/packages/web/src/content/docs/pt-br/enterprise.mdx b/packages/web/src/content/docs/pt-br/enterprise.mdx deleted file mode 100644 index 3a649dc077..0000000000 --- a/packages/web/src/content/docs/pt-br/enterprise.mdx +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: Empresa -description: Usando o opencode com segurança em sua organização. ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -O opencode Enterprise é para organizações que desejam garantir que seu código e dados nunca deixem sua infraestrutura. Isso pode ser feito usando uma configuração centralizada que se integra ao seu SSO e gateway de IA interno. - -:::note -O opencode não armazena nenhum de seus códigos ou dados de contexto. -::: - -Para começar com o opencode Enterprise: - -1. Faça um teste internamente com sua equipe. -2. **Entre em contato conosco** para discutir opções de preços e implementação. - ---- - -## Teste - -O opencode é de código aberto e não armazena nenhum de seus códigos ou dados de contexto, então seus desenvolvedores podem simplesmente [começar](/docs/) e realizar um teste. - ---- - -### Manipulação de dados - -**O opencode não armazena seu código ou dados de contexto.** Todo o processamento acontece localmente ou através de chamadas diretas de API para seu provedor de IA. - -Isso significa que, enquanto você estiver usando um provedor em quem confia, ou um gateway de IA interno, você pode usar o opencode com segurança. - -A única ressalva aqui é o recurso opcional `/share`. - ---- - -#### Compartilhando conversas - -Se um usuário habilitar o recurso `/share`, a conversa e os dados associados a ela são enviados para o serviço que usamos para hospedar essas páginas de compartilhamento em opencode.ai. - -Os dados são atualmente servidos através da rede de borda do nosso CDN e são armazenados em cache na borda perto de seus usuários. - -Recomendamos que você desative isso para seu teste. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -[Saiba mais sobre compartilhamento](/docs/share). - ---- - -### Propriedade do código - -**Você possui todo o código produzido pelo opencode.** Não há restrições de licenciamento ou reivindicações de propriedade. - ---- - -## Preços - -Usamos um modelo por assento para o opencode Enterprise. Se você tiver seu próprio gateway LLM, não cobramos pelos tokens usados. Para mais detalhes sobre preços e opções de implementação, **entre em contato conosco**. - ---- - -## Implantação - -Uma vez que você tenha concluído seu teste e esteja pronto para usar o opencode em sua organização, você pode **entrar em contato conosco** para discutir preços e opções de implementação. - ---- - -### Configuração Central - -Podemos configurar o opencode para usar uma única configuração central para toda a sua organização. - -Essa configuração centralizada pode se integrar ao seu provedor de SSO e garante que todos os usuários acessem apenas seu gateway de IA interno. - ---- - -### Integração SSO - -Através da configuração central, o opencode pode se integrar ao provedor de SSO de sua organização para autenticação. - -Isso permite que o opencode obtenha credenciais para seu gateway de IA interno através do seu sistema de gerenciamento de identidade existente. - ---- - -### Gateway de IA Interno - -Com a configuração central, o opencode também pode ser configurado para usar apenas seu gateway de IA interno. - -Você também pode desativar todos os outros provedores de IA, garantindo que todas as solicitações passem pela infraestrutura aprovada de sua organização. - ---- - -### Auto-hospedagem - -Embora recomendemos desativar as páginas de compartilhamento para garantir que seus dados nunca deixem sua organização, também podemos ajudá-lo a auto-hospedá-las em sua infraestrutura. - -Isso está atualmente em nosso roadmap. Se você estiver interessado, **nos avise**. - ---- - -## FAQ - -

-O que é o opencode Enterprise? - -O opencode Enterprise é para organizações que desejam garantir que seu código e dados nunca deixem sua infraestrutura. Isso pode ser feito usando uma configuração centralizada que se integra ao seu SSO e gateway de IA interno. - -
- -
-Como posso começar com o opencode Enterprise? - -Basta começar com um teste interno com sua equipe. O opencode, por padrão, não armazena seu código ou dados de contexto, facilitando o início. - -Depois, **entre em contato conosco** para discutir opções de preços e implementação. - -
- -
-Como funciona a precificação empresarial? - -Oferecemos preços empresariais por assento. Se você tiver seu próprio gateway LLM, não cobramos pelos tokens usados. Para mais detalhes, **entre em contato conosco** para um orçamento personalizado com base nas necessidades de sua organização. - -
- -
-Meus dados estão seguros com o opencode Enterprise? - -Sim. O opencode não armazena seu código ou dados de contexto. Todo o processamento acontece localmente ou através de chamadas diretas de API para seu provedor de IA. Com a configuração central e a integração SSO, seus dados permanecem seguros dentro da infraestrutura de sua organização. - -
- -
-Podemos usar nosso próprio registro NPM privado? - -O opencode suporta registros npm privados através do suporte nativo do arquivo `.npmrc` do Bun. Se sua organização usa um registro privado, como JFrog Artifactory, Nexus ou similar, certifique-se de que os desenvolvedores estejam autenticados antes de executar o opencode. - -Para configurar a autenticação com seu registro privado: - -```bash -npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/ -``` - -Isso cria `~/.npmrc` com os detalhes de autenticação. O opencode irá automaticamente -capturar isso. - -:::caution -Você deve estar logado no registro privado antes de executar o opencode. -::: - -Alternativamente, você pode configurar manualmente um arquivo `.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} -``` - -Os desenvolvedores devem estar logados no registro privado antes de executar o opencode para garantir que os pacotes possam ser instalados a partir do seu registro empresarial. - -
diff --git a/packages/web/src/content/docs/pt-br/formatters.mdx b/packages/web/src/content/docs/pt-br/formatters.mdx deleted file mode 100644 index 65fb5d2e60..0000000000 --- a/packages/web/src/content/docs/pt-br/formatters.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: Formatadores -description: O opencode usa formatadores específicos de linguagem. ---- - -O opencode formata automaticamente arquivos após serem escritos ou editados usando formatadores específicos de linguagem. Isso garante que o código gerado siga os estilos de código do seu projeto. - ---- - -## Integrados - -O opencode vem com vários formatadores integrados para linguagens e frameworks populares. Abaixo está uma lista dos formatadores, extensões de arquivo suportadas e comandos ou opções de configuração necessárias. - -| Formatador | Extensões | Requisitos | -| -------------------- | ------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------- | -| gofmt | .go | Comando `gofmt` disponível | -| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | Comando `mix` disponível | -| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, e [mais](https://prettier.io/docs/en/index.html) | Dependência `prettier` em `package.json` | -| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, e [mais](https://biomejs.dev/) | Arquivo de configuração `biome.json(c)` | -| zig | .zig, .zon | Comando `zig` disponível | -| clang-format | .c, .cpp, .h, .hpp, .ino, e [mais](https://clang.llvm.org/docs/ClangFormat.html) | Arquivo de configuração `.clang-format` | -| ktlint | .kt, .kts | Comando `ktlint` disponível | -| ruff | .py, .pyi | Comando `ruff` disponível com configuração | -| rustfmt | .rs | Comando `rustfmt` disponível | -| cargofmt | .rs | Comando `cargo fmt` disponível | -| uv | .py, .pyi | Comando `uv` disponível | -| rubocop | .rb, .rake, .gemspec, .ru | Comando `rubocop` disponível | -| standardrb | .rb, .rake, .gemspec, .ru | Comando `standardrb` disponível | -| htmlbeautifier | .erb, .html.erb | Comando `htmlbeautifier` disponível | -| air | .R | Comando `air` disponível | -| dart | .dart | Comando `dart` disponível | -| dfmt | .d | Comando `dfmt` disponível | -| ocamlformat | .ml, .mli | Comando `ocamlformat` disponível e arquivo de configuração `.ocamlformat` | -| terraform | .tf, .tfvars | Comando `terraform` disponível | -| gleam | .gleam | Comando `gleam` disponível | -| nixfmt | .nix | Comando `nixfmt` disponível | -| shfmt | .sh, .bash | Comando `shfmt` disponível | -| pint | .php | Dependência `laravel/pint` em `composer.json` | -| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | Dependência `oxfmt` em `package.json` e uma [variável de ambiente experimental](/docs/cli/#experimental) | -| ormolu | .hs | Comando `ormolu` disponível | - -Portanto, se seu projeto tiver `prettier` em seu `package.json`, o opencode o usará automaticamente. - ---- - -## Como funciona - -Quando o opencode escreve ou edita um arquivo, ele: - -1. Verifica a extensão do arquivo em relação a todos os formatadores habilitados. -2. Executa o comando do formatador apropriado no arquivo. -3. Aplica as alterações de formatação automaticamente. - -Esse processo acontece em segundo plano, garantindo que seus estilos de código sejam mantidos sem etapas manuais. - ---- - -## Configuração - -Você pode personalizar os formatadores através da seção `formatter` em sua configuração do opencode. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "formatter": {} -} -``` - -Cada configuração de formatador suporta o seguinte: - -| Propriedade | Tipo | Descrição | -| ------------- | -------- | ---------------------------------------------------------------- | -| `disabled` | boolean | Defina como `true` para desabilitar o formatador | -| `command` | string[] | O comando a ser executado para formatação | -| `environment` | object | Variáveis de ambiente a serem definidas ao executar o formatador | -| `extensions` | string[] | Extensões de arquivo que este formatador deve tratar | - -Vamos ver alguns exemplos. - ---- - -### Desabilitando formatadores - -Para desabilitar **todos** os formatadores globalmente, defina `formatter` como `false`: - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": false -} -``` - -Para desabilitar um **formatador específico**, defina `disabled` como `true`: - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": { - "prettier": { - "disabled": true - } - } -} -``` - ---- - -### Formatadores personalizados - -Você pode substituir os formatadores integrados ou adicionar novos especificando o comando, variáveis de ambiente e extensões de arquivo: - -```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"] - } - } -} -``` - -O **placeholder `$FILE`** no comando será substituído pelo caminho do arquivo que está sendo formatado. diff --git a/packages/web/src/content/docs/pt-br/github.mdx b/packages/web/src/content/docs/pt-br/github.mdx deleted file mode 100644 index c2e53ca77e..0000000000 --- a/packages/web/src/content/docs/pt-br/github.mdx +++ /dev/null @@ -1,321 +0,0 @@ ---- -title: GitHub -description: Use o opencode em problemas e pull-requests do GitHub. ---- - -O opencode integra-se ao seu fluxo de trabalho do GitHub. Mencione `/opencode` ou `/oc` em seu comentário, e o opencode executará tarefas dentro do seu runner do GitHub Actions. - ---- - -## Recursos - -- **Triagem de problemas**: Peça ao opencode para analisar um problema e explicá-lo para você. -- **Corrigir e implementar**: Peça ao opencode para corrigir um problema ou implementar um recurso. E ele trabalhará em um novo branch e enviará um PR com todas as alterações. -- **Seguro**: O opencode é executado dentro dos runners do seu GitHub. - ---- - -## Instalação - -Execute o seguinte comando em um projeto que está em um repositório do GitHub: - -```bash -opencode github install -``` - -Isso o guiará pela instalação do aplicativo GitHub, criação do fluxo de trabalho e configuração de segredos. - ---- - -### Configuração Manual - -Ou você pode configurá-lo manualmente. - -1. **Instale o aplicativo GitHub** - - Acesse [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Certifique-se de que está instalado no repositório de destino. - -2. **Adicione o fluxo de trabalho** - - Adicione o seguinte arquivo de fluxo de trabalho em `.github/workflows/opencode.yml` no seu repositório. Certifique-se de definir o `model` apropriado e as chaves de API necessárias em `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. **Armazene as chaves de API em segredos** - - Nas **configurações** da sua organização ou projeto, expanda **Segredos e variáveis** à esquerda e selecione **Ações**. E adicione as chaves de API necessárias. - ---- - -## Configuração - -- `model`: O modelo a ser usado com o opencode. Tem o formato de `provider/model`. Isso é **obrigatório**. -- `agent`: O agente a ser usado. Deve ser um agente primário. Retorna ao `default_agent` da configuração ou `"build"` se não encontrado. -- `share`: Se deve compartilhar a sessão do opencode. O padrão é **true** para repositórios públicos. -- `prompt`: Prompt personalizado opcional para substituir o comportamento padrão. Use isso para personalizar como o opencode processa solicitações. -- `token`: Token de acesso do GitHub opcional para realizar operações como criar comentários, confirmar alterações e abrir pull requests. Por padrão, o opencode usa o token de acesso da instalação do aplicativo GitHub opencode, então commits, comentários e pull requests aparecem como se fossem da aplicação. - - Alternativamente, você pode usar o [`GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) embutido do runner do GitHub Action sem instalar o aplicativo GitHub opencode. Apenas certifique-se de conceder as permissões necessárias em seu fluxo de trabalho: - - ```yaml - permissions: - id-token: write - contents: write - pull-requests: write - issues: write - ``` - - Você também pode usar um [token de acesso pessoal](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) se preferir. - ---- - -## Eventos Suportados - -O opencode pode ser acionado pelos seguintes eventos do GitHub: - -| Tipo de Evento | Acionado Por | Detalhes | -| ----------------------------- | --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -| `issue_comment` | Comentário em um problema ou PR | Mencione `/opencode` ou `/oc` em seu comentário. O opencode lê o contexto e pode criar branches, abrir PRs ou responder. | -| `pull_request_review_comment` | Comentário em linhas de código específicas em um PR | Mencione `/opencode` ou `/oc` enquanto revisa o código. O opencode recebe o caminho do arquivo, números das linhas e contexto do diff. | -| `issues` | Problema aberto ou editado | Aciona automaticamente o opencode quando problemas são criados ou modificados. Requer entrada de `prompt`. | -| `pull_request` | PR aberto ou atualizado | Aciona automaticamente o opencode quando PRs são abertos, sincronizados ou reabertos. Útil para revisões automatizadas. | -| `schedule` | Cron baseado em agendamento | Execute o opencode em um cronograma. Requer entrada de `prompt`. A saída vai para logs e PRs (sem problema para comentar). | -| `workflow_dispatch` | Acionamento manual pela interface do GitHub | Acione o opencode sob demanda através da aba Ações. Requer entrada de `prompt`. A saída vai para logs e PRs. | - -### Exemplo de Agendamento - -Execute o opencode em um cronograma para realizar tarefas automatizadas: - -```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: | - Revise a base de código para quaisquer comentários TODO e crie um resumo. - Se encontrar problemas que valham a pena resolver, abra um issue para rastreá-los. -``` - -Para eventos agendados, a entrada `prompt` é **obrigatória** uma vez que não há comentário para extrair instruções. Fluxos de trabalho agendados são executados sem um contexto de usuário para verificação de permissões, então o fluxo de trabalho deve conceder `contents: write` e `pull-requests: write` se você espera que o opencode crie branches ou PRs. - ---- - -### Exemplo de Pull Request - -Revise automaticamente PRs quando forem abertos ou atualizados: - -```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: | - Revise este pull request: - - Verifique problemas de qualidade de código - - Procure por potenciais bugs - - Sugira melhorias -``` - -Para eventos de `pull_request`, se nenhum `prompt` for fornecido, o opencode padrão será revisar o pull request. - ---- - -### Exemplo de Triagem de Problemas - -Triagem automática de novos problemas. Este exemplo filtra contas com mais de 30 dias para reduzir 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: | - Revise este issue. Se houver uma correção clara ou docs relevantes: - - Forneça links de documentação - - Adicione orientação sobre tratamento de erros para exemplos de código - Caso contrário, não comente. -``` - -Para eventos de `issues`, a entrada `prompt` é **obrigatória** uma vez que não há comentário para extrair instruções. - ---- - -## Prompts Personalizados - -Substitua o prompt padrão para personalizar o comportamento do opencode para seu fluxo de trabalho. - -```yaml title=".github/workflows/opencode.yml" -- uses: anomalyco/opencode/github@latest - with: - model: anthropic/claude-sonnet-4-5 - prompt: | - Revise este pull request: - - Verifique problemas de qualidade de código - - Procure por potenciais bugs - - Sugira melhorias -``` - -Isso é útil para impor critérios de revisão específicos, padrões de codificação ou áreas de foco relevantes para seu projeto. - ---- - -## Exemplos - -Aqui estão alguns exemplos de como você pode usar o opencode no GitHub. - -- **Explicar um problema** - - Adicione este comentário em um problema do GitHub. - - ``` - /opencode explain this issue - ``` - - O opencode lerá toda a conversa, incluindo todos os comentários, e responderá com uma explicação clara. - -- **Corrigir um problema** - - Em um problema do GitHub, diga: - - ``` - /opencode fix this - ``` - - E o opencode criará um novo branch, implementará as alterações e abrirá um PR com as mudanças. - -- **Revisar PRs e fazer alterações** - - Deixe o seguinte comentário em um PR do GitHub. - - ``` - Delete the attachment from S3 when the note is removed /oc - ``` - - O opencode implementará a alteração solicitada e a confirmará no mesmo PR. - -- **Revisar linhas de código específicas** - - Deixe um comentário diretamente nas linhas de código na aba "Files" do PR. O opencode detecta automaticamente o arquivo, os números das linhas e o contexto do diff para fornecer respostas precisas. - - ``` - [Comentário em linhas específicas na aba Files] - /oc add error handling here - ``` - - Ao comentar sobre linhas específicas, o opencode recebe: - - O arquivo exato sendo revisado - - As linhas específicas de código - - O contexto do diff ao redor - - Informações sobre números de linha - - Isso permite solicitações mais direcionadas sem precisar especificar caminhos de arquivos ou números de linhas manualmente. diff --git a/packages/web/src/content/docs/pt-br/gitlab.mdx b/packages/web/src/content/docs/pt-br/gitlab.mdx deleted file mode 100644 index dc48aa57ca..0000000000 --- a/packages/web/src/content/docs/pt-br/gitlab.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: GitLab -description: Use o opencode em problemas e solicitações de mesclagem do GitLab. ---- - -O opencode se integra ao seu fluxo de trabalho do GitLab através do seu pipeline CI/CD do GitLab ou com o GitLab Duo. - -Em ambos os casos, o opencode será executado em seus runners do GitLab. - ---- - -## GitLab CI - -O opencode funciona em um pipeline regular do GitLab. Você pode integrá-lo a um pipeline como um [componente CI](https://docs.gitlab.com/ee/ci/components/) - -Aqui estamos usando um componente CI/CD criado pela comunidade para opencode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode). - ---- - -### Recursos - -- **Use configuração personalizada por trabalho**: Configure o opencode com um diretório de configuração personalizado, por exemplo `./config/#custom-directory` para habilitar ou desabilitar funcionalidades por invocação do opencode. -- **Configuração mínima**: O componente CI configura o opencode em segundo plano, você só precisa criar a configuração do opencode e o prompt inicial. -- **Flexível**: O componente CI suporta várias entradas para personalizar seu comportamento. - ---- - -### Configuração - -1. Armazene seu JSON de autenticação do opencode como variáveis de ambiente do tipo File em **Configurações** > **CI/CD** > **Variáveis**. Certifique-se de marcá-las como "Mascaradas e ocultas". -2. Adicione o seguinte ao seu arquivo `.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 # O nome da variável para seu JSON de autenticação do OpenCode - command: optional-custom-command - message: "Seu prompt aqui" - ``` - -Para mais entradas e casos de uso [consulte a documentação](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) deste componente. - ---- - -## GitLab Duo - -O opencode se integra ao seu fluxo de trabalho do GitLab. -Mencione `@opencode` em um comentário, e o opencode executará tarefas dentro do seu pipeline CI do GitLab. - ---- - -### Recursos - -- **Triagem de problemas**: Peça ao opencode para analisar um problema e explicá-lo para você. -- **Corrigir e implementar**: Peça ao opencode para corrigir um problema ou implementar uma funcionalidade. - Ele criará um novo branch e abrirá uma solicitação de mesclagem com as alterações. -- **Seguro**: O opencode é executado em seus runners do GitLab. - ---- - -### Configuração - -O opencode é executado em seu pipeline CI/CD do GitLab, aqui está o que você precisará para configurá-lo: - -:::tip -Consulte a [**documentação do GitLab**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) para instruções atualizadas. -::: - -1. Configure seu ambiente GitLab -2. Configure CI/CD -3. Obtenha uma chave de API do provedor de modelo de IA -4. Crie uma conta de serviço -5. Configure variáveis de CI/CD -6. Crie um arquivo de configuração de fluxo, aqui está um exemplo: - -
- - Configuração de fluxo - - ```yaml - image: node:22-slim - commands: - - echo "Instalando opencode" - - npm install --global opencode-ai - - echo "Instalando 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 "Configurando glab" - - echo $GITLAB_HOST - - echo "Criando configuração de auth do OpenCode" - - mkdir --parents ~/.local/share/opencode - - | - cat > ~/.local/share/opencode/auth.json << EOF - { - "anthropic": { - "type": "api", - "key": "$ANTHROPIC_API_KEY" - } - } - EOF - - echo "Configurando git" - - git config --global user.email "opencode@gitlab.com" - - git config --global user.name "OpenCode" - - echo "Testando glab" - - glab issue list - - echo "Executando OpenCode" - - | - opencode run " - Você é um assistente de IA ajudando com operações do GitLab. - - Contexto: $AI_FLOW_CONTEXT - Tarefa: $AI_FLOW_INPUT - Evento: $AI_FLOW_EVENT - - Por favor, execute a tarefa solicitada usando as ferramentas disponíveis do GitLab. - Seja minucioso em sua análise e forneça explicações claras. - - - Por favor, use a CLI glab para acessar dados do GitLab. A CLI glab já foi autenticada. Você pode executar os comandos correspondentes. - - Se for solicitado a resumir um MR ou problema ou solicitado a fornecer mais informações, poste uma nota de volta no MR/Problema para que o usuário possa ver. - Você não precisa commitar ou enviar alterações, isso será feito automaticamente com base nas alterações de arquivo que você fizer. - - " - - git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF - - echo "Verificando alterações no git e enviando se existirem" - - | - if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then - echo "Alterações git detectadas, adicionando e enviando..." - git add . - if git diff --cached --quiet; then - echo "Nenhuma alteração preparada para commit" - else - echo "Commitando alterações para o branch: $CI_WORKLOAD_REF" - git commit --message "Codex changes" - echo "Enviando alterações para $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 "Alterações enviadas com sucesso" - fi - else - echo "Nenhuma alteração git detectada, pulando envio" - fi - variables: - - ANTHROPIC_API_KEY - - GITLAB_TOKEN_OPENCODE - - GITLAB_HOST - ``` - -
- -Você pode consultar a [documentação dos agentes da CLI do GitLab](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) para instruções detalhadas. - ---- - -### Exemplos - -Aqui estão alguns exemplos de como você pode usar o opencode no GitLab. - -:::tip -Você pode configurar para usar uma frase de gatilho diferente de `@opencode`. -::: - -- **Explicar um problema** - - Adicione este comentário em um problema do GitLab. - - ``` - @opencode explain this issue - ``` - - O opencode lerá o problema e responderá com uma explicação clara. - -- **Corrigir um problema** - - Em um problema do GitLab, diga: - - ``` - @opencode fix this - ``` - - O opencode criará um novo branch, implementará as alterações e abrirá uma solicitação de mesclagem com as alterações. - -- **Revisar solicitações de mesclagem** - - Deixe o seguinte comentário em uma solicitação de mesclagem do GitLab. - - ``` - @opencode review this merge request - ``` - - O opencode revisará a solicitação de mesclagem e fornecerá feedback. diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx deleted file mode 100644 index 6862e6a619..0000000000 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ /dev/null @@ -1,211 +0,0 @@ ---- -title: Go -description: Assinatura de baixo custo para modelos abertos de programação. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -O OpenCode Go é uma assinatura de baixo custo — **US$ 5 no seu primeiro mês**, depois **US$ 10/mês** — que oferece acesso confiável a modelos abertos de programação populares. - -O Go funciona como qualquer outro provedor no OpenCode. Você assina o OpenCode Go e -obtém a sua chave de API. Ele é **totalmente opcional** e você não precisa usá-lo para -usar o OpenCode. - -Ele foi projetado principalmente para usuários internacionais, com modelos hospedados nos EUA, na UE e em Singapura para um acesso global estável. - ---- - -## Contexto - -Os modelos abertos ficaram muito bons. Eles agora alcançam um desempenho próximo aos -modelos proprietários para tarefas de programação. E como muitos provedores podem servi-los -de forma competitiva, eles geralmente são muito mais baratos. - -No entanto, obter um acesso confiável e de baixa latência a eles pode ser difícil. Os provedores -variam em qualidade e disponibilidade. - -:::tip -Testamos um grupo selecionado de modelos e provedores que funcionam bem com o OpenCode. -::: - -Para resolver isso, fizemos algumas coisas: - -1. Testamos um grupo selecionado de modelos abertos e conversamos com suas equipes sobre a - melhor forma de executá-los. -2. Em seguida, trabalhamos com alguns provedores para garantir que eles estivessem sendo servidos - corretamente. -3. Por fim, avaliamos por benchmark a combinação de modelo/provedor e elaboramos - uma lista que nos sentimos confortáveis em recomendar. - -O OpenCode Go lhe dá acesso a esses modelos por **US$ 5 no seu primeiro mês**, depois **US$ 10/mês**. - ---- - -## Como funciona - -O OpenCode Go funciona como qualquer outro provedor no OpenCode. - -1. Você entra no **OpenCode Zen**, assina o Go e - copia a sua chave de API. -2. Você executa o comando `/connect` na TUI, seleciona `OpenCode Go` e cola - a sua chave de API. -3. Execute `/models` na TUI para ver a lista de modelos disponíveis através do Go. - -:::note -Apenas um membro por workspace pode assinar o OpenCode Go. -::: - -A lista atual de modelos inclui: - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -A lista de modelos pode mudar conforme testamos e adicionamos novos. - ---- - -## Limites de uso - -O OpenCode Go inclui os seguintes limites: - -- **Limite de 5 horas** — US$ 12 de uso -- **Limite semanal** — US$ 30 de uso -- **Limite mensal** — US$ 60 de uso - -Os limites são definidos em valor em dólares. Isso significa que a sua contagem real de requisições depende do modelo que você usa. Modelos mais baratos como o DeepSeek V4 Flash permitem mais requisições, enquanto modelos de custo mais alto como o GLM-5.2 permitem menos. - -A tabela abaixo fornece uma contagem estimada de requisições com base nos padrões típicos de uso do Go: - -| Model | requisições por 5 horas | requisições por semana | requisições por mês | -| ----------------- | ----------------------- | ---------------------- | ------------------- | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -As estimativas se baseiam nos padrões médios de requisições observados: - -- GLM-5.2/5.1 — 700 tokens de entrada, 52.000 em cache, 150 tokens de saída por requisição -- Kimi K2.7 Code/K2.6 — 870 tokens de entrada, 55.000 em cache, 200 tokens de saída por requisição -- DeepSeek V4 Pro — 750 tokens de entrada, 82.000 em cache, 290 tokens de saída por requisição -- DeepSeek V4 Flash — 790 tokens de entrada, 68.000 em cache, 280 tokens de saída por requisição -- MiniMax M3 — 510 tokens de entrada, 56.000 em cache, 190 tokens de saída por requisição -- MiniMax M2.7 — 300 tokens de entrada, 55.000 em cache, 125 tokens de saída por requisição -- Qwen3.7 Max — 420 tokens de entrada, 66.000 em cache, 200 tokens de saída por requisição -- Qwen3.7 Plus — 500 tokens de entrada, 57.000 em cache, 190 tokens de saída por requisição -- Qwen3.6 Plus — 500 tokens de entrada, 57.000 em cache, 190 tokens de saída por requisição -- MiMo-V2.5 — 830 tokens de entrada, 71.500 em cache, 295 tokens de saída por requisição -- MiMo-V2.5-Pro — 790 tokens de entrada, 86.000 em cache, 305 tokens de saída por requisição - -As estimativas também se baseiam nos seguintes preços por 1M tokens: - -| Modelo | Entrada | Saída | Leitura em cache | Escrita em cache | -| ---------------------------- | ------- | ----- | ---------------- | ---------------- | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -Você pode acompanhar o seu uso atual no **console**. - -:::tip -Se você atingir o limite de uso, pode continuar usando os modelos gratuitos. -::: - -Os limites de uso podem mudar à medida que aprendemos com o uso inicial e o feedback. - ---- - -### Uso além dos limites - -Se você também tiver créditos no seu saldo do Zen, pode habilitar a opção **Use balance** -no console. Quando habilitada, o Go usará o seu saldo do Zen como alternativa -após você atingir os seus limites de uso em vez de bloquear as requisições. - ---- - -## Endpoints - -Você também pode acessar os modelos do Go através dos seguintes endpoints de API. - -| Modelo | ID do Modelo | Endpoint | Pacote do AI SDK | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -O [ID do modelo](/docs/config/#models) na sua configuração do OpenCode -usa o formato `opencode-go/`. Por exemplo, para o Kimi K2.7 Code, você usaria -`opencode-go/kimi-k2.7-code` na sua configuração. - ---- - -### Modelos - -Você pode buscar a lista completa de modelos disponíveis e seus metadados em: - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## Privacidade - -O plano foi projetado principalmente para usuários internacionais, com modelos hospedados em US, EU e Singapore para garantir acesso global estável. Nossos provedores seguem uma política de retenção zero e não usam seus dados para treinamento de modelos. - ---- - -## Objetivos - -Criamos o OpenCode Go para: - -1. Tornar a programação com IA **acessível** a mais pessoas com uma assinatura de baixo custo. -2. Fornecer acesso **confiável** aos melhores modelos abertos de programação. -3. Ter modelos sob curadoria que são **testados e avaliados (benchmarked)** para o uso por agentes de programação. -4. Não ter **nenhuma restrição de fornecedor (lock-in)**, permitindo que você use qualquer outro provedor com o OpenCode também. diff --git a/packages/web/src/content/docs/pt-br/ide.mdx b/packages/web/src/content/docs/pt-br/ide.mdx deleted file mode 100644 index cb773c991a..0000000000 --- a/packages/web/src/content/docs/pt-br/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: IDE -description: A extensão opencode para VS Code, Cursor e outros IDEs ---- - -O opencode integra-se com VS Code, Cursor ou qualquer IDE que suporte um terminal. Basta executar `opencode` no terminal para começar. - ---- - -## Uso - -- **Lançamento Rápido**: Use `Cmd+Esc` (Mac) ou `Ctrl+Esc` (Windows/Linux) para abrir o opencode em uma visualização de terminal dividido, ou focar em uma sessão de terminal existente se uma já estiver em execução. -- **Nova Sessão**: Use `Cmd+Shift+Esc` (Mac) ou `Ctrl+Shift+Esc` (Windows/Linux) para iniciar uma nova sessão de terminal opencode, mesmo que uma já esteja aberta. Você também pode clicar no botão opencode na interface. -- **Consciência de Contexto**: Compartilhe automaticamente sua seleção ou aba atual com o opencode. -- **Atalhos de Referência de Arquivo**: Use `Cmd+Option+K` (Mac) ou `Alt+Ctrl+K` (Linux/Windows) para inserir referências de arquivo. Por exemplo, `@File#L37-42`. - ---- - -## Instalação - -Para instalar o opencode no VS Code e forks populares como Cursor, Windsurf, VSCodium: - -1. Abra o VS Code -2. Abra o terminal integrado -3. Execute `opencode` - a extensão será instalada automaticamente - -Se, por outro lado, você quiser usar seu próprio IDE ao executar `/editor` ou `/export` a partir do TUI, você precisará definir `export EDITOR="code --wait"`. [Saiba mais](/docs/tui/#editor-setup). - ---- - -### Instalação Manual - -Procure por **opencode** no Marketplace de Extensões e clique em **Instalar**. - ---- - -### Solução de Problemas - -Se a extensão falhar ao instalar automaticamente: - -- Certifique-se de que você está executando `opencode` no terminal integrado. -- Confirme se a CLI para seu IDE está instalado: - - Para VS Code: comando `code` - - Para Cursor: comando `cursor` - - Para Windsurf: comando `windsurf` - - Para VSCodium: comando `codium` - - Se não, execute `Cmd+Shift+P` (Mac) ou `Ctrl+Shift+P` (Windows/Linux) e procure por "Shell Command: Install 'code' command in PATH" (ou o equivalente para seu IDE) -- Certifique-se de que o VS Code tem permissão para instalar extensões diff --git a/packages/web/src/content/docs/pt-br/index.mdx b/packages/web/src/content/docs/pt-br/index.mdx deleted file mode 100644 index 6f23f4ebc5..0000000000 --- a/packages/web/src/content/docs/pt-br/index.mdx +++ /dev/null @@ -1,344 +0,0 @@ ---- -title: Introdução -description: Comece a usar o opencode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" -import config from "../../../../config.mjs" -export const console = config.console - -[**opencode**](/) é um agente de codificação de IA de código aberto. Está disponível como uma interface baseada em terminal, aplicativo desktop ou extensão de IDE. - -![opencode TUI com o tema opencode](../../../assets/lander/screenshot.png) - -Vamos começar. - ---- - -#### Pré-requisitos - -Para usar o opencode no seu terminal, você precisará de: - -1. Um emulador de terminal moderno como: - - [WezTerm](https://wezterm.org), multiplataforma - - [Alacritty](https://alacritty.org), multiplataforma - - [Ghostty](https://ghostty.org), Linux e macOS - - [Kitty](https://sw.kovidgoyal.net/kitty/), Linux e macOS - -2. Chaves de API para os provedores de LLM que você deseja usar. - ---- - -## Instalação - -A maneira mais fácil de instalar o opencode é através do script de instalação. - -```bash -curl -fsSL https://opencode.ai/install | bash -``` - -Você também pode instalá-lo com os seguintes comandos: - -- **Usando Node.js** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **Usando Homebrew no macOS e Linux** - - ```bash - brew install anomalyco/tap/opencode - ``` - - > Recomendamos usar o tap do opencode para as versões mais atualizadas. A fórmula oficial `brew install opencode` é mantida pela equipe do Homebrew e é atualizada com menos frequência. - -- **Usando Paru no Arch Linux** - - ```bash - sudo pacman -S opencode # Arch Linux (Stable) - paru -S opencode-bin # Arch Linux (Latest from AUR) - ``` - -#### Windows - -:::tip[Recomendado: Use WSL] -Para a melhor experiência no Windows, recomendamos usar o [Windows Subsystem for Linux (WSL)](/docs/windows-wsl). Ele oferece melhor desempenho e total compatibilidade com os recursos do opencode. -::: - -- **Usando Chocolatey** - - ```bash - choco install opencode - ``` - -- **Usando Scoop** - - ```bash - scoop install opencode - ``` - -- **Usando NPM** - - ```bash - npm install -g opencode-ai - ``` - -- **Usando Mise** - - ```bash - mise use -g github:anomalyco/opencode - ``` - -- **Usando Docker** - - ```bash - docker run -it --rm ghcr.io/anomalyco/opencode - ``` - -O suporte para instalar o opencode no Windows usando Bun está atualmente em andamento. - -Você também pode baixar o binário na seção [Releases](https://github.com/anomalyco/opencode/releases). - ---- - -## Configuração - -Com o opencode, você pode usar qualquer provedor de LLM configurando suas chaves de API. - -Se você é novo no uso de provedores de LLM, recomendamos usar o [OpenCode Zen](/docs/zen). -É uma lista selecionada de modelos que foram testados e verificados pela equipe do opencode. - -1. Execute o comando `/connect` no TUI, selecione opencode e acesse [opencode.ai/auth](https://opencode.ai/auth). - - ```txt - /connect - ``` - -2. Faça login, adicione seus dados de cobrança e copie sua chave de API. - -3. Cole sua chave de API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -Alternativamente, você pode selecionar um dos outros provedores. [Saiba mais](/docs/providers#directory). - ---- - -## Inicialização - -Agora que você configurou um provedor, pode navegar até um projeto no qual deseja trabalhar. - -```bash -cd /path/to/project -``` - -E execute o opencode. - -```bash -opencode -``` - -Em seguida, inicialize o opencode para o projeto executando o seguinte comando. - -```bash frame="none" -/init -``` - -Isso fará com que o opencode analise seu projeto e crie um arquivo `AGENTS.md` na raiz do projeto. - -:::tip -Você deve commitar o arquivo `AGENTS.md` do seu projeto no Git. -::: - -Isso ajuda o opencode a entender a estrutura do projeto e os padrões de codificação utilizados. - ---- - -## Uso - -Agora você está pronto para usar o opencode para trabalhar em seu projeto. Sinta-se à vontade para perguntar qualquer coisa! - -Se você é novo no uso de um agente de codificação de IA, aqui estão alguns exemplos que podem ajudar. - ---- - -### Fazendo perguntas - -Você pode pedir ao opencode para explicar a base de código para você. - -:::tip -Use a tecla `@` para buscar arquivos no projeto. -::: - -```txt frame="none" "@packages/functions/src/api/index.ts" -How is authentication handled in @packages/functions/src/api/index.ts -``` - -Isso é útil se houver uma parte da base de código na qual você não trabalhou. - ---- - -### Adicionando recursos - -Você pode pedir ao opencode para adicionar novos recursos ao seu projeto. Embora primeiro recomendemos pedir para ele criar um plano. - -1. **Criar um plano** - - O opencode tem um _Modo de Plano_ que desabilita sua capacidade de fazer alterações e, em vez disso, sugere _como_ implementará o recurso. - - Mude para ele usando a tecla **Tab**. Você verá um indicador para isso no canto inferior direito. - - ```bash frame="none" title="Switch to Plan mode" - - ``` - - Agora vamos descrever o que queremos que ele faça. - - ```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. - ``` - - Você quer dar ao opencode detalhes suficientes para entender o que você deseja. Ajuda conversar com ele como se você estivesse falando com um desenvolvedor júnior da sua equipe. - - :::tip - Dê ao opencode bastante contexto e exemplos para ajudá-lo a entender o que você deseja. - ::: - -2. **Iterar sobre o plano** - - Uma vez que ele lhe der um plano, você pode dar feedback ou adicionar mais detalhes. - - ```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 - Arraste e solte imagens no terminal para adicioná-las ao prompt. - ::: - - O opencode pode escanear qualquer imagem que você fornecer e adicioná-la ao prompt. Você pode fazer isso arrastando e soltando uma imagem no terminal. - -3. **Construir o recurso** - - Uma vez que você se sinta confortável com o plano, volte para o _Modo de Construção_ pressionando a tecla **Tab** novamente. - - ```bash frame="none" - - ``` - - E peça para ele fazer as alterações. - - ```bash frame="none" - Sounds good! Go ahead and make the changes. - ``` - ---- - -### Fazendo alterações - -Para alterações mais simples, você pode pedir ao opencode para construí-las diretamente sem precisar revisar o plano primeiro. - -```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 -``` - -Você quer ter certeza de fornecer uma boa quantidade de detalhes para que o opencode faça as alterações corretas. - ---- - -### Desfazendo alterações - -Vamos supor que você peça ao opencode para fazer algumas alterações. - -```txt frame="none" "@packages/functions/src/api/index.ts" -Can you refactor the function in @packages/functions/src/api/index.ts? -``` - -Mas você percebe que não era isso que você queria. Você **pode desfazer** as alterações usando o comando `/undo`. - -```bash frame="none" -/undo -``` - -O opencode agora reverterá as alterações que você fez e mostrará sua mensagem original novamente. - -```txt frame="none" "@packages/functions/src/api/index.ts" -Can you refactor the function in @packages/functions/src/api/index.ts? -``` - -A partir daqui, você pode ajustar o prompt e pedir ao opencode para tentar novamente. - -:::tip -Você pode executar `/undo` várias vezes para desfazer várias alterações. -::: - -Ou você **pode refazer** as alterações usando o comando `/redo`. - -```bash frame="none" -/redo -``` - ---- - -## Compartilhamento - -As conversas que você tem com o opencode podem ser [compartilhadas com sua equipe](/docs/share). - -```bash frame="none" -/share -``` - -Isso criará um link para a conversa atual e o copiará para sua área de transferência. - -:::note -As conversas não são compartilhadas por padrão. -::: - -Aqui está uma [conversa de exemplo](https://opencode.ai/s/4XP1fce5) com o opencode. - ---- - -## Personalização - -E é isso! Agora você é um profissional em usar o opencode. - -Para torná-lo seu, recomendamos [escolher um tema](/docs/themes), [personalizar os atalhos de teclado](/docs/keybinds), [configurar formatadores de código](/docs/formatters), [criar comandos personalizados](/docs/commands) ou brincar com a [configuração do opencode](/docs/config). diff --git a/packages/web/src/content/docs/pt-br/keybinds.mdx b/packages/web/src/content/docs/pt-br/keybinds.mdx deleted file mode 100644 index e1f0f8e7ca..0000000000 --- a/packages/web/src/content/docs/pt-br/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Atalhos de Teclado -description: Personalize seus atalhos de teclado. ---- - -O opencode tem uma lista de atalhos de teclado que você pode personalizar através de `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "h", - "display_thinking": "none" - } -} -``` - ---- - -## Tecla líder - -O opencode usa uma tecla `leader` para a maioria dos atalhos de teclado. Isso evita conflitos no seu terminal. - -Por padrão, `ctrl+x` é a tecla líder e a maioria das ações requer que você primeiro pressione a tecla líder e depois o atalho. Por exemplo, para iniciar uma nova sessão, você primeiro pressiona `ctrl+x` e depois pressiona `n`. - -Você não precisa usar uma tecla líder para seus atalhos, mas recomendamos que o faça. - ---- - -## Desativar atalho - -Você pode desativar um atalho adicionando a tecla à sua configuração com um valor de "none". - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "session_compact": "none" - } -} -``` - ---- - -## Atalhos do prompt do desktop - -O prompt de entrada do aplicativo desktop opencode suporta atalhos comuns de estilo Readline/Emacs para edição de texto. Estes são embutidos e atualmente não são configuráveis via `opencode.json`. - -| Atalho | Ação | -| -------- | ------------------------------------------------ | -| `ctrl+a` | Mover para o início da linha atual | -| `ctrl+e` | Mover para o final da linha atual | -| `ctrl+b` | Mover o cursor uma posição para trás | -| `ctrl+f` | Mover o cursor uma posição para frente | -| `alt+b` | Mover o cursor uma palavra para trás | -| `alt+f` | Mover o cursor uma palavra para frente | -| `ctrl+d` | Deletar o caractere sob o cursor | -| `ctrl+k` | Matar até o final da linha | -| `ctrl+u` | Matar até o início da linha | -| `ctrl+w` | Matar a palavra anterior | -| `alt+d` | Matar a próxima palavra | -| `ctrl+t` | Transpor caracteres | -| `ctrl+g` | Cancelar popovers / abortar resposta em execução | - ---- - -## Shift+Enter - -Alguns terminais não enviam teclas modificadoras com Enter por padrão. Você pode precisar configurar seu terminal para enviar `Shift+Enter` como uma sequência de escape. - -### Windows Terminal - -Abra seu `settings.json` em: - -``` -%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json -``` - -Adicione isso ao array `actions` de nível raiz: - -```json -"actions": [ - { - "command": { - "action": "sendInput", - "input": "\u001b[13;2u" - }, - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Adicione isso ao array `keybindings` de nível raiz: - -```json -"keybindings": [ - { - "keys": "shift+enter", - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Salve o arquivo e reinicie o Windows Terminal ou abra uma nova aba. diff --git a/packages/web/src/content/docs/pt-br/lsp.mdx b/packages/web/src/content/docs/pt-br/lsp.mdx deleted file mode 100644 index f89a5d3530..0000000000 --- a/packages/web/src/content/docs/pt-br/lsp.mdx +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: Servidores LSP -description: O opencode integra-se aos seus servidores LSP. ---- - -O opencode pode se integrar a servidores Language Server Protocol (LSP) para usar diagnósticos como feedback para o agente. - ---- - -## Integrados - -O opencode vem com vários servidores LSP integrados para linguagens populares: - -| Servidor LSP | Extensões | Requisitos | -| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------ | -| astro | .astro | Instala automaticamente para projetos Astro | -| bash | .sh, .bash, .zsh, .ksh | Instala automaticamente bash-language-server | -| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Instala automaticamente para projetos C/C++ | -| csharp | .cs | `.NET SDK` instalado | -| clojure-lsp | .clj, .cljs, .cljc, .edn | Comando `clojure-lsp` disponível | -| dart | .dart | Comando `dart` disponível | -| deno | .ts, .tsx, .js, .jsx, .mjs | Comando `deno` disponível (detecta automaticamente deno.json/deno.jsonc) | -| elixir-ls | .ex, .exs | Comando `elixir` disponível | -| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | Dependência `eslint` no projeto | -| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` instalado | -| gleam | .gleam | Comando `gleam` disponível | -| gopls | .go | Comando `go` disponível | -| hls | .hs, .lhs | Comando `haskell-language-server-wrapper` disponível | -| jdtls | .java | `Java SDK (version 21+)` instalado | -| julials | .jl | `julia` e `LanguageServer.jl` instalados | -| kotlin-ls | .kt, .kts | Instala automaticamente para projetos Kotlin | -| lua-ls | .lua | Instala automaticamente para projetos Lua | -| nixd | .nix | Comando `nixd` disponível | -| ocaml-lsp | .ml, .mli | Comando `ocamllsp` disponível | -| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | Dependência `oxlint` no projeto | -| php intelephense | .php | Instala automaticamente para projetos PHP | -| prisma | .prisma | Comando `prisma` disponível | -| pyright | .py, .pyi | Dependência `pyright` instalada | -| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | Comandos `ruby` e `gem` disponíveis | -| rust | .rs | Comando `rust-analyzer` disponível | -| sourcekit-lsp | .swift, .objc, .objcpp | `swift` instalado (`xcode` no macOS) | -| svelte | .svelte | Instala automaticamente para projetos Svelte | -| terraform | .tf, .tfvars | Instala automaticamente a partir de lançamentos do GitHub | -| tinymist | .typ, .typc | Instala automaticamente a partir de lançamentos do GitHub | -| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | Dependência `typescript` no projeto | -| vue | .vue | Instala automaticamente para projetos Vue | -| yaml-ls | .yaml, .yml | Instala automaticamente o servidor yaml-language-server da Red Hat | -| zls | .zig, .zon | Comando `zig` disponível | - -O LSP fica desabilitado por padrão. Quando habilitado, os servidores iniciam quando uma das extensões de arquivo acima é detectada e os requisitos são atendidos. - -:::note -Você pode desabilitar os downloads automáticos do servidor LSP definindo a variável de ambiente `OPENCODE_DISABLE_LSP_DOWNLOAD` como `true`. -::: - ---- - -## Como Funciona - -Quando o LSP está habilitado e o opencode abre um arquivo, ele: - -1. Verifica a extensão do arquivo em relação a todos os servidores LSP habilitados. -2. Inicia o servidor LSP apropriado se não estiver em execução. - ---- - -## Boas práticas - -O LSP pode ajudar o agente a encontrar e corrigir problemas fornecendo diagnósticos dos servidores de linguagem. Isso é útil em alguns projetos, mas nem sempre é um ganho líquido. - -Servidores de linguagem podem ficar fora de sincronia, usar bastante memória, variar por versão ou projeto e desacelerar fluxos de trabalho do agente. Em muitos projetos, é melhor fazer o agente executar lint, typecheck ou outras ferramentas CLI de diagnóstico diretamente, para que os erros voltem ao ciclo do agente sem essas compensações. Documente esses comandos em arquivos de instruções como `AGENTS.md` ou skills, para que o agente saiba o que executar. Habilite o LSP quando seu projeto se beneficiar de feedback adicional do servidor de linguagem. - ---- - -## Configuração - -Você pode habilitar e personalizar os servidores LSP através da seção `lsp` na sua configuração do opencode. - -Para habilitar todos os servidores LSP integrados, defina `lsp` como `true`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -Use um objeto para manter os servidores integrados habilitados enquanto configura substituições ou servidores personalizados. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": {} -} -``` - -Cada servidor LSP suporta o seguinte: - -| Propriedade | Tipo | Descrição | -| ---------------- | -------- | ------------------------------------------------------------- | -| `disabled` | boolean | Defina como `true` para desabilitar o servidor LSP | -| `command` | string[] | O comando para iniciar o servidor LSP | -| `extensions` | string[] | Extensões de arquivo que este servidor LSP deve manipular | -| `env` | object | Variáveis de ambiente a serem definidas ao iniciar o servidor | -| `initialization` | object | Opções de inicialização a serem enviadas ao servidor LSP | - -Vamos ver alguns exemplos. - ---- - -### Variáveis de ambiente - -Use a propriedade `env` para definir variáveis de ambiente ao iniciar o servidor LSP: - -```json title="opencode.json" {5-7} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "rust": { - "env": { - "RUST_LOG": "debug" - } - } - } -} -``` - ---- - -### Opções de inicialização - -Use a propriedade `initialization` para passar opções de inicialização ao servidor LSP. Estas são configurações específicas do servidor enviadas durante a solicitação `initialize` do LSP: - -```json title="opencode.json" {5-9} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "initialization": { - "preferences": { - "importModuleSpecifierPreference": "relative" - } - } - } - } -} -``` - -:::note -As opções de inicialização variam de acordo com o servidor LSP. Verifique a documentação do seu servidor LSP para opções disponíveis. -::: - ---- - -### Desabilitando servidores LSP - -Se `lsp` for omitido, todos os servidores LSP ficam desabilitados. Para desabilitar todos os servidores LSP depois que outra configuração os habilitou, defina `lsp` como `false`: - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": false -} -``` - -Para desabilitar um servidor LSP **específico**, defina `disabled` como `true`: - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "disabled": true - } - } -} -``` - ---- - -### Servidores LSP personalizados - -Você pode adicionar servidores LSP personalizados especificando o comando e as extensões de arquivo: - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "custom-lsp": { - "command": ["custom-lsp-server", "--stdio"], - "extensions": [".custom"] - } - } -} -``` - ---- - -## Informações Adicionais - -### PHP Intelephense - -PHP Intelephense oferece recursos premium através de uma chave de licença. Você pode fornecer uma chave de licença colocando (apenas) a chave em um arquivo de texto em: - -- No macOS/Linux: `$HOME/intelephense/license.txt` -- No Windows: `%USERPROFILE%/intelephense/license.txt` - -O arquivo deve conter apenas a chave de licença sem conteúdo adicional. diff --git a/packages/web/src/content/docs/pt-br/mcp-servers.mdx b/packages/web/src/content/docs/pt-br/mcp-servers.mdx deleted file mode 100644 index a4d6c1bfbc..0000000000 --- a/packages/web/src/content/docs/pt-br/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -title: Servidores MCP -description: Adicione ferramentas MCP locais e remotas. ---- - -Você pode adicionar ferramentas externas ao opencode usando o _Model Context Protocol_, ou MCP. O opencode suporta servidores locais e remotos. - -Uma vez adicionadas, as ferramentas MCP estão automaticamente disponíveis para o LLM juntamente com as ferramentas integradas. - ---- - -#### Avisos - -Quando você usa um servidor MCP, ele adiciona ao contexto. Isso pode rapidamente se acumular se você tiver muitas ferramentas. Portanto, recomendamos ter cuidado com quais servidores MCP você usa. - -:::tip -Os servidores MCP adicionam ao seu contexto, então você deve ter cuidado com quais você habilita. -::: - -Certos servidores MCP, como o servidor MCP do GitHub, tendem a adicionar muitos tokens e podem facilmente exceder o limite de contexto. - ---- - -## Habilitando - -Você pode definir servidores MCP em sua [Configuração do opencode](https://opencode.ai/docs/config/) sob `mcp`. Adicione cada MCP com um nome único. Você pode se referir a esse MCP pelo nome ao solicitar ao LLM. - -```jsonc title="opencode.jsonc" {6} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "name-of-mcp-server": { - // ... - "enabled": true, - }, - "name-of-other-mcp-server": { - // ... - }, - }, -} -``` - -Você também pode desabilitar um servidor definindo `enabled` como `false`. Isso é útil se você quiser desabilitar temporariamente um servidor sem removê-lo de sua configuração. - ---- - -### Substituindo padrões remotos - -As organizações podem fornecer servidores MCP padrão através de seu endpoint `.well-known/opencode`. Esses servidores podem estar desabilitados por padrão, permitindo que os usuários optem pelos que precisam. - -Para habilitar um servidor específico da configuração remota da sua organização, adicione-o à sua configuração local com `enabled: true`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - -Os valores da sua configuração local substituem os padrões remotos. Veja [precedência de configuração](/docs/config#precedence-order) para mais detalhes. - ---- - -## Local - -Adicione servidores MCP locais usando `type` como `"local"` dentro do objeto 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", - }, - }, - }, -} -``` - -O comando é como o servidor MCP local é iniciado. Você também pode passar uma lista de variáveis de ambiente. - -Por exemplo, aqui está como você pode adicionar o servidor MCP de teste [`@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"], - }, - }, -} -``` - -E para usá-lo, posso adicionar `use the mcp_everything tool` aos meus prompts. - -```txt "mcp_everything" -use the mcp_everything tool to add the number 3 and 4 -``` - ---- - -#### Opções - -Aqui estão todas as opções para configurar um servidor MCP local. - -| Opção | Tipo | Requerido | Descrição | -| ------------- | ------- | --------- | ----------------------------------------------------------------------------------------- | -| `type` | String | S | Tipo de conexão do servidor MCP, deve ser `"local"`. | -| `command` | Array | S | Comando e argumentos para executar o servidor MCP. | -| `environment` | Object | | Variáveis de ambiente a serem definidas ao executar o servidor. | -| `enabled` | Boolean | | Habilitar ou desabilitar o servidor MCP na inicialização. | -| `timeout` | Number | | Tempo limite em ms para buscar ferramentas do servidor MCP. O padrão é 5000 (5 segundos). | - ---- - -## Remoto - -Adicione servidores MCP remotos definindo `type` como `"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" - } - } - } -} -``` - -O `url` é a URL do servidor MCP remoto e com a opção `headers` você pode passar uma lista de cabeçalhos. - ---- - -#### Opções - -| Opção | Tipo | Requerido | Descrição | -| --------- | ------- | --------- | ----------------------------------------------------------------------------------------- | -| `type` | String | S | Tipo de conexão do servidor MCP, deve ser `"remote"`. | -| `url` | String | S | URL do servidor MCP remoto. | -| `enabled` | Boolean | | Habilitar ou desabilitar o servidor MCP na inicialização. | -| `headers` | Object | | Cabeçalhos a serem enviados com a solicitação. | -| `oauth` | Object | | Configuração de autenticação OAuth. Veja a seção [OAuth](#oauth) abaixo. | -| `timeout` | Number | | Tempo limite em ms para buscar ferramentas do servidor MCP. O padrão é 5000 (5 segundos). | - ---- - -## OAuth - -O opencode lida automaticamente com a autenticação OAuth para servidores MCP remotos. Quando um servidor requer autenticação, o opencode irá: - -1. Detectar a resposta 401 e iniciar o fluxo OAuth -2. Usar **Registro Dinâmico de Cliente (RFC 7591)** se suportado pelo servidor -3. Armazenar tokens de forma segura para futuras solicitações - ---- - -### Automático - -Para a maioria dos servidores MCP habilitados para OAuth, nenhuma configuração especial é necessária. Basta configurar o servidor remoto: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "my-oauth-server": { - "type": "remote", - "url": "https://mcp.example.com/mcp" - } - } -} -``` - -Se o servidor requer autenticação, o opencode solicitará que você se autentique quando tentar usá-lo pela primeira vez. Se não, você pode [iniciar manualmente o fluxo](#authenticating) com `opencode mcp auth `. - ---- - -### Pré-registrado - -Se você tiver credenciais de cliente do provedor do servidor MCP, pode configurá-las: - -```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" - } - } - } -} -``` - ---- - -### Autenticação - -Você pode iniciar manualmente a autenticação ou gerenciar credenciais. - -Autentique-se com um servidor MCP específico: - -```bash -opencode mcp auth my-oauth-server -``` - -Liste todos os servidores MCP e seu status de autenticação: - -```bash -opencode mcp list -``` - -Remova credenciais armazenadas: - -```bash -opencode mcp logout my-oauth-server -``` - -O comando `mcp auth` abrirá seu navegador para autorização. Após você autorizar, o opencode armazenará os tokens de forma segura em `~/.local/share/opencode/mcp-auth.json`. - ---- - -#### Desabilitando OAuth - -Se você quiser desabilitar o OAuth automático para um servidor (por exemplo, para servidores que usam chaves de API em vez disso), defina `oauth` como `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}" - } - } - } -} -``` - ---- - -#### Opções de OAuth - -| Opção | Tipo | Descrição | -| -------------- | --------------- | ----------------------------------------------------------------------------------------- | -| `oauth` | Object \| false | Objeto de configuração OAuth, ou `false` para desabilitar a detecção automática de OAuth. | -| `clientId` | String | ID do cliente OAuth. Se não fornecido, o registro dinâmico do cliente será tentado. | -| `clientSecret` | String | Segredo do cliente OAuth, se necessário pelo servidor de autorização. | -| `scope` | String | Escopos OAuth a serem solicitados durante a autorização. | - -#### Depuração - -Se um servidor MCP remoto estiver falhando na autenticação, você pode diagnosticar problemas com: - -```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 -``` - -O comando `mcp debug` mostra o status de autenticação atual, testa a conectividade HTTP e tenta o fluxo de descoberta OAuth. - ---- - -## Gerenciamento - -Seus MCPs estão disponíveis como ferramentas no opencode, juntamente com ferramentas integradas. Portanto, você pode gerenciá-los através da configuração do opencode como qualquer outra ferramenta. - ---- - -### Global - -Isso significa que você pode habilitá-los ou desabilitá-los globalmente. - -```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 - } -} -``` - -Também podemos usar um padrão glob para desabilitar todos os MCPs correspondentes. - -```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 - } -} -``` - -Aqui estamos usando o padrão glob `my-mcp*` para desabilitar todos os MCPs. - ---- - -### Por agente - -Se você tiver um grande número de servidores MCP, pode querer habilitá-los apenas por agente e desabilitá-los globalmente. Para fazer isso: - -1. Desabilite-o como uma ferramenta globalmente. -2. Em sua [configuração de agente](/docs/agents#tools), habilite o servidor MCP como uma ferramenta. - -```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 - } - } - } -} -``` - ---- - -#### Padrões glob - -O padrão glob usa padrões simples de regex globbing: - -- `*` corresponde a zero ou mais de qualquer caractere (por exemplo, `"my-mcp*"` corresponde a `my-mcp_search`, `my-mcp_list`, etc.) -- `?` corresponde exatamente a um caractere -- Todos os outros caracteres correspondem literalmente - -:::note -As ferramentas do servidor MCP são registradas com o nome do servidor como prefixo, então para desabilitar todas as ferramentas de um servidor, simplesmente use: - -``` -"mymcpservername_*": false -``` - -::: - ---- - -## Exemplos - -Abaixo estão exemplos de alguns servidores MCP comuns. Você pode enviar um PR se quiser documentar outros servidores. - ---- - -### Sentry - -Adicione o [servidor MCP Sentry](https://mcp.sentry.dev) para interagir com seus projetos e problemas do Sentry. - -```json title="opencode.json" {4-8} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "sentry": { - "type": "remote", - "url": "https://mcp.sentry.dev/mcp", - "oauth": {} - } - } -} -``` - -Após adicionar a configuração, autentique-se com o Sentry: - -```bash -opencode mcp auth sentry -``` - -Isso abrirá uma janela do navegador para completar o fluxo OAuth e conectar o opencode à sua conta do Sentry. - -Uma vez autenticado, você pode usar ferramentas do Sentry em seus prompts para consultar problemas, projetos e dados de erro. - -```txt "use sentry" -Show me the latest unresolved issues in my project. use sentry -``` - ---- - -### Context7 - -Adicione o [servidor MCP Context7](https://github.com/upstash/context7) para pesquisar através de documentos. - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "context7": { - "type": "remote", - "url": "https://mcp.context7.com/mcp" - } - } -} -``` - -Se você se inscreveu para uma conta gratuita, pode usar sua chave de API e obter limites de taxa mais altos. - -```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}" - } - } - } -} -``` - -Aqui estamos assumindo que você tem a variável de ambiente `CONTEXT7_API_KEY` definida. - -Adicione `use context7` aos seus prompts para usar o servidor MCP Context7. - -```txt "use context7" -Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7 -``` - -Alternativamente, você pode adicionar algo assim ao seu [AGENTS.md](/docs/rules/). - -```md title="AGENTS.md" -When you need to search docs, use `context7` tools. -``` - ---- - -### Grep by Vercel - -Adicione o [Grep by Vercel](https://grep.app) servidor MCP para pesquisar através de trechos de código no GitHub. - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "gh_grep": { - "type": "remote", - "url": "https://mcp.grep.app" - } - } -} -``` - -Como nomeamos nosso servidor MCP como `gh_grep`, você pode adicionar `use the gh_grep tool` aos seus prompts para fazer o agente usá-lo. - -```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 -``` - -Alternativamente, você pode adicionar algo assim ao seu [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. -``` diff --git a/packages/web/src/content/docs/pt-br/models.mdx b/packages/web/src/content/docs/pt-br/models.mdx deleted file mode 100644 index 3711bf1102..0000000000 --- a/packages/web/src/content/docs/pt-br/models.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: Modelos -description: Configurando um provedor e modelo LLM. ---- - -O opencode usa o [AI SDK](https://ai-sdk.dev/) e [Models.dev](https://models.dev) para suportar **75+ provedores LLM** e suporta a execução de modelos locais. - ---- - -## Provedores - -Os provedores mais populares são pré-carregados por padrão. Se você adicionou as credenciais para um provedor através do comando `/connect`, elas estarão disponíveis quando você iniciar o opencode. - -Saiba mais sobre [provedores](/docs/providers). - ---- - -## Selecionando um modelo - -Depois de configurar seu provedor, você pode selecionar o modelo que deseja digitando: - -```bash frame="none" -/models -``` - ---- - -## Modelos recomendados - -Existem muitos modelos disponíveis, com novos modelos sendo lançados toda semana. - -:::tip -Considere usar um dos modelos que recomendamos. -::: - -No entanto, há apenas alguns deles que são bons tanto em gerar código quanto em chamar ferramentas. - -Aqui estão vários modelos que funcionam bem com o opencode, em nenhuma ordem específica. (Esta não é uma lista exaustiva nem necessariamente atualizada): - -- GPT 5.2 -- GPT 5.1 Codex -- Claude Opus 4.5 -- Claude Sonnet 4.5 -- Minimax M2.1 -- Gemini 3 Pro - ---- - -## Definindo um padrão - -Para definir um desses como o modelo padrão, você pode definir a chave `model` na sua configuração do opencode. - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "model": "lmstudio/google/gemma-3n-e4b" -} -``` - -Aqui, o ID completo é `provider_id/model_id`. Por exemplo, se você estiver usando [OpenCode Zen](/docs/zen), você usaria `opencode/gpt-5.1-codex` para GPT 5.1 Codex. - -Se você configurou um [provedor personalizado](/docs/providers#custom), o `provider_id` é a chave da parte `provider` da sua configuração, e o `model_id` é a chave de `provider.models`. - ---- - -## Configurando modelos - -Você pode configurar globalmente as opções de um modelo através da configuração. - -```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, - }, - }, - }, - }, - }, - }, -} -``` - -Aqui estamos configurando as configurações globais para dois modelos integrados: `gpt-5` quando acessado via o provedor `openai`, e `claude-sonnet-4-20250514` quando acessado via o provedor `anthropic`. -Os nomes dos provedores e modelos integrados podem ser encontrados em [Models.dev](https://models.dev). - -Você também pode configurar essas opções para quaisquer agentes que estiver usando. A configuração do agente substitui quaisquer opções globais aqui. [Saiba mais](/docs/agents/#additional). - -Você também pode definir variantes personalizadas que estendem as integradas. As variantes permitem que você configure diferentes configurações para o mesmo modelo sem criar entradas duplicadas: - -```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", - }, - }, - }, - }, - }, - }, -} -``` - ---- - -## Variantes - -Muitos modelos suportam várias variantes com diferentes configurações. O opencode vem com variantes padrão integradas para provedores populares. - -### Variantes integradas - -O opencode vem com variantes padrão para muitos provedores: - -**Anthropic**: - -- `high` - Orçamento de pensamento alto (padrão) -- `max` - Orçamento de pensamento máximo - -**OpenAI**: - -Varia por modelo, mas aproximadamente: - -- `none` - Sem raciocínio -- `minimal` - Esforço de raciocínio mínimo -- `low` - Baixo esforço de raciocínio -- `medium` - Esforço de raciocínio médio -- `high` - Alto esforço de raciocínio -- `xhigh` - Esforço de raciocínio extra alto - -**Google**: - -- `low` - Orçamento de esforço/token mais baixo -- `high` - Orçamento de esforço/token mais alto - -:::tip -Esta lista não é abrangente. Muitos outros provedores também têm padrões integrados. -::: - -### Variantes personalizadas - -Você pode substituir variantes existentes ou adicionar as suas: - -```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, - }, - }, - }, - }, - }, - }, -} -``` - -### Ciclo de variantes - -Use a tecla de atalho `variant_cycle` para alternar rapidamente entre variantes. [Saiba mais](/docs/keybinds). - ---- - -## Carregando modelos - -Quando o opencode é iniciado, ele verifica modelos na seguinte ordem de prioridade: - -1. A flag de linha de comando `--model` ou `-m`. O formato é o mesmo que no arquivo de configuração: `provider_id/model_id`. - -2. A lista de modelos na configuração do opencode. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-20250514" - } - ``` - - O formato aqui é `provider/model`. - -3. O último modelo usado. - -4. O primeiro modelo usando uma prioridade interna. diff --git a/packages/web/src/content/docs/pt-br/network.mdx b/packages/web/src/content/docs/pt-br/network.mdx deleted file mode 100644 index 1e13f258c6..0000000000 --- a/packages/web/src/content/docs/pt-br/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Rede -description: Configure proxies e certificados personalizados. ---- - -O opencode suporta variáveis de ambiente de proxy padrão e certificados personalizados para ambientes de rede corporativa. - ---- - -## Proxy - -O opencode respeita variáveis de ambiente de proxy padrão. - -```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 -O TUI se comunica com um servidor HTTP local. Você deve ignorar o proxy para essa conexão para evitar loops de roteamento. -::: - -Você pode configurar a porta e o nome do host do servidor usando [flags da CLI](/docs/cli#run). - ---- - -### Autenticação - -Se o seu proxy requer autenticação básica, inclua as credenciais na URL. - -```bash -export HTTPS_PROXY=http://username:password@proxy.example.com:8080 -``` - -:::caution -Evite codificar senhas. Use variáveis de ambiente ou armazenamento seguro de credenciais. -::: - -Para proxies que requerem autenticação avançada como NTLM ou Kerberos, considere usar um LLM Gateway que suporte seu método de autenticação. - ---- - -## Certificados personalizados - -Se sua empresa usa CAs personalizadas para conexões HTTPS, configure o opencode para confiá-las. - -```bash -export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem -``` - -Isso funciona tanto para conexões de proxy quanto para acesso direto à API. diff --git a/packages/web/src/content/docs/pt-br/permissions.mdx b/packages/web/src/content/docs/pt-br/permissions.mdx deleted file mode 100644 index a0d5432c55..0000000000 --- a/packages/web/src/content/docs/pt-br/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -title: Permissões -description: Controle quais ações requerem aprovação para serem executadas. ---- - -O opencode usa a configuração `permission` para decidir se uma determinada ação deve ser executada automaticamente, solicitar sua aprovação ou ser bloqueada. - -A partir da versão `v1.1.1`, a configuração booleana legada `tools` foi descontinuada e mesclada na `permission`. A antiga configuração `tools` ainda é suportada para compatibilidade retroativa. - ---- - -## Ações - -Cada regra de permissão se resolve em uma das seguintes opções: - -- `"allow"` — executar sem aprovação -- `"ask"` — solicitar aprovação -- `"deny"` — bloquear a ação - ---- - -## Configuração - -Você pode definir permissões globalmente (com `*`), e substituir ferramentas específicas. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "*": "ask", - "bash": "allow", - "edit": "deny" - } -} -``` - -Você também pode definir todas as permissões de uma vez: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": "allow" -} -``` - ---- - -## Regras Granulares (Sintaxe de Objeto) - -Para a maioria das permissões, você pode usar um objeto para aplicar diferentes ações com base na entrada da ferramenta. - -```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" - } - } -} -``` - -As regras são avaliadas por correspondência de padrão, com a **última regra correspondente vencendo**. Um padrão comum é colocar a regra de captura `"*"` primeiro, e regras mais específicas depois. - -### Coringas - -Os padrões de permissão usam correspondência simples de coringas: - -- `*` corresponde a zero ou mais de qualquer caractere -- `?` corresponde exatamente a um caractere -- Todos os outros caracteres correspondem literalmente - -### Expansão do Diretório Home - -Você pode usar `~` ou `$HOME` no início de um padrão para referenciar seu diretório home. Isso é particularmente útil para regras de [`external_directory`](#external-directories). - -- `~/projects/*` -> `/Users/username/projects/*` -- `$HOME/projects/*` -> `/Users/username/projects/*` -- `~` -> `/Users/username` - -### Diretórios Externos - -Use `external_directory` para permitir chamadas de ferramentas que tocam em caminhos fora do diretório de trabalho onde o opencode foi iniciado. Isso se aplica a qualquer ferramenta que aceite um caminho como entrada (por exemplo, `read`, `edit`, `glob`, `grep` e muitos comandos `bash`). - -A expansão do home (como `~/...`) afeta apenas como um padrão é escrito. Não torna um caminho externo parte do espaço de trabalho atual, então caminhos fora do diretório de trabalho ainda devem ser permitidos via `external_directory`. - -Por exemplo, isso permite acesso a tudo sob `~/projects/personal/`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - } - } -} -``` - -Qualquer diretório permitido aqui herda os mesmos padrões do espaço de trabalho atual. Como [`read` padrão é `allow`](#defaults), leituras também são permitidas para entradas sob `external_directory`, a menos que sejam substituídas. Adicione regras explícitas quando uma ferramenta deve ser restrita nesses caminhos, como bloquear edições enquanto mantém leituras: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - }, - "edit": { - "~/projects/personal/**": "deny" - } - } -} -``` - -Mantenha a lista focada em caminhos confiáveis e adicione regras adicionais de permissão ou negação conforme necessário para outras ferramentas (por exemplo, `bash`). - ---- - -## Permissões Disponíveis - -As permissões do opencode são indexadas pelo nome da ferramenta, além de alguns guardas de segurança: - -- `read` — leitura de um arquivo (corresponde ao caminho do arquivo) -- `edit` — todas as modificações de arquivo (cobre `edit`, `write`, `patch`) -- `glob` — globbing de arquivos (corresponde ao padrão glob) -- `grep` — busca de conteúdo (corresponde ao padrão regex) -- `bash` — execução de comandos de shell (corresponde a comandos analisados como `git status --porcelain`) -- `task` — lançamento de subagentes (corresponde ao tipo de subagente) -- `skill` — carregamento de uma habilidade (corresponde ao nome da habilidade) -- `lsp` — execução de consultas LSP (atualmente não granular) -- `webfetch` — busca de uma URL (corresponde à URL) -- `websearch` — busca na web (corresponde à consulta) -- `external_directory` — acionado quando uma ferramenta toca em caminhos fora do diretório de trabalho do projeto -- `doom_loop` — acionado quando a mesma chamada de ferramenta se repete 3 vezes com entrada idêntica - ---- - -## Padrões - -Se você não especificar nada, o opencode começa com padrões permissivos: - -- A maioria das permissões padrão é `"allow"`. -- `doom_loop` e `external_directory` padrão é `"ask"`. -- `read` é `"allow"`, mas arquivos `.env` são negados por padrão: - -```json title="opencode.json" -{ - "permission": { - "read": { - "*": "allow", - "*.env": "deny", - "*.env.*": "deny", - "*.env.example": "allow" - } - } -} -``` - ---- - -## O que “Ask” Faz - -Quando o opencode solicita aprovação, a interface oferece três resultados: - -- `once` — aprovar apenas esta solicitação -- `always` — aprovar futuras solicitações que correspondam aos padrões sugeridos (para o restante da sessão atual do opencode) -- `reject` — negar a solicitação - -O conjunto de padrões que `always` aprovaria é fornecido pela ferramenta (por exemplo, aprovações de bash normalmente incluem um prefixo de comando seguro como `git status*`). - ---- - -## Agentes - -Você pode substituir permissões por agente. As permissões do agente são mescladas com a configuração global, e as regras do agente têm precedência. [Saiba mais](/docs/agents#permissions) sobre permissões de agentes. - -:::note -Consulte a seção [Regras Granulares (Sintaxe de Objeto)](#granular-rules-object-syntax) acima para exemplos mais detalhados de correspondência de padrões. -::: - -```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" - } - } - } - } -} -``` - -Você também pode configurar permissões de agentes em 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 -Use correspondência de padrões para comandos com argumentos. `"grep *"` permite `grep pattern file.txt`, enquanto `"grep"` sozinho o bloquearia. Comandos como `git status` funcionam para o comportamento padrão, mas requerem permissão explícita (como `"git status *"`) quando argumentos são passados. -::: diff --git a/packages/web/src/content/docs/pt-br/plugins.mdx b/packages/web/src/content/docs/pt-br/plugins.mdx deleted file mode 100644 index 54c5b1ffac..0000000000 --- a/packages/web/src/content/docs/pt-br/plugins.mdx +++ /dev/null @@ -1,388 +0,0 @@ ---- -title: Plugins -description: Escreva seus próprios plugins para estender o opencode. ---- - -Plugins permitem que você estenda o opencode conectando-se a vários eventos e personalizando o comportamento. Você pode criar plugins para adicionar novos recursos, integrar-se a serviços externos ou modificar o comportamento padrão do opencode. - -Para exemplos, confira os [plugins](/docs/ecosystem#plugins) criados pela comunidade. - ---- - -## Usando um plugin - -Existem duas maneiras de carregar plugins. - ---- - -### De arquivos locais - -Coloque arquivos JavaScript ou TypeScript no diretório de plugins. - -- `.opencode/plugins/` - Plugins em nível de projeto -- `~/.config/opencode/plugins/` - Plugins globais - -Os arquivos nesses diretórios são carregados automaticamente na inicialização. - ---- - -### Do npm - -Especifique pacotes npm no seu arquivo de configuração. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"] -} -``` - -Pacotes npm regulares e escopados são suportados. - -Navegue pelos plugins disponíveis no [ecossistema](/docs/ecosystem#plugins). - ---- - -### Como os plugins são instalados - -**Plugins npm** são instalados automaticamente usando Bun na inicialização. Pacotes e suas dependências são armazenados em cache em `~/.cache/opencode/node_modules/`. - -**Plugins locais** são carregados diretamente do diretório de plugins. Para usar pacotes externos, você deve criar um `package.json` dentro do seu diretório de configuração (veja [Dependências](#dependencies)), ou publicar o plugin no npm e [adicioná-lo à sua configuração](/docs/config#plugins). - ---- - -### Ordem de carregamento - -Os plugins são carregados de todas as fontes e todos os hooks são executados em sequência. A ordem de carregamento é: - -1. Configuração global (`~/.config/opencode/opencode.json`) -2. Configuração do projeto (`opencode.json`) -3. Diretório de plugins global (`~/.config/opencode/plugins/`) -4. Diretório de plugins do projeto (`.opencode/plugins/`) - -Pacotes npm duplicados com o mesmo nome e versão são carregados uma vez. No entanto, um plugin local e um plugin npm com nomes semelhantes são carregados separadamente. - ---- - -## Criando um plugin - -Um plugin é um **módulo JavaScript/TypeScript** que exporta uma ou mais funções de plugin. Cada função recebe um objeto de contexto e retorna um objeto de hooks. - ---- - -### Dependências - -Plugins locais e ferramentas personalizadas podem usar pacotes npm externos. Adicione um `package.json` ao seu diretório de configuração com as dependências necessárias. - -```json title=".opencode/package.json" -{ - "dependencies": { - "shescape": "^2.1.0" - } -} -``` - -O opencode executa `bun install` na inicialização para instalar esses pacotes. Seus plugins e ferramentas podem então importá-los. - -```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) - } - }, - } -} -``` - ---- - -### Estrutura básica - -```js title=".opencode/plugins/example.js" -export const MyPlugin = async ({ project, client, $, directory, worktree }) => { - console.log("Plugin initialized!") - - return { - // Hook implementations go here - } -} -``` - -A função do plugin recebe: - -- `project`: As informações do projeto atual. -- `directory`: O diretório de trabalho atual. -- `worktree`: O caminho do worktree do git. -- `client`: Um cliente SDK do opencode para interagir com a AI. -- `$`: A [API shell](https://bun.com/docs/runtime/shell) do Bun para executar comandos. - ---- - -### Suporte a TypeScript - -Para plugins TypeScript, você pode importar tipos do pacote de plugin: - -```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 - } -} -``` - ---- - -### Eventos - -Plugins podem se inscrever em eventos como visto abaixo na seção Exemplos. Aqui está uma lista dos diferentes eventos disponíveis. - -#### Eventos de Comando - -- `command.executed` - -#### Eventos de Arquivo - -- `file.edited` -- `file.watcher.updated` - -#### Eventos de Instalação - -- `installation.updated` - -#### Eventos LSP - -- `lsp.client.diagnostics` -- `lsp.updated` - -#### Eventos de Mensagem - -- `message.part.removed` -- `message.part.updated` -- `message.removed` -- `message.updated` - -#### Eventos de Permissão - -- `permission.asked` -- `permission.replied` - -#### Eventos de Servidor - -- `server.connected` - -#### Eventos de Sessão - -- `session.created` -- `session.compacted` -- `session.deleted` -- `session.diff` -- `session.error` -- `session.idle` -- `session.status` -- `session.updated` - -#### Eventos de Todo - -- `todo.updated` - -#### Eventos de Shell - -- `shell.env` - -#### Eventos de Ferramenta - -- `tool.execute.after` -- `tool.execute.before` - -#### Eventos TUI - -- `tui.prompt.append` -- `tui.command.execute` -- `tui.toast.show` - ---- - -## Exemplos - -Aqui estão alguns exemplos de plugins que você pode usar para estender o opencode. - ---- - -### Enviando notificações - -Envie notificações quando certos eventos ocorrerem: - -```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"'` - } - }, - } -} -``` - -Estamos usando `osascript` para executar AppleScript no macOS. Aqui estamos usando para enviar notificações. - -:::note -Se você estiver usando o aplicativo desktop opencode, ele pode enviar notificações do sistema automaticamente quando uma resposta estiver pronta ou quando ocorrer um erro na sessão. -::: - ---- - -### Proteção .env - -Impeça o opencode de ler arquivos `.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") - } - }, - } -} -``` - ---- - -### Injetando variáveis de ambiente - -Injete variáveis de ambiente em todas as execuções de shell (ferramentas de AI e terminais de usuário): - -```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 - }, - } -} -``` - ---- - -### Ferramentas personalizadas - -Plugins também podem adicionar ferramentas personalizadas ao 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})` - }, - }), - }, - } -} -``` - -O helper `tool` cria uma ferramenta personalizada que o opencode pode chamar. Ele aceita uma função de esquema Zod e retorna uma definição de ferramenta com: - -- `description`: O que a ferramenta faz -- `args`: Esquema Zod para os argumentos da ferramenta -- `execute`: Função que é executada quando a ferramenta é chamada - -Suas ferramentas personalizadas estarão disponíveis para o opencode junto com as ferramentas integradas. - -:::note -Se uma ferramenta de plugin usar o mesmo nome que uma ferramenta integrada, a ferramenta de plugin tem precedência. -::: - ---- - -### Registro - -Use `client.app.log()` em vez de `console.log` para registro estruturado: - -```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" }, - }, - }) -} -``` - -Níveis: `debug`, `info`, `warn`, `error`. Veja a [documentação do SDK](https://opencode.ai/docs/sdk) para detalhes. - ---- - -### Hooks de compactação - -Personalize o contexto incluído quando uma sessão é compactada: - -```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 -`) - }, - } -} -``` - -O hook `experimental.session.compacting` é acionado antes que o LLM gere um resumo de continuação. Use-o para injetar contexto específico de domínio que o prompt de compactação padrão poderia perder. - -Você também pode substituir o prompt de compactação completamente definindo `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. -` - }, - } -} -``` - -Quando `output.prompt` é definido, ele substitui completamente o prompt de compactação padrão. O array `output.context` é ignorado neste caso. diff --git a/packages/web/src/content/docs/pt-br/providers.mdx b/packages/web/src/content/docs/pt-br/providers.mdx deleted file mode 100644 index 174bc1679b..0000000000 --- a/packages/web/src/content/docs/pt-br/providers.mdx +++ /dev/null @@ -1,1989 +0,0 @@ ---- -title: Provedores -description: Usando qualquer provedor LLM no opencode. ---- - -import config from "../../../../config.mjs" -export const console = config.console - -opencode usa o [AI SDK](https://ai-sdk.dev/) e [Models.dev](https://models.dev) para suportar **75+ provedores LLM** e suporta a execução de modelos locais. - -Para adicionar um provedor, você precisa: - -1. Adicionar as chaves da API para o provedor usando o comando `/connect`. -2. Configurar o provedor na sua configuração do opencode. - ---- - -### Credenciais - -Quando você adiciona as chaves da API de um provedor com o comando `/connect`, elas são armazenadas em `~/.local/share/opencode/auth.json`. - ---- - -### Configuração - -Você pode personalizar os provedores através da seção `provider` na sua configuração do opencode. - ---- - -#### URL Base - -Você pode personalizar a URL base para qualquer provedor definindo a opção `baseURL`. Isso é útil ao usar serviços de proxy ou endpoints personalizados. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen é uma lista de modelos fornecidos pela equipe do opencode que foram testados e verificados para funcionar bem com o opencode. [Saiba mais](/docs/zen). - -:::tip -Se você é novo, recomendamos começar com o OpenCode Zen. -::: - -1. Execute o comando `/connect` no TUI, selecione `OpenCode Zen` e acesse [opencode.ai/zen](https://opencode.ai/zen). - - ```txt - /connect - ``` - -2. Faça login, adicione seus dados de cobrança e copie sua chave da API. - -3. Cole sua chave da API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute `/models` no TUI para ver a lista de modelos que recomendamos. - - ```txt - /models - ``` - -Funciona como qualquer outro provedor no opencode e é completamente opcional. - ---- - -## OpenCode Go - -OpenCode Go é um plano de assinatura de baixo custo que fornece acesso confiável a modelos de codificação abertos populares fornecidos pela equipe do opencode que foram -testados e verificados para funcionar bem com o opencode. - -1. Execute o comando `/connect` no TUI, selecione `OpenCode Go` e acesse [opencode.ai/zen](https://opencode.ai/zen). - - ```txt - /connect - ``` - -2. Faça login, adicione seus dados de cobrança e copie sua chave da API. - -3. Cole sua chave da API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute `/models` no TUI para ver a lista de modelos que recomendamos. - - ```txt - /models - ``` - -Funciona como qualquer outro provedor no opencode e é completamente opcional. - ---- - -## Diretório - -Vamos olhar alguns dos provedores em detalhes. Se você gostaria de adicionar um provedor à lista, sinta-se à vontade para abrir um PR. - -:::note -Não vê um provedor aqui? Envie um PR. -::: - ---- - -### 302.AI - -1. Acesse o [console 302.AI](https://302.ai/), crie uma conta e gere uma chave da API. - -2. Execute o comando `/connect` e procure por **302.AI**. - - ```txt - /connect - ``` - -3. Insira sua chave da API 302.AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo. - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -Para usar o Amazon Bedrock com o opencode: - -1. Acesse o **Catálogo de Modelos** no console do Amazon Bedrock e solicite acesso aos modelos que você deseja. - - :::tip - Você precisa ter acesso ao modelo que deseja no Amazon Bedrock. - ::: - -2. **Configure a autenticação** usando um dos seguintes métodos: - - *** - - #### Variáveis de Ambiente (Início Rápido) - - Defina uma dessas variáveis de ambiente ao executar o opencode: - - ```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - Ou adicione-as ao seu perfil bash: - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - *** - - #### Arquivo de Configuração (Recomendado) - - Para configuração específica do projeto ou persistente, use `opencode.json`: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **Opções disponíveis:** - - `region` - Região da AWS (ex: `us-east-1`, `eu-west-1`) - - `profile` - Perfil nomeado da AWS em `~/.aws/credentials` - - `endpoint` - URL de endpoint personalizada para endpoints VPC (alias para a opção genérica `baseURL`) - - :::tip - As opções do arquivo de configuração têm precedência sobre as variáveis de ambiente. - ::: - - *** - - #### Avançado: Endpoints VPC - - Se você estiver usando endpoints VPC para Bedrock: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } - } - ``` - - :::note - A opção `endpoint` é um alias para a opção genérica `baseURL`, usando terminologia específica da AWS. Se tanto `endpoint` quanto `baseURL` forem especificados, `endpoint` tem precedência. - ::: - - *** - - #### Métodos de Autenticação - - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: Crie um usuário IAM e gere chaves de acesso no Console da AWS - - **`AWS_PROFILE`**: Use perfis nomeados de `~/.aws/credentials`. Primeiro configure com `aws configure --profile my-profile` ou `aws sso login` - - **`AWS_BEARER_TOKEN_BEDROCK`**: Gere chaves de API de longo prazo no console do Amazon Bedrock - - **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**: Para EKS IRSA (IAM Roles for Service Accounts) ou outros ambientes Kubernetes com federação OIDC. Essas variáveis de ambiente são injetadas automaticamente pelo Kubernetes ao usar anotações de conta de serviço. - - *** - - #### Precedência de Autenticação - - O Amazon Bedrock usa a seguinte prioridade de autenticação: - 1. **Bearer Token** - variável de ambiente `AWS_BEARER_TOKEN_BEDROCK` ou token do comando `/connect` - 2. **Cadeia de Credenciais da AWS** - Perfil, chaves de acesso, credenciais compartilhadas, funções IAM, Tokens de Identidade da Web (EKS IRSA), metadados da instância - - :::note - Quando um token bearer é definido (via `/connect` ou `AWS_BEARER_TOKEN_BEDROCK`), ele tem precedência sobre todos os métodos de credenciais da AWS, incluindo perfis configurados. - ::: - -3. Execute o comando `/models` para selecionar o modelo que você deseja. - - ```txt - /models - ``` - -:::note -Para perfis de inferência personalizados, use o nome do modelo e do provedor na chave e defina a propriedade `id` para o arn. Isso garante o cache correto. -::: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - ---- - -### Anthropic - -1. Depois de se inscrever, execute o comando `/connect` e selecione Anthropic. - - ```txt - /connect - ``` - -2. Aqui você pode selecionar a opção **Claude Pro/Max** e isso abrirá seu navegador e pedirá para você se autenticar. - - ```txt - ┌ Selecione o método de autenticação - │ - │ Claude Pro/Max - │ Criar uma chave de API - │ Inserir manualmente a chave de API - └ - ``` - -3. Agora todos os modelos da Anthropic devem estar disponíveis quando você usar o comando `/models`. - - ```txt - /models - ``` - -:::info -Usar sua assinatura Claude Pro/Max no opencode não é oficialmente suportado pela [Anthropic](https://anthropic.com). -::: - -##### Usando chaves da API - -Você também pode selecionar **Criar uma chave de API** se não tiver uma assinatura Pro/Max. Isso também abrirá seu navegador e pedirá que você faça login na Anthropic e lhe dará um código que você pode colar no seu terminal. - -Ou, se você já tiver uma chave da API, pode selecionar **Inserir manualmente a chave de API** e colá-la no seu terminal. - ---- - -### Atomic Chat - -Você pode configurar o opencode para usar modelos locais através do [Atomic Chat](https://atomic.chat), um aplicativo de desktop que executa LLMs locais por trás de um servidor API compatível com OpenAI (endpoint padrão `http://127.0.0.1:1337/v1`). - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -Neste exemplo: - -- `atomic-chat` é o ID personalizado do provedor. Pode ser qualquer string que você quiser. -- `npm` especifica o pacote a ser usado para este provedor. Aqui, `@ai-sdk/openai-compatible` é usado para qualquer API compatível com OpenAI. -- `name` é o nome de exibição do provedor na interface. -- `options.baseURL` é o endpoint do servidor local. Altere host e porta para corresponder à sua configuração do Atomic Chat. -- `models` é um mapa de IDs de modelos para seus nomes de exibição. Cada ID deve corresponder ao `id` retornado por `GET /v1/models` — execute `curl http://127.0.0.1:1337/v1/models` para listar os IDs atualmente carregados no Atomic Chat. - -:::tip -Se as chamadas de ferramentas não estiverem funcionando bem, escolha um modelo carregado com bom suporte a tool calling (por exemplo, uma variante Qwen-Coder ou DeepSeek-Coder). -::: - ---- - -### Azure OpenAI - -:::note -Se você encontrar erros "Desculpe, mas não posso ajudar com esse pedido", tente mudar o filtro de conteúdo de **DefaultV2** para **Default** em seu recurso Azure. -::: - -1. Acesse o [portal Azure](https://portal.azure.com/) e crie um recurso **Azure OpenAI**. Você precisará: - - **Nome do recurso**: Isso se torna parte do seu endpoint da API (`https://RESOURCE_NAME.openai.azure.com/`) - - **Chave da API**: Seja `KEY 1` ou `KEY 2` do seu recurso - -2. Vá para [Azure AI Foundry](https://ai.azure.com/) e implante um modelo. - - :::note - O nome da implantação deve corresponder ao nome do modelo para que o opencode funcione corretamente. - ::: - -3. Execute o comando `/connect` e procure por **Azure**. - - ```txt - /connect - ``` - -4. Insira sua chave da API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Defina o nome do seu recurso como uma variável de ambiente: - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - - Ou adicione ao seu perfil bash: - - ```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX - ``` - -6. Execute o comando `/models` para selecionar seu modelo implantado. - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. Acesse o [portal Azure](https://portal.azure.com/) e crie um recurso **Azure OpenAI**. Você precisará: - - **Nome do recurso**: Isso se torna parte do seu endpoint da API (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) - - **Chave da API**: Seja `KEY 1` ou `KEY 2` do seu recurso - -2. Vá para [Azure AI Foundry](https://ai.azure.com/) e implante um modelo. - - :::note - O nome da implantação deve corresponder ao nome do modelo para que o opencode funcione corretamente. - ::: - -3. Execute o comando `/connect` e procure por **Azure Cognitive Services**. - - ```txt - /connect - ``` - -4. Insira sua chave da API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Defina o nome do seu recurso como uma variável de ambiente: - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - - Ou adicione ao seu perfil bash: - - ```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX - ``` - -6. Execute o comando `/models` para selecionar seu modelo implantado. - - ```txt - /models - ``` - ---- - -### Baseten - -1. Acesse o [Baseten](https://app.baseten.co/), crie uma conta e gere uma chave da API. - -2. Execute o comando `/connect` e procure por **Baseten**. - - ```txt - /connect - ``` - -3. Insira sua chave da API Baseten. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo. - - ```txt - /models - ``` - ---- - -### Cerebras - -1. Acesse o [console Cerebras](https://inference.cerebras.ai/), crie uma conta e gere uma chave da API. - -2. Execute o comando `/connect` e procure por **Cerebras**. - - ```txt - /connect - ``` - -3. Insira sua chave da API Cerebras. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo como _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -O Cloudflare AI Gateway permite que você acesse modelos do OpenAI, Anthropic, Workers AI e mais através de um endpoint unificado. Com [Faturamento Unificado](https://developers.cloudflare.com/ai-gateway/features/unified-billing/), você não precisa de chaves de API separadas para cada provedor. - -1. Acesse o [painel do Cloudflare](https://dash.cloudflare.com/), navegue até **AI** > **AI Gateway** e crie um novo gateway. - -2. Defina seu ID de Conta e ID de Gateway como variáveis de ambiente. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. Execute o comando `/connect` e procure por **Cloudflare AI Gateway**. - - ```txt - /connect - ``` - -4. Insira seu token da API do Cloudflare. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - - Ou defina como uma variável de ambiente. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token - ``` - -5. Execute o comando `/models` para selecionar um modelo. - - ```txt - /models - ``` - - Você também pode adicionar modelos através da sua configuração do opencode. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } - } - ``` - ---- - -### Cortecs - -1. Acesse o [console Cortecs](https://cortecs.ai/), crie uma conta e gere uma chave da API. - -2. Execute o comando `/connect` e procure por **Cortecs**. - - ```txt - /connect - ``` - -3. Insira sua chave da API Cortecs. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo como _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. Acesse o [console DeepSeek](https://platform.deepseek.com/), crie uma conta e clique em **Criar nova chave da API**. - -2. Execute o comando `/connect` e procure por **DeepSeek**. - - ```txt - /connect - ``` - -3. Insira sua chave da API DeepSeek. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo DeepSeek como _DeepSeek V4 Pro_. - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. Acesse o [painel Deep Infra](https://deepinfra.com/dash), crie uma conta e gere uma chave da API. - -2. Execute o comando `/connect` e procure por **Deep Infra**. - - ```txt - /connect - ``` - -3. Insira sua chave da API Deep Infra. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo. - - ```txt - /models - ``` - ---- - -### FrogBot - -1. Acesse o [painel FrogBot](https://app.frogbot.ai/signup), crie uma conta e gere uma chave da API. - -2. Execute o comando `/connect` e procure por **FrogBot**. - - ```txt - /connect - ``` - -3. Insira sua chave da API FrogBot. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo. - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. Acesse o [console Fireworks AI](https://app.fireworks.ai/), crie uma conta e clique em **Criar Chave da API**. - -2. Execute o comando `/connect` e procure por **Fireworks AI**. - - ```txt - /connect - ``` - -3. Insira sua chave da API Fireworks AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo como _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo fornece um chat agente com suporte a ferramentas nativas através do proxy da Anthropic do GitLab. - -1. Execute o comando `/connect` e selecione GitLab. - - ```txt - /connect - ``` - -2. Escolha seu método de autenticação: - - ```txt - ┌ Selecione o método de autenticação - │ - │ OAuth (Recomendado) - │ Token de Acesso Pessoal - └ - ``` - - #### Usando OAuth (Recomendado) - - Selecione **OAuth** e seu navegador abrirá para autorização. - - #### Usando Token de Acesso Pessoal - 1. Vá para [Configurações do Usuário do GitLab > Tokens de Acesso](https://gitlab.com/-/user_settings/personal_access_tokens) - 2. Clique em **Adicionar novo token** - 3. Nome: `OpenCode`, Escopos: `api` - 4. Copie o token (começa com `glpat-`) - 5. Insira-o no terminal - -3. Execute o comando `/models` para ver os modelos disponíveis. - - ```txt - /models - ``` - - Três modelos baseados em Claude estão disponíveis: - - **duo-chat-haiku-4-5** (Padrão) - Respostas rápidas para tarefas rápidas - - **duo-chat-sonnet-4-5** - Desempenho equilibrado para a maioria dos fluxos de trabalho - - **duo-chat-opus-4-5** - Mais capaz para análises complexas - -:::note -Você também pode especificar a variável de ambiente 'GITLAB_TOKEN' se não quiser -armazenar o token no armazenamento de autenticação do opencode. -::: - -##### GitLab Auto-Hospedado - -:::note[nota de conformidade] -opencode usa um pequeno modelo para algumas tarefas de AI, como gerar o título da sessão. -Ele está configurado para usar gpt-5-nano por padrão, hospedado pela Zen. Para bloquear o opencode -para usar apenas sua própria instância hospedada do GitLab, adicione o seguinte ao seu -arquivo `opencode.json`. Também é recomendado desativar o compartilhamento de sessões. - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -Para instâncias do GitLab auto-hospedadas: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -Se sua instância executar um AI Gateway personalizado: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -Ou adicione ao seu perfil bash: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -Seu administrador do GitLab deve habilitar o seguinte: - -1. [Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) para o usuário, grupo ou instância -2. Flags de recurso (via console Rails): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### OAuth para instâncias auto-hospedadas - -Para fazer o OAuth funcionar para sua instância auto-hospedada, você precisa criar -um novo aplicativo (Configurações → Aplicativos) com a -URL de callback `http://127.0.0.1:8080/callback` e os seguintes escopos: - -- api (Acessar a API em seu nome) -- read_user (Ler suas informações pessoais) -- read_repository (Permite acesso somente leitura ao repositório) - -Em seguida, exponha o ID do aplicativo como variável de ambiente: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -Mais documentação na página [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth). - -##### Configuração - -Personalize através do `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### Ferramentas da API do GitLab (Opcional, mas altamente recomendado) - -Para acessar ferramentas do GitLab (merge requests, issues, pipelines, CI/CD, etc.): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -Este plugin fornece capacidades abrangentes de gerenciamento de repositório do GitLab, incluindo revisões de MR, rastreamento de issues, monitoramento de pipelines e mais. - ---- - -### GitHub Copilot - -Para usar sua assinatura do GitHub Copilot com o opencode: - -:::note -Alguns modelos podem precisar de uma [assinatura Pro+](https://github.com/features/copilot/plans) para usar. -::: - -1. Execute o comando `/connect` e procure por GitHub Copilot. - - ```txt - /connect - ``` - -2. Navegue até [github.com/login/device](https://github.com/login/device) e insira o código. - - ```txt - ┌ Login com GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Digite o código: 8F43-6FCF - │ - │ Aguardando autorização... - └ - ``` - -3. Agora execute o comando `/models` para selecionar o modelo que você deseja. - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -Para usar o Google Vertex AI com o opencode: - -1. Acesse o **Model Garden** no Console do Google Cloud e verifique os - modelos disponíveis na sua região. - - :::note - Você precisa ter um projeto do Google Cloud com a API Vertex AI habilitada. - ::: - -2. Defina as variáveis de ambiente necessárias: - - `GOOGLE_CLOUD_PROJECT`: Seu ID do projeto do Google Cloud - - `VERTEX_LOCATION` (opcional): A região para o Vertex AI (padrão é `global`) - - Autenticação (escolha uma): - - `GOOGLE_APPLICATION_CREDENTIALS`: Caminho para seu arquivo de chave JSON da conta de serviço - - Autentique usando o CLI gcloud: `gcloud auth application-default login` - - Defina-as ao executar o opencode. - - ```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode - ``` - - Ou adicione-as ao seu perfil bash. - - ```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global - ``` - -:::tip -A região `global` melhora a disponibilidade e reduz erros sem custo adicional. Use endpoints regionais (ex: `us-central1`) para requisitos de residência de dados. [Saiba mais](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. Execute o comando `/models` para selecionar o modelo que você deseja. - - ```txt - /models - ``` - ---- - -### Groq - -1. Acesse o [console Groq](https://console.groq.com/), clique em **Criar Chave da API** e copie a chave. - -2. Execute o comando `/connect` e procure por Groq. - - ```txt - /connect - ``` - -3. Insira a chave da API para o provedor. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar o que você deseja. - - ```txt - /models - ``` - ---- - -### Hugging Face - -[Provedores de Inferência Hugging Face](https://huggingface.co/docs/inference-providers) fornecem acesso a modelos abertos suportados por mais de 17 provedores. - -1. Acesse [configurações do Hugging Face](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained) para criar um token com permissão para fazer chamadas para Provedores de Inferência. - -2. Execute o comando `/connect` e procure por **Hugging Face**. - - ```txt - /connect - ``` - -3. Insira seu token do Hugging Face. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo como _Kimi-K2-Instruct_ ou _GLM-4.6_. - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) é uma plataforma de observabilidade LLM que fornece registro, monitoramento e análises para suas aplicações de AI. O Helicone AI Gateway roteia suas solicitações para o provedor apropriado automaticamente com base no modelo. - -1. Acesse [Helicone](https://helicone.ai), crie uma conta e gere uma chave da API a partir do seu painel. - -2. Execute o comando `/connect` e procure por **Helicone**. - - ```txt - /connect - ``` - -3. Insira sua chave da API Helicone. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo. - - ```txt - /models - ``` - -Para mais provedores e recursos avançados como cache e limitação de taxa, consulte a [documentação do Helicone](https://docs.helicone.ai). - -#### Configurações Opcionais - -Caso você veja um recurso ou modelo do Helicone que não está configurado automaticamente através do opencode, você sempre pode configurá-lo você mesmo. - -Aqui está o [Diretório de Modelos do Helicone](https://helicone.ai/models), você precisará disso para pegar os IDs dos modelos que deseja adicionar. - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### Cabeçalhos Personalizados - -Helicone suporta cabeçalhos personalizados para recursos como cache, rastreamento de usuários e gerenciamento de sessões. Adicione-os à sua configuração do provedor usando `options.headers`: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### Rastreamento de Sessões - -O recurso [Sessões](https://docs.helicone.ai/features/sessions) do Helicone permite que você agrupe solicitações LLM relacionadas. Use o plugin [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) para registrar automaticamente cada conversa do opencode como uma sessão no Helicone. - -```bash -npm install -g opencode-helicone-session -``` - -Adicione-o à sua configuração. - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -O plugin injeta os cabeçalhos `Helicone-Session-Id` e `Helicone-Session-Name` em suas solicitações. Na página de Sessões do Helicone, você verá cada conversa do opencode listada como uma sessão separada. - -##### Cabeçalhos Comuns do Helicone - -| Cabeçalho | Descrição | -| -------------------------- | --------------------------------------------------------------------------- | -| `Helicone-Cache-Enabled` | Habilitar cache de resposta (`true`/`false`) | -| `Helicone-User-Id` | Rastrear métricas por usuário | -| `Helicone-Property-[Name]` | Adicionar propriedades personalizadas (ex: `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | Associar solicitações com versões de prompt | - -Consulte o [Diretório de Cabeçalhos do Helicone](https://docs.helicone.ai/helicone-headers/header-directory) para todos os cabeçalhos disponíveis. - ---- - -### llama.cpp - -Você pode configurar o opencode para usar modelos locais através da utilidade llama-server do [llama.cpp](https://github.com/ggml-org/llama.cpp) - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -Neste exemplo: - -- `llama.cpp` é o ID do provedor personalizado. Isso pode ser qualquer string que você quiser. -- `npm` especifica o pacote a ser usado para este provedor. Aqui, `@ai-sdk/openai-compatible` é usado para qualquer API compatível com OpenAI. -- `name` é o nome exibido para o provedor na interface do usuário. -- `options.baseURL` é o endpoint para o servidor local. -- `models` é um mapa de IDs de modelos para suas configurações. O nome do modelo será exibido na lista de seleção de modelos. - ---- - -### IO.NET - -IO.NET oferece 17 modelos otimizados para vários casos de uso: - -1. Acesse o [console IO.NET](https://ai.io.net/), crie uma conta e gere uma chave da API. - -2. Execute o comando `/connect` e procure por **IO.NET**. - - ```txt - /connect - ``` - -3. Insira sua chave da API IO.NET. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo. - - ```txt - /models - ``` - ---- - -### LM Studio - -Você pode configurar o opencode para usar modelos locais através do LM Studio. - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -Neste exemplo: - -- `lmstudio` é o ID do provedor personalizado. Isso pode ser qualquer string que você quiser. -- `npm` especifica o pacote a ser usado para este provedor. Aqui, `@ai-sdk/openai-compatible` é usado para qualquer API compatível com OpenAI. -- `name` é o nome exibido para o provedor na interface do usuário. -- `options.baseURL` é o endpoint para o servidor local. -- `models` é um mapa de IDs de modelos para suas configurações. O nome do modelo será exibido na lista de seleção de modelos. - ---- - -### Moonshot AI - -Para usar Kimi K2 do Moonshot AI: - -1. Acesse o [console Moonshot AI](https://platform.moonshot.ai/console), crie uma conta e clique em **Criar chave da API**. - -2. Execute o comando `/connect` e procure por **Moonshot AI**. - - ```txt - /connect - ``` - -3. Insira sua chave da API Moonshot. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar _Kimi K2_. - - ```txt - /models - ``` - ---- - -### MiniMax - -1. Acesse o [MiniMax API Console](https://platform.minimax.io/login), crie uma conta e gere uma chave da API. - -2. Execute o comando `/connect` e procure por **MiniMax**. - - ```txt - /connect - ``` - -3. Insira sua chave da API MiniMax. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo como _M2.1_. - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. Acesse o [console Nebius Token Factory](https://tokenfactory.nebius.com/), crie uma conta e clique em **Adicionar Chave**. - -2. Execute o comando `/connect` e procure por **Nebius Token Factory**. - - ```txt - /connect - ``` - -3. Insira sua chave da API Nebius Token Factory. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo como _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Ollama - -Você pode configurar o opencode para usar modelos locais através do Ollama. - -:::tip -Ollama pode se configurar automaticamente para o opencode. Consulte a [documentação de integração do Ollama](https://docs.ollama.com/integrations/opencode) para detalhes. -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -Neste exemplo: - -- `ollama` é o ID do provedor personalizado. Isso pode ser qualquer string que você quiser. -- `npm` especifica o pacote a ser usado para este provedor. Aqui, `@ai-sdk/openai-compatible` é usado para qualquer API compatível com OpenAI. -- `name` é o nome exibido para o provedor na interface do usuário. -- `options.baseURL` é o endpoint para o servidor local. -- `models` é um mapa de IDs de modelos para suas configurações. O nome do modelo será exibido na lista de seleção de modelos. - -:::tip -Se chamadas de ferramentas não estiverem funcionando, tente aumentar `num_ctx` no Ollama. Comece em torno de 16k - 32k. -::: - ---- - -### Ollama Cloud - -Para usar o Ollama Cloud com o opencode: - -1. Acesse [https://ollama.com/](https://ollama.com/) e faça login ou crie uma conta. - -2. Navegue até **Configurações** > **Chaves** e clique em **Adicionar Chave da API** para gerar uma nova chave da API. - -3. Copie a chave da API para uso no opencode. - -4. Execute o comando `/connect` e procure por **Ollama Cloud**. - - ```txt - /connect - ``` - -5. Insira sua chave da API do Ollama Cloud. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **Importante**: Antes de usar modelos em nuvem no opencode, você deve puxar as informações do modelo localmente: - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. Execute o comando `/models` para selecionar seu modelo do Ollama Cloud. - - ```txt - /models - ``` - ---- - -### OpenAI - -Recomendamos se inscrever para [ChatGPT Plus ou Pro](https://chatgpt.com/pricing). - -1. Depois de se inscrever, execute o comando `/connect` e selecione OpenAI. - - ```txt - /connect - ``` - -2. Aqui você pode selecionar a opção **ChatGPT Plus/Pro** e isso abrirá seu navegador e pedirá para você se autenticar. - - ```txt - ┌ Selecione o método de autenticação - │ - │ ChatGPT Plus/Pro - │ Inserir manualmente a chave de API - │ - └ - ``` - -3. Agora todos os modelos da OpenAI devem estar disponíveis quando você usar o comando `/models`. - - ```txt - /models - ``` - -##### Usando chaves da API - -Se você já tiver uma chave da API, pode selecionar **Inserir chave da API manualmente** e colá-la no seu terminal. - ---- - -### OpenCode Zen - -OpenCode Zen é uma lista de modelos testados e verificados fornecidos pela equipe do opencode. [Saiba mais](/docs/zen). - -1. Faça login em **OpenCode Zen** e clique em **Criar Chave da API**. - -2. Execute o comando `/connect` e procure por **OpenCode Zen**. - - ```txt - /connect - ``` - -3. Insira sua chave da API do opencode. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo como _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. Acesse o [painel OpenRouter](https://openrouter.ai/settings/keys), clique em **Criar Chave da API** e copie a chave. - -2. Execute o comando `/connect` e procure por OpenRouter. - - ```txt - /connect - ``` - -3. Insira a chave da API para o provedor. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Muitos modelos do OpenRouter são pré-carregados por padrão, execute o comando `/models` para selecionar o que você deseja. - - ```txt - /models - ``` - - Você também pode adicionar modelos adicionais através da sua configuração do opencode. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. Você também pode personalizá-los através da sua configuração do opencode. Aqui está um exemplo de especificar um provedor - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI Core fornece acesso a mais de 40 modelos do OpenAI, Anthropic, Google, Amazon, Meta, Mistral e AI21 através de uma plataforma unificada. - -1. Vá para seu [SAP BTP Cockpit](https://account.hana.ondemand.com/), navegue até sua instância de serviço SAP AI Core e crie uma chave de serviço. - - :::tip - A chave de serviço é um objeto JSON contendo `clientid`, `clientsecret`, `url` e `serviceurls.AI_API_URL`. Você pode encontrar sua instância do AI Core em **Serviços** > **Instâncias e Assinaturas** no BTP Cockpit. - ::: - -2. Execute o comando `/connect` e procure por **SAP AI Core**. - - ```txt - /connect - ``` - -3. Insira seu JSON da chave de serviço. - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - Ou defina a variável de ambiente `AICORE_SERVICE_KEY`: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - Ou adicione ao seu perfil bash: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. Opcionalmente, defina o ID de implantação e o grupo de recursos: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - Essas configurações são opcionais e devem ser configuradas de acordo com sua configuração do SAP AI Core. - ::: - -5. Execute o comando `/models` para selecionar entre mais de 40 modelos disponíveis. - - ```txt - /models - ``` - ---- - -### STACKIT - -O STACKIT AI Model Serving fornece um ambiente de hospedagem soberano totalmente gerenciado para modelos de IA, com foco em LLMs como Llama, Mistral e Qwen, com máxima soberania de dados na infraestrutura europeia. - -1. Vá para o [Portal STACKIT](https://portal.stackit.cloud), navegue até **AI Model Serving** e crie um token de autenticação para o seu projeto. - - :::tip - Você precisa de uma conta de cliente STACKIT, conta de usuário e projeto antes de criar tokens de autenticação. - ::: - -2. Execute o comando `/connect` e procure por **STACKIT**. - - ```txt - /connect - ``` - -3. Insira seu token de autenticação do STACKIT AI Model Serving. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar entre os modelos disponíveis, como _Qwen3-VL 235B_ ou _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. Acesse o [painel OVHcloud](https://ovh.com/manager). Navegue até a seção `Public Cloud`, `AI & Machine Learning` > `AI Endpoints` e na aba `API Keys`, clique em **Criar uma nova chave da API**. - -2. Execute o comando `/connect` e procure por **OVHcloud AI Endpoints**. - - ```txt - /connect - ``` - -3. Insira sua chave da API OVHcloud AI Endpoints. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo como _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Scaleway - -Para usar [APIs Generativas Scaleway](https://www.scaleway.com/en/docs/generative-apis/) com o opencode: - -1. Acesse as [configurações de IAM do Scaleway Console](https://console.scaleway.com/iam/api-keys) para gerar uma nova chave da API. - -2. Execute o comando `/connect` e procure por **Scaleway**. - - ```txt - /connect - ``` - -3. Insira sua chave da API Scaleway. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo como _devstral-2-123b-instruct-2512_ ou _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Together AI - -1. Acesse o [console Together AI](https://api.together.ai), crie uma conta e clique em **Adicionar Chave**. - -2. Execute o comando `/connect` e procure por **Together AI**. - - ```txt - /connect - ``` - -3. Insira sua chave da API Together AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo como _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Venice AI - -1. Acesse o [console Venice AI](https://venice.ai), crie uma conta e gere uma chave da API. - -2. Execute o comando `/connect` e procure por **Venice AI**. - - ```txt - /connect - ``` - -3. Insira sua chave da API Venice AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo como _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -O Vercel AI Gateway permite que você acesse modelos do OpenAI, Anthropic, Google, xAI e mais através de um endpoint unificado. Os modelos são oferecidos pelo preço de tabela, sem markup. - -1. Acesse o [painel Vercel](https://vercel.com/), navegue até a aba **AI Gateway** e clique em **Chaves da API** para criar uma nova chave da API. - -2. Execute o comando `/connect` e procure por **Vercel AI Gateway**. - - ```txt - /connect - ``` - -3. Insira sua chave da API do Vercel AI Gateway. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo. - - ```txt - /models - ``` - -Você também pode personalizar modelos através da sua configuração do opencode. Aqui está um exemplo de especificar a ordem de roteamento do provedor. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -Algumas opções de roteamento úteis: - -| Opção | Descrição | -| ------------------- | -------------------------------------------------------------- | -| `order` | Sequência de provedores a serem tentados | -| `only` | Restringir a provedores específicos | -| `zeroDataRetention` | Usar apenas provedores com políticas de retenção de dados zero | - ---- - -### xAI - -1. Acesse o [console xAI](https://console.x.ai/), crie uma conta e gere uma chave da API. - -2. Execute o comando `/connect` e procure por **xAI**. - - ```txt - /connect - ``` - -3. Insira sua chave da API xAI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo como _Grok Beta_. - - ```txt - /models - ``` - ---- - -### Z.AI - -1. Acesse o [console da API Z.AI](https://z.ai/manage-apikey/apikey-list), crie uma conta e clique em **Criar uma nova chave da API**. - -2. Execute o comando `/connect` e procure por **Z.AI**. - - ```txt - /connect - ``` - - Se você estiver inscrito no **GLM Coding Plan**, selecione **Z.AI Coding Plan**. - -3. Insira sua chave da API Z.AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Execute o comando `/models` para selecionar um modelo como _GLM-4.7_. - - ```txt - /models - ``` - ---- - -### ZenMux - -1. Acesse o [painel ZenMux](https://zenmux.ai/settings/keys), clique em **Criar Chave da API** e copie a chave. - -2. Execute o comando `/connect` e procure por ZenMux. - - ```txt - /connect - ``` - -3. Insira a chave da API para o provedor. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Muitos modelos ZenMux são pré-carregados por padrão, execute o comando `/models` para selecionar o que você deseja. - - ```txt - /models - ``` - - Você também pode adicionar modelos adicionais através da sua configuração do opencode. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## Provedor personalizado - -Para adicionar qualquer provedor **compatível com OpenAI** que não esteja listado no comando `/connect`: - -:::tip -Você pode usar qualquer provedor compatível com OpenAI com o opencode. A maioria dos provedores de AI modernos oferece APIs compatíveis com OpenAI. -::: - -1. Execute o comando `/connect` e role para baixo até **Outro**. - - ```bash - $ /connect - - ┌ Adicionar credencial - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. Insira um ID exclusivo para o provedor. - - ```bash - $ /connect - - ┌ Adicionar credencial - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - Escolha um ID memorável, você usará isso no seu arquivo de configuração. - ::: - -3. Insira sua chave da API para o provedor. - - ```bash - $ /connect - - ┌ Adicionar credencial - │ - ▲ Isso armazena apenas uma credencial para myprovider - você precisará configurá-lo no opencode.json, verifique a documentação para exemplos. - │ - ◇ Digite sua chave de API - │ sk-... - └ - ``` - -4. Crie ou atualize seu arquivo `opencode.json` no diretório do seu projeto: - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "Nome de Exibição do Meu Provedor de IA", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "Nome de Exibição do Meu Modelo" - } - } - } - } - } - ``` - - Aqui estão as opções de configuração: - - **npm**: Pacote do SDK de AI a ser usado, `@ai-sdk/openai-compatible` para provedores compatíveis com OpenAI - - **name**: Nome de exibição na interface do usuário. - - **models**: Modelos disponíveis. - - **options.baseURL**: URL do endpoint da API. - - **options.apiKey**: Defina opcionalmente a chave da API, se não estiver usando autenticação. - - **options.headers**: Defina opcionalmente cabeçalhos personalizados. - - Mais sobre as opções avançadas no exemplo abaixo. - -5. Execute o comando `/models` e seu provedor e modelos personalizados aparecerão na lista de seleção. - ---- - -##### Exemplo - -Aqui está um exemplo definindo as opções `apiKey`, `headers` e `limit` do modelo. - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "Nome de Exibição do Meu Provedor de IA", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "Nome de Exibição do Meu Modelo", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -Detalhes da configuração: - -- **apiKey**: Definido usando a sintaxe de variável `env`, [saiba mais](/docs/config#env-vars). -- **headers**: Cabeçalhos personalizados enviados com cada solicitação. -- **limit.context**: Máximo de tokens de entrada que o modelo aceita. -- **limit.output**: Máximo de tokens que o modelo pode gerar. - -Os campos `limit` permitem que o opencode entenda quanto contexto você tem disponível. Provedores padrão puxam isso automaticamente do models.dev. - ---- - -## Solução de Problemas - -Se você estiver tendo problemas para configurar um provedor, verifique o seguinte: - -1. **Verifique a configuração de autenticação**: Execute `opencode auth list` para ver se as credenciais - para o provedor estão adicionadas à sua configuração. - - Isso não se aplica a provedores como Amazon Bedrock, que dependem de variáveis de ambiente para sua autenticação. - -2. Para provedores personalizados, verifique a configuração do opencode e: - - Certifique-se de que o ID do provedor usado no comando `/connect` corresponda ao ID na sua configuração do opencode. - - O pacote npm correto está sendo usado para o provedor. Por exemplo, use `@ai-sdk/cerebras` para Cerebras. E para todos os outros provedores compatíveis com OpenAI, use `@ai-sdk/openai-compatible`. - - Verifique se o endpoint da API correto está sendo usado no campo `options.baseURL`. diff --git a/packages/web/src/content/docs/pt-br/rules.mdx b/packages/web/src/content/docs/pt-br/rules.mdx deleted file mode 100644 index 3b0a1eda20..0000000000 --- a/packages/web/src/content/docs/pt-br/rules.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: Regras -description: Defina instruções personalizadas para opencode. ---- - -Você pode fornecer instruções personalizadas para opencode criando um arquivo `AGENTS.md`. Isso é semelhante às regras do Cursor. Ele contém instruções que serão incluídas no contexto do LLM para personalizar seu comportamento para o seu projeto específico. - ---- - -## Inicializar - -Para criar um novo arquivo `AGENTS.md`, você pode executar o comando `/init` no opencode. - -:::tip -Você deve commitar o arquivo `AGENTS.md` do seu projeto no Git. -::: - -Isso irá escanear seu projeto e todo o seu conteúdo para entender do que se trata o projeto e gerar um arquivo `AGENTS.md` com isso. Isso ajuda o opencode a navegar melhor pelo projeto. - -Se você já tiver um arquivo `AGENTS.md` existente, isso tentará adicionar a ele. - ---- - -## Exemplo - -Você também pode criar este arquivo manualmente. Aqui está um exemplo de algumas coisas que você pode colocar em um arquivo `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` -``` - -Estamos adicionando instruções específicas do projeto aqui e isso será compartilhado entre sua equipe. - ---- - -## Tipos - -O opencode também suporta a leitura do arquivo `AGENTS.md` de múltiplos locais. E isso serve a diferentes propósitos. - -### Projeto - -Coloque um `AGENTS.md` na raiz do seu projeto para regras específicas do projeto. Essas regras se aplicam apenas quando você está trabalhando neste diretório ou em seus subdiretórios. - -### Global - -Você também pode ter regras globais em um arquivo `~/.config/opencode/AGENTS.md`. Isso é aplicado em todas as sessões do opencode. - -Como isso não é commitado no Git ou compartilhado com sua equipe, recomendamos usar isso para especificar quaisquer regras pessoais que o LLM deve seguir. - -### Compatibilidade com Claude Code - -Para usuários migrando do Claude Code, o opencode suporta as convenções de arquivo do Claude Code como alternativas: - -- **Regras do projeto**: `CLAUDE.md` no diretório do seu projeto (usado se não existir `AGENTS.md`) -- **Regras globais**: `~/.claude/CLAUDE.md` (usado se não existir `~/.config/opencode/AGENTS.md`) -- **Habilidades**: `~/.claude/skills/` — veja [Habilidades do Agente](/docs/skills/) para detalhes - -Para desabilitar a compatibilidade com Claude Code, defina uma dessas variáveis de ambiente: - -```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 -``` - ---- - -## Precedência - -Quando o opencode inicia, ele procura arquivos de regras nesta ordem: - -1. **Arquivos locais** percorrendo a partir do diretório atual (`AGENTS.md`, `CLAUDE.md`) -2. **Arquivo global** em `~/.config/opencode/AGENTS.md` -3. **Arquivo Claude Code** em `~/.claude/CLAUDE.md` (a menos que desabilitado) - -O primeiro arquivo correspondente vence em cada categoria. Por exemplo, se você tiver tanto `AGENTS.md` quanto `CLAUDE.md`, apenas `AGENTS.md` é usado. Da mesma forma, `~/.config/opencode/AGENTS.md` tem precedência sobre `~/.claude/CLAUDE.md`. - ---- - -## Instruções Personalizadas - -Você pode especificar arquivos de instrução personalizados no seu `opencode.json` ou no global `~/.config/opencode/opencode.json`. Isso permite que você e sua equipe reutilizem regras existentes em vez de ter que duplicá-las no AGENTS.md. - -Exemplo: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -Você também pode usar URLs remotas para carregar instruções da web. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"] -} -``` - -Instruções remotas são buscadas com um tempo limite de 5 segundos. - -Todos os arquivos de instrução são combinados com seus arquivos `AGENTS.md`. - ---- - -## Referenciando Arquivos Externos - -Embora o opencode não analise automaticamente referências de arquivos em `AGENTS.md`, você pode alcançar funcionalidade semelhante de duas maneiras: - -### Usando opencode.json - -A abordagem recomendada é usar o campo `instructions` em `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"] -} -``` - -### Instruções Manuais em AGENTS.md - -Você pode ensinar o opencode a ler arquivos externos fornecendo instruções explícitas em seu `AGENTS.md`. Aqui está um exemplo prático: - -```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. -``` - -Essa abordagem permite que você: - -- Crie arquivos de regras modulares e reutilizáveis -- Compartilhe regras entre projetos via symlinks ou submódulos do git -- Mantenha o AGENTS.md conciso enquanto referencia diretrizes detalhadas -- Garanta que o opencode carregue arquivos apenas quando necessário para a tarefa específica - -:::tip -Para monorepos ou projetos com padrões compartilhados, usar `opencode.json` com padrões glob (como `packages/*/AGENTS.md`) é mais sustentável do que instruções manuais. -::: diff --git a/packages/web/src/content/docs/pt-br/sdk.mdx b/packages/web/src/content/docs/pt-br/sdk.mdx deleted file mode 100644 index 7fd765e4c1..0000000000 --- a/packages/web/src/content/docs/pt-br/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: SDK -description: Cliente JS seguro em tipos para o servidor opencode. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -O SDK JS/TS do opencode fornece um cliente seguro em tipos para interagir com o servidor. -Use-o para construir integrações e controlar o opencode programaticamente. - -[Saiba mais](/docs/server) sobre como o servidor funciona. Para exemplos, confira os [projetos](/docs/ecosystem#projects) construídos pela comunidade. - ---- - -## Instalar - -Instale o SDK a partir do npm: - -```bash -npm install @opencode-ai/sdk -``` - ---- - -## Criar cliente - -Crie uma instância do opencode: - -```javascript -import { createOpencode } from "@opencode-ai/sdk" - -const { client } = await createOpencode() -``` - -Isso inicia tanto um servidor quanto um cliente. - -#### Opções - -| Opção | Tipo | Descrição | Padrão | -| ---------- | ------------- | ------------------------------------------ | ----------- | -| `hostname` | `string` | Nome do host do servidor | `127.0.0.1` | -| `port` | `number` | Porta do servidor | `4096` | -| `signal` | `AbortSignal` | Sinal de abortar para cancelamento | `undefined` | -| `timeout` | `number` | Tempo limite em ms para iniciar o servidor | `5000` | -| `config` | `Config` | Objeto de configuração | `{}` | - ---- - -## Configuração - -Você pode passar um objeto de configuração para personalizar o comportamento. A instância ainda pega seu `opencode.json`, mas você pode substituir ou adicionar configuração 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() -``` - -## Apenas cliente - -Se você já tem uma instância do opencode em execução, pode criar uma instância de cliente para se conectar a ela: - -```javascript -import { createOpencodeClient } from "@opencode-ai/sdk" - -const client = createOpencodeClient({ - baseUrl: "http://localhost:4096", -}) -``` - -#### Opções - -| Opção | Tipo | Descrição | Padrão | -| --------------- | ---------- | ------------------------------------- | ----------------------- | -| `baseUrl` | `string` | URL do servidor | `http://localhost:4096` | -| `fetch` | `function` | Implementação de fetch personalizada | `globalThis.fetch` | -| `parseAs` | `string` | Método de análise da resposta | `auto` | -| `responseStyle` | `string` | Estilo de retorno: `data` ou `fields` | `fields` | -| `throwOnError` | `boolean` | Lançar erros em vez de retornar | `false` | - ---- - -## Tipos - -O SDK inclui definições TypeScript para todos os tipos da API. Importe-os diretamente: - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -Todos os tipos são gerados a partir da especificação OpenAPI do servidor e estão disponíveis no arquivo de tipos. - ---- - -## Erros - -O SDK pode lançar erros que você pode capturar e tratar: - -```typescript -try { - await client.session.get({ path: { id: "invalid-id" } }) -} catch (error) { - console.error("Failed to get session:", (error as Error).message) -} -``` - ---- - -## Saída Estruturada - -Você pode solicitar uma saída JSON estruturada do modelo especificando um `format` com um esquema JSON. O modelo usará uma ferramenta `StructuredOutput` para retornar um JSON validado correspondente ao seu esquema. - -### Uso Básico - -```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"], - }, - }, - }, -}) - -// Acessar a saída estruturada -console.log(result.data.info.structured_output) -// { company: "Anthropic", founded: 2021, products: ["Claude", "Claude API"] } -``` - -### Tipos de Formato de Saída - -| Tipo | Descrição | -| ------------- | --------------------------------------------------------- | -| `text` | Padrão. Resposta de texto padrão (sem saída estruturada) | -| `json_schema` | Retorna JSON validado correspondente ao esquema fornecido | - -### Formato do Esquema JSON - -Ao usar `type: 'json_schema'`, forneça: - -| Campo | Tipo | Descrição | -| ------------ | --------------- | -------------------------------------------------------------- | -| `type` | `'json_schema'` | Obrigatório. Especifica o modo de esquema JSON | -| `schema` | `object` | Obrigatório. Objeto JSON Schema definindo a estrutura de saída | -| `retryCount` | `number` | Opcional. Número de tentativas de validação (padrão: 2) | - -### Tratamento de Erros - -Se o modelo falhar em produzir uma saída estruturada válida após todas as tentativas, a resposta incluirá um `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) -} -``` - -### Melhores Práticas - -1. **Forneça descrições claras** nas propriedades do seu esquema para ajudar o modelo a entender quais dados extrair -2. **Use `required`** para especificar quais campos devem estar presentes -3. **Mantenha os esquemas focados** - esquemas aninhados complexos podem ser mais difíceis para o modelo preencher corretamente -4. **Defina um `retryCount` apropriado** - aumente para esquemas complexos, diminua para os simples - ---- - -## APIs - -O SDK expõe todas as APIs do servidor através de um cliente seguro em tipos. - ---- - -### Global - -| Método | Descrição | Resposta | -| ----------------- | -------------------------------------- | ------------------------------------ | -| `global.health()` | Verificar a saúde e versão do servidor | `{ healthy: true, version: string }` | - ---- - -#### Exemplos - -```javascript -const health = await client.global.health() -console.log(health.data.version) -``` - ---- - -### App - -| Método | Descrição | Resposta | -| -------------- | ----------------------------------- | ------------------------------------------- | -| `app.log()` | Escrever uma entrada de log | `boolean` | -| `app.agents()` | Listar todos os agentes disponíveis | Agent[] | - ---- - -#### Exemplos - -```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() -``` - ---- - -### Projeto - -| Método | Descrição | Resposta | -| ------------------- | ------------------------ | --------------------------------------------- | -| `project.list()` | Listar todos os projetos | Project[] | -| `project.current()` | Obter projeto atual | Project | - ---- - -#### Exemplos - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### Caminho - -| Método | Descrição | Resposta | -| ------------ | ------------------- | ---------------------------------------- | -| `path.get()` | Obter caminho atual | Path | - ---- - -#### Exemplos - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### Configuração - -| Método | Descrição | Resposta | -| -------------------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | Obter informações de configuração | Config | -| `config.providers()` | Listar provedores e modelos padrão | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### Exemplos - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### Sessões - -| Método | Descrição | Notas | -| ---------------------------------------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `session.list()` | Listar sessões | Retorna Session[] | -| `session.get({ path })` | Obter sessão | Retorna Session | -| `session.children({ path })` | Listar sessões filhas | Retorna Session[] | -| `session.create({ body })` | Criar sessão | Retorna Session | -| `session.delete({ path })` | Deletar sessão | Retorna `boolean` | -| `session.update({ path, body })` | Atualizar propriedades da sessão | Retorna Session | -| `session.init({ path, body })` | Analisar app e criar `AGENTS.md` | Retorna `boolean` | -| `session.abort({ path })` | Abortar uma sessão em execução | Retorna `boolean` | -| `session.share({ path })` | Compartilhar sessão | Retorna Session | -| `session.unshare({ path })` | Descompartilhar sessão | Retorna Session | -| `session.summarize({ path, body })` | Resumir sessão | Retorna `boolean` | -| `session.messages({ path })` | Listar mensagens em uma sessão | Retorna `{ info: `Message`, parts: `Part[]`}[]` | -| `session.message({ path })` | Obter detalhes da mensagem | Retorna `{ info: `Message`, parts: `Part[]`}` | -| `session.prompt({ path, body })` | Enviar mensagem de prompt | `body.noReply: true` retorna UserMessage (apenas contexto). O padrão retorna AssistantMessage com resposta da AI. Suporta `body.outputFormat` para [saída estruturada](#saída-estruturada) | -| `session.command({ path, body })` | Enviar comando para a sessão | Retorna `{ info: `AssistantMessage`, parts: `Part[]`}` | -| `session.shell({ path, body })` | Executar um comando shell | Retorna AssistantMessage | -| `session.revert({ path, body })` | Reverter uma mensagem | Retorna Session | -| `session.unrevert({ path })` | Restaurar mensagens revertidas | Retorna Session | -| `postSessionByIdPermissionsByPermissionId({ path, body })` | Responder a um pedido de permissão | Retorna `boolean` | - ---- - -#### Exemplos - -```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." }], - }, -}) -``` - ---- - -### Arquivos - -| Método | Descrição | Resposta | -| ------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------- | -| `find.text({ query })` | Pesquisar texto em arquivos | Array de objetos de correspondência com `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `find.files({ query })` | Encontrar arquivos e diretórios por nome | `string[]` (caminhos) | -| `find.symbols({ query })` | Encontrar símbolos no workspace | Symbol[] | -| `file.read({ query })` | Ler um arquivo | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | Obter status para arquivos rastreados | File[] | - -`find.files` suporta alguns campos de consulta opcionais: - -- `type`: `"file"` ou `"directory"` -- `directory`: substituir a raiz do projeto para a pesquisa -- `limit`: resultados máximos (1–200) - ---- - -#### Exemplos - -```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 - -| Método | Descrição | Resposta | -| ------------------------------ | -------------------------- | --------- | -| `tui.appendPrompt({ body })` | Adicionar texto ao prompt | `boolean` | -| `tui.openHelp()` | Abrir o diálogo de ajuda | `boolean` | -| `tui.openSessions()` | Abrir o seletor de sessões | `boolean` | -| `tui.openThemes()` | Abrir o seletor de temas | `boolean` | -| `tui.openModels()` | Abrir o seletor de modelos | `boolean` | -| `tui.submitPrompt()` | Enviar o prompt atual | `boolean` | -| `tui.clearPrompt()` | Limpar o prompt | `boolean` | -| `tui.executeCommand({ body })` | Executar um comando | `boolean` | -| `tui.showToast({ body })` | Mostrar notificação toast | `boolean` | - ---- - -#### Exemplos - -```javascript -// Control TUI interface -await client.tui.appendPrompt({ - body: { text: "Add this to prompt" }, -}) - -await client.tui.showToast({ - body: { message: "Task completed", variant: "success" }, -}) -``` - ---- - -### Autenticação - -| Método | Descrição | Resposta | -| ------------------- | ----------------------------------- | --------- | -| `auth.set({ ... })` | Definir credenciais de autenticação | `boolean` | - ---- - -#### Exemplos - -```javascript -await client.auth.set({ - path: { id: "anthropic" }, - body: { type: "api", key: "your-api-key" }, -}) -``` - ---- - -### Eventos - -| Método | Descrição | Resposta | -| ------------------- | --------------------------------------- | --------------------------------------- | -| `event.subscribe()` | Fluxo de eventos enviados pelo servidor | Fluxo de eventos enviados pelo servidor | - ---- - -#### Exemplos - -```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) -} -``` diff --git a/packages/web/src/content/docs/pt-br/server.mdx b/packages/web/src/content/docs/pt-br/server.mdx deleted file mode 100644 index 6d2e9eb386..0000000000 --- a/packages/web/src/content/docs/pt-br/server.mdx +++ /dev/null @@ -1,284 +0,0 @@ ---- -title: Servidor -description: Interaja com o servidor opencode via HTTP. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -O comando `opencode serve` executa um servidor HTTP sem cabeça que expõe um endpoint OpenAPI que um cliente opencode pode usar. - ---- - -### Uso - -```bash -opencode serve [--port ] [--hostname ] [--cors ] -``` - -#### Opções - -| Flag | Descrição | Padrão | -| --------------- | ------------------------------------------------- | ---------------- | -| `--port` | Porta para escutar | `4096` | -| `--hostname` | Nome do host para escutar | `127.0.0.1` | -| `--mdns` | Habilitar descoberta mDNS | `false` | -| `--mdns-domain` | Nome de domínio personalizado para o serviço mDNS | `opencode.local` | -| `--cors` | Origens adicionais de navegador a permitir | `[]` | - -`--cors` pode ser passado várias vezes: - -```bash -opencode serve --cors http://localhost:5173 --cors https://app.example.com -``` - ---- - -### Autenticação - -Defina `OPENCODE_SERVER_PASSWORD` para proteger o servidor com autenticação básica HTTP. O nome de usuário padrão é `opencode`, ou defina `OPENCODE_SERVER_USERNAME` para substituí-lo. Isso se aplica tanto ao `opencode serve` quanto ao `opencode web`. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve -``` - ---- - -### Como funciona - -Quando você executa `opencode`, ele inicia um TUI e um servidor. Onde o TUI é o cliente que se comunica com o servidor. O servidor expõe um endpoint de especificação OpenAPI 3.1. Este endpoint também é usado para gerar um [SDK](/docs/sdk). - -:::tip -Use o servidor opencode para interagir com o opencode programaticamente. -::: - -Essa arquitetura permite que o opencode suporte múltiplos clientes e permite que você interaja com o opencode programaticamente. - -Você pode executar `opencode serve` para iniciar um servidor autônomo. Se você tiver o TUI do opencode em execução, `opencode serve` iniciará um novo servidor. - ---- - -#### Conectar a um servidor existente - -Quando você inicia o TUI, ele atribui aleatoriamente uma porta e um nome de host. Você pode passar os [flags](/docs/cli) `--hostname` e `--port`. Em seguida, use isso para se conectar ao seu servidor. - -O endpoint [`/tui`](#tui) pode ser usado para controlar o TUI através do servidor. Por exemplo, você pode preencher ou executar um prompt. Essa configuração é usada pelos plugins do opencode [IDE](/docs/ide). - ---- - -## Especificação - -O servidor publica uma especificação OpenAPI 3.1 que pode ser visualizada em: - -``` -http://:/doc -``` - -Por exemplo, `http://localhost:4096/doc`. Use a especificação para gerar clientes ou inspecionar tipos de requisição e resposta. Ou visualize em um explorador Swagger. - ---- - -## APIs - -O servidor opencode expõe as seguintes APIs. - ---- - -### Global - -| Método | Caminho | Descrição | Resposta | -| ------ | ---------------- | --------------------------------- | ------------------------------------ | -| `GET` | `/global/health` | Obter saúde e versão do servidor | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | Obter eventos globais (fluxo SSE) | Fluxo de eventos | - ---- - -### Projeto - -| Método | Caminho | Descrição | Resposta | -| ------ | ------------------ | ------------------------ | --------------------------------------------- | -| `GET` | `/project` | Listar todos os projetos | Project[] | -| `GET` | `/project/current` | Obter o projeto atual | Project | - ---- - -### Caminho & VCS - -| Método | Caminho | Descrição | Resposta | -| ------ | ------- | --------------------------------------------- | ------------------------------------------- | -| `GET` | `/path` | Obter o caminho atual | Path | -| `GET` | `/vcs` | Obter informações do VCS para o projeto atual | VcsInfo | - ---- - -### Instância - -| Método | Caminho | Descrição | Resposta | -| ------ | ------------------- | --------------------------- | --------- | -| `POST` | `/instance/dispose` | Descartar a instância atual | `boolean` | - ---- - -### Configuração - -| Método | Caminho | Descrição | Resposta | -| ------- | ------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | Obter informações de configuração | Config | -| `PATCH` | `/config` | Atualizar configuração | Config | -| `GET` | `/config/providers` | Listar provedores e modelos padrão | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -### Provedor - -| Método | Caminho | Descrição | Resposta | -| ------ | -------------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | Listar todos os provedores | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | Obter métodos de autenticação do provedor | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | Autorizar um provedor usando OAuth | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | Lidar com o callback OAuth para um provedor | `boolean` | - ---- - -### Sessões - -| Método | Caminho | Descrição | Notas | -| -------- | ---------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/session` | Listar todas as sessões | Retorna Session[] | -| `POST` | `/session` | Criar uma nova sessão | corpo: `{ parentID?, title? }`, retorna Session | -| `GET` | `/session/status` | Obter status da sessão para todas as sessões | Retorna `{ [sessionID: string]: `SessionStatus` }` | -| `GET` | `/session/:id` | Obter detalhes da sessão | Retorna Session | -| `DELETE` | `/session/:id` | Deletar uma sessão e todos os seus dados | Retorna `boolean` | -| `PATCH` | `/session/:id` | Atualizar propriedades da sessão | corpo: `{ title? }`, retorna Session | -| `GET` | `/session/:id/children` | Obter as sessões filhas de uma sessão | Retorna Session[] | -| `GET` | `/session/:id/todo` | Obter a lista de tarefas para uma sessão | Retorna Todo[] | -| `POST` | `/session/:id/init` | Analisar o app e criar `AGENTS.md` | corpo: `{ messageID, providerID, modelID }`, retorna `boolean` | -| `POST` | `/session/:id/fork` | Fazer um fork de uma sessão existente em uma mensagem | corpo: `{ messageID? }`, retorna Session | -| `POST` | `/session/:id/abort` | Abortar uma sessão em execução | Retorna `boolean` | -| `POST` | `/session/:id/share` | Compartilhar uma sessão | Retorna Session | -| `DELETE` | `/session/:id/share` | Descompartilhar uma sessão | Retorna Session | -| `GET` | `/session/:id/diff` | Obter a diferença para esta sessão | query: `messageID?`, retorna FileDiff[] | -| `POST` | `/session/:id/summarize` | Resumir a sessão | corpo: `{ providerID, modelID }`, retorna `boolean` | -| `POST` | `/session/:id/revert` | Reverter uma mensagem | corpo: `{ messageID, partID? }`, retorna `boolean` | -| `POST` | `/session/:id/unrevert` | Restaurar todas as mensagens revertidas | Retorna `boolean` | -| `POST` | `/session/:id/permissions/:permissionID` | Responder a um pedido de permissão | corpo: `{ response, remember? }`, retorna `boolean` | - ---- - -### Mensagens - -| Método | Caminho | Descrição | Notas | -| ------ | --------------------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `GET` | `/session/:id/message` | Listar mensagens em uma sessão | query: `limit?`, retorna `{ info: `Message`, parts: `Part[]`}[]` | -| `POST` | `/session/:id/message` | Enviar uma mensagem e aguardar resposta | corpo: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, retorna `{ info: `Message`, parts: `Part[]`}` | -| `GET` | `/session/:id/message/:messageID` | Obter detalhes da mensagem | Retorna `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/prompt_async` | Enviar uma mensagem assíncrona (sem espera) | corpo: igual a `/session/:id/message`, retorna `204 No Content` | -| `POST` | `/session/:id/command` | Executar um comando de barra | corpo: `{ messageID?, agent?, model?, command, arguments }`, retorna `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/shell` | Executar um comando shell | corpo: `{ agent, model?, command }`, retorna `{ info: `Message`, parts: `Part[]`}` | - ---- - -### Comandos - -| Método | Caminho | Descrição | Resposta | -| ------ | ---------- | ------------------------ | --------------------------------------------- | -| `GET` | `/command` | Listar todos os comandos | Command[] | - ---- - -### Arquivos - -| Método | Caminho | Descrição | Resposta | -| ------ | ------------------------ | ---------------------------------------- | ------------------------------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | Pesquisar texto em arquivos | Array de objetos de correspondência com `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `GET` | `/find/file?query=` | Encontrar arquivos e diretórios por nome | `string[]` (caminhos) | -| `GET` | `/find/symbol?query=` | Encontrar símbolos do workspace | Symbol[] | -| `GET` | `/file?path=` | Listar arquivos e diretórios | FileNode[] | -| `GET` | `/file/content?path=

` | Ler um arquivo | FileContent | -| `GET` | `/file/status` | Obter status para arquivos rastreados | File[] | - -#### Parâmetros de consulta `/find/file` - -- `query` (obrigatório) — string de pesquisa (correspondência difusa) -- `type` (opcional) — limitar resultados a `"file"` ou `"directory"` -- `directory` (opcional) — substituir a raiz do projeto para a pesquisa -- `limit` (opcional) — resultados máximos (1–200) -- `dirs` (opcional) — flag legada (`"false"` retorna apenas arquivos) - ---- - -### Ferramentas (Experimental) - -| Método | Caminho | Descrição | Resposta | -| ------ | ------------------------------------------- | --------------------------------------------------- | -------------------------------------------- | -| `GET` | `/experimental/tool/ids` | Listar todos os IDs de ferramentas | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | Listar ferramentas com esquemas JSON para um modelo | ToolList | - ---- - -### LSP, Formatadores & MCP - -| Método | Caminho | Descrição | Resposta | -| ------ | ------------ | ------------------------------------ | -------------------------------------------------------- | -| `GET` | `/lsp` | Obter status do servidor LSP | LSPStatus[] | -| `GET` | `/formatter` | Obter status do formatador | FormatterStatus[] | -| `GET` | `/mcp` | Obter status do servidor MCP | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | Adicionar servidor MCP dinamicamente | corpo: `{ name, config }`, retorna objeto de status MCP | - ---- - -### Agentes - -| Método | Caminho | Descrição | Resposta | -| ------ | -------- | ----------------------------------- | ------------------------------------------- | -| `GET` | `/agent` | Listar todos os agentes disponíveis | Agent[] | - ---- - -### Registro - -| Método | Caminho | Descrição | Resposta | -| ------ | ------- | --------------------------------------------------------------------- | --------- | -| `POST` | `/log` | Escrever entrada de log. Corpo: `{ service, level, message, extra? }` | `boolean` | - ---- - -### TUI - -| Método | Caminho | Descrição | Resposta | -| ------ | ----------------------- | ---------------------------------------------- | ---------------------------- | -| `POST` | `/tui/append-prompt` | Anexar texto ao prompt | `boolean` | -| `POST` | `/tui/open-help` | Abrir o diálogo de ajuda | `boolean` | -| `POST` | `/tui/open-sessions` | Abrir o seletor de sessões | `boolean` | -| `POST` | `/tui/open-themes` | Abrir o seletor de temas | `boolean` | -| `POST` | `/tui/open-models` | Abrir o seletor de modelos | `boolean` | -| `POST` | `/tui/submit-prompt` | Enviar o prompt atual | `boolean` | -| `POST` | `/tui/clear-prompt` | Limpar o prompt | `boolean` | -| `POST` | `/tui/execute-command` | Executar um comando (`{ command }`) | `boolean` | -| `POST` | `/tui/show-toast` | Mostrar toast (`{ title?, message, variant }`) | `boolean` | -| `GET` | `/tui/control/next` | Aguardar o próximo pedido de controle | Objeto de pedido de controle | -| `POST` | `/tui/control/response` | Responder a um pedido de controle (`{ body }`) | `boolean` | - ---- - -### Auth - -| Método | Caminho | Descrição | Resposta | -| ------ | ----------- | ------------------------------------------------------------------------------------- | --------- | -| `PUT` | `/auth/:id` | Definir credenciais de autenticação. O corpo deve corresponder ao esquema do provedor | `boolean` | - ---- - -### Eventos - -| Método | Caminho | Descrição | Resposta | -| ------ | -------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------- | -| `GET` | `/event` | Fluxo de eventos enviados pelo servidor. O primeiro evento é `server.connected`, depois eventos de bus | Fluxo de eventos enviados pelo servidor | - ---- - -### Docs - -| Método | Caminho | Descrição | Resposta | -| ------ | ------- | ------------------------- | --------------------------------------- | -| `GET` | `/doc` | Especificação OpenAPI 3.1 | Página HTML com a especificação OpenAPI | diff --git a/packages/web/src/content/docs/pt-br/share.mdx b/packages/web/src/content/docs/pt-br/share.mdx deleted file mode 100644 index 166226d6dc..0000000000 --- a/packages/web/src/content/docs/pt-br/share.mdx +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Compartilhar -description: Compartilhe suas conversas do opencode. ---- - -O recurso de compartilhamento do opencode permite que você crie links públicos para suas conversas do opencode, para que você possa colaborar com colegas de equipe ou obter ajuda de outros. - -:::note -Conversas compartilhadas são acessíveis publicamente para qualquer pessoa com o link. -::: - ---- - -## Como funciona - -Quando você compartilha uma conversa, o opencode: - -1. Cria uma URL pública única para sua sessão -2. Sincroniza seu histórico de conversas com nossos servidores -3. Torna a conversa acessível através do link compartilhável — `opncd.ai/s/` - ---- - -## Compartilhamento - -O opencode suporta três modos de compartilhamento que controlam como as conversas são compartilhadas: - ---- - -### Manual (padrão) - -Por padrão, o opencode usa o modo de compartilhamento manual. As sessões não são compartilhadas automaticamente, mas você pode compartilhá-las manualmente usando o comando `/share`: - -``` -/share -``` - -Isso gerará uma URL única que será copiada para sua área de transferência. - -Para definir explicitamente o modo manual em seu [arquivo de configuração](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - ---- - -### Compartilhamento automático - -Você pode habilitar o compartilhamento automático para todas as novas conversas definindo a opção `share` como `"auto"` em seu [arquivo de configuração](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "auto" -} -``` - -Com o compartilhamento automático habilitado, cada nova conversa será compartilhada automaticamente e um link será gerado. - ---- - -### Desativado - -Você pode desativar o compartilhamento completamente definindo a opção `share` como `"disabled"` em seu [arquivo de configuração](/docs/config): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -Para impor isso em sua equipe para um determinado projeto, adicione-o ao `opencode.json` em seu projeto e faça o check-in no Git. - ---- - -## Cancelar compartilhamento - -Para parar de compartilhar uma conversa e removê-la do acesso público: - -``` -/unshare -``` - -Isso removerá o link de compartilhamento e excluirá os dados relacionados à conversa. - ---- - -## Privacidade - -Há algumas coisas a serem lembradas ao compartilhar uma conversa. - ---- - -### Retenção de dados - -Conversas compartilhadas permanecem acessíveis até que você as descompartilhe explicitamente. Isso inclui: - -- Histórico completo da conversa -- Todas as mensagens e respostas -- Metadados da sessão - ---- - -### Recomendações - -- Compartilhe apenas conversas que não contenham informações sensíveis. -- Revise o conteúdo da conversa antes de compartilhar. -- Descompartilhe conversas quando a colaboração estiver completa. -- Evite compartilhar conversas com código proprietário ou dados confidenciais. -- Para projetos sensíveis, desative o compartilhamento completamente. - ---- - -## Para empresas - -Para implantações empresariais, o recurso de compartilhamento pode ser: - -- **Desativado** completamente para conformidade de segurança -- **Restrito** a usuários autenticados apenas através de SSO -- **Auto-hospedado** em sua própria infraestrutura - -[Saiba mais](/docs/enterprise) sobre como usar o opencode em sua organização. diff --git a/packages/web/src/content/docs/pt-br/skills.mdx b/packages/web/src/content/docs/pt-br/skills.mdx deleted file mode 100644 index 23a4497ed8..0000000000 --- a/packages/web/src/content/docs/pt-br/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: "Habilidades do Agente" -description: "Defina comportamentos reutilizáveis via definições de SKILL.md" ---- - -As habilidades do agente permitem que o opencode descubra instruções reutilizáveis do seu repositório ou diretório pessoal. -As habilidades são carregadas sob demanda através da ferramenta nativa `skill`—os agentes veem as habilidades disponíveis e podem carregar o conteúdo completo quando necessário. - ---- - -## Colocar arquivos - -Crie uma pasta por nome de habilidade e coloque um `SKILL.md` dentro dela. -O opencode pesquisa nesses locais: - -- Configuração do projeto: `.opencode/skills//SKILL.md` -- Configuração global: `~/.config/opencode/skills//SKILL.md` -- Projeto compatível com Claude: `.claude/skills//SKILL.md` -- Global compatível com Claude: `~/.claude/skills//SKILL.md` -- Projeto compatível com agente: `.agents/skills//SKILL.md` -- Global compatível com agente: `~/.agents/skills//SKILL.md` - ---- - -## Entender a descoberta - -Para caminhos locais do projeto, o opencode sobe a partir do seu diretório de trabalho atual até alcançar a árvore de trabalho do git. -Ele carrega qualquer `skills/*/SKILL.md` correspondente em `.opencode/` e qualquer `.claude/skills/*/SKILL.md` ou `.agents/skills/*/SKILL.md` ao longo do caminho. - -As definições globais também são carregadas de `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` e `~/.agents/skills/*/SKILL.md`. - ---- - -## Escrever frontmatter - -Cada `SKILL.md` deve começar com frontmatter YAML. -Somente estes campos são reconhecidos: - -- `name` (obrigatório) -- `description` (obrigatório) -- `license` (opcional) -- `compatibility` (opcional) -- `metadata` (opcional, mapa de string para string) - -Campos de frontmatter desconhecidos são ignorados. - ---- - -## Validar nomes - -`name` deve: - -- Ter de 1 a 64 caracteres -- Ser alfanumérico em minúsculas com separadores de hífen simples -- Não começar ou terminar com `-` -- Não conter `--` consecutivos -- Combinar com o nome do diretório que contém `SKILL.md` - -Regex equivalente: - -```text -^[a-z0-9]+(-[a-z0-9]+)*$ -``` - ---- - -## Seguir regras de comprimento - -`description` deve ter de 1 a 1024 caracteres. -Mantenha-a específica o suficiente para que o agente escolha corretamente. - ---- - -## Usar um exemplo - -Crie `.opencode/skills/git-release/SKILL.md` assim: - -```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. -``` - ---- - -## Reconhecer descrição da ferramenta - -O opencode lista as habilidades disponíveis na descrição da ferramenta `skill`. -Cada entrada inclui o nome e a descrição da habilidade: - -```xml - - - git-release - Create consistent releases and changelogs - - -``` - -O agente carrega uma habilidade chamando a ferramenta: - -``` -skill({ name: "git-release" }) -``` - ---- - -## Configurar permissões - -Controle quais habilidades os agentes podem acessar usando permissões baseadas em padrões em `opencode.json`: - -```json -{ - "permission": { - "skill": { - "*": "allow", - "pr-review": "allow", - "internal-*": "deny", - "experimental-*": "ask" - } - } -} -``` - -| Permissão | Comportamento | -| --------- | --------------------------------------------------- | -| `allow` | Habilidade carrega imediatamente | -| `deny` | Habilidade oculta do agente, acesso rejeitado | -| `ask` | Usuário solicitado para aprovação antes de carregar | - -Padrões suportam curingas: `internal-*` corresponde a `internal-docs`, `internal-tools`, etc. - ---- - -## Substituir por agente - -Dê a agentes específicos permissões diferentes das configurações globais padrão. - -**Para agentes personalizados** (no frontmatter do agente): - -```yaml ---- -permission: - skill: - "documents-*": "allow" ---- -``` - -**Para agentes embutidos** (em `opencode.json`): - -```json -{ - "agent": { - "plan": { - "permission": { - "skill": { - "internal-*": "allow" - } - } - } - } -} -``` - ---- - -## Desativar a ferramenta de habilidades - -Desative completamente as habilidades para agentes que não devem usá-las: - -**Para agentes personalizados**: - -```yaml ---- -tools: - skill: false ---- -``` - -**Para agentes embutidos**: - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -Quando desativado, a seção `` é omitida completamente. - ---- - -## Solucionar problemas de carregamento - -Se uma habilidade não aparecer: - -1. Verifique se `SKILL.md` está escrito em letras maiúsculas -2. Verifique se o frontmatter inclui `name` e `description` -3. Certifique-se de que os nomes das habilidades sejam únicos em todos os locais -4. Verifique as permissões—habilidades com `deny` estão ocultas dos agentes diff --git a/packages/web/src/content/docs/pt-br/themes.mdx b/packages/web/src/content/docs/pt-br/themes.mdx deleted file mode 100644 index 5706d6e836..0000000000 --- a/packages/web/src/content/docs/pt-br/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -title: Temas -description: Selecione um tema embutido ou defina o seu próprio. ---- - -Com o opencode, você pode selecionar um dos vários temas embutidos, usar um tema que se adapta ao tema do seu terminal ou definir seu próprio tema personalizado. - -Por padrão, o opencode usa nosso próprio tema `opencode`. - ---- - -## Requisitos do terminal - -Para que os temas sejam exibidos corretamente com sua paleta de cores completa, seu terminal deve suportar **truecolor** (cor de 24 bits). A maioria dos terminais modernos suporta isso por padrão, mas você pode precisar habilitar: - -- **Verificar suporte**: Execute `echo $COLORTERM` - deve retornar `truecolor` ou `24bit` -- **Habilitar truecolor**: Defina a variável de ambiente `COLORTERM=truecolor` no seu perfil de shell -- **Compatibilidade do terminal**: Certifique-se de que seu emulador de terminal suporta cores de 24 bits (a maioria dos terminais modernos, como iTerm2, Alacritty, Kitty, Windows Terminal e versões recentes do GNOME Terminal, suportam) - -Sem suporte a truecolor, os temas podem aparecer com precisão de cor reduzida ou voltar para a aproximação de 256 cores mais próxima. - ---- - -## Temas embutidos - -O opencode vem com vários temas embutidos. - -| Nome | Descrição | -| ---------------------- | --------------------------------------------------------------------------- | -| `system` | Adapta-se à cor de fundo do seu terminal | -| `tokyonight` | Baseado no tema [Tokyonight](https://github.com/folke/tokyonight.nvim) | -| `everforest` | Baseado no tema [Everforest](https://github.com/sainnhe/everforest) | -| `ayu` | Baseado no tema escuro [Ayu](https://github.com/ayu-theme) | -| `catppuccin` | Baseado no tema [Catppuccin](https://github.com/catppuccin) | -| `catppuccin-macchiato` | Baseado no tema [Catppuccin](https://github.com/catppuccin) | -| `gruvbox` | Baseado no tema [Gruvbox](https://github.com/morhetz/gruvbox) | -| `kanagawa` | Baseado no tema [Kanagawa](https://github.com/rebelot/kanagawa.nvim) | -| `nord` | Baseado no tema [Nord](https://github.com/nordtheme/nord) | -| `matrix` | Tema verde estilo hacker sobre fundo preto | -| `one-dark` | Baseado no tema escuro [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) | - -E mais, estamos constantemente adicionando novos temas. - ---- - -## Tema do sistema - -O tema `system` é projetado para se adaptar automaticamente ao esquema de cores do seu terminal. Ao contrário dos temas tradicionais que usam cores fixas, o tema _system_: - -- **Gera escala de cinza**: Cria uma escala de cinza personalizada com base na cor de fundo do seu terminal, garantindo contraste ideal. -- **Usa cores ANSI**: Aproveita as cores ANSI padrão (0-15) para destaque de sintaxe e elementos da interface, que respeitam a paleta de cores do seu terminal. -- **Preserva padrões do terminal**: Usa `none` para cores de texto e fundo para manter a aparência nativa do seu terminal. - -O tema do sistema é para usuários que: - -- Querem que o opencode corresponda à aparência do seu terminal -- Usam esquemas de cores de terminal personalizados -- Preferem uma aparência consistente em todos os aplicativos de terminal - ---- - -## Usando um tema - -Você pode selecionar um tema chamando a seleção de tema com o comando `/theme`. Ou você pode especificá-lo em `tui.json`. - -```json title="tui.json" {3} -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - ---- - -## Temas personalizados - -O opencode suporta um sistema de temas flexível baseado em JSON que permite aos usuários criar e personalizar temas facilmente. - ---- - -### Hierarquia - -Os temas são carregados de vários diretórios na seguinte ordem, onde diretórios posteriores substituem os anteriores: - -1. **Temas embutidos** - Estes estão incorporados no binário -2. **Diretório de configuração do usuário** - Definido em `~/.config/opencode/themes/*.json` ou `$XDG_CONFIG_HOME/opencode/themes/*.json` -3. **Diretório raiz do projeto** - Definido em `/.opencode/themes/*.json` -4. **Diretório de trabalho atual** - Definido em `./.opencode/themes/*.json` - -Se vários diretórios contiverem um tema com o mesmo nome, o tema do diretório com maior prioridade será usado. - ---- - -### Criando um tema - -Para criar um tema personalizado, crie um arquivo JSON em um dos diretórios de tema. - -Para temas de usuário: - -```bash no-frame -mkdir -p ~/.config/opencode/themes -vim ~/.config/opencode/themes/my-theme.json -``` - -E para temas específicos do projeto. - -```bash no-frame -mkdir -p .opencode/themes -vim .opencode/themes/my-theme.json -``` - ---- - -### Formato JSON - -Os temas usam um formato JSON flexível com suporte para: - -- **Cores Hex**: `"#ffffff"` -- **Cores ANSI**: `3` (0-255) -- **Referências de cor**: `"primary"` ou definições personalizadas -- **Variantes escuras/claras**: `{"dark": "#000", "light": "#fff"}` -- **Sem cor**: `"none"` - Usa a cor padrão do terminal ou transparente - ---- - -### Definições de cor - -A seção `defs` é opcional e permite que você defina cores reutilizáveis que podem ser referenciadas no tema. - ---- - -### Padrões do terminal - -O valor especial `"none"` pode ser usado para qualquer cor para herdar a cor padrão do terminal. Isso é particularmente útil para criar temas que se misturam perfeitamente com o esquema de cores do seu terminal: - -- `"text": "none"` - Usa a cor de primeiro plano padrão do terminal -- `"background": "none"` - Usa a cor de fundo padrão do terminal - ---- - -### Exemplo - -Aqui está um exemplo de um tema personalizado: - -```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" - } - } -} -``` diff --git a/packages/web/src/content/docs/pt-br/tools.mdx b/packages/web/src/content/docs/pt-br/tools.mdx deleted file mode 100644 index 86fd714d32..0000000000 --- a/packages/web/src/content/docs/pt-br/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -title: Ferramentas -description: Gerencie as ferramentas que um LLM pode usar. ---- - -As ferramentas permitem que o LLM execute ações em sua base de código. O opencode vem com um conjunto de ferramentas integradas, mas você pode estendê-lo com [ferramentas personalizadas](/docs/custom-tools) ou [servidores MCP](/docs/mcp-servers). - -Por padrão, todas as ferramentas estão **ativadas** e não precisam de permissão para serem executadas. Você pode controlar o comportamento das ferramentas através de [permissões](/docs/permissions). - ---- - -## Configuração - -Use o campo `permission` para controlar o comportamento das ferramentas. Você pode permitir, negar ou exigir aprovação para cada ferramenta. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny", - "bash": "ask", - "webfetch": "allow" - } -} -``` - -Você também pode usar curingas para controlar várias ferramentas ao mesmo tempo. Por exemplo, para exigir aprovação para todas as ferramentas de um servidor MCP: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "mymcp_*": "ask" - } -} -``` - -[Saiba mais](/docs/permissions) sobre como configurar permissões. - ---- - -## Integradas - -Aqui estão todas as ferramentas integradas disponíveis no opencode. - ---- - -### bash - -Execute comandos de shell no ambiente do seu projeto. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "bash": "allow" - } -} -``` - -Esta ferramenta permite que o LLM execute comandos de terminal como `npm install`, `git status` ou qualquer outro comando de shell. - ---- - -### edit - -Modifique arquivos existentes usando substituições de string exatas. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Esta ferramenta realiza edições precisas em arquivos substituindo correspondências de texto exatas. É a principal forma como o LLM modifica o código. - ---- - -### write - -Crie novos arquivos ou sobrescreva os existentes. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Use isso para permitir que o LLM crie novos arquivos. Ele sobrescreverá arquivos existentes se já existirem. - -:::note -A ferramenta `write` é controlada pela permissão `edit`, que cobre todas as modificações de arquivos (`edit`, `write`, `patch`). -::: - ---- - -### read - -Leia o conteúdo dos arquivos da sua base de código. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "read": "allow" - } -} -``` - -Esta ferramenta lê arquivos e retorna seus conteúdos. Suporta a leitura de intervalos de linhas específicos para arquivos grandes. - ---- - -### grep - -Pesquise o conteúdo dos arquivos usando expressões regulares. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "grep": "allow" - } -} -``` - -Busca rápida de conteúdo em sua base de código. Suporta a sintaxe completa de regex e filtragem de padrões de arquivos. - ---- - -### glob - -Encontre arquivos por correspondência de padrões. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "glob": "allow" - } -} -``` - -Pesquise arquivos usando padrões glob como `**/*.js` ou `src/**/*.ts`. Retorna caminhos de arquivos correspondentes ordenados por tempo de modificação. - ---- - -### lsp (experimental) - -Interaja com seus servidores LSP configurados para obter recursos de inteligência de código, como definições, referências, informações de hover e hierarquia de chamadas. - -:::note -Esta ferramenta está disponível apenas quando `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (ou `OPENCODE_EXPERIMENTAL=true`). -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "lsp": "allow" - } -} -``` - -As operações suportadas incluem `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` e `outgoingCalls`. - -Para configurar quais servidores LSP estão disponíveis para seu projeto, veja [Servidores LSP](/docs/lsp). - ---- - -### patch - -Aplique patches a arquivos. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Esta ferramenta aplica arquivos de patch à sua base de código. Útil para aplicar diffs e patches de várias fontes. - -:::note -A ferramenta `patch` é controlada pela permissão `edit`, que cobre todas as modificações de arquivos (`edit`, `write`, `patch`). -::: - ---- - -### skill - -Carregue uma [skill](/docs/skills) (um arquivo `SKILL.md`) e retorne seu conteúdo na conversa. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "skill": "allow" - } -} -``` - ---- - -### todowrite - -Gerencie listas de tarefas durante sessões de codificação. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "todowrite": "allow" - } -} -``` - -Cria e atualiza listas de tarefas para acompanhar o progresso durante operações complexas. O LLM usa isso para organizar tarefas de múltiplas etapas. - -:::note -Esta ferramenta está desativada para subagentes por padrão, mas você pode ativá-la manualmente. [Saiba mais](/docs/agents/#permissions) -::: - ---- - -### webfetch - -Busque conteúdo da web. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "webfetch": "allow" - } -} -``` - -Permite que o LLM busque e leia páginas da web. Útil para consultar documentação ou pesquisar recursos online. - ---- - -### websearch - -Pesquise na web por informações. - -:::note -Esta ferramenta está disponível apenas ao usar o provedor opencode ou quando a variável de ambiente `OPENCODE_ENABLE_EXA` está definida como qualquer valor verdadeiro (por exemplo, `true` ou `1`). - -Para habilitar ao iniciar o opencode: - -```bash -OPENCODE_ENABLE_EXA=1 opencode -``` - -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "websearch": "allow" - } -} -``` - -Realiza buscas na web usando Exa AI para encontrar informações relevantes online. Útil para pesquisar tópicos, encontrar eventos atuais ou reunir informações além do limite de dados de treinamento. - -Nenhuma chave de API é necessária — a ferramenta se conecta diretamente ao serviço MCP hospedado da Exa AI sem autenticação. - -:::tip -Use `websearch` quando precisar encontrar informações (descoberta) e `webfetch` quando precisar recuperar conteúdo de uma URL específica (recuperação). -::: - ---- - -### question - -Faça perguntas ao usuário durante a execução. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "question": "allow" - } -} -``` - -Esta ferramenta permite que o LLM faça perguntas ao usuário durante uma tarefa. É útil para: - -- Coletar preferências ou requisitos do usuário -- Esclarecer instruções ambíguas -- Obter decisões sobre escolhas de implementação -- Oferecer opções sobre qual direção seguir - -Cada pergunta inclui um cabeçalho, o texto da pergunta e uma lista de opções. Os usuários podem selecionar entre as opções fornecidas ou digitar uma resposta personalizada. Quando há várias perguntas, os usuários podem navegar entre elas antes de enviar todas as respostas. - ---- - -## Ferramentas personalizadas - -Ferramentas personalizadas permitem que você defina suas próprias funções que o LLM pode chamar. Estas são definidas em seu arquivo de configuração e podem executar código arbitrário. - -[Saiba mais](/docs/custom-tools) sobre como criar ferramentas personalizadas. - ---- - -## Servidores MCP - -Servidores MCP (Model Context Protocol) permitem que você integre ferramentas e serviços externos. Isso inclui acesso a bancos de dados, integrações de API e serviços de terceiros. - -[Saiba mais](/docs/mcp-servers) sobre como configurar servidores MCP. - ---- - -## Internos - -Internamente, ferramentas como `grep` e `glob` usam [ripgrep](https://github.com/BurntSushi/ripgrep) por trás dos panos. Por padrão, o ripgrep respeita padrões `.gitignore`, o que significa que arquivos e diretórios listados em seu `.gitignore` serão excluídos de buscas e listagens. - ---- - -### Padrões de ignorar - -Para incluir arquivos que normalmente seriam ignorados, crie um arquivo `.ignore` na raiz do seu projeto. Este arquivo pode permitir explicitamente certos caminhos. - -```text title=".ignore" -!node_modules/ -!dist/ -!build/ -``` - -Por exemplo, este arquivo `.ignore` permite que o ripgrep busque dentro dos diretórios `node_modules/`, `dist/` e `build/`, mesmo que estejam listados em `.gitignore`. diff --git a/packages/web/src/content/docs/pt-br/troubleshooting.mdx b/packages/web/src/content/docs/pt-br/troubleshooting.mdx deleted file mode 100644 index aa70e80fef..0000000000 --- a/packages/web/src/content/docs/pt-br/troubleshooting.mdx +++ /dev/null @@ -1,299 +0,0 @@ ---- -title: Solução de Problemas -description: Problemas comuns e como resolvê-los. ---- - -Para depurar problemas com o opencode, comece verificando os logs e os dados locais que ele armazena no disco. - ---- - -## Logs - -Os arquivos de log são gravados em: - -- **macOS/Linux**: `~/.local/share/opencode/log/` -- **Windows**: Pressione `WIN+R` e cole `%USERPROFILE%\.local\share\opencode\log` - -Os arquivos de log são nomeados com timestamps (por exemplo, `2025-01-09T123456.log`) e os 10 arquivos de log mais recentes são mantidos. - -Você pode definir o nível de log com a opção de linha de comando `--log-level` para obter informações de depuração mais detalhadas. Por exemplo, `opencode --log-level DEBUG`. - ---- - -## Armazenamento - -O opencode armazena dados de sessão e outros dados do aplicativo no disco em: - -- **macOS/Linux**: `~/.local/share/opencode/` -- **Windows**: Pressione `WIN+R` e cole `%USERPROFILE%\.local\share\opencode` - -Este diretório contém: - -- `auth.json` - Dados de autenticação como chaves de API, tokens OAuth -- `log/` - Logs do aplicativo -- `project/` - Dados específicos do projeto, como dados de sessão e mensagens - - Se o projeto estiver dentro de um repositório Git, ele é armazenado em `.//storage/` - - Se não for um repositório Git, ele é armazenado em `./global/storage/` - ---- - -## Aplicativo de Desktop - -O opencode Desktop executa um servidor opencode local (o sidecar `opencode-cli`) em segundo plano. A maioria dos problemas é causada por um plugin com mau funcionamento, um cache corrompido ou uma configuração de servidor incorreta. - -### Verificações rápidas - -- Saia completamente do aplicativo e reinicie-o. -- Se o aplicativo mostrar uma tela de erro, clique em **Reiniciar** e copie os detalhes do erro. -- Apenas macOS: menu `OpenCode` -> **Recarregar Webview** (ajuda se a interface estiver em branco/congelada). - ---- - -### Desativando plugins - -Se o aplicativo de desktop estiver travando ao iniciar, pendurado ou se comportando de maneira estranha, comece desativando os plugins. - -#### Verificando a configuração global - -Abra seu arquivo de configuração global e procure uma chave `plugin`. - -- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (ou `~/.config/opencode/opencode.json`) -- **macOS/Linux** (instalações mais antigas): `~/.local/share/opencode/opencode.jsonc` -- **Windows**: Pressione `WIN+R` e cole `%USERPROFILE%\.config\opencode\opencode.jsonc` - -Se você tiver plugins configurados, desative-os temporariamente removendo a chave ou definindo-a como um array vazio: - -```jsonc -{ - "$schema": "https://opencode.ai/config.json", - "plugin": [], -} -``` - -#### Verificando os diretórios de plugins - -O opencode também pode carregar plugins locais do disco. Mova-os temporariamente para fora do caminho (ou renomeie a pasta) e reinicie o aplicativo de desktop: - -- **Plugins globais** - - **macOS/Linux**: `~/.config/opencode/plugins/` - - **Windows**: Pressione `WIN+R` e cole `%USERPROFILE%\.config\opencode\plugins` -- **Plugins de projeto** (apenas se você usar configuração por projeto) - - `/.opencode/plugins/` - -Se o aplicativo voltar a funcionar, reative os plugins um por um para descobrir qual está causando o problema. - ---- - -### Limpando o cache - -Se desativar plugins não ajudar (ou se a instalação de um plugin estiver travada), limpe o cache para que o opencode possa reconstruí-lo. - -1. Saia completamente do opencode Desktop. -2. Exclua o diretório de cache: - -- **macOS**: Finder -> `Cmd+Shift+G` -> cole `~/.cache/opencode` -- **Linux**: exclua `~/.cache/opencode` (ou execute `rm -rf ~/.cache/opencode`) -- **Windows**: Pressione `WIN+R` e cole `%USERPROFILE%\.cache\opencode` - -3. Reinicie o opencode Desktop. - ---- - -### Corrigindo problemas de conexão com o servidor - -O opencode Desktop pode iniciar seu próprio servidor local (padrão) ou conectar-se a uma URL de servidor que você configurou. - -Se você ver um diálogo **"Conexão Falhou"** (ou o aplicativo nunca passa da tela de inicialização), verifique se há uma URL de servidor personalizada. - -#### Limpando a URL do servidor padrão do desktop - -Na tela inicial, clique no nome do servidor (com o ponto de status) para abrir o seletor de Servidor. Na seção **Servidor padrão**, clique em **Limpar**. - -#### Removendo `server.port` / `server.hostname` da sua configuração - -Se seu `opencode.json(c)` contiver uma seção `server`, remova-a temporariamente e reinicie o aplicativo de desktop. - -#### Verificando as variáveis de ambiente - -Se você tiver `OPENCODE_PORT` definido em seu ambiente, o aplicativo de desktop tentará usar essa porta para o servidor local. - -- Desfaça `OPENCODE_PORT` (ou escolha uma porta livre) e reinicie. - ---- - -### Linux: Problemas com Wayland / X11 - -No Linux, algumas configurações do Wayland podem causar janelas em branco ou erros de compositor. - -- Se você estiver no Wayland e o aplicativo estiver em branco/travando, tente iniciar com `OC_ALLOW_WAYLAND=1`. -- Se isso piorar as coisas, remova e tente iniciar sob uma sessão X11. - ---- - -### Windows: Runtime do WebView2 - -No Windows, o opencode Desktop requer o **WebView2 Runtime** do Microsoft Edge. Se o aplicativo abrir em uma janela em branco ou não iniciar, instale/atualize o WebView2 e tente novamente. - ---- - -### Windows: Problemas gerais de desempenho - -Se você estiver enfrentando desempenho lento, problemas de acesso a arquivos ou problemas no terminal no Windows, tente usar [WSL (Windows Subsystem for Linux)](/docs/windows-wsl). O WSL fornece um ambiente Linux que funciona de forma mais integrada com os recursos do opencode. - ---- - -### Notificações não aparecendo - -O opencode Desktop só mostra notificações do sistema quando: - -- as notificações estão habilitadas para o opencode nas configurações do seu sistema operacional, e -- a janela do aplicativo não está focada. - ---- - -### Redefinindo o armazenamento do aplicativo de desktop (último recurso) - -Se o aplicativo não iniciar e você não conseguir limpar as configurações pela interface, redefina o estado salvo do aplicativo de desktop. - -1. Saia do opencode Desktop. -2. Encontre e exclua estes arquivos (eles estão no diretório de dados do aplicativo opencode Desktop): - -- `opencode.settings.dat` (URL do servidor padrão do desktop) -- `opencode.global.dat` e `opencode.workspace.*.dat` (estado da interface como servidores/projetos recentes) - -Para encontrar o diretório rapidamente: - -- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (depois pesquise pelos nomes dos arquivos acima) -- **Linux**: pesquise em `~/.local/share` pelos nomes dos arquivos acima -- **Windows**: Pressione `WIN+R` -> `%APPDATA%` (depois pesquise pelos nomes dos arquivos acima) - ---- - -## Obtendo ajuda - -Se você estiver enfrentando problemas com o opencode: - -1. **Relatar problemas no GitHub** - - A melhor maneira de relatar bugs ou solicitar recursos é através do nosso repositório no GitHub: - - [**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues) - - Antes de criar um novo problema, pesquise problemas existentes para ver se seu problema já foi relatado. - -2. **Junte-se ao nosso Discord** - - Para ajuda em tempo real e discussão da comunidade, junte-se ao nosso servidor Discord: - - [**opencode.ai/discord**](https://opencode.ai/discord) - ---- - -## Problemas comuns - -Aqui estão alguns problemas comuns e como resolvê-los. - ---- - -### O opencode não inicia - -1. Verifique os logs em busca de mensagens de erro -2. Tente executar com `--print-logs` para ver a saída no terminal -3. Certifique-se de que você tem a versão mais recente com `opencode upgrade` - ---- - -### Problemas de autenticação - -1. Tente reautenticar com o comando `/connect` na TUI -2. Verifique se suas chaves de API são válidas -3. Certifique-se de que sua rede permite conexões com a API do provedor - ---- - -### Modelo não disponível - -1. Verifique se você se autenticou com o provedor -2. Verifique se o nome do modelo em sua configuração está correto -3. Alguns modelos podem exigir acesso ou assinaturas específicas - -Se você encontrar `ProviderModelNotFoundError`, é mais provável que você esteja referenciando um modelo incorretamente em algum lugar. -Os modelos devem ser referenciados assim: `/` - -Exemplos: - -- `openai/gpt-4.1` -- `openrouter/google/gemini-2.5-flash` -- `opencode/kimi-k2` - -Para descobrir quais modelos você tem acesso, execute `opencode models` - ---- - -### ProviderInitError - -Se você encontrar um ProviderInitError, provavelmente você tem uma configuração inválida ou corrompida. - -Para resolver isso: - -1. Primeiro, verifique se seu provedor está configurado corretamente seguindo o [guia de provedores](/docs/providers) -2. Se o problema persistir, tente limpar sua configuração armazenada: - - ```bash - rm -rf ~/.local/share/opencode - ``` - - No Windows, pressione `WIN+R` e exclua: `%USERPROFILE%\.local\share\opencode` - -3. Reautentique-se com seu provedor usando o comando `/connect` na TUI. - ---- - -### AI_APICallError e problemas com pacotes de provedores - -Se você encontrar erros de chamada de API, isso pode ser devido a pacotes de provedores desatualizados. O opencode instala dinamicamente pacotes de provedores (OpenAI, Anthropic, Google, etc.) conforme necessário e os armazena em cache localmente. - -Para resolver problemas com pacotes de provedores: - -1. Limpe o cache do pacote de provedores: - - ```bash - rm -rf ~/.cache/opencode - ``` - - No Windows, pressione `WIN+R` e exclua: `%USERPROFILE%\.cache\opencode` - -2. Reinicie o opencode para reinstalar os pacotes de provedores mais recentes - -Isso forçará o opencode a baixar as versões mais recentes dos pacotes de provedores, o que muitas vezes resolve problemas de compatibilidade com parâmetros de modelo e alterações na API. - ---- - -### Copiar/colar não funciona no Linux - -Usuários do Linux precisam ter um dos seguintes utilitários de área de transferência instalados para que a funcionalidade de copiar/colar funcione: - -**Para sistemas X11:** - -```bash -apt install -y xclip -# or -apt install -y xsel -``` - -**Para sistemas Wayland:** - -```bash -apt install -y wl-clipboard -``` - -**Para ambientes sem cabeça:** - -```bash -apt install -y xvfb -# and run: -Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & -export DISPLAY=:99.0 -``` - -O opencode detectará se você está usando Wayland e preferirá `wl-clipboard`, caso contrário, tentará encontrar ferramentas de área de transferência na ordem: `xclip` e `xsel`. diff --git a/packages/web/src/content/docs/pt-br/tui.mdx b/packages/web/src/content/docs/pt-br/tui.mdx deleted file mode 100644 index ffd74c4299..0000000000 --- a/packages/web/src/content/docs/pt-br/tui.mdx +++ /dev/null @@ -1,426 +0,0 @@ ---- -title: TUI -description: Usando a interface de usuário de terminal opencode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -O opencode fornece uma interface de terminal interativa ou TUI para trabalhar em seus projetos com um LLM. - -Executar opencode inicia o TUI para o diretório atual. - -```bash -opencode -``` - -Ou você pode iniciá-lo para um diretório de trabalho específico. - -```bash -opencode /path/to/project -``` - -Uma vez que você esteja no TUI, você pode solicitar com uma mensagem. - -```text -Faça um resumo rápido da base de código. -``` - ---- - -## Referências de arquivos - -Você pode referenciar arquivos em suas mensagens usando `@`. Isso faz uma busca difusa de arquivos no diretório de trabalho atual. - -:::tip -Você também pode usar `@` para referenciar arquivos em suas mensagens. -::: - -```text "@packages/functions/src/api/index.ts" -Como a autenticação é tratada em @packages/functions/src/api/index.ts? -``` - -O conteúdo do arquivo é adicionado à conversa automaticamente. - ---- - -## Comandos Bash - -Comece uma mensagem com `!` para executar um comando de shell. - -```bash frame="none" -!ls -la -``` - -A saída do comando é adicionada à conversa como um resultado de ferramenta. - ---- - -## Comandos - -Ao usar o TUI do opencode, você pode digitar `/` seguido pelo nome de um comando para executar ações rapidamente. Por exemplo: - -```bash frame="none" -/help -``` - -A maioria dos comandos também possui atalhos usando `ctrl+x` como a tecla líder, onde `ctrl+x` é a tecla líder padrão. [Saiba mais](/docs/keybinds). - -Aqui estão todos os comandos de barra disponíveis: - ---- - -### connect - -Adicione um provedor ao opencode. Permite que você selecione entre os provedores disponíveis e adicione suas chaves de API. - -```bash frame="none" -/connect -``` - ---- - -### compact - -Compacte a sessão atual. _Alias_: `/summarize` - -```bash frame="none" -/compact -``` - -**Atalho:** `ctrl+x c` - ---- - -### details - -Alternar detalhes da execução da ferramenta. - -```bash frame="none" -/details -``` - -**Atalho:** `ctrl+x d` - ---- - -### editor - -Abra um editor externo para compor mensagens. Usa o editor definido na sua variável de ambiente `EDITOR`. [Saiba mais](#editor-setup). - -```bash frame="none" -/editor -``` - -**Atalho:** `ctrl+x e` - ---- - -### exit - -Saia do opencode. _Aliases_: `/quit`, `/q` - -```bash frame="none" -/exit -``` - -**Atalho:** `ctrl+x q` - ---- - -### export - -Exporte a conversa atual para Markdown e abra no seu editor padrão. Usa o editor definido na sua variável de ambiente `EDITOR`. [Saiba mais](#editor-setup). - -```bash frame="none" -/export -``` - -**Atalho:** `ctrl+x x` - ---- - -### help - -Mostre o diálogo de ajuda. - -```bash frame="none" -/help -``` - -**Atalho:** `ctrl+x h` - ---- - -### init - -Crie ou atualize o arquivo `AGENTS.md`. [Saiba mais](/docs/rules). - -```bash frame="none" -/init -``` - -**Atalho:** `ctrl+x i` - ---- - -### models - -Liste os modelos disponíveis. - -```bash frame="none" -/models -``` - -**Atalho:** `ctrl+x m` - ---- - -### new - -Inicie uma nova sessão. _Alias_: `/clear` - -```bash frame="none" -/new -``` - -**Atalho:** `ctrl+x n` - ---- - -### redo - -Refaça uma mensagem anteriormente desfeita. Disponível apenas após usar `/undo`. - -:::tip -Quaisquer alterações de arquivo também serão restauradas. -::: - -Internamente, isso usa Git para gerenciar as alterações de arquivo. Portanto, seu projeto **precisa ser um repositório Git**. - -```bash frame="none" -/redo -``` - -**Atalho:** `ctrl+x r` - ---- - -### sessions - -Liste e alterne entre sessões. _Aliases_: `/resume`, `/continue` - -```bash frame="none" -/sessions -``` - -**Atalho:** `ctrl+x l` - ---- - -### share - -Compartilhe a sessão atual. [Saiba mais](/docs/share). - -```bash frame="none" -/share -``` - -**Atalho:** `ctrl+x s` - ---- - -### themes - -Liste os temas disponíveis. - -```bash frame="none" -/themes -``` - -**Atalho:** `ctrl+x t` - ---- - -### thinking - -Alternar a visibilidade dos blocos de pensamento/razão na conversa. Quando ativado, você pode ver o processo de raciocínio do modelo para modelos que suportam pensamento estendido. - -:::note -Este comando apenas controla se os blocos de pensamento são **exibidos** - não ativa ou desativa as capacidades de raciocínio do modelo. Para alternar as capacidades reais de raciocínio, use `ctrl+t` para alternar entre variantes do modelo. -::: - -```bash frame="none" -/thinking -``` - ---- - -### undo - -Desfaça a última mensagem na conversa. Remove a mensagem mais recente do usuário, todas as respostas subsequentes e quaisquer alterações de arquivo. - -:::tip -Quaisquer alterações de arquivo feitas também serão revertidas. -::: - -Internamente, isso usa Git para gerenciar as alterações de arquivo. Portanto, seu projeto **precisa ser um repositório Git**. - -```bash frame="none" -/undo -``` - -**Atalho:** `ctrl+x u` - ---- - -### unshare - -Descompartilhe a sessão atual. [Saiba mais](/docs/share#un-sharing). - -```bash frame="none" -/unshare -``` - ---- - -## Configuração do Editor - -Tanto os comandos `/editor` quanto `/export` usam o editor especificado na sua variável de ambiente `EDITOR`. - - - - ```bash - # Exemplo para nano ou vim - export EDITOR=nano - export EDITOR=vim - - # Para editores GUI, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # inclua --wait - export EDITOR="code --wait" - ``` - - Para torná-lo permanente, adicione isso ao seu perfil de shell; - `~/.bashrc`, `~/.zshrc`, etc. - - - - - ```bash - set EDITOR=notepad - - # Para editores GUI, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # inclua --wait - set EDITOR=code --wait - ``` - - Para torná-lo permanente, use **Propriedades do Sistema** > **Variáveis de Ambiente**. - - - - - ```powershell - $env:EDITOR = "notepad" - - # Para editores GUI, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # inclua --wait - $env:EDITOR = "code --wait" - ``` - - Para torná-lo permanente, adicione isso ao seu perfil do PowerShell. - - - - -As opções de editor populares incluem: - -- `code` - VS Code -- `cursor` - Cursor -- `windsurf` - Windsurf -- `nvim` - Editor Neovim -- `vim` - Editor Vim -- `nano` - Editor Nano -- `notepad` - Bloco de Notas do Windows -- `subl` - Sublime Text - -:::note -Alguns editores como o VS Code precisam ser iniciados com a flag `--wait`. -::: - -Alguns editores precisam de argumentos de linha de comando para rodar em modo bloqueante. A flag `--wait` faz com que o processo do editor bloqueie até ser fechado. - ---- - -## Configuração - -Você pode personalizar o comportamento do TUI através de `tui.json` (ou `tui.jsonc`). - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -Isso é separado do `opencode.json`, que configura o comportamento do servidor/runtime. - -`keybinds` é combinado com os padrões internos, então você só precisa configurar os atalhos que deseja alterar. - -### Opções - -- `theme` - Define o tema da sua interface. [Saiba mais](/docs/themes). -- `keybinds` - Personaliza atalhos de teclado. [Saiba mais](/docs/keybinds). -- `leader_timeout` - Controla por quanto tempo o OpenCode espera depois da leader key. O padrão é `2000`. -- `scroll_acceleration.enabled` - Ative a aceleração de rolagem no estilo macOS para uma rolagem suave e natural. Quando ativado, a velocidade de rolagem aumenta com gestos de rolagem rápidos e permanece precisa para movimentos mais lentos. **Esta configuração tem precedência sobre `scroll_speed` e a substitui quando ativada.** -- `scroll_speed` - Controla quão rápido o TUI rola ao usar comandos de rolagem (mínimo: `0.001`, suporta valores decimais). O padrão é `3`. **Nota: Isso é ignorado se `scroll_acceleration.enabled` estiver definido como `true`.** -- `diff_style` - Controla a renderização de diffs. `"auto"` se adapta à largura do terminal, `"stacked"` sempre mostra um layout de coluna única. -- `mouse` - Ativa ou desativa a captura do mouse no TUI (padrão: `true`). Quando desativado, o comportamento nativo do terminal para seleção e rolagem com o mouse é preservado. -- `attention` - Configura notificações de desktop e sons do TUI. Desativado por padrão. - -Use `OPENCODE_TUI_CONFIG` para carregar um caminho de configuração TUI personalizado. - -### Attention - -Attention permite que o TUI avise você quando o OpenCode espera uma resposta, precisa da aprovação de uma permissão, encontra um erro de sessão ou conclui uma sessão. Ative com `attention.enabled`; eventos integrados reproduzem sons quando acontecem. As notificações de desktop só são enviadas quando a janela do terminal não está em foco e não são usadas para eventos de subagent. - -- `enabled` - Ativa todas as notificações e sons de Attention. O padrão é `false`. -- `notifications` - Quando Attention está ativo, permite que o TUI envie notificações de desktop pelo terminal. O padrão é `true`. -- `sound` - Quando Attention está ativo, permite reproduzir sons de aviso. O padrão é `true`. -- `volume` - Volume padrão dos sons, de `0` a `1`. O padrão é `0.4`. -- `sound_pack` - ID do sound pack a ser usado. O padrão é `opencode.default`. -- `sounds` - Define arquivos de som personalizados para `default`, `question`, `permission`, `error`, `done` ou `subagent_done`. Os caminhos podem ser absolutos, URLs `file://` ou relativos a `tui.json`. - ---- - -## Personalização - -Você pode personalizar vários aspectos da visualização do TUI usando a paleta de comandos (`ctrl+x h` ou `/help`). Essas configurações persistem entre reinicializações. - ---- - -#### Exibição do nome de usuário - -Alternar se seu nome de usuário aparece nas mensagens de chat. Acesse isso através de: - -- Paleta de comandos: Pesquise por "username" ou "hide username" -- A configuração persiste automaticamente e será lembrada entre as sessões do TUI diff --git a/packages/web/src/content/docs/pt-br/web.mdx b/packages/web/src/content/docs/pt-br/web.mdx deleted file mode 100644 index 5338a4ce40..0000000000 --- a/packages/web/src/content/docs/pt-br/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Web -description: Usando o opencode no seu navegador. ---- - -O opencode pode ser executado como uma aplicação web no seu navegador, proporcionando a mesma poderosa experiência de codificação com IA sem precisar de um terminal. - -![opencode Web - Nova Sessão](../../../assets/web/web-homepage-new-session.png) - -## Primeiros passos - -Inicie a interface web executando: - -```bash -opencode web -``` - -Isso inicia um servidor local em `127.0.0.1` com uma porta aleatória disponível e abre automaticamente o opencode no seu navegador padrão. - -:::caution -Se `OPENCODE_SERVER_PASSWORD` não estiver definido, o servidor ficará sem segurança. Isso é aceitável para uso local, mas deve ser configurado para acesso à rede. -::: - -:::tip[Usuários do Windows] -Para a melhor experiência, execute `opencode web` a partir do [WSL](/docs/windows-wsl) em vez do PowerShell. Isso garante acesso adequado ao sistema de arquivos e integração com o terminal. -::: - ---- - -## Configuração - -Você pode configurar o servidor web usando flags de linha de comando ou no seu [arquivo de configuração](/docs/config). - -### Porta - -Por padrão, o opencode escolhe uma porta disponível. Você pode especificar uma porta: - -```bash -opencode web --port 4096 -``` - -### Nome do Host - -Por padrão, o servidor se vincula a `127.0.0.1` (apenas localhost). Para tornar o opencode acessível na sua rede: - -```bash -opencode web --hostname 0.0.0.0 -``` - -Ao usar `0.0.0.0`, o opencode exibirá endereços locais e de rede: - -``` - Local access: http://localhost:4096 - Network access: http://192.168.1.100:4096 -``` - -### Descoberta mDNS - -Ative o mDNS para tornar seu servidor descobrível na rede local: - -```bash -opencode web --mdns -``` - -Isso define automaticamente o nome do host como `0.0.0.0` e anuncia o servidor como `opencode.local`. - -Você pode personalizar o nome de domínio mDNS para executar várias instâncias na mesma rede: - -```bash -opencode web --mdns --mdns-domain myproject.local -``` - -### CORS - -Para permitir domínios adicionais para CORS (útil para frontends personalizados): - -```bash -opencode web --cors https://example.com -``` - -### Autenticação - -Para proteger o acesso, defina uma senha usando a variável de ambiente `OPENCODE_SERVER_PASSWORD`: - -```bash -OPENCODE_SERVER_PASSWORD=secret opencode web -``` - -O nome de usuário padrão é `opencode`, mas pode ser alterado com `OPENCODE_SERVER_USERNAME`. - ---- - -## Usando a Interface Web - -Uma vez iniciada, a interface web fornece acesso às suas sessões do opencode. - -### Sessões - -Visualize e gerencie suas sessões a partir da página inicial. Você pode ver sessões ativas e iniciar novas. - -![opencode Web - Sessão Ativa](../../../assets/web/web-homepage-active-session.png) - -### Status do Servidor - -Clique em "Ver Servidores" para visualizar os servidores conectados e seu status. - -![opencode Web - Ver Servidores](../../../assets/web/web-homepage-see-servers.png) - ---- - -## Anexando um Terminal - -Você pode anexar um terminal TUI a um servidor web em execução: - -```bash -# Start the web server -opencode web --port 4096 - -# In another terminal, attach the TUI -opencode attach http://localhost:4096 -``` - -Isso permite que você use tanto a interface web quanto o terminal simultaneamente, compartilhando as mesmas sessões e estado. - ---- - -## Arquivo de Configuração - -Você também pode configurar as configurações do servidor no seu arquivo de configuração `opencode.json`: - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -As flags de linha de comando têm precedência sobre as configurações do arquivo de configuração. diff --git a/packages/web/src/content/docs/pt-br/windows-wsl.mdx b/packages/web/src/content/docs/pt-br/windows-wsl.mdx deleted file mode 100644 index a4b9ac11ad..0000000000 --- a/packages/web/src/content/docs/pt-br/windows-wsl.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Windows (WSL) -description: Execute o opencode no Windows com WSL para melhor experiência. ---- - -import { Steps } from "@astrojs/starlight/components" - -Embora o opencode possa rodar direto no Windows, recomendamos usar [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) para a melhor experiência. O WSL oferece um ambiente Linux que funciona de forma integrada com os recursos do opencode. - -:::tip[Por que WSL?] -O WSL oferece melhor desempenho de sistema de arquivos, suporte completo a terminal e compatibilidade com as ferramentas de desenvolvimento das quais o opencode depende. -::: - ---- - -## Configuração - - - -1. **Instale o WSL** - - Se ainda não instalou, [instale o WSL](https://learn.microsoft.com/en-us/windows/wsl/install) usando o guia oficial da Microsoft. - -2. **Instale o opencode no WSL** - - Depois de configurar o WSL, abra o terminal do WSL e instale o opencode usando um dos [métodos de instalação](/docs/). - - ```bash - curl -fsSL https://opencode.ai/install | bash - ``` - -3. **Use o opencode pelo WSL** - - Vá para o diretório do seu projeto (acesse arquivos do Windows via `/mnt/c/`, `/mnt/d/` etc.) e execute o opencode. - - ```bash - cd /mnt/c/Users/YourName/project - opencode - ``` - - - ---- - -## App desktop + servidor WSL - -Se você prefere usar o app desktop do opencode, mas quer rodar o servidor no WSL: - -1. **Inicie o servidor no WSL** com `--hostname 0.0.0.0` para permitir conexões externas: - - ```bash - opencode serve --hostname 0.0.0.0 --port 4096 - ``` - -2. **Conecte o app desktop** em `http://localhost:4096` - -:::note -Se `localhost` não funcionar no seu ambiente, conecte usando o IP do WSL (no WSL: `hostname -I`) e use `http://:4096`. -::: - -:::caution -Ao usar `--hostname 0.0.0.0`, defina `OPENCODE_SERVER_PASSWORD` para proteger o servidor. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0 -``` - -::: - ---- - -## Cliente web + WSL - -Para a melhor experiência web no Windows: - -1. **Execute `opencode web` no terminal WSL** em vez do PowerShell: - - ```bash - opencode web --hostname 0.0.0.0 - ``` - -2. **Acesse pelo navegador do Windows** em `http://localhost:` (o opencode mostra a URL) - -Executar `opencode web` a partir do WSL garante acesso correto ao sistema de arquivos e integração com o terminal, continuando acessível no navegador do Windows. - ---- - -## Acessar arquivos do Windows - -O WSL pode acessar todos os arquivos do Windows pelo diretório `/mnt/`: - -- Unidade `C:` → `/mnt/c/` -- Unidade `D:` → `/mnt/d/` -- E assim por diante... - -Exemplo: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -Para uma experiência mais fluida, considere clonar/copiar seu repositório para o sistema de arquivos do WSL (por exemplo em `~/code/`) e executar o opencode por lá. -::: - ---- - -## Dicas - -- Mantenha o opencode rodando no WSL para projetos armazenados em unidades do Windows - o acesso aos arquivos fica fluido -- Use a [extensão WSL do VS Code](https://code.visualstudio.com/docs/remote/wsl) junto com o opencode para um fluxo de desenvolvimento integrado -- Sua configuração e suas sessões do opencode ficam armazenadas no ambiente WSL em `~/.local/share/opencode/` diff --git a/packages/web/src/content/docs/pt-br/zen.mdx b/packages/web/src/content/docs/pt-br/zen.mdx deleted file mode 100644 index 493b5eb322..0000000000 --- a/packages/web/src/content/docs/pt-br/zen.mdx +++ /dev/null @@ -1,301 +0,0 @@ ---- -title: Zen -description: Lista selecionada de modelos fornecidos pelo OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -O OpenCode Zen é uma lista de modelos testados e verificados fornecidos pela equipe do OpenCode. - -O Zen funciona como qualquer outro provedor no OpenCode. Você faz login no OpenCode Zen e recebe sua chave de API. É **completamente opcional** e você não precisa usá-lo para usar o OpenCode. - ---- - -## Contexto - -Existe um grande número de modelos disponíveis, mas apenas alguns deles funcionam bem como agentes de codificação. Além disso, a maioria dos provedores é configurada de formas muito diferentes; portanto, você obtém desempenho e qualidade muito diferentes. - -:::tip -Testamos um grupo selecionado de modelos e provedores que funcionam bem com o OpenCode. -::: - -Então, se você estiver usando um modelo por meio de algo como OpenRouter, nunca pode ter certeza de que está obtendo a melhor versão do modelo que deseja. - -Para corrigir isso, fizemos algumas coisas: - -1. Testamos um grupo selecionado de modelos e conversamos com suas equipes sobre a melhor forma de executá-los. -2. Depois, trabalhamos com alguns provedores para garantir que esses modelos fossem servidos corretamente. -3. Por fim, fizemos benchmark da combinação modelo/provedor e chegamos a uma lista que nos sentimos confortáveis em recomendar. - -O OpenCode Zen é um gateway de AI que dá a você acesso a esses modelos. - ---- - -## Como funciona - -O OpenCode Zen funciona como qualquer outro provedor no OpenCode. - -1. Você faz login no **OpenCode Zen**, adiciona seus dados de cobrança e copia sua chave de API. -2. Você executa o comando `/connect` no TUI, seleciona OpenCode Zen e cola sua chave de API. -3. Execute `/models` no TUI para ver a lista de modelos que recomendamos. - -Você é cobrado por solicitação e pode adicionar créditos à sua conta. - ---- - -## Endpoints - -Você também pode acessar nossos modelos pelos seguintes endpoints de API. - -| Modelo | ID do modelo | Endpoint | Pacote 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -O [model id](/docs/config/#models) na sua configuração do OpenCode usa o formato `opencode/`. Por exemplo, para GPT 5.5, você usaria `opencode/gpt-5.5` na sua configuração. - ---- - -### Modelos - -Você pode buscar a lista completa de modelos disponíveis e seus metadados em: - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## Preços - -Oferecemos um modelo pay-as-you-go. Abaixo estão os preços **por 1M tokens**. - -| Modelo | Entrada | Saída | Leitura em cache | Escrita em cache | -| --------------------------------- | ------- | ------- | ---------------- | ---------------- | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -Você pode notar _Claude Haiku 3.5_ no seu histórico de uso. Este é um [low cost model](/docs/config/#models) usado para gerar os títulos das suas sessões. - -:::note -As taxas de cartão de crédito são repassadas a preço de custo (4.4% + $0.30 por transação); não cobramos nada além disso. -::: - -Os modelos gratuitos: - -- DeepSeek V4 Flash Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. -- MiMo-V2.5 Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. -- North Mini Code Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. -- Nemotron 3 Ultra Free está disponível no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. -- Big Pickle é um modelo stealth que está gratuito no OpenCode por tempo limitado. A equipe está usando esse período para coletar feedback e melhorar o modelo. - -Entre em contato se você tiver alguma dúvida. - ---- - -### Recarga automática - -Se o seu saldo cair abaixo de $5, o Zen recarregará automaticamente $20. - -Você pode alterar o valor da recarga automática. Também pode desativar a recarga automática por completo. - ---- - -### Limites mensais - -Você também pode definir um limite mensal de uso para todo o workspace e para cada membro da sua equipe. - -Por exemplo, digamos que você defina um limite mensal de uso de $20; o Zen não usará mais de $20 em um mês. Mas, se você tiver a recarga automática ativada, o Zen pode acabar cobrando mais de $20 se o seu saldo cair abaixo de $5. - ---- - -### Modelos obsoletos - -| Modelo | Data de descontinuação | -| ------------------ | ---------------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## Privacidade - -Todos os nossos modelos são hospedados nos US. Nossos provedores seguem uma política de zero-retention e não usam seus dados para treinamento de modelos, com as seguintes exceções: - -- Big Pickle: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo. -- DeepSeek V4 Flash Free: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo. -- MiMo-V2.5 Free: Durante seu período gratuito, os dados coletados podem ser usados para melhorar o modelo. -- North Mini Code Free: Durante o período gratuito, os dados coletados poderão ser retidos e usados para aprimorar o modelo. Não envie dados pessoais ou confidenciais. Consulte nossos [Termos de Uso](https://cohere.com/terms-of-use) e nossa [Política de Privacidade](https://cohere.com/privacy). -- Nemotron 3 Ultra Free (endpoints gratuitos da NVIDIA): Apenas para uso de avaliação — não envie dados pessoais ou confidenciais. Seu uso é registrado para fins de segurança e para melhorar os produtos e serviços da NVIDIA. Os dados de sessão registrados para fins de melhoria não estão vinculados à sua identidade nem a qualquer identificador persistente. Para mais informações sobre nossas práticas de processamento de dados, consulte nossa [Política de Privacidade](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Ao interagir com este endpoint, você consente com a nossa coleta, registro e uso dessas informações e com os [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). -- OpenAI APIs: As solicitações são retidas por 30 dias de acordo com [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data). -- Anthropic APIs: As solicitações são retidas por 30 dias de acordo com [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage). - ---- - -## Para equipes - -O Zen também funciona muito bem para equipes. Você pode convidar colegas de equipe, atribuir papéis, selecionar os modelos que sua equipe usa e muito mais. - -:::note -Workspaces estão atualmente gratuitos para equipes como parte do beta. -::: - -Gerenciar seu workspace está atualmente gratuito para equipes como parte do beta. Em breve, compartilharemos mais detalhes sobre os preços. - ---- - -### Papéis - -Você pode convidar colegas de equipe para o seu workspace e atribuir papéis: - -- **Admin**: Gerenciar modelos, membros, chaves de API e cobrança -- **Member**: Gerenciar apenas as próprias chaves de API - -Admins também podem definir limites mensais de gastos para cada membro para manter os custos sob controle. - ---- - -### Acesso a modelos - -Admins podem habilitar ou desabilitar modelos específicos para o workspace. Solicitações feitas a um modelo desabilitado retornarão um erro. - -Isso é útil em casos nos quais você quer desabilitar o uso de um modelo que coleta dados. - ---- - -### Traga sua própria chave - -Você pode usar suas próprias chaves de API da OpenAI ou Anthropic e ainda acessar outros modelos no Zen. - -Quando você usa suas próprias chaves, os tokens são cobrados diretamente pelo provedor, não pelo Zen. - -Por exemplo, sua organização pode já ter uma chave para OpenAI ou Anthropic e você quer usar essa em vez da que o Zen fornece. - ---- - -## Objetivos - -Criamos o OpenCode Zen para: - -1. Fazer **benchmark** dos melhores modelos/provedores para agentes de codificação. -2. Ter acesso às opções de **mais alta qualidade** e não degradar o desempenho nem encaminhar para provedores mais baratos. -3. Repassar quaisquer **quedas de preço** vendendo a preço de custo; assim, a única margem é para cobrir nossas taxas de processamento. -4. Não ter **lock-in**, permitindo que você o use com qualquer outro agente de codificação. E sempre permitir que você use qualquer outro provedor com o OpenCode também. diff --git a/packages/web/src/content/docs/ru/acp.mdx b/packages/web/src/content/docs/ru/acp.mdx deleted file mode 100644 index c4a6132fe5..0000000000 --- a/packages/web/src/content/docs/ru/acp.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: Поддержка ACP -description: Используйте opencode в любом ACP-совместимом редакторе. ---- - -opencode поддерживает [Agent Client Protocol](https://agentclientprotocol.com) (ACP), что позволяет использовать его непосредственно в совместимых редакторах и IDE. - -:::tip -Список редакторов и инструментов, поддерживающих ACP, можно найти в [отчете о ходе работы ACP](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` в **Палитре команд**. - -Вы также можете привязать сочетание клавиш, отредактировав свой `keymap.json`: - -```json title="keymap.json" -[ - { - "bindings": { - "cmd-alt-o": [ - "agent::NewExternalAgentThread", - { - "agent": { - "custom": { - "name": "OpenCode", - "command": { - "command": "opencode", - "args": ["acp"] - } - } - } - } - ] - } - } -] -``` - ---- - -### IDE JetBrains - -Добавьте в свою [JetBrains IDE](https://www.jetbrains.com/) acp.json в соответствии с [документацией](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`), обратитесь к разделу [Настройка адаптеров: переменные среды](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) в документации CodeCompanion.nvim для получения полной информации. - -## Поддержка - -opencode через ACP работает так же, как и в терминале. Поддерживаются все функции: - -:::note -Некоторые встроенные команды слэша, такие как `/undo` и `/redo`, в настоящее время не поддерживаются. -::: - -- Встроенные инструменты (файловые операции, команды терминала и т. д.) -- Пользовательские инструменты и команды слэша -- Серверы MCP, настроенные в вашей конфигурации opencode -- Правила для конкретного проекта из `AGENTS.md` -- Пользовательские форматтеры и линтеры -- Агенты и система разрешений diff --git a/packages/web/src/content/docs/ru/agents.mdx b/packages/web/src/content/docs/ru/agents.mdx deleted file mode 100644 index 767cbf862f..0000000000 --- a/packages/web/src/content/docs/ru/agents.mdx +++ /dev/null @@ -1,754 +0,0 @@ ---- -title: Агенты -description: Настройте и используйте специализированные агенты. ---- - -Агенты — это специализированные ИИ-помощники, которых можно настроить для конкретных задач и рабочих процессов. Они позволяют создавать специализированные инструменты с настраиваемыми подсказками, моделями и доступом к инструментам. - -:::tip -Используйте агент плана для анализа кода и просмотра предложений без внесения каких-либо изменений в код. -::: - -Вы можете переключаться между агентами во время сеанса или вызывать их с помощью упоминания `@`. - ---- - -## Типы - -В opencode есть два типа агентов; Первичные агенты и субагенты. - ---- - -### Первичные агенты - -Первичные агенты — это основные помощники, с которыми вы взаимодействуете напрямую. Вы можете переключаться между ними, используя клавишу **Tab** или настроенную привязку клавиш `switch_agent`. Эти агенты ведут ваш основной разговор. Доступ к инструментам настраивается с помощью разрешений — например, при сборке все инструменты включены, а при планировании — ограничены. - -:::tip -Вы можете использовать клавишу **Tab** для переключения между основными агентами во время сеанса. -::: - -opencode поставляется с двумя встроенными основными агентами: **Build** и **Plan**. Мы рассмотрим их ниже. - ---- - -### Субагенты - -Субагенты — это специализированные помощники, которых основные агенты могут вызывать для выполнения определенных задач. Вы также можете вызвать их вручную, **@ упомянув** их в своих сообщениях. - -OpenCode поставляется с тремя встроенными субагентами: **General**, **Explore** и **Scout**. Мы рассмотрим их ниже. - ---- - -## Встроенные агенты - -OpenCode поставляется с двумя встроенными основными агентами и тремя встроенными субагентами. - ---- - -### Использование Build - -_Режим_: `primary` - -Build — основной агент **по умолчанию** со всеми включенными инструментами. Это стандартный агент для разработки, где вам необходим полный доступ к файловым операциям и системным командам. - ---- - -### Использование Plan - -_Режим_: `primary` - -Агент с ограниченным доступом, предназначенный для планирования и анализа. Мы используем систему разрешений, чтобы предоставить вам больше контроля и предотвратить непреднамеренные изменения. -По умолчанию для всех следующих параметров установлено значение `ask`: - -- `file edits`: Все записи, исправления и изменения. -- `bash`: все команды bash. - -Этот агент полезен, если вы хотите, чтобы LLM анализировал код, предлагал изменения или создавал планы без внесения каких-либо фактических изменений в вашу кодовую базу. - ---- - -### Использование General - -_Режим_: `subagent` - -Универсальный агент для исследования сложных вопросов и выполнения многоэтапных задач. Имеет полный доступ к инструментам (кроме задач), поэтому при необходимости может вносить изменения в файлы. Используйте это для параллельного выполнения нескольких единиц работы. - ---- - -### Использование Explore - -_Режим_: `subagent` - -Быстрый агент только для чтения для изучения кодовых баз. Невозможно изменить файлы. Используйте это, когда вам нужно быстро найти файлы по шаблонам, выполнить поиск кода по ключевым словам или ответить на вопросы о кодовой базе. - ---- - -### Использование Scout - -_Режим_: `subagent` - -Агент только для чтения для работы с внешней документацией и исследования зависимостей. Используйте его, когда нужно клонировать репозиторий зависимости в управляемый кэш OpenCode, изучить исходный код библиотеки или сверить локальный код с upstream-реализациями без изменений в рабочем пространстве. - ---- - -### Использование Compact - -_Режим_: `primary` - -Скрытый системный агент, который сжимает длинный контекст в меньшее резюме. Он запускается автоматически при необходимости и не может быть выбран в пользовательском интерфейсе. - ---- - -### Использование Title - -_Режим_: `primary` - -Скрытый системный агент, генерирующий короткие заголовки сессий. Он запускается автоматически и не может быть выбран в пользовательском интерфейсе. - ---- - -### Использование Summary - -_Режим_: `primary` - -Скрытый системный агент, создающий сводки сеансов. Он запускается автоматически и не может быть выбран в пользовательском интерфейсе. - ---- - -## Использование - -1. Для основных агентов используйте клавишу **Tab** для переключения между ними во время сеанса. Вы также можете использовать настроенную привязку клавиш `switch_agent`. - -2. Субагенты могут быть вызваны: - - **Автоматически** основными агентами для выполнения специализированных задач на основе их описаний. - - Вручную, **@ упомянув** субагента в своем сообщении. Например. - - ```txt frame="none" - @general help me search for this function - ``` - -3. **Навигация между сеансами**. Когда субагенты создают свои собственные дочерние сеансы, вы можете перемещаться между родительским сеансом и всеми дочерними сеансами, используя: - - **\+Right** (или настроенная вами комбинация клавиш `session_child_cycle`) для перехода вперед через родительский элемент → дочерний элемент1 → дочерний элемент2 → ... → родительский элемент. - - **\+Left** (или настроенная вами комбинация клавиш `session_child_cycle_reverse`) для перехода назад по родительскому элементу ← дочерний элемент1 ← дочерний элемент2 ← ... ← родительский элемент - - Это позволяет плавно переключаться между основным разговором и работой специализированного субагента. - ---- - -## Настройка - -Вы можете настроить встроенные агенты или создать свои собственные посредством настройки. Агенты можно настроить двумя способами: - ---- - -### 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 - } - } -} -``` - -Значения температуры обычно находятся в диапазоне от 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}" - } - } -} -``` - -Если температура не указана, 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`, чтобы переопределить модель этого агента. Полезно для использования разных моделей, оптимизированных под разные задачи. Например, более быстрая модель планирования и более эффективная модель реализации. - -:::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. - ---- - -### Инструменты - -Контролируйте, какие инструменты доступны в этом агенте, с помощью конфигурации `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 -Конфигурация, специфичная для агента, переопределяет глобальную конфигурацию. -::: - -Вы также можете использовать подстановочные знаки для одновременного управления несколькими инструментами. Например, чтобы отключить все инструменты с сервера 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 pattern. - -```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 - } - } -} -``` - -Это влияет только на видимость пользователя в меню автозаполнения. Скрытые агенты по-прежнему могут быть вызваны моделью с помощью инструмента «Задачи», если разрешения позволяют. - -:::note -Применяется только к агентам `mode: subagent`. -::: - ---- - -### Разрешения задач - -Управляйте тем, какие субагенты агент может вызывать с помощью инструмента задач с помощью `permission.task`. Использует шаблоны glob для гибкого сопоставления. - -```json title="opencode.json" -{ - "agent": { - "orchestrator": { - "mode": "primary", - "permission": { - "task": { - "*": "deny", - "orchestrator-*": "allow", - "code-reviewer": "ask" - } - } - } - } -} -``` - -Если установлено значение `deny`, субагент полностью удаляется из описания инструмента «Задача», поэтому модель не будет пытаться его вызвать. - -:::tip -Правила оцениваются по порядку, и **побеждает последнее подходящее правило**. В приведенном выше примере `orchestrator-planner` соответствует как `*` (запретить), так и `orchestrator-*` (разрешить), но поскольку `orchestrator-*` идет после `*`, результатом будет `allow`. -::: - -:::tip -Пользователи всегда могут вызвать любой субагент напрямую через меню автозаполнения `@`, даже если разрешения задач агента запрещают это. -::: - ---- - -### Цвет - -Настройте внешний вид агента в пользовательском интерфейсе с помощью параметра `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`. Альтернатива температуре для контроля случайности. - -```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. Спрашивает, где сохранить агента: глобально или в проекте. -2. Запрашивает описание того, что должен делать агент. -3. Создает соответствующий системный промпт и идентификатор. -4. Позволяет выбрать, к каким инструментам агент будет иметь доступ. -5. Наконец, создает файл Markdown с конфигурацией агента. - ---- - -## Варианты использования - -Вот несколько распространенных случаев использования различных агентов. - -- **Агент сборки**: полная работа по разработке со всеми включенными инструментами. -- **Агент планирования**: анализ и планирование без внесения изменений. -- **Агент проверки**: проверка кода с доступом только для чтения и инструментами документирования. -- **Агент отладки**: сосредоточен на исследовании с включенными инструментами bash и чтения. -- **Агент документов**: запись документации с помощью файловых операций, но без системных команд. - ---- - -## Примеры - -Вот несколько примеров агентов, которые могут оказаться вам полезными. - -:::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 -``` diff --git a/packages/web/src/content/docs/ru/cli.mdx b/packages/web/src/content/docs/ru/cli.mdx deleted file mode 100644 index ac48039aa8..0000000000 --- a/packages/web/src/content/docs/ru/cli.mdx +++ /dev/null @@ -1,617 +0,0 @@ ---- -title: CLI -description: Параметры и команда opencode CLI. ---- - -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 - -Запустите TUI opencode. - -```bash -opencode [project] -``` - -#### Флаги - -| Флаг | Короткий | Описание | -| ---------------------------------------- | -------- | ----------------------------------------------------------------------------- | -| {"--continue"} | `-c` | Продолжить последний сеанс | -| {"--session"} | `-s` | Идентификатор сеанса для продолжения | -| {"--fork"} | | Разветвить сеанс при продолжении (используйте с `--continue` или `--session`) | -| {"--prompt"} | | Промпт для использования | -| {"--model"} | `-m` | Модель для использования в виде поставщика/модели. | -| {"--agent"} | | Агент для использования | -| {"--port"} | | Порт для прослушивания | -| {"--hostname"} | | Имя хоста для прослушивания | - ---- - -## Команды - -CLI opencode также имеет следующие команды. - ---- - -### agent - -Управляйте агентами для opencode. - -```bash -opencode agent [command] -``` - ---- - -### attach - -Подключите терминал к уже работающему внутреннему серверу opencode, запущенному с помощью команд `serve` или `web`. - -```bash -opencode attach [url] -``` - -Это позволяет использовать TUI с удаленным сервером opencode. Например: - -```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 -``` - -#### Флаги - -| Флаг | Короткий | Описание | -| ---------------------------------------- | -------- | ------------------------------------------------------------------------------------------------ | -| {"--dir"} | | Рабочий каталог для запуска TUI | -| {"--continue"} | `-c` | Продолжить последний сеанс | -| {"--session"} | `-s` | Идентификатор сеанса для продолжения | -| {"--fork"} | | Создать ответвление сеанса при продолжении (используйте с `--continue` или `--session`) | -| {"--password"} | `-p` | Пароль базовой аутентификации (по умолчанию `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Имя пользователя базовой аутентификации (по умолчанию `OPENCODE_SERVER_USERNAME` или `opencode`) | - ---- - -#### 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. - -```bash -opencode github run -``` - -##### Флаги - -| Флаг | Описание | -| ------------------------------------- | --------------------------------------------- | -| {"--event"} | Имитирующее событие GitHub для запуска агента | -| {"--token"} | Токен личного доступа GitHub | - ---- - -### mcp - -Управляйте серверами протокола контекста модели. - -```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 -``` - ---- - -### models - -Перечислите все доступные модели от настроенных поставщиков. - -```bash -opencode models [provider] -``` - -Эта команда отображает все модели, доступные у настроенных вами поставщиков, в формате `provider/model`. - -Это полезно для определения точного названия модели, которое будет использоваться в [вашем config](/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 -# 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" -``` - -#### Флаги - -| Флаг | Короткий | Описание | -| ---------------------------------------- | -------- | ------------------------------------------------------------------------------------------------ | -| {"--command"} | | Команда для запуска, используйте сообщение для аргументов | -| {"--continue"} | `-c` | Продолжить последний сеанс | -| {"--session"} | `-s` | Идентификатор сеанса для продолжения | -| {"--fork"} | | Разветвить сеанс при продолжении (используйте с `--continue` или `--session`) | -| {"--share"} | | Поделиться сеансом | -| {"--model"} | `-m` | Модель для использования в виде поставщика/модели. | -| {"--agent"} | | Агент для использования | -| {"--file"} | `-f` | Файл(ы) для прикрепления к сообщению | -| {"--format"} | | Формат: по умолчанию (отформатированный) или json (необработанные события JSON). | -| {"--title"} | | Название сеанса (использует усеченное приглашение, если значение не указано) | -| {"--attach"} | | Подключитесь к работающему серверу opencode (например, http://localhost:4096) | -| {"--password"} | `-p` | Пароль базовой аутентификации (по умолчанию `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Имя пользователя базовой аутентификации (по умолчанию `OPENCODE_SERVER_USERNAME` или `opencode`) | -| {"--dir"} | | Каталог для выполнения или путь на удалённом сервере при подключении | -| {"--variant"} | | Вариант модели (уровень рассуждений для провайдера) | -| {"--thinking"} | | Показать блоки размышлений | -| {"--port"} | | Порт локального сервера (по умолчанию случайный порт) | - ---- - -### serve - -Запустите автономный сервер opencode для доступа к API. Полный HTTP-интерфейс можно найти в [server docs](/docs/server). - -```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"} | | Формат вывода: таблица или json (таблица) | - ---- - -### stats - -Покажите статистику использования токенов и затрат для ваших сеансов opencode. - -```bash -opencode stats -``` - -#### Флаги - -| Флаг | Описание | -| --------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| {"--days"} | Показать статистику за последние N дней (все время) | -| {"--tools"} | Количество инструментов для отображения (все) | -| {"--models"} | Показать разбивку по использованию модели (по умолчанию скрыто). Передайте номер, чтобы показать верхнюю N | -| {"--project"} | Фильтровать по проекту (все проекты, пустая строка: текущий проект) | - ---- - -### export - -Экспортируйте данные сеанса в формате JSON. - -```bash -opencode export [sessionID] -``` - -Если вы не укажете идентификатор сеанса, вам будет предложено выбрать один из доступных сеансов. - ---- - -### import - -Импортируйте данные сеанса из файла JSON или URL-адреса общего ресурса opencode. - -```bash -opencode import -``` - -Вы можете импортировать из локального файла или URL-адреса общего ресурса 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 (агент-клиентский протокол). - -```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` | Используемый метод установки: local, npm, pnpm, bun, brew | - ---- - -## Глобальные флаги - -CLI opencode принимает следующие глобальные флаги. - -| Флаг | Короткий | Описание | -| ------------------------------------------ | -------- | ------------------------------------------ | -| {"--help"} | `-h` | Отобразить справку | -| {"--version"} | `-v` | Распечатать номер версии | -| {"--print-logs"} | | Печать журналов в stderr | -| {"--log-level"} | | Уровень журнала (DEBUG, INFO, WARN, ERROR) | - ---- - -## Переменные среды - -opencode можно настроить с помощью переменных среды. - -| Переменная | Тип | Описание | -| ------------------------------------- | ------------------- | -------------------------------------------------------------------------------- | -| `OPENCODE_AUTO_SHARE` | логическое значение | Автоматически делиться сеансами | -| `OPENCODE_GIT_BASH_PATH` | строка | Путь к исполняемому файлу Git Bash в Windows | -| `OPENCODE_CONFIG` | строка | Путь к файлу конфигурации | -| `OPENCODE_TUI_CONFIG` | строка | Путь к файлу конфигурации TUI | -| `OPENCODE_CONFIG_DIR` | строка | Путь к каталогу конфигурации | -| `OPENCODE_CONFIG_CONTENT` | строка | Встроенное содержимое конфигурации json | -| `OPENCODE_DISABLE_AUTOUPDATE` | логическое значение | Отключить автоматическую проверку обновлений | -| `OPENCODE_DISABLE_PRUNE` | логическое значение | Отключить удаление старых данных | -| `OPENCODE_DISABLE_TERMINAL_TITLE` | логическое значение | Отключить автоматическое обновление заголовка терминала | -| `OPENCODE_PERMISSION` | строка | Встроенная конфигурация разрешений json | -| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | логическое значение | Отключить плагины по умолчанию | -| `OPENCODE_DISABLE_LSP_DOWNLOAD` | логическое значение | Отключить автоматическую загрузку LSP-сервера | -| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | логическое значение | Включить экспериментальные модели | -| `OPENCODE_DISABLE_AUTOCOMPACT` | логическое значение | Отключить автоматическое сжатие контекста | -| `OPENCODE_DISABLE_CLAUDE_CODE` | логическое значение | Отключить чтение из `.claude` (подсказка + навыки) | -| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | логическое значение | Отключить чтение `~/.claude/CLAUDE.md` | -| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | логическое значение | Отключить загрузку `.claude/skills` | -| `OPENCODE_DISABLE_MODELS_FETCH` | логическое значение | Отключить получение моделей из удаленных источников | -| `OPENCODE_FAKE_VCS` | строка | Поддельный поставщик VCS для целей тестирования | -| `OPENCODE_CLIENT` | строка | Идентификатор клиента (по умолчанию `cli`) | -| `OPENCODE_ENABLE_EXA` | логическое значение | Включить инструменты веб-поиска Exa | -| `OPENCODE_SERVER_PASSWORD` | строка | Включить базовую аутентификацию для `serve`/`web` | -| `OPENCODE_SERVER_USERNAME` | строка | Переопределить имя пользователя базовой аутентификации (по умолчанию `opencode`) | -| `OPENCODE_MODELS_URL` | строка | Пользовательский URL-адрес для получения конфигурации модели | - ---- - -### Экспериментальные функции - -Эти переменные среды позволяют использовать экспериментальные функции, которые могут быть изменены или удалены. - -| Переменная | Тип | Описание | -| ----------------------------------------------- | ------------------- | ------------------------------------------------------ | -| `OPENCODE_EXPERIMENTAL` | логическое значение | Включить экспериментальные функции под общим флагом | -| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | логическое значение | Включить обнаружение значков | -| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | логическое значение | Отключить копирование при выборе в TUI | -| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | число | Таймаут по умолчанию для команд bash в мс | -| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | число | Максимальное количество токенов вывода для ответов LLM | -| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | логическое значение | Включить просмотр файлов для всего каталога | -| `OPENCODE_EXPERIMENTAL_OXFMT` | логическое значение | Включить форматтер oxfmt | -| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | логическое значение | Включить экспериментальный инструмент LSP | -| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | логическое значение | Отключить просмотрщик файлов | -| `OPENCODE_EXPERIMENTAL_EXA` | логическое значение | Включить экспериментальные функции Exa | -| `OPENCODE_EXPERIMENTAL_LSP_TY` | логическое значение | Включить TY LSP для файлов python | -| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | логическое значение | Включить режим плана | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | логическое значение | Включить фоновые задачи субагентов | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | логическое значение | Включить экспериментальную систему событий | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | логическое значение | Включить нативный путь запросов LLM | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | логическое значение | Включить параллельное выполнение веб-поиска | -| `OPENCODE_EXPERIMENTAL_SCOUT` | логическое значение | Включить субагент Scout | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | логическое значение | Включить поддержку рабочих областей | diff --git a/packages/web/src/content/docs/ru/commands.mdx b/packages/web/src/content/docs/ru/commands.mdx deleted file mode 100644 index 447ef0f0dc..0000000000 --- a/packages/web/src/content/docs/ru/commands.mdx +++ /dev/null @@ -1,323 +0,0 @@ ---- -title: Команды -description: Создавайте собственные команды для повторяющихся задач. ---- - -Пользовательские команды позволяют указать подсказку, которую вы хотите запускать при выполнении этой команды в 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` в вашем 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" - } - } -} -``` - -Теперь вы можете запустить эту команду в TUI: - -```bash frame="none" -/test -``` - ---- - -### Markdown - -Вы также можете определять команды, используя Markdown файлы. Поместите их в: - -- Глобальный: `~/.config/opencode/commands/` -- Для каждого проекта: `.opencode/commands/` - -```markdown title="~/.config/opencode/commands/test.md" ---- -description: Run tests with coverage -agent: build -model: anthropic/claude-3-5-sonnet-20241022 ---- - -Run the full test suite with coverage report and show any failures. -Focus on the failing tests and suggest fixes. -``` - -Имя Markdown файла становится именем команды. Например, `test.md` позволяет -вам запустить: - -```bash frame="none" -/test -``` - ---- - -## Настройка промпта - -Подсказки для пользовательских команд поддерживают несколько специальных заполнителей и синтаксиса. - ---- - -### Аргументы - -Передавайте аргументы командам, используя заполнитель `$ARGUMENTS`. - -```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`, чтобы предоставить краткое описание того, что делает команда. - -```json title="opencode.json" -{ - "command": { - "test": { - "description": "Run tests with coverage" - } - } -} -``` - -Это отображается в виде описания в TUI при вводе команды. - ---- - -### Агент - -Используйте конфигурацию `agent`, чтобы дополнительно указать, какой [агент](/docs/agents) должен выполнить эту команду. -Если это [subagent](/docs/agents/#subagents), команда по умолчанию инициирует вызов субагента. -Чтобы отключить это поведение, установите для `subtask` значение `false`. - -```json title="opencode.json" -{ - "command": { - "review": { - "agent": "plan" - } - } -} -``` - -Это **необязательный** параметр конфигурации. Если не указано, по умолчанию используется текущий агент. - ---- - -### Subtask - -Используйте логическое значение `subtask`, чтобы заставить команду инициировать вызов [subagent](/docs/agents/#subagents). -Это полезно, если вы хотите, чтобы команда не загрязняла ваш основной контекст и **заставляла** агента действовать как субагент. -даже если для `mode` установлено значение `primary` в конфигурации [agent](/docs/agents). - -```json title="opencode.json" -{ - "command": { - "analyze": { - "subtask": true - } - } -} -``` - -Это **необязательный** параметр конфигурации. - ---- - -### Модель - -Используйте конфигурацию `model`, чтобы переопределить модель по умолчанию для этой команды. - -```json title="opencode.json" -{ - "command": { - "analyze": { - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -Это **необязательный** параметр конфигурации. - ---- - -## Встроенные команды - -opencode включает несколько встроенных команд, таких как `/init`, `/undo`, `/redo`, `/share`, `/help`; [подробнее](/docs/tui#commands). - -:::note -Пользовательские команды могут переопределять встроенные команды. -::: - -Если вы определите пользовательскую команду с тем же именем, она переопределит встроенную команду. diff --git a/packages/web/src/content/docs/ru/config.mdx b/packages/web/src/content/docs/ru/config.mdx deleted file mode 100644 index d6177bd59c..0000000000 --- a/packages/web/src/content/docs/ru/config.mdx +++ /dev/null @@ -1,685 +0,0 @@ ---- -title: Конфигурация -description: Использование конфигурации opencode JSON. ---- - -Вы можете настроить opencode, используя файл конфигурации JSON. - ---- - -## Формат - -opencode поддерживает форматы **JSON** и **JSONC** (JSON с комментариями). - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - // Theme configuration - "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`. Используйте глобальную конфигурацию для общепользовательских настроек, таких как темы, поставщики или привязки клавиш. - -Для настроек, специфичных для TUI, используйте `~/.config/opencode/tui.json`. - -Глобальная конфигурация переопределяет настройки по умолчанию для удаленной организации. - ---- - -### Проектная - -Добавьте `opencode.json` в корень вашего проекта. Конфигурация проекта имеет наивысший приоритет среди стандартных файлов конфигурации — она переопределяет как глобальные, так и удаленные конфигурации. - -Для настроек TUI, специфичных для проекта, добавьте `tui.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" -``` - -Пользовательский каталог загружается после каталогов global config и `.opencode`, поэтому он **может переопределить** их настройки. - ---- - -## Схема - -Файл конфигурации имеет схему, определенную в [**`opencode.ai/config.json`**](https://opencode.ai/config.json). - -Конфигурация TUI использует [**`opencode.ai/tui.json`**](https://opencode.ai/tui.json). - -Ваш редактор должен иметь возможность проверять и автозаполнять данные на основе схемы. - ---- - -### TUI - -Используйте специальный файл `tui.json` (или `tui.jsonc`) для настроек, специфичных для TUI. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": true - }, - "diff_style": "auto" -} -``` - -Используйте `OPENCODE_TUI_CONFIG`, чтобы указать на пользовательский файл конфигурации TUI. - -Устаревшие ключи `theme`, `keybinds` и `tui` в `opencode.json` устарели и автоматически переносятся, когда это возможно. - -[Подробнее об использовании TUI можно узнать здесь](/docs/tui#configure). - ---- - -### Сервер - -Вы можете настроить параметры сервера для команд `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). - ---- - -### models - -Вы можете настроить поставщиков и модели, которые хотите использовать в своей конфигурации 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 - -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 -Токены носителя (`AWS_BEARER_TOKEN_BEDROCK` или `/connect`) имеют приоритет над аутентификацией на основе профиля. Подробности см. в [приоритет аутентификации](/docs/providers#authentication-precedence). -::: - -[Подробнее о конфигурации Amazon Bedrock](/docs/providers#amazon-bedrock). - ---- - -### theme - -Установите тему пользовательского интерфейса в `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - -[Подробнее здесь](/docs/themes). - ---- - -### agent - -Вы можете настроить специализированные агенты для конкретных задач с помощью опции `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, - }, - }, - }, -} -``` - -Вы также можете определить агентов, используя файлы Markdown в `~/.config/opencode/agents/` или `.opencode/agents/`. [Подробнее здесь](/docs/agents). - ---- - -### default_agent - -Вы можете установить агента по умолчанию, используя опцию `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. - ---- - -### share - -Функцию [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). - ---- - -### Сочетания клавиш - -Настройте привязки клавиш в `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.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). - ---- - -### permission - -По умолчанию opencode **разрешает все операции**, не требуя явного разрешения. Вы можете изменить это, используя опцию `permission`. - -Например, чтобы гарантировать, что инструменты `edit` и `bash` требуют одобрения пользователя: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "ask", - "bash": "ask" - } -} -``` - -[Подробнее о разрешениях можно узнать здесь](/docs/permissions). - ---- - -### compaction - -Вы можете управлять поведением сжатия контекста с помощью опции `compaction`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "compaction": { - "auto": true, - "prune": false, - "reserved": 10000 - } -} -``` - -- `auto` — автоматически сжимать сеанс при заполнении контекста (по умолчанию: `true`). -- `prune` — удалить старые выходные данные инструмента для сохранения токенов (по умолчанию: `false`). -- `reserved` — Буфер токенов для сжатия. Оставляет достаточное окно, чтобы избежать переполнения во время сжатия. - ---- - -### watcher - -Вы можете настроить шаблоны игнорирования средства отслеживания файлов с помощью опции `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 - -Вы можете настроить инструкции для используемой вами модели с помощью опции `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 - -Вы можете отключить поставщиков, которые загружаются автоматически, с помощью опции `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 - -Вы можете указать белый список поставщиков с помощью опции `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, в отдельных файлах. -- Включая большие файлы инструкций, не загромождая вашу конфигурацию. -- Совместное использование общих фрагментов конфигурации в нескольких файлах конфигурации. diff --git a/packages/web/src/content/docs/ru/custom-tools.mdx b/packages/web/src/content/docs/ru/custom-tools.mdx deleted file mode 100644 index c487ee9958..0000000000 --- a/packages/web/src/content/docs/ru/custom-tools.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -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`. - ---- - -#### Несколько инструментов в файле - -Вы также можете экспортировать несколько инструментов из одного файла. Каждый экспорт становится **отдельным инструментом** с именем **`_`**: - -```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`. - ---- - -### Аргументы - -Вы можете использовать `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` для корня рабочего дерева 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. diff --git a/packages/web/src/content/docs/ru/ecosystem.mdx b/packages/web/src/content/docs/ru/ecosystem.mdx deleted file mode 100644 index 81b0312bbb..0000000000 --- a/packages/web/src/content/docs/ru/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -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) | Многоветвевая изоляция контейнеров разработки с мелкими клонами и автоматическим назначением портов | -| [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 | -| [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, созданных LLM | -| [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 отложенную загрузку подсказок по требованию с обнаружением и внедрением навыков | -| [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/команды до мощной системы оркестровки с детальным управлением потоком данных | -| [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 с нулевым трением для 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) | Конфигурации, подсказки, агенты и плагины для улучшения рабочих процессов | diff --git a/packages/web/src/content/docs/ru/enterprise.mdx b/packages/web/src/content/docs/ru/enterprise.mdx deleted file mode 100644 index d5932e0e0c..0000000000 --- a/packages/web/src/content/docs/ru/enterprise.mdx +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Корпоративное использование -description: Безопасное использование opencode в вашей организации. ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -opencode Enterprise предназначен для организаций, которые хотят быть уверены, что их код и данные никогда не покинут инфраструктуру. Это можно сделать с помощью централизованной конфигурации, которая интегрируется с вашим единым входом и внутренним шлюзом AI. - -:::note -opencode не хранит ваш код или контекстные данные. -::: - -Чтобы начать работу с opencode Enterprise: - -1. Проведите испытание внутри своей команды. -2. **Свяжитесь с нами**, чтобы обсудить цены и варианты внедрения. - ---- - -## Пробная версия - -opencode имеет открытый исходный код и не хранит ваш код или контекстные данные, поэтому ваши разработчики могут просто [приступить к работе](/docs/) и провести пробную версию. - ---- - -### Обработка данных - -**opencode не хранит ваш код или контекстные данные.** Вся обработка происходит локально или посредством прямых вызовов API к вашему провайдеру ИИ. - -Это означает, что пока вы используете поставщика, которому доверяете, или внутреннего -Шлюз 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, мы не взимаем плату за используемые токены. Для получения более подробной информации о ценах и вариантах реализации **свяжитесь с нами**. - ---- - -## Развертывание - -После завершения пробной версии и готовности использовать opencode на -вашей организации, вы можете **связаться с нами**, чтобы обсудить -цены и варианты реализации. - ---- - -### Центральная конфигурация - -Мы можем настроить opencode для использования единой центральной конфигурации для всей вашей организации. - -Эта централизованная конфигурация может интегрироваться с вашим поставщиком единого входа и гарантирует всем пользователям доступ только к вашему внутреннему шлюзу AI. - ---- - -### Интеграция SSO - -Через центральную конфигурацию opencode может интегрироваться с провайдером единого входа вашей организации для аутентификации. - -Это позволяет opencode получать учетные данные для вашего внутреннего шлюза AI через существующую систему управления идентификацией. - ---- - -### Внутренний шлюз AI - -Благодаря центральной конфигурации opencode также можно настроить на использование только вашего внутреннего шлюза AI. - -Вы также можете отключить всех других поставщиков ИИ, гарантируя, что все запросы будут проходить через утвержденную инфраструктуру вашей организации. - ---- - -### Самостоятельный хостинг - -Хотя мы рекомендуем отключить страницы общего доступа, чтобы гарантировать, что ваши данные никогда не покинут вашу организацию, мы также можем помочь вам самостоятельно разместить их в вашей инфраструктуре. - -В настоящее время это находится в нашей дорожной карте. Если вы заинтересованы, **дайте нам знать**. - ---- - -## Часто задаваемые вопросы - -

-Что такое opencode Enterprise? - -opencode Enterprise предназначен для организаций, которые хотят быть уверены, что их код и данные никогда не покинут инфраструктуру. Это можно сделать с помощью централизованной конфигурации, которая интегрируется с вашим единым входом и внутренним шлюзом AI. - -
- -
-Как начать работу с opencode Enterprise? - -Просто начните с внутреннего испытания со своей командой. opencode по умолчанию не сохраняет ваш код или контекстные данные, что упрощает начало работы. - -Затем **свяжитесь с нами**, чтобы обсудить цены и варианты внедрения. - -
- -
-Как работает корпоративное ценообразование? - -Мы предлагаем корпоративные цены за рабочее место. Если у вас есть собственный шлюз LLM, мы не взимаем плату за используемые токены. Для получения более подробной информации **свяжитесь с нами**, чтобы получить индивидуальное предложение, соответствующее потребностям вашей организации. - -
- -
-Защищены ли мои данные с помощью opencode Enterprise? - -Да. opencode не хранит ваш код или контекстные данные. Вся обработка происходит локально или посредством прямых вызовов API вашего провайдера ИИ. Благодаря централизованной настройке и интеграции единого входа ваши данные остаются в безопасности в инфраструктуре вашей организации. - -
- -
-Можем ли мы использовать собственный частный реестр NPM? - -opencode поддерживает частные реестры npm посредством встроенной поддержки файлов `.npmrc` Bun. Если ваша организация использует частный реестр, такой как 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, чтобы гарантировать возможность установки пакетов из корпоративного реестра. - -
diff --git a/packages/web/src/content/docs/ru/formatters.mdx b/packages/web/src/content/docs/ru/formatters.mdx deleted file mode 100644 index ec7730483f..0000000000 --- a/packages/web/src/content/docs/ru/formatters.mdx +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Форматтеры -description: opencode использует средства форматирования, специфичные для языка. ---- - -opencode автоматически форматирует файлы после их записи или редактирования с использованием средств форматирования для конкретного языка. Это гарантирует, что создаваемый код будет соответствовать стилям кода вашего проекта. - ---- - -## Встроенные - -opencode поставляется с несколькими встроенными форматировщиками для популярных языков и платформ. Ниже приведен список форматтеров, поддерживаемых расширений файлов, а также необходимых команд или параметров конфигурации. - -| Formatter | Расширения | Требования | -| -------------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | -| 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 автоматически будет использовать его. - ---- - -## Настройка - -Вы можете настроить форматтеры через раздел `formatter` в конфигурации opencode. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "formatter": {} -} -``` - -Каждая конфигурация форматтера поддерживает следующее: - -| Свойство | Тип | Описание | -| ------------- | -------- | ----------------------------------------------------------------------------------- | -| `disabled` | boolean | Установите для этого параметра значение `true`, чтобы отключить форматтер. | -| `command` | string[] | Команда для форматирования | -| `environment` | объект | Переменные среды, которые необходимо установить при запуске средства форматирования | -| `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`** в команде будет заменен путем к форматируемому файлу. diff --git a/packages/web/src/content/docs/ru/github.mdx b/packages/web/src/content/docs/ru/github.mdx deleted file mode 100644 index 131d4f66dd..0000000000 --- a/packages/web/src/content/docs/ru/github.mdx +++ /dev/null @@ -1,321 +0,0 @@ ---- -title: GitHub -description: Используйте opencode в задачах и пул-реквестах GitHub. ---- - -opencode интегрируется с вашим рабочим процессом GitHub. Упомяните `/opencode` или `/oc` в своем комментарии, и opencode выполнит задачи в вашем средстве выполнения действий GitHub. - ---- - -## Возможности - -- **Триаж задач (Issue Triage)**. Попросите opencode разобраться в проблеме и объяснить ее вам. -- **Исправление и реализация**. Попросите opencode исправить проблему или реализовать функцию. Он будет работать в новой ветке и создаст PR со всеми изменениями. -- **Безопасность**: opencode запускается внутри ваших GitHub Runners. - ---- - -## Установка - -Запустите следующую команду в проекте, который находится в репозитории GitHub: - -```bash -opencode github install -``` - -Это поможет вам установить приложение GitHub, создать рабочий процесс и настроить secrets (секреты). - ---- - -### Ручная настройка - -Или вы можете настроить его вручную. - -1. **Установите приложение GitHub** - - Перейдите на [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Убедитесь, что он установлен в целевом репозитории. - -2. **Добавьте рабочий процесс** - - Добавьте следующий файл рабочего процесса в `.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 в секрете** - - В **настройках** вашей организации или проекта разверните **Секреты и переменные** слева и выберите **Действия**. И добавьте необходимые ключи API. - ---- - -## Настройка - -- `model`: модель для использования с opencode. Принимает формат `provider/model`. Это **обязательно**. -- `agent`: используемый агент. Должен быть основным агентом. Возвращается к `default_agent` из конфигурации или к `"build"`, если не найден. -- `share`: следует ли предоставлять общий доступ к сеансу opencode. По умолчанию **true** для общедоступных репозиториев. -- `prompt`: дополнительный настраиваемый запрос для переопределения поведения по умолчанию. Используйте это, чтобы настроить обработку запросов opencode. -- `token`: дополнительный токен доступа GitHub для выполнения таких операций, как создание комментариев, фиксация изменений и открытие запросов на включение. По умолчанию opencode использует токен доступа к установке из приложения opencode GitHub, поэтому фиксации, комментарии и запросы на включение отображаются как исходящие из приложения. - - Кроме того, вы можете использовать [встроенный `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) средства запуска действий GitHub без установки приложения opencode GitHub. Просто не забудьте предоставить необходимые разрешения в вашем рабочем процессе: - - ```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` | Комментарий к проблеме или PR | Упомяните `/opencode` или `/oc` в своем комментарии. opencode считывает контекст и может создавать ветки, открывать PR или отвечать. | -| `pull_request_review_comment` | Комментируйте конкретные строки кода в PR. | Упоминайте `/opencode` или `/oc` при просмотре кода. opencode получает путь к файлу, номера строк и контекст сравнения. | -| `issues` | Issue открыт или изменен | Автоматически запускать opencode при создании или изменении проблем. Требуется ввод `prompt`. | -| `pull_request` | PR открыт или обновлен | Автоматически запускать opencode при открытии, синхронизации или повторном открытии PR. Полезно для автоматических обзоров. | -| `schedule` | Расписание на основе Cron | Запускайте opencode по расписанию. Требуется ввод `prompt`. Вывод поступает в журналы и PR (комментариев нет). | -| `workflow_dispatch` | Ручной триггер из пользовательского интерфейса GitHub | Запускайте opencode по требованию на вкладке «Действия». Требуется ввод `prompt`. Вывод идет в логи и PR. | - -### Пример: Расписание - -Запускайте 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. -``` - -Для запланированных событий вход `prompt` **обязателен**, поскольку нет комментария, из которого можно было бы извлечь инструкции. Запланированные рабочие процессы выполняются без пользовательского контекста для проверки разрешений, поэтому рабочий процесс должен предоставлять `contents: write` и `pull-requests: write`, если вы ожидаете, что opencode будет создавать ветки или PR. - ---- - -### Пример: Pull Request - -Автоматически просматривать PR при их открытии или обновлении: - -```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 по умолчанию проверяет запрос на включение. - ---- - -### Пример: Сортировка Issue - -Автоматически сортируйте новые проблемы. В этом примере фильтруется аккаунты, созданные более 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 для вашего рабочего процесса. - -```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. - -- **Объяснение проблемы** - - Добавьте этот комментарий в выпуск GitHub. - - ``` - /opencode explain this issue - ``` - - opencode прочитает всю ветку, включая все комментарии, и ответит с четким объяснением. - -- **Исправление проблемы** - - В выпуске GitHub скажите: - - ``` - /opencode fix this - ``` - - А opencode создаст новую ветку, внедрит изменения и откроет PR с изменениями. - -- **Проверка Pull Request и внесение изменений** - - Оставьте следующий комментарий к PR на GitHub. - - ``` - Delete the attachment from S3 when the note is removed /oc - ``` - - opencode внедрит запрошенное изменение и зафиксирует его в том же PR. - -- **Проверка отдельных строк кода** - - Оставляйте комментарии непосредственно к строкам кода на вкладке «Файлы» PR. opencode автоматически определяет файл, номера строк и контекст различий, чтобы предоставить точные ответы. - - ``` - [Comment on specific lines in Files tab] - /oc add error handling here - ``` - - При комментировании определенных строк opencode получает: - - Точный файл, который просматривается - - Конкретные строки кода - - Окружающий контекст различий - - Информация о номере строки - - Это позволяет выполнять более целевые запросы без необходимости вручную указывать пути к файлам или номера строк. diff --git a/packages/web/src/content/docs/ru/gitlab.mdx b/packages/web/src/content/docs/ru/gitlab.mdx deleted file mode 100644 index ad56e998bc..0000000000 --- a/packages/web/src/content/docs/ru/gitlab.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: GitLab -description: Используйте opencode в задачах GitLab и мерж-реквестах. ---- - -opencode интегрируется с вашим рабочим процессом GitLab через конвейер GitLab CI/CD или с GitLab Duo. - -В обоих случаях opencode будет работать на ваших программах GitLab. - ---- - -## GitLab - -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 и начальное приглашение. -- **Гибкость**: компонент CI поддерживает несколько входных данных для настройки его поведения. - ---- - -### Настройка - -1. Сохраните JSON аутентификации opencode как переменные среды CI типа файла в разделе **Настройки** > **CI/CD** > **Переменные**. Обязательно пометьте их как «Замаскированные и скрытые». -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. - ---- - -### Функции - -- **Триаж задач (Issue Triage)**. Попросите 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. Создайте файл конфигурации потока, вот пример: - -
- - Конфигурация потока - - ```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. - - - 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. - - " - - 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 - ``` - -
- -Подробные инструкции можно найти в [GitLab CLI agents docs](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/). - ---- - -### Примеры - -Вот несколько примеров того, как вы можете использовать opencode в GitLab. - -:::tip -Вы можете настроить использование триггерной фразы, отличной от `@opencode`. -::: - -- **Объяснение проблемы** - - Добавьте этот комментарий в issue GitLab. - - ``` - @opencode explain this issue - ``` - - opencode прочитает проблему и ответит с четким объяснением. - -- **Исправление проблемы** - - В issue GitLab напишите: - - ``` - @opencode fix this - ``` - - opencode создаст новую ветку, внедрит изменения и откроет мерж-реквест с изменениями. - -- **Проверка Merge Request** - - Оставьте следующий комментарий к мерж-реквесту GitLab. - - ``` - @opencode review this merge request - ``` - - opencode рассмотрит мерж-реквест и предоставит отзыв. diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx deleted file mode 100644 index 43914bdfd3..0000000000 --- a/packages/web/src/content/docs/ru/go.mdx +++ /dev/null @@ -1,211 +0,0 @@ ---- -title: Go -description: Недорогая подписка на открытые модели для программирования. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Go — это недорогая подписка (**$5 за первый месяц**, далее **$10 в месяц**), которая предоставляет надежный доступ к популярным открытым моделям для программирования. - -Go работает так же, как и любой другой провайдер в OpenCode. Вы оформляете подписку на OpenCode Go и -получаете свой API-ключ. Использование Go **абсолютно необязательно**, и вам не нужно использовать его, чтобы -пользоваться OpenCode. - -Она предназначена в первую очередь для пользователей со всего мира, а модели размещены в США, ЕС и Сингапуре для стабильного глобального доступа. - ---- - -## Предпосылки - -Открытые модели стали действительно хороши. Сейчас они достигают производительности, близкой к -проприетарным моделям для задач программирования. И поскольку многие провайдеры могут предоставлять к ним доступ -на конкурентных условиях, они, как правило, обходятся гораздо дешевле. - -Однако получить к ним надежный доступ с низкой задержкой может быть непросто. Провайдеры -различаются по качеству и доступности. - -:::tip -Мы протестировали выбранную группу моделей и провайдеров, которые хорошо работают с OpenCode. -::: - -Чтобы исправить это, мы сделали пару вещей: - -1. Мы протестировали выбранную группу открытых моделей и поговорили с их командами о том, как - лучше всего их запускать. -2. Затем мы поработали с несколькими провайдерами, чтобы убедиться, что они предоставляются - корректно. -3. Наконец, мы провели бенчмаркинг комбинаций модель/провайдер и составили - список, который мы смело можем рекомендовать. - -OpenCode Go дает вам доступ к этим моделям за **$5 в первый месяц**, далее **$10 в месяц**. - ---- - -## Как это работает - -OpenCode Go работает так же, как и любой другой провайдер в OpenCode. - -1. Вы входите в **OpenCode Zen**, подписываетесь на Go и - копируете свой API-ключ. -2. Вы выполняете команду `/connect` в TUI, выбираете `OpenCode Go` и вставляете - свой API-ключ. -3. Запустите `/models` в TUI, чтобы увидеть список моделей, доступных через Go. - -:::note -Только один участник рабочего пространства может подписаться на OpenCode Go. -::: - -Текущий список моделей включает: - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -Список моделей может меняться по мере того, как мы тестируем и добавляем новые. - ---- - -## Лимиты использования - -OpenCode Go включает следующие лимиты: - -- **Лимит на 5 часов** — $12 использования -- **Недельный лимит** — $30 использования -- **Месячный лимит** — $60 использования - -Лимиты определены в долларовом эквиваленте. Это означает, что ваше фактическое количество запросов зависит от используемой модели. Более дешевые модели, такие как DeepSeek V4 Flash, позволяют делать больше запросов, в то время как более дорогие, такие как GLM-5.2, — меньше. - -В таблице ниже приведено примерное количество запросов на основе типичных сценариев использования Go: - -| Model | запросов за 5 часов | запросов в неделю | запросов в месяц | -| ----------------- | ------------------- | ----------------- | ---------------- | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -Эти оценки основаны на наблюдаемых средних показателях запросов: - -- GLM-5.2/5.1 — 700 входных, 52,000 кешированных, 150 выходных токенов на запрос -- Kimi K2.7 Code/K2.6 — 870 входных, 55,000 кешированных, 200 выходных токенов на запрос -- DeepSeek V4 Pro — 750 входных, 82,000 кешированных, 290 выходных токенов на запрос -- DeepSeek V4 Flash — 790 входных, 68,000 кешированных, 280 выходных токенов на запрос -- MiniMax M3 — 510 входных, 56,000 кешированных, 190 выходных токенов на запрос -- MiniMax M2.7 — 300 входных, 55,000 кешированных, 125 выходных токенов на запрос -- Qwen3.7 Max — 420 входных, 66,000 кешированных, 200 выходных токенов на запрос -- Qwen3.7 Plus — 500 входных, 57,000 кешированных, 190 выходных токенов на запрос -- Qwen3.6 Plus — 500 входных, 57,000 кешированных, 190 выходных токенов на запрос -- MiMo-V2.5 — 830 входных, 71,500 кешированных, 295 выходных токенов на запрос -- MiMo-V2.5-Pro — 790 входных, 86,000 кешированных, 305 выходных токенов на запрос - -Эти оценки также основаны на следующих ценах за 1M токенов: - -| Model | Input | Output | Cached Read | Cached Write | -| ---------------------------- | ----- | ------ | ----------- | ------------ | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -Вы можете отслеживать текущее использование в **консоли**. - -:::tip -Если вы достигнете лимита использования, вы можете продолжить использовать бесплатные модели. -::: - -Лимиты использования могут измениться по мере того, как мы будем собирать данные о раннем использовании и отзывы. - ---- - -### Использование сверх лимитов - -Если у вас также есть средства на балансе Zen, вы можете включить опцию **Use balance** -в консоли. Если она включена, Go будет использовать ваш баланс Zen -после достижения лимитов использования вместо того, чтобы блокировать запросы. - ---- - -## Эндпоинты - -Вы также можете получить доступ к моделям Go через следующие API-эндпоинты. - -| Модель | ID модели | Эндпоинт | Пакет AI SDK | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -[ID модели](/docs/config/#models) в вашем конфиге OpenCode -использует формат `opencode-go/`. Например, для Kimi K2.7 Code вам нужно -использовать `opencode-go/kimi-k2.7-code` в вашем конфиге. - ---- - -### Модели - -Вы можете получить полный список доступных моделей и их метаданных по адресу: - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## Конфиденциальность - -Этот план разработан в первую очередь для международных пользователей: модели размещены в US, EU и Singapore, чтобы обеспечить стабильный доступ по всему миру. Наши провайдеры придерживаются политики zero-retention и не используют ваши данные для обучения моделей. - ---- - -## Цели - -Мы создали OpenCode Go, чтобы: - -1. Сделать программирование с ИИ **доступным** для большего числа людей с помощью недорогой подписки. -2. Обеспечить **надежный** доступ к лучшим открытым моделям для программирования. -3. Отбирать модели, которые **протестированы и проверены** для использования в качестве агентов-программистов. -4. Избежать **привязки к провайдеру**, позволяя вам также использовать любого другого провайдера вместе с OpenCode. diff --git a/packages/web/src/content/docs/ru/ide.mdx b/packages/web/src/content/docs/ru/ide.mdx deleted file mode 100644 index 8691767e3d..0000000000 --- a/packages/web/src/content/docs/ru/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: IDE -description: Расширение opencode для VS Code, Cursor и других IDE. ---- - -opencode интегрируется с VS Code, Cursor или любой IDE, поддерживающей терминал. Просто запустите `opencode` в терминале, чтобы начать. - ---- - -## Использование - -- **Быстрый запуск**: используйте `Cmd+Esc` (Mac) или `Ctrl+Esc` (Windows/Linux), чтобы открыть opencode в разделенном представлении терминала, или сфокусируйтесь на существующем сеансе терминала, если он уже запущен. -- **Новый сеанс**: используйте `Cmd+Shift+Esc` (Mac) или `Ctrl+Shift+Esc` (Windows/Linux), чтобы начать новый сеанс терминала 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. Откройте встроенный терминал -3. Запустите `opencode` — расширение установится автоматически. - -С другой стороны, если вы хотите использовать собственную IDE при запуске `/editor` или `/export` из TUI, вам необходимо установить `export EDITOR="code --wait"`. [Подробнее](/docs/tui/#editor-setup). - ---- - -### Ручная установка - -Найдите **opencode** в магазине расширений и нажмите **Установить**. - ---- - -### Устранение неполадок - -Если расширение не устанавливается автоматически: - -- Убедитесь, что вы используете `opencode` во встроенном терминале. -- Убедитесь, что CLI для вашей IDE установлен: - - Для 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 есть разрешение на установку расширений. diff --git a/packages/web/src/content/docs/ru/index.mdx b/packages/web/src/content/docs/ru/index.mdx deleted file mode 100644 index 3208b32b5e..0000000000 --- a/packages/web/src/content/docs/ru/index.mdx +++ /dev/null @@ -1,356 +0,0 @@ ---- -title: Введение -description: Начните работу с opencode. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" -import config from "../../../../config.mjs" -export const console = config.console - -[**opencode**](/) — это агент кодирования искусственного интеллекта с открытым исходным кодом. Он доступен в виде интерфейса на базе терминала, настольного приложения или расширения IDE. - -![opencode TUI с темой opencode](../../../assets/lander/screenshot.png) - -Давайте начнем. - ---- - -#### Системные требования - -Чтобы использовать opencode в вашем терминале, вам понадобится: - -1. Современный эмулятор терминала, например: - - [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** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **Использование 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 для 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 -Вам следует зафиксировать файл `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 имеет _режим планирования_, который отключает возможность вносить изменения и - вместо этого предложите _как_ реализовать эту функцию. - - Переключитесь на него с помощью клавиши **Tab**. Вы увидите индикатор этого в правом нижнем углу. - - ```bash frame="none" title="Switch to Plan mode" - - ``` - - Теперь давайте опишем, что мы хотим от него. - - ```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 - Перетащите изображения в терминал, чтобы добавить их в подсказку. - ::: - - opencode может сканировать любые изображения, которые вы ему предоставляете, и добавлять их в командную строку. Вы можете - сделать это, перетащив изображение в терминал. - -3. **Создайте функцию** - - Как только вы почувствуете себя комфортно с планом, вернитесь в _режим сборки_, - снова нажав клавишу **Tab**. - - ```bash frame="none" - - ``` - - И попросите его внести изменения. - - ```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? -``` - -Отсюда вы можете настроить подсказку и попросить opencode повторить попытку. - -:::tip -Вы можете запустить `/undo` несколько раз, чтобы отменить несколько изменений. -::: - -Или вы **можете повторить** изменения с помощью команды `/redo`. - -```bash frame="none" -/redo -``` - ---- - -## Общий доступ - -Разговорами, которые вы ведете с opencode, можно [поделиться с вашей -командой](/docs/share). - -```bash frame="none" -/share -``` - -Это создаст ссылку на текущий разговор и скопирует ее в буфер обмена. - -:::note -По умолчанию общий доступ к беседам не предоставляется. -::: - -Вот [пример диалога](https://opencode.ai/s/4XP1fce5) с opencode. - ---- - -## Настроить - -И все! Теперь вы профессионал в использовании opencode. - -Чтобы создать свою собственную, мы рекомендуем [выбрать тему](/docs/themes), [настроить привязки клавиш](/docs/keybinds), [настроить средства форматирования кода](/docs/formatters), [создать собственные команды](/docs/commands) или поиграться с файлом [opencode config](/docs/config). diff --git a/packages/web/src/content/docs/ru/keybinds.mdx b/packages/web/src/content/docs/ru/keybinds.mdx deleted file mode 100644 index bde4e15530..0000000000 --- a/packages/web/src/content/docs/ru/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Сочетания клавиш -description: Настройте свои сочетания клавиш. ---- - -opencode имеет список сочетаний клавиш, которые вы можете настроить через `tui.json`. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "h", - "display_thinking": "none" - } -} -``` - ---- - -## Клавиша Leader - -opencode использует клавишу `leader` для большинства сочетаний клавиш. Это позволяет избежать конфликтов в вашем терминале. - -По умолчанию `ctrl+x` является клавишей leader, и для большинства действий требуется сначала нажать клавишу leader, а затем сочетание клавиш. Например, чтобы начать новый сеанс, сначала нажмите `ctrl+x`, а затем нажмите `n`. - -Вам не обязательно использовать клавишу leader для привязок клавиш, но мы рекомендуем это сделать. - ---- - -## Отключение привязки клавиш - -Вы можете отключить привязку клавиш, добавив ключ в `tui.json` со значением «none». - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "session_compact": "none" - } -} -``` - ---- - -## Шорткаты в Desktop-приложении - -Ввод приглашения настольного приложения 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 - -Некоторые терминалы по умолчанию не отправляют клавиши-модификаторы с Enter. Возможно, вам придется настроить терминал на отправку `Shift+Enter` в качестве escape-последовательности. - -### 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 или откройте новую вкладку. diff --git a/packages/web/src/content/docs/ru/lsp.mdx b/packages/web/src/content/docs/ru/lsp.mdx deleted file mode 100644 index 95d7a8774a..0000000000 --- a/packages/web/src/content/docs/ru/lsp.mdx +++ /dev/null @@ -1,207 +0,0 @@ ---- -title: LSP-серверы -description: opencode интегрируется с вашими серверами LSP. ---- - -opencode может интегрироваться с серверами Language Server Protocol (LSP), чтобы использовать диагностику как обратную связь для агента. - ---- - -## Встроенные - -opencode поставляется с несколькими встроенными LSP-серверами для популярных языков: - -| LSP Server | Extensions | Requirements | -| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------- | -| 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` установлен (`xcode` на macOS) | -| 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 | Автоматически устанавливает Red Hat yaml-language-server | -| zls | .zig, .zon | `zig` команда доступна | - -LSP отключен по умолчанию. Когда он включен, серверы запускаются при обнаружении одного из указанных выше расширений файлов и выполнении требований. - -:::note -Вы можете отключить автоматическую загрузку LSP-сервера, установив для переменной среды `OPENCODE_DISABLE_LSP_DOWNLOAD` значение `true`. -::: - ---- - -## Как это работает - -Когда LSP включен и opencode открывает файл, он: - -1. Проверяет расширение файла на всех включенных серверах LSP. -2. Запускает соответствующий сервер LSP, если он еще не запущен. - ---- - -## Рекомендации - -LSP может помочь агенту находить и исправлять проблемы, предоставляя диагностику от языковых серверов. Это полезно в некоторых проектах, но не всегда является однозначным преимуществом. - -Языковые серверы могут рассинхронизироваться, потреблять много памяти, отличаться по поведению между версиями или проектами и замедлять рабочие процессы агента. Во многих проектах лучше, чтобы агент напрямую запускал lint, typecheck или другие диагностические CLI-инструменты; так ошибки возвращаются в цикл агента без этих компромиссов. Задокументируйте эти команды в файлах инструкций, например `AGENTS.md` или skills, чтобы агент знал, что запускать. Включайте LSP, когда проект получает пользу от дополнительной обратной связи языкового сервера. - ---- - -## Настройка - -Вы можете включить и настроить серверы LSP через раздел `lsp` в конфигурации opencode. - -Чтобы включить все встроенные LSP-серверы, установите `lsp` в `true`. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -Используйте объект, чтобы оставить встроенные серверы включенными и при этом настроить переопределения или пользовательские серверы. - -```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-серверы отключены. Чтобы отключить все 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` - -Файл должен содержать только лицензионный ключ без какого-либо дополнительного содержимого. diff --git a/packages/web/src/content/docs/ru/mcp-servers.mdx b/packages/web/src/content/docs/ru/mcp-servers.mdx deleted file mode 100644 index da88f413f9..0000000000 --- a/packages/web/src/content/docs/ru/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -title: MCP-серверы -description: Добавьте локальные и удаленные инструменты MCP. ---- - -Вы можете добавить внешние инструменты в opencode, используя _Model Context Protocol_ или MCP. opencode поддерживает как локальные, так и удаленные серверы. - -После добавления инструменты MCP автоматически становятся доступными для LLM наряду со встроенными инструментами. - ---- - -#### Предостережения - -Когда вы используете сервер MCP, он добавляет контекст. Это может быстро сложиться, если у вас много инструментов. Поэтому мы рекомендуем быть осторожными с тем, какие серверы MCP вы используете. - -:::tip -Серверы MCP добавляются к вашему контексту, поэтому будьте осторожны с тем, какие из них вы включаете. -::: - -Некоторые серверы MCP, такие как сервер MCP GitHub, имеют тенденцию добавлять много токенов и могут легко превысить ограничение контекста. - ---- - -## Включение - -Вы можете определить серверы MCP в своем [opencode Config](https://opencode.ai/docs/config/) в разделе `mcp`. Добавьте каждому 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", - }, - }, - }, -} -``` - -Эта команда запускает локальный сервер MCP. Вы также можете передать список переменных среды. - -Например, вот как можно добавить тестовый сервер [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP. - -```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` | Строка | Да | Тип подключения к серверу MCP должен быть `"local"`. | -| `command` | Массив | Да | Команда и аргументы для запуска сервера MCP. | -| `environment` | Объект | | Переменные среды, которые необходимо установить при запуске сервера. | -| `enabled` | логическое значение | | Включите или отключите сервер MCP при запуске. | -| `timeout` | Число | | Тайм-аут в мс для получения инструментов с сервера 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` вы можете передать список заголовков. - ---- - -#### Параметры - -| Вариант | Тип | Обязательный | Описание | -| --------- | ------------------- | ------------ | ------------------------------------------------------------------------------------- | -| `type` | Строка | Да | Тип подключения к серверу MCP должен быть `"remote"`. | -| `url` | Строка | Да | URL-адрес удаленного сервера MCP. | -| `enabled` | логическое значение | | Включите или отключите сервер MCP при запуске. | -| `headers` | Объект | | Заголовки для отправки с запросом. | -| `oauth` | Объект | | Конфигурация аутентификации OAuth. См. раздел [OAuth](#oauth) ниже. | -| `timeout` | Число | | Тайм-аут в мс для получения инструментов с сервера MCP. По умолчанию 5000 (5 секунд). | - ---- - -## OAuth - -opencode автоматически обрабатывает аутентификацию OAuth для удаленных серверов MCP. Когда серверу требуется аутентификация, opencode: - -1. Обнаружьте ответ 401 и инициируйте поток OAuth. -2. Используйте **Динамическую регистрацию клиента (RFC 7591)**, если это поддерживается сервером. -3. Надежно храните токены для будущих запросов - ---- - -### Автоматически - -Для большинства серверов 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 `. - ---- - -### Предварительная регистрация - -Если у вас есть учетные данные клиента от поставщика сервера 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 client ID. Если не указан, будет выполнена динамическая регистрация клиента. | -| `clientSecret` | String | OAuth client secret, если этого требует сервер авторизации. | -| `scope` | String | OAuth scopes для запроса во время авторизации. | - -#### Отладка - -Если удаленный сервер MCP не может аутентифицироваться, вы можете диагностировать проблемы с помощью: - -```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 -``` - -Команда `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 - } -} -``` - -Здесь мы используем шаблон `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 использует простые шаблоны подстановки регулярных выражений: - -- `*` соответствует нулю или более любого символа (например, `"my-mcp*"` соответствует `my-mcp_search`, `my-mcp_list` и т. д.). -- `?` соответствует ровно одному символу. -- Все остальные символы совпадают буквально - -:::note -Инструменты сервера MCP регистрируются с именем сервера в качестве префикса, поэтому, чтобы отключить все инструменты для сервера, просто используйте: - -``` -"mymcpservername_*": false -``` - -::: - ---- - -## Примеры - -Ниже приведены примеры некоторых распространенных серверов MCP. Вы можете отправить PR, если хотите документировать другие серверы. - ---- - -### Sentry - -Добавьте [сервер Sentry MCP](https://mcp.sentry.dev) для взаимодействия с вашими проектами и проблемами Sentry. - -```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 - -Добавьте [сервер Context7 MCP](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` в запросы на использование сервера Context7 MCP. - -```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 от 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. -``` diff --git a/packages/web/src/content/docs/ru/models.mdx b/packages/web/src/content/docs/ru/models.mdx deleted file mode 100644 index a23a02f6a5..0000000000 --- a/packages/web/src/content/docs/ru/models.mdx +++ /dev/null @@ -1,223 +0,0 @@ ---- -title: Модели -description: Настройка поставщика и модели LLM. ---- - -opencode использует [AI SDK](https://ai-sdk.dev/) и [Models.dev](https://models.dev) для поддержки **более 75 поставщиков LLM** и поддерживает запуск локальных моделей. - ---- - -## Провайдеры - -Большинство популярных провайдеров предварительно загружены по умолчанию. Если вы добавили учетные данные для поставщика с помощью команды `/connect`, они будут доступны при запуске opencode. - -Узнайте больше о [providers](/docs/providers). - ---- - -## Выберите модель - -После того, как вы настроили своего провайдера, вы можете выбрать нужную модель, введя: - -```bash frame="none" -/models -``` - ---- - -## Рекомендуемые модели - -Моделей очень много, новые выходят каждую неделю. - -:::tip -Рассмотрите возможность использования одной из моделей, которые мы рекомендуем. -::: - -Однако лишь немногие из них хороши как в генерации кода, так и в вызове инструментов. - -Вот несколько моделей, которые хорошо работают с opencode (в произвольном порядке). (Это не исчерпывающий список и не обязательно актуальный): - -- GPT 5.2 -- Кодекс GPT 5.1 -- 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. - -Если вы настроили [пользовательский поставщик](/docs/providers#custom), `provider_id` — это ключ из части `provider` вашей конфигурации, а `model_id` — это ключ из `provider.models`. - ---- - -## Настройка моделей - -Вы можете глобально настроить параметры модели через файл 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, - }, - }, - }, - }, - }, - }, -} -``` - -Здесь мы настраиваем глобальные параметры для двух встроенных моделей: `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. Первая модель, использующая внутренний приоритет. diff --git a/packages/web/src/content/docs/ru/network.mdx b/packages/web/src/content/docs/ru/network.mdx deleted file mode 100644 index b80c847899..0000000000 --- a/packages/web/src/content/docs/ru/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Сеть -description: Настройте прокси и пользовательские сертификаты. ---- - -opencode поддерживает стандартные переменные среды прокси-сервера и пользовательские сертификаты для сетевых сред предприятия. - ---- - -## Прокси - -opencode учитывает стандартные переменные среды прокси. - -```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 взаимодействует с локальным HTTP-сервером. Вы должны обойти прокси-сервер для этого соединения, чтобы избежать петель маршрутизации. -::: - -Вы можете настроить порт и имя хоста сервера, используя [CLI flags](/docs/cli#run). - ---- - -### Аутентификация - -Если ваш прокси-сервер требует базовой аутентификации, включите учетные данные в URL-адрес. - -```bash -export HTTPS_PROXY=http://username:password@proxy.example.com:8080 -``` - -:::caution -Избегайте жесткого кодирования паролей. Используйте переменные среды или безопасное хранилище учетных данных. -::: - -Для прокси-серверов, требующих расширенной аутентификации, например NTLM или Kerberos, рассмотрите возможность использования шлюза LLM, поддерживающего ваш метод аутентификации. - ---- - -## Пользовательские сертификаты - -Если ваше предприятие использует собственные центры сертификации для HTTPS-соединений, настройте opencode, чтобы доверять им. - -```bash -export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem -``` - -Это работает как для прокси-соединений, так и для прямого доступа к API. diff --git a/packages/web/src/content/docs/ru/permissions.mdx b/packages/web/src/content/docs/ru/permissions.mdx deleted file mode 100644 index 05028c8bb3..0000000000 --- a/packages/web/src/content/docs/ru/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -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" - } - } -} -``` - -Держите список сосредоточенным на доверенных путях и добавляйте дополнительные правила разрешения или запрета по мере необходимости для других инструментов (например, `bash`). - ---- - -## Доступные разрешения - -Разрешения opencode привязаны к имени инструмента, а также к нескольким мерам безопасности: - -- `read` — чтение файла (соответствует пути к файлу) -- `edit` — все модификации файлов (охватывает `edit`, `write`, `patch`) -- `glob` — подстановка файла (соответствует шаблону подстановки) -- `grep` — поиск по контенту (соответствует шаблону регулярного выражения) -- `bash` — запуск shell-команд (соответствует проанализированным командам, например `git status --porcelain`) -- `task` — запуск субагентов (соответствует типу субагента) -- `skill` — загрузка навыка (соответствует названию навыка) -- `lsp` — выполнение запросов LSP (в настоящее время не детализированных) -- `webfetch` — получение URL-адреса (соответствует URL-адресу) -- `websearch` — поиск в сети (соответствует запросу) -- `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 *"`) при передаче аргументов. -::: diff --git a/packages/web/src/content/docs/ru/plugins.mdx b/packages/web/src/content/docs/ru/plugins.mdx deleted file mode 100644 index 1d7ffb339b..0000000000 --- a/packages/web/src/content/docs/ru/plugins.mdx +++ /dev/null @@ -1,385 +0,0 @@ ---- -title: Плагины -description: Напишите свои собственные плагины для расширения opencode. ---- - -Плагины позволяют расширять opencode, подключаясь к различным событиям и настраивая поведение. Вы можете создавать плагины для добавления новых функций, интеграции с внешними сервисами или изменения поведения opencode по умолчанию. - -Для примера ознакомьтесь с [plugins](/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. - -Просмотрите доступные плагины в папке [ecosystem](/docs/ecosystem#plugins). - ---- - -### Как устанавливаются плагины - -**Плагины npm** устанавливаются автоматически с помощью Bun при запуске. Пакеты и их зависимости кэшируются в `~/.cache/opencode/node_modules/`. - -**Локальные плагины** загружаются непосредственно из каталога плагинов. Чтобы использовать внешние пакеты, вы должны создать `package.json` в своем каталоге конфигурации (см. [Зависимости](#dependencies)) или опубликовать плагин в npm и [добавить его в свой config](/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. -- `client`: клиент SDK с открытым кодом для взаимодействия с ИИ. -- `$`: [Bun shell API](https://bun.com/docs/runtime/shell) для выполнения команд. - ---- - -### Поддержка 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.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 - -Запретите открытому коду читать файлы `.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`: функция, которая запускается при вызове инструмента. - -Ваши пользовательские инструменты будут доступны для открытия кода наряду со встроенными инструментами. - ---- - -### Ведение журнала - -Используйте `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` в этом случае игнорируется. diff --git a/packages/web/src/content/docs/ru/providers.mdx b/packages/web/src/content/docs/ru/providers.mdx deleted file mode 100644 index 39aae9e096..0000000000 --- a/packages/web/src/content/docs/ru/providers.mdx +++ /dev/null @@ -1,1987 +0,0 @@ ---- -title: Провайдеры -description: Использование любого провайдера LLM в opencode. ---- - -import config from "../../../../config.mjs" -export const console = config.console - -opencode использует [AI SDK](https://ai-sdk.dev/) и [Models.dev](https://models.dev) для поддержки **более 75 поставщиков LLM** и поддерживает запуск локальных моделей. - -Чтобы добавить провайдера, вам необходимо: - -1. Добавьте ключи API для провайдера с помощью команды `/connect`. -2. Настройте провайдера в вашей конфигурации opencode. - ---- - -### Учетные данные - -Когда вы добавляете ключи API провайдера с помощью команды `/connect`, они сохраняются -в `~/.local/share/opencode/auth.json`. - ---- - -### Настройка - -Вы можете настроить поставщиков через раздел `provider` в вашем opencode. -конфиг. - ---- - -#### Базовый URL - -Вы можете настроить базовый URL-адрес для любого провайдера, установив параметр `baseURL`. Это полезно при использовании прокси-сервисов или пользовательских конечных точек. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen — это список моделей, предоставленный командой opencode, которые были -протестировано и проверено на хорошую работу с opencode. [Подробнее](/docs/zen). - -:::tip -Если вы новичок, мы рекомендуем начать с OpenCode Zen. -::: - -1. Запустите команду `/connect` в TUI, выберите `OpenCode Zen` и перейдите по адресу [opencode.ai/auth](https://opencode.ai/zen). - - ```txt - /connect - ``` - -2. Войдите в систему, добавьте свои платежные данные и скопируйте ключ API. - -3. Вставьте свой ключ API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите `/models` в TUI, чтобы просмотреть список рекомендуемых нами моделей. - - ```txt - /models - ``` - -Он работает как любой другой поставщик в opencode и его использование совершенно необязательно. - ---- - -## OpenCode Go - -OpenCode Go — это недорогой план подписки, обеспечивающий надежный доступ к популярным открытым моделям кодирования, предоставляемым командой opencode, которые были -протестированы и проверены на хорошую работу с opencode. - -1. Запустите команду `/connect` в TUI, выберите `OpenCode Go` и перейдите по адресу [opencode.ai/auth](https://opencode.ai/zen). - - ```txt - /connect - ``` - -2. Войдите в систему, добавьте свои платежные данные и скопируйте ключ API. - -3. Вставьте свой ключ API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите `/models` в TUI, чтобы просмотреть список рекомендуемых нами моделей. - - ```txt - /models - ``` - -Он работает как любой другой поставщик в opencode и его использование совершенно необязательно. - ---- - -## Каталог - -Рассмотрим некоторых провайдеров подробнее. Если вы хотите добавить провайдера в список, смело открывайте PR. - -:::note -Не видите здесь провайдера? Откройте PR. -::: - ---- - -### 302.AI - -1. Перейдите в консоль 302.AI](https://302.ai/), создайте учетную запись и сгенерируйте ключ API. - -2. Запустите команду `/connect` и найдите **302.AI**. - - ```txt - /connect - ``` - -3. Введите свой ключ API 302.AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать модель. - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -Чтобы использовать Amazon Bedrock с opencode: - -1. Перейдите в **Каталог моделей** в консоли Amazon Bedrock и запросите - доступ к нужным моделям. - - :::tip - Вам необходимо иметь доступ к нужной модели в Amazon Bedrock. - ::: - -2. **Настройте аутентификацию** одним из следующих способов: - - #### Переменные среды (быстрый старт) - - Установите одну из этих переменных среды при запуске opencode: - - ```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - Или добавьте их в свой профиль bash: - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - #### Файл конфигурации (рекомендуется) - - Для конкретной или постоянной конфигурации проекта используйте `opencode.json`: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **Доступные варианты:** - - `region` – регион AWS (например, `us-east-1`, `eu-west-1`). - - `profile` – именованный профиль AWS из `~/.aws/credentials`. - - `endpoint` — URL-адрес пользовательской конечной точки для конечных точек VPC (псевдоним для общей опции `baseURL`). - - :::tip - Параметры файла конфигурации имеют приоритет над переменными среды. - ::: - - #### Дополнительно: конечные точки VPC - - Если вы используете конечные точки VPC для Bedrock: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } - } - ``` - - :::note - Параметр `endpoint` — это псевдоним общего параметра `baseURL`, использующий терминологию, специфичную для AWS. Если указаны и `endpoint`, и `baseURL`, `endpoint` имеет приоритет. - ::: - - #### Методы аутентификации - - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: создайте пользователя IAM и сгенерируйте ключи доступа в консоли AWS. - - **`AWS_PROFILE`**: использовать именованные профили из `~/.aws/credentials`. Сначала настройте `aws configure --profile my-profile` или `aws sso login`. - - **`AWS_BEARER_TOKEN_BEDROCK`**: создание долгосрочных ключей API из консоли Amazon Bedrock. - - **`AWS_WEB_IDENTITY_TOKEN_FILE`/`AWS_ROLE_ARN`**: для EKS IRSA (роли IAM для учетных записей служб) или других сред Kubernetes с федерацией OIDC. Эти переменные среды автоматически вводятся Kubernetes при использовании аннотаций учетной записи службы. - - #### Приоритет аутентификации - - Amazon Bedrock использует следующий приоритет аутентификации: - 1. **Токен носителя** — переменная среды `AWS_BEARER_TOKEN_BEDROCK` или токен из команды `/connect`. - 2. **Цепочка учетных данных AWS** — профиль, ключи доступа, общие учетные данные, роли IAM, токены веб-идентификации (EKS IRSA), метаданные экземпляра. - - :::note - Когда токен-носитель установлен (через `/connect` или `AWS_BEARER_TOKEN_BEDROCK`), он имеет приоритет над всеми методами учетных данных AWS, включая настроенные профили. - ::: - -3. Запустите команду `/models`, чтобы выбрать нужную модель. - - ```txt - /models - ``` - -:::note -Для пользовательских профилей вывода используйте имя модели и поставщика в ключе и задайте для свойства `id` значение arn. Это обеспечивает правильное кэширование: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - -::: - ---- - -### Anthropic - -1. После регистрации введите команду `/connect` и выберите Anthropic. - - ```txt - /connect - ``` - -2. Здесь вы можете выбрать опцию **Claude Pro/Max**, и ваш браузер откроется. - и попросите вас пройти аутентификацию. - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. Теперь все модели Anthropic должны быть доступны при использовании команды `/models`. - - ```txt - /models - ``` - -:::info -Использование вашей подписки Claude Pro/Max в opencode официально не поддерживается [Anthropic](https://anthropic.com). -::: - -##### Использование ключей API - -Вы также можете выбрать **Создать ключ API**, если у вас нет подписки Pro/Max. Он также откроет ваш браузер и попросит вас войти в Anthropic и предоставит вам код, который вы можете вставить в свой терминал. - -Или, если у вас уже есть ключ API, вы можете выбрать **Ввести ключ API вручную** и вставить его в свой терминал. - ---- - -### Atomic Chat - -Вы можете настроить opencode для работы с локальными моделями через [Atomic Chat](https://atomic.chat) — десктопное приложение, которое запускает локальные LLM за OpenAI-совместимым API-сервером (конечная точка по умолчанию `http://127.0.0.1:1337/v1`). - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -В этом примере: - -- `atomic-chat` — пользовательский идентификатор провайдера. Это может быть любая строка. -- `npm` указывает пакет, используемый для этого провайдера. Здесь используется `@ai-sdk/openai-compatible` для любых OpenAI-совместимых API. -- `name` — отображаемое имя провайдера в интерфейсе. -- `options.baseURL` — конечная точка локального сервера. Измените хост и порт в соответствии с вашей конфигурацией Atomic Chat. -- `models` — карта идентификаторов моделей и их отображаемых имён. Каждый ID должен совпадать со значением `id`, которое возвращает `GET /v1/models` — выполните `curl http://127.0.0.1:1337/v1/models`, чтобы увидеть ID моделей, загруженных в Atomic Chat. - -:::tip -Если вызовы инструментов работают нестабильно, выберите загруженную модель с хорошей поддержкой tool calling (например, вариант из семейств Qwen-Coder или DeepSeek-Coder). -::: - ---- - -### Azure OpenAI - -:::note -Если вы столкнулись с ошибками «Извините, но я не могу помочь с этим запросом», попробуйте изменить фильтр содержимого с **DefaultV2** на **Default** в своем ресурсе Azure. -::: - -1. Перейдите на [портал Azure](https://portal.azure.com/) и создайте ресурс **Azure OpenAI**. Вам понадобится: - - **Имя ресурса**: оно становится частью вашей конечной точки API (`https://RESOURCE_NAME.openai.azure.com/`). - - **Ключ API**: `KEY 1` или `KEY 2` из вашего ресурса. - -2. Перейдите в [Azure AI Foundry](https://ai.azure.com/) и разверните модель. - - :::примечание - Для правильной работы opencode имя развертывания должно совпадать с именем модели. - ::: - -3. Запустите команду `/connect` и найдите **Azure**. - - ```txt - /connect - ``` - -4. Введите свой ключ API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Задайте имя ресурса как переменную среды: - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - - Или добавьте его в свой профиль bash: - - ```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX - ``` - -6. Запустите команду `/models`, чтобы выбрать развернутую модель. - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. Перейдите на [портал Azure](https://portal.azure.com/) и создайте ресурс **Azure OpenAI**. Вам понадобится: - - **Имя ресурса**: оно становится частью вашей конечной точки API (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`). - - **Ключ API**: `KEY 1` или `KEY 2` из вашего ресурса. - -2. Перейдите в [Azure AI Foundry](https://ai.azure.com/) и разверните модель. - - :::примечание - Для правильной работы opencode имя развертывания должно совпадать с именем модели. - ::: - -3. Запустите команду `/connect` и найдите **Azure Cognitive Services**. - - ```txt - /connect - ``` - -4. Введите свой ключ API. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Задайте имя ресурса как переменную среды: - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - - Или добавьте его в свой профиль bash: - - ```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX - ``` - -6. Запустите команду `/models`, чтобы выбрать развернутую модель. - - ```txt - /models - ``` - ---- - -### Baseten - -1. Перейдите в [Baseten](https://app.baseten.co/), создайте учетную запись и сгенерируйте ключ API. - -2. Запустите команду `/connect` и найдите **Baseten**. - - ```txt - /connect - ``` - -3. Введите свой ключ API Baseten. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать модель. - - ```txt - /models - ``` - ---- - -### Cerebras - -1. Перейдите в [консоль Cerebras](https://inference.cerebras.ai/), создайте учетную запись и сгенерируйте ключ API. - -2. Запустите команду `/connect` и найдите **Cerebras**. - - ```txt - /connect - ``` - -3. Введите свой ключ API Cerebras. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать такую ​​модель, как _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -Cloudflare AI Gateway позволяет вам получать доступ к моделям OpenAI, Anthropic, Workers AI и т. д. через единую конечную точку. Благодаря [Unified Billing](https://developers.cloudflare.com/ai-gateway/features/unified-billing/) вам не нужны отдельные ключи API для каждого провайдера. - -1. Перейдите на [панель управления Cloudflare](https://dash.cloudflare.com/), выберите **AI** > **AI Gateway** и создайте новый шлюз. - -2. Установите идентификатор своей учетной записи и идентификатор шлюза в качестве переменных среды. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. Запустите команду `/connect` и найдите **Cloudflare AI Gateway**. - - ```txt - /connect - ``` - -4. Введите свой токен API Cloudflare. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - - Или установите его как переменную среды. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token - ``` - -5. Запустите команду `/models`, чтобы выбрать модель. - - ```txt - /models - ``` - - Вы также можете добавлять модели через конфигурацию opencode. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } - } - ``` - ---- - -### Cortecs - -1. Перейдите в [консоль Cortecs](https://cortecs.ai/), создайте учетную запись и сгенерируйте ключ API. - -2. Запустите команду `/connect` и найдите **Cortecs**. - - ```txt - /connect - ``` - -3. Введите свой ключ API Cortecs. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать такую ​​модель, как _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. Перейдите в [консоль DeepSeek](https://platform.deepseek.com/), создайте учетную запись и нажмите **Создать новый ключ API**. - -2. Запустите команду `/connect` и найдите **DeepSeek**. - - ```txt - /connect - ``` - -3. Введите свой ключ API DeepSeek. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать модель DeepSeek, например _DeepSeek V4 Pro_. - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. Перейдите на панель мониторинга Deep Infra](https://deepinfra.com/dash), создайте учетную запись и сгенерируйте ключ API. - -2. Запустите команду `/connect` и найдите **Deep Infra**. - - ```txt - /connect - ``` - -3. Введите свой ключ API Deep Infra. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать модель. - - ```txt - /models - ``` - ---- - -### FrogBot - -1. Перейдите на [панель FrogBot](https://app.frogbot.ai/signup), создайте учетную запись и сгенерируйте ключ API. - -2. Запустите команду `/connect` и найдите **FrogBot**. - - ```txt - /connect - ``` - -3. Введите ключ API FrogBot. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать модель. - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. Перейдите в [консоль Fireworks AI](https://app.fireworks.ai/), создайте учетную запись и нажмите **Создать ключ API**. - -2. Запустите команду `/connect` и найдите **Fireworks AI**. - - ```txt - /connect - ``` - -3. Введите ключ API Fireworks AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать такую ​​модель, как _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo предоставляет агентский чат на базе искусственного интеллекта со встроенными возможностями вызова инструментов через прокси-сервер GitLab Anthropic. - -1. Запустите команду `/connect` и выберите GitLab. - - ```txt - /connect - ``` - -2. Выберите метод аутентификации: - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### Использование OAuth (рекомендуется) - - Выберите **OAuth**, и ваш браузер откроется для авторизации. - - #### Использование токена личного доступа - 1. Перейдите в [Настройки пользователя GitLab > Токены доступа](https://gitlab.com/-/user_settings/personal_access_tokens). - 2. Нажмите **Добавить новый токен**. - 3. Имя: `OpenCode`, Области применения: `api` - 4. Скопируйте токен (начинается с `glpat-`) - 5. Введите его в терминал - -3. Запустите команду `/models`, чтобы просмотреть доступные модели. - - ```txt - /models - ``` - - Доступны три модели на основе Claude: - - **duo-chat-haiku-4-5** (по умолчанию) — быстрые ответы на быстрые задачи. - - **duo-chat-sonnet-4-5** — сбалансированная производительность для большинства рабочих процессов. - - **duo-chat-opus-4-5** — Наиболее способен к комплексному анализу. - -:::note -Вы также можете указать переменную среды «GITLAB_TOKEN», если не хотите. -для хранения токена в хранилище аутентификации opencode. -::: - -##### Самостоятельная GitLab - -:::note[примечание о соответствии] -opencode использует небольшую модель для некоторых задач ИИ, таких как создание заголовка сеанса. -По умолчанию он настроен на использование gpt-5-nano, размещенного на Zen. Чтобы заблокировать opencode -чтобы использовать только свой собственный экземпляр, размещенный на GitLab, добавьте следующее в свой -`opencode.json` файл. Также рекомендуется отключить совместное использование сеансов. - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -Для самостоятельных экземпляров GitLab: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -Если в вашем экземпляре используется собственный AI-шлюз: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -Или добавьте в свой профиль bash: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -Ваш администратор GitLab должен включить следующее: - -1. [Платформа Duo Agent](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) для пользователя, группы или экземпляра -2. Флаги функций (через консоль Rails): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### OAuth для локальных экземпляров - -Чтобы Oauth работал на вашем локальном экземпляре, вам необходимо создать -новое приложение (Настройки → Приложения) с -URL обратного вызова `http://127.0.0.1:8080/callback` и следующие области: - -- API (Доступ к API от вашего имени) -- read_user (прочитать вашу личную информацию) -- read_repository (разрешает доступ к репозиторию только для чтения) - -Затем укажите идентификатор приложения как переменную среды: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -Дополнительная документация на домашней странице [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth). - -##### Конфигурация - -Настройте через `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### Инструменты API GitLab (необязательно, но настоятельно рекомендуется) - -Чтобы получить доступ к инструментам GitLab (мерж-реквесты, задачи, конвейеры, CI/CD и т. д.): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -Этот плагин предоставляет комплексные возможности управления репозиторием GitLab, включая проверки MR, отслеживание проблем, мониторинг конвейера и многое другое. - ---- - -### GitHub Copilot - -Чтобы использовать подписку GitHub Copilot с открытым кодом: - -:::note -Некоторым моделям может потребоваться [Pro+ -подписка](https://github.com/features/copilot/plans) для использования. - -Некоторые модели необходимо включить вручную в настройках [GitHub Copilot](https://docs.github.com/en/copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use). -::: - -1. Запустите команду `/connect` и найдите GitHub Copilot. - - ```txt - /connect - ``` - -2. Перейдите на [github.com/login/device](https://github.com/login/device) и введите код. - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - └ Waiting for authorization... - ``` - -3. Теперь запустите команду `/models`, чтобы выбрать нужную модель. - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -Чтобы использовать Google Vertex AI с opencode: - -1. Перейдите в **Model Garden** в Google Cloud Console и проверьте - модели, доступные в вашем регионе. - - :::note - Вам необходим проект Google Cloud с включенным Vertex AI API. - ::: - -2. Установите необходимые переменные среды: - - `GOOGLE_CLOUD_PROJECT`: идентификатор вашего проекта Google Cloud. - - `VERTEX_LOCATION` (необязательно): регион для Vertex AI (по умолчанию `global`). - - Аутентификация (выберите одну): - - `GOOGLE_APPLICATION_CREDENTIALS`: путь к ключевому файлу JSON вашего сервисного аккаунта. - - Аутентификация через CLI gcloud: `gcloud auth application-default login`. - - Установите их во время запуска opencode. - - ```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode - ``` - - Или добавьте их в свой профиль bash. - - ```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global - ``` - -:::tip -Регион `global` повышает доступность и уменьшает количество ошибок без дополнительных затрат. Используйте региональные конечные точки (например, `us-central1`) для требований к местонахождению данных. [Подробнее](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. Запустите команду `/models`, чтобы выбрать нужную модель. - - ```txt - /models - ``` - ---- - -### Groq - -1. Перейдите в консоль Groq](https://console.groq.com/), нажмите **Создать ключ API** и скопируйте ключ. - -2. Запустите команду `/connect` и найдите Groq. - - ```txt - /connect - ``` - -3. Введите ключ API для провайдера. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать тот, который вам нужен. - - ```txt - /models - ``` - ---- - -### Hugging Face - -[Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers) предоставляют доступ к открытым моделям, поддерживаемым более чем 17 поставщиками. - -1. Перейдите в [Настройки Hugging Face](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained), чтобы создать токен с разрешением совершать вызовы к поставщикам выводов. - -2. Запустите команду `/connect` и найдите **Hugging Face**. - - ```txt - /connect - ``` - -3. Введите свой токен Hugging Face. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать такую ​​модель, как _Kimi-K2-Instruct_ или _GLM-4.6_. - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) — это платформа наблюдения LLM, которая обеспечивает ведение журнала, мониторинг и аналитику для ваших приложений искусственного интеллекта. Helicone AI Gateway автоматически направляет ваши запросы соответствующему поставщику на основе модели. - -1. Перейдите в [Helicone](https://helicone.ai), создайте учетную запись и сгенерируйте ключ API на своей панели управления. - -2. Запустите команду `/connect` и найдите **Helicone**. - - ```txt - /connect - ``` - -3. Введите свой ключ API Helicone. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать модель. - - ```txt - /models - ``` - -Дополнительные сведения о дополнительных провайдерах и расширенных функциях, таких как кэширование и ограничение скорости, см. в [Документация Helicone](https://docs.helicone.ai). - -#### Дополнительные конфигурации - -Если вы видите функцию или модель от Helicone, которая не настраивается автоматически через opencode, вы всегда можете настроить ее самостоятельно. - -Вот [Справочник моделей Helicone](https://helicone.ai/models), он понадобится вам, чтобы получить идентификаторы моделей, которые вы хотите добавить. - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### Пользовательские заголовки - -Helicone поддерживает пользовательские заголовки для таких функций, как кэширование, отслеживание пользователей и управление сеансами. Добавьте их в конфигурацию вашего провайдера, используя `options.headers`: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### Отслеживание сеансов - -Функция Helicone [Sessions](https://docs.helicone.ai/features/sessions) позволяет группировать связанные запросы LLM вместе. Используйте плагин [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session), чтобы автоматически регистрировать каждый диалог opencode как сеанс в Helicone. - -```bash -npm install -g opencode-helicone-session -``` - -Добавьте его в свою конфигурацию. - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -Плагин вставляет в ваши запросы заголовки `Helicone-Session-Id` и `Helicone-Session-Name`. На странице «Сеансы» Helicone вы увидите каждый диалог opencode, указанный как отдельный сеанс. - -##### Общие разъемы Helicone - -| Заголовок | Описание | -| -------------------------- | ------------------------------------------------------------------------------ | -| `Helicone-Cache-Enabled` | Включить кэширование ответов (`true`/`false`) | -| `Helicone-User-Id` | Отслеживание показателей по пользователю | -| `Helicone-Property-[Name]` | Добавьте пользовательские свойства (например, `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | Связывание запросов с версиями промптов | - -См. [Справочник заголовков Helicone](https://docs.helicone.ai/helicone-headers/header-directory) для всех доступных заголовков. - ---- - -### llama.cpp - -Вы можете настроить opencode для использования локальных моделей с помощью [утилиты llama-server llama.cpp's](https://github.com/ggml-org/llama.cpp) - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -В этом примере: - -- `llama.cpp` — это идентификатор пользовательского поставщика. Это может быть любая строка, которую вы хотите. -- `npm` указывает пакет, который будет использоваться для этого поставщика. Здесь `@ai-sdk/openai-compatible` используется для любого API-интерфейса, совместимого с OpenAI. -- `name` — это отображаемое имя поставщика в пользовательском интерфейсе. -- `options.baseURL` — конечная точка локального сервера. -- `models` — это карта идентификаторов моделей с их конфигурациями. Название модели будет отображаться в списке выбора модели. - ---- - -### IO.NET - -IO.NET предлагает 17 моделей, оптимизированных для различных случаев использования: - -1. Перейдите в консоль IO.NET](https://ai.io.net/), создайте учетную запись и сгенерируйте ключ API. - -2. Запустите команду `/connect` и найдите **IO.NET**. - - ```txt - /connect - ``` - -3. Введите свой ключ API IO.NET. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать модель. - - ```txt - /models - ``` - ---- - -### LM Studio - -Вы можете настроить opencode для использования локальных моделей через LM Studio. - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -В этом примере: - -- `lmstudio` — это идентификатор пользовательского поставщика. Это может быть любая строка, которую вы хотите. -- `npm` указывает пакет, который будет использоваться для этого поставщика. Здесь `@ai-sdk/openai-compatible` используется для любого API-интерфейса, совместимого с OpenAI. -- `name` — это отображаемое имя поставщика в пользовательском интерфейсе. -- `options.baseURL` — конечная точка локального сервера. -- `models` — это карта идентификаторов моделей с их конфигурациями. Название модели будет отображаться в списке выбора модели. - ---- - -### Moonshot AI - -Чтобы использовать Кими К2 из Moonshot AI: - -1. Перейдите в [консоль Moonshot AI](https://platform.moonshot.ai/console), создайте учетную запись и нажмите **Создать ключ API**. - -2. Запустите команду `/connect` и найдите **Moonshot AI**. - - ```txt - /connect - ``` - -3. Введите свой API-ключ Moonshot. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать _Kimi K2_. - - ```txt - /models - ``` - ---- - -### MiniMax - -1. Перейдите в [консоль API MiniMax](https://platform.minimax.io/login), создайте учетную запись и сгенерируйте ключ API. - -2. Запустите команду `/connect` и найдите **MiniMax**. - - ```txt - /connect - ``` - -3. Введите свой ключ API MiniMax. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать модель типа _M2.1_. - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. Перейдите в консоль Nebius Token Factory](https://tokenfactory.nebius.com/), создайте учетную запись и нажмите **Добавить ключ**. - -2. Запустите команду `/connect` и найдите **Nebius Token Factory**. - - ```txt - /connect - ``` - -3. Введите ключ API фабрики токенов Nebius. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать такую ​​модель, как _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Ollama - -Вы можете настроить opencode для использования локальных моделей через Ollama. - -:::tip -Ollama может автоматически настроиться для opencode. Подробности см. в документации по интеграции Ollama](https://docs.ollama.com/integrations/opencode). -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -В этом примере: - -- `ollama` — это идентификатор пользовательского поставщика. Это может быть любая строка, которую вы хотите. -- `npm` указывает пакет, который будет использоваться для этого поставщика. Здесь `@ai-sdk/openai-compatible` используется для любого API-интерфейса, совместимого с OpenAI. -- `name` — это отображаемое имя поставщика в пользовательском интерфейсе. -- `options.baseURL` — конечная точка локального сервера. -- `models` — это карта идентификаторов моделей с их конфигурациями. Название модели будет отображаться в списке выбора модели. - -:::tip -Если вызовы инструментов не работают, попробуйте увеличить `num_ctx` в Олламе. Начните с 16–32 тысяч. -::: - ---- - -### Ollama Cloud - -Чтобы использовать Ollama Cloud с opencode: - -1. Перейдите на [https://ollama.com/](https://ollama.com/) и войдите в систему или создайте учетную запись. - -2. Перейдите в **Настройки** > **Ключи** и нажмите **Добавить ключ API**, чтобы создать новый ключ API. - -3. Скопируйте ключ API для использования в opencode. - -4. Запустите команду `/connect` и найдите **Ollama Cloud**. - - ```txt - /connect - ``` - -5. Введите свой ключ API Ollama Cloud. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **Важно**. Перед использованием облачных моделей в opencode необходимо получить информацию о модели локально: - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. Запустите команду `/models`, чтобы выбрать модель облака Ollama. - - ```txt - /models - ``` - ---- - -### OpenAI - -Мы рекомендуем подписаться на [ChatGPT Plus или Pro](https://chatgpt.com/pricing). - -1. После регистрации выполните команду `/connect` и выберите OpenAI. - - ```txt - /connect - ``` - -2. Здесь вы можете выбрать опцию **ChatGPT Plus/Pro**, и ваш браузер откроется. - и попросите вас пройти аутентификацию. - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. Теперь все модели OpenAI должны быть доступны при использовании команды `/models`. - - ```txt - /models - ``` - -##### Использование ключей API - -Если у вас уже есть ключ API, вы можете выбрать **Ввести ключ API вручную** и вставить его в свой терминал. - ---- - -### OpenCode Zen - -OpenCode Zen — это список протестированных и проверенных моделей, предоставленный командой opencode. [Подробнее](/docs/zen). - -1. Войдите в систему **OpenCode Zen** и нажмите **Создать ключ API**. - -2. Запустите команду `/connect` и найдите **OpenCode Zen**. - - ```txt - /connect - ``` - -3. Введите свой ключ API opencode. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать такую ​​модель, как _Qwen 3 Coder 480B_. - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. Перейдите на панель управления OpenRouter](https://openrouter.ai/settings/keys), нажмите **Создать ключ API** и скопируйте ключ. - -2. Запустите команду `/connect` и найдите OpenRouter. - - ```txt - /connect - ``` - -3. Введите ключ API для провайдера. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Многие модели OpenRouter предварительно загружены по умолчанию. Запустите команду `/models`, чтобы выбрать нужную. - - ```txt - /models - ``` - - Вы также можете добавить дополнительные модели через конфигурацию opencode. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. Вы также можете настроить их через конфигурацию opencode. Вот пример указания провайдера - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI Core предоставляет доступ к более чем 40 моделям от OpenAI, Anthropic, Google, Amazon, Meta, Mistral и AI21 через единую платформу. - -1. Перейдите в [SAP BTP Cockpit](https://account.hana.ondemand.com/), перейдите к экземпляру службы SAP AI Core и создайте ключ службы. - - :::tip - Ключ службы — это объект JSON, содержащий `clientid`, `clientsecret`, `url` и `serviceurls.AI_API_URL`. Экземпляр AI Core можно найти в разделе **Сервисы** > **Экземпляры и подписки** в панели управления BTP. - ::: - -2. Запустите команду `/connect` и найдите **SAP AI Core**. - - ```txt - /connect - ``` - -3. Введите свой сервисный ключ в формате JSON. - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - Или установите переменную среды `AICORE_SERVICE_KEY`: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - Или добавьте его в свой профиль bash: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. При необходимости укажите идентификатор развертывания и группу ресурсов: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - Эти параметры являются необязательными и должны быть настроены в соответствии с настройками SAP AI Core. - ::: - -5. Запустите команду `/models`, чтобы выбрать одну из более чем 40 доступных моделей. - - ```txt - /models - ``` - ---- - -### STACKIT - -STACKIT AI Model Serving предоставляет полностью управляемую суверенную среду хостинга для моделей ИИ, ориентированную на LLM, таких как Llama, Mistral и Qwen, с максимальным суверенитетом данных в европейской инфраструктуре. - -1. Перейдите на [портал STACKIT](https://portal.stackit.cloud), перейдите в **AI Model Serving** и создайте токен аутентификации для своего проекта. - - :::tip - Вам необходима учетная запись клиента STACKIT, учетная запись пользователя и проект перед созданием токенов аутентификации. - ::: - -2. Запустите команду `/connect` и найдите **STACKIT**. - - ```txt - /connect - ``` - -3. Введите свой токен аутентификации STACKIT AI Model Serving. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать одну из доступных моделей, например _Qwen3-VL 235B_ или _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. Перейдите к [OVHcloud Panel](https://ovh.com/manager). Перейдите в раздел `Public Cloud`, `AI & Machine Learning` > `AI Endpoints` и на вкладке `API Keys` нажмите **Создать новый ключ API**. - -2. Запустите команду `/connect` и найдите **Конечные точки OVHcloud AI**. - - ```txt - /connect - ``` - -3. Введите ключ API конечных точек OVHcloud AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать модель типа _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Scaleway - -Чтобы использовать [Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/) с opencode: - -1. Перейдите к [Настройки IAM консоли Scaleway](https://console.scaleway.com/iam/api-keys), чтобы сгенерировать новый ключ API. - -2. Запустите команду `/connect` и найдите **Scaleway**. - - ```txt - /connect - ``` - -3. Введите ключ API Scaleway. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать модель, например _devstral-2-123b-instruct-2512_ или _gpt-oss-120b_. - - ```txt - /models - ``` - ---- - -### Together AI - -1. Перейдите в [консоль Together AI](https://api.together.ai), создайте учетную запись и нажмите **Добавить ключ**. - -2. Запустите команду `/connect` и найдите **Together AI**. - - ```txt - /connect - ``` - -3. Введите ключ API Together AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать такую ​​модель, как _Kimi K2 Instruct_. - - ```txt - /models - ``` - ---- - -### Venice AI - -1. Перейдите к [консоли Venice AI](https://venice.ai), создайте учетную запись и сгенерируйте ключ API. - -2. Запустите команду `/connect` и найдите **Venice AI**. - - ```txt - /connect - ``` - -3. Введите свой ключ API Venice AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать модель типа _Llama 3.3 70B_. - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -Vercel AI Gateway позволяет получать доступ к моделям OpenAI, Anthropic, Google, xAI и других источников через единую конечную точку. Модели предлагаются по прейскурантной цене без наценок. - -1. Перейдите на [панель мониторинга Vercel](https://vercel.com/), перейдите на вкладку **AI Gateway** и нажмите **Ключи API**, чтобы создать новый ключ API. - -2. Запустите команду `/connect` и найдите **Vercel AI Gateway**. - - ```txt - /connect - ``` - -3. Введите ключ API Vercel AI Gateway. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать модель. - - ```txt - /models - ``` - -Вы также можете настраивать модели через конфигурацию opencode. Ниже приведен пример указания порядка маршрутизации поставщика. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -Некоторые полезные параметры маршрутизации: - -| Вариант | Описание | -| ------------------- | -------------------------------------------------------------------- | -| `order` | Последовательность провайдеров для попытки | -| `only` | Ограничить конкретными провайдерами | -| `zeroDataRetention` | Использовать только провайдеров с политикой нулевого хранения данных | - ---- - -### xAI - -1. Перейдите на [консоль xAI](https://console.x.ai/), создайте учетную запись и сгенерируйте ключ API. - -2. Запустите команду `/connect` и найдите **xAI**. - - ```txt - /connect - ``` - -3. Введите свой ключ API xAI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать такую ​​модель, как _Grok Beta_. - - ```txt - /models - ``` - ---- - -### Z.AI - -1. Перейдите в [консоль Z.AI API](https://z.ai/manage-apikey/apikey-list), создайте учетную запись и нажмите **Создать новый ключ API**. - -2. Запустите команду `/connect` и найдите **Z.AI**. - - ```txt - /connect - ``` - - Если вы подписаны на **План кодирования GLM**, выберите **План кодирования Z.AI**. - -3. Введите свой ключ API Z.AI. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Запустите команду `/models`, чтобы выбрать модель типа _GLM-4.7_. - - ```txt - /models - ``` - ---- - -### ZenMux - -1. Перейдите на [панель управления ZenMux](https://zenmux.ai/settings/keys), нажмите **Создать ключ API** и скопируйте ключ. - -2. Запустите команду `/connect` и найдите ZenMux. - - ```txt - /connect - ``` - -3. Введите ключ API для провайдера. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Многие модели ZenMux предварительно загружены по умолчанию. Запустите команду `/models`, чтобы выбрать нужную. - - ```txt - /models - ``` - - Вы также можете добавить дополнительные модели через конфигурацию opencode. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## Пользовательский поставщик - -Чтобы добавить любого **совместимого с OpenAI** поставщика, не указанного в команде `/connect`: - -:::tip -Вы можете использовать любого OpenAI-совместимого провайдера с открытым кодом. Большинство современных поставщиков ИИ предлагают API-интерфейсы, совместимые с OpenAI. -::: - -1. Запустите команду `/connect` и прокрутите вниз до пункта **Другое**. - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. Введите уникальный идентификатор провайдера. - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::примечание - Выберите запоминающийся идентификатор, вы будете использовать его в своем файле конфигурации. - ::: - -3. Введите свой ключ API для провайдера. - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. Создайте или обновите файл `opencode.json` в каталоге вашего проекта: - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - - Вот варианты конфигурации: - - **npm**: используемый пакет AI SDK, `@ai-sdk/openai-compatible` для поставщиков, совместимых с OpenAI. - - **имя**: отображаемое имя в пользовательском интерфейсе. - - **модели**: Доступные модели. - - **options.baseURL**: URL-адрес конечной точки API. - - **options.apiKey**: при необходимости установите ключ API, если не используется аутентификация. - - **options.headers**: при необходимости можно установить собственные заголовки. - - Подробнее о дополнительных параметрах в примере ниже. - -5. Запустите команду `/models`, и ваш пользовательский поставщик и модели появятся в списке выбора. - ---- - -##### Пример - -Ниже приведен пример настройки параметров `apiKey`, `headers` и модели `limit`. - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -Детали конфигурации: - -- **apiKey**: устанавливается с использованием синтаксиса переменной `env`, [подробнее ](/docs/config#env-vars). -- **заголовки**: пользовательские заголовки, отправляемые с каждым запросом. -- **limit.context**: Максимальное количество входных токенов, которые принимает модель. -- **limit.output**: Максимальное количество токенов, которые может сгенерировать модель. - -Поля `limit` позволяют opencode понять, сколько контекста у вас осталось. Стандартные поставщики автоматически извлекают их из models.dev. - ---- - -## Поиск неисправностей - -Если у вас возникли проблемы с настройкой провайдера, проверьте следующее: - -1. **Проверьте настройку аутентификации**: запустите `opencode auth list`, чтобы проверить, верны ли учетные данные. - для провайдера добавлены в ваш конфиг. - - Это не относится к таким поставщикам, как Amazon Bedrock, которые для аутентификации полагаются на переменные среды. - -2. Для пользовательских поставщиков проверьте конфигурацию opencode и: - - Убедитесь, что идентификатор провайдера, используемый в команде `/connect`, соответствует идентификатору в вашей конфигурации opencode. - - Для провайдера используется правильный пакет npm. Например, используйте `@ai-sdk/cerebras` для Cerebras. А для всех других поставщиков, совместимых с OpenAI, используйте `@ai-sdk/openai-compatible`. - - Убедитесь, что в поле `options.baseURL` используется правильная конечная точка API. diff --git a/packages/web/src/content/docs/ru/rules.mdx b/packages/web/src/content/docs/ru/rules.mdx deleted file mode 100644 index d553bd0ced..0000000000 --- a/packages/web/src/content/docs/ru/rules.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: Правила -description: Установите пользовательские инструкции для opencode. ---- - -Вы можете предоставить собственные инструкции для opencode, создав файл `AGENTS.md`. Это похоже на правила Cursor. Он содержит инструкции, которые будут включены в контекст LLM для настройки его поведения для вашего конкретного проекта. - ---- - -## Инициализировать - -Чтобы создать новый файл `AGENTS.md`, вы можете запустить команду `/init` в opencode. - -:::tip -Вам следует закоммитить файл `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. - -Поскольку это не коммитится в Git и не передается вашей команде, мы рекомендуем использовать его для указания любых личных правил, которым должен следовать LLM. - -### Совместимость кода Клода - -Для пользователей, переходящих с 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/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. -``` - -Такой подход позволяет: - -- Создавайте модульные файлы правил многократного использования. -- Делитесь правилами между проектами с помощью символических ссылок или подмодулей git. -- Сохраняйте AGENTS.md кратким, ссылаясь на подробные инструкции. -- Убедитесь, что opencode загружает файлы только тогда, когда это необходимо для конкретной задачи. - -:::tip -Для монорепозиториев или проектов с общими стандартами использование `opencode.json` с шаблонами glob (например, `packages/*/AGENTS.md`) более удобно в обслуживании, чем инструкции вручную. -::: diff --git a/packages/web/src/content/docs/ru/sdk.mdx b/packages/web/src/content/docs/ru/sdk.mdx deleted file mode 100644 index 0afdea1b6f..0000000000 --- a/packages/web/src/content/docs/ru/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: SDK -description: Типобезопасный JS-клиент для сервера opencode. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -SDK JS/TS с открытым кодом предоставляет типобезопасный клиент для взаимодействия с сервером. -Используйте его для создания интеграции и программного управления открытым кодом. - -[Узнайте больше](/docs/server) о том, как работает сервер. Примеры можно найти в [projects](/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` | Server hostname | `127.0.0.1` | -| `port` | `number` | Server port | `4096` | -| `signal` | `AbortSignal` | Abort signal for cancellation | `undefined` | -| `timeout` | `number` | Timeout in ms for server start | `5000` | -| `config` | `Config` | Configuration object | `{}` | - ---- - -## Конфигурация - -Вы можете передать объект конфигурации для настройки поведения. Экземпляр по-прежнему получает ваш `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 of the server | `http://localhost:4096` | -| `fetch` | `function` | Custom fetch implementation | `globalThis.fetch` | -| `parseAs` | `string` | Response parsing method | `auto` | -| `responseStyle` | `string` | Return style: `data` or `fields` | `fields` | -| `throwOnError` | `boolean` | Throw errors instead of return | `false` | - ---- - -## Типы - -SDK включает определения TypeScript для всех типов API. Импортируйте их напрямую: - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -Все типы генерируются на основе спецификации OpenAPI сервера и доступны в файле types. - ---- - -## Ошибки - -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 Schema, определяющий структуру вывода | -| `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`** — увеличивайте для сложных схем, уменьшайте для простых - ---- - -## API - -SDK предоставляет все серверные API через типобезопасный клиент. - ---- - -### Глобальный - -| Метод | Описание | Ответ | -| ----------------- | ------------------------------- | ------------------------------------ | -| `global.health()` | Check server health and version | `{ healthy: true, version: string }` | - ---- - -#### Примеры - -```javascript -const health = await client.global.health() -console.log(health.data.version) -``` - ---- - -### Приложение - -| Метод | Описание | Ответ | -| -------------- | ------------------------- | ------------------------------------------- | -| `app.log()` | Write a log entry | `boolean` | -| `app.agents()` | List all available agents | Agent[] | - ---- - -#### Примеры - -```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.list()` | List all projects | Project[] | -| `project.current()` | Get current project | Project | - ---- - -#### Примеры - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### Путь - -| Метод | Описание | Ответ | -| ------------ | ---------------- | ---------------------------------------- | -| `path.get()` | Get current path | Path | - ---- - -#### Примеры - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### Конфигурация - -| Метод | Описание | Ответ | -| -------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | Get config info | Config | -| `config.providers()` | List providers and default models | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### Примеры - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### Сессии - -| Метод | Описание | Примечания | -| ---------------------------------------------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `session.list()` | List sessions | Returns Session[] | -| `session.get({ path })` | Get session | Returns Session | -| `session.children({ path })` | List child sessions | Returns Session[] | -| `session.create({ body })` | Create session | Returns Session | -| `session.delete({ path })` | Delete session | Returns `boolean` | -| `session.update({ path, body })` | Update session properties | Returns Session | -| `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 Session | -| `session.unshare({ path })` | Unshare session | Returns Session | -| `session.summarize({ path, body })` | Summarize session | Returns `boolean` | -| `session.messages({ path })` | List messages in a session | Returns `{ info: `Message`, parts: `Part[]`}[]` | -| `session.message({ path })` | Get message details | Returns `{ info: `Message`, parts: `Part[]`}` | -| `session.prompt({ path, body })` | Send prompt message | `body.noReply: true` возвращает UserMessage (только контекст). По умолчанию возвращает AssistantMessage с ответом ИИ. Поддерживает `body.outputFormat` для [структурированного вывода](#структурированный-вывод) | -| `session.command({ path, body })` | Send command to session | Returns `{ info: `AssistantMessage`, parts: `Part[]`}` | -| `session.shell({ path, body })` | Run a shell command | Returns AssistantMessage | -| `session.revert({ path, body })` | Revert a message | Returns Session | -| `session.unrevert({ path })` | Restore reverted messages | Returns Session | -| `postSessionByIdPermissionsByPermissionId({ path, body })` | Respond to a permission request | Returns `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 })` | 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 | Symbol[] | -| `file.read({ query })` | Read a file | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | Get status for tracked files | File[] | - -`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.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` | - ---- - -#### Примеры - -```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.set({ ... })` | Set authentication credentials | `boolean` | - ---- - -#### Примеры - -```javascript -await client.auth.set({ - path: { id: "anthropic" }, - body: { type: "api", key: "your-api-key" }, -}) -``` - ---- - -### События - -| Метод | Описание | Ответ | -| ------------------- | ------------------------- | ------------------------- | -| `event.subscribe()` | Server-sent events stream | Server-sent events stream | - ---- - -#### Примеры - -```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) -} -``` diff --git a/packages/web/src/content/docs/ru/server.mdx b/packages/web/src/content/docs/ru/server.mdx deleted file mode 100644 index 2356543dff..0000000000 --- a/packages/web/src/content/docs/ru/server.mdx +++ /dev/null @@ -1,287 +0,0 @@ ---- -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, которую может использовать клиент с открытым кодом. - ---- - -### Использование - -```bash -opencode serve [--port ] [--hostname ] [--cors ] -``` - -#### Параметры - -| Флаг | Описание | По умолчанию | -| --------------- | ------------------------------------------- | ---------------- | -| `--port` | Порт для прослушивания | `4096` | -| `--hostname` | Имя хоста для прослушивания | `127.0.0.1` | -| `--mdns` | Включить обнаружение mDNS | `false` | -| `--mdns-domain` | Пользовательское доменное имя для mDNS | `opencode.local` | -| `--cors` | Разрешенные дополнительные источники (CORS) | `[]` | - -`--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`, он запускает TUI и сервер. Где находится TUI -клиент, который общается с сервером. Сервер предоставляет спецификацию OpenAPI 3.1. -конечная точка. Эта конечная точка также используется для создания файла [SDK](/docs/sdk). - -:::tip -Используйте сервер opencode для программного взаимодействия с открытым кодом. -::: - -Эта архитектура позволяет открытому коду поддерживать несколько клиентов и позволяет программно взаимодействовать с открытым кодом. - -Вы можете запустить `opencode serve`, чтобы запустить автономный сервер. Если у вас есть -TUI с открытым кодом запущен, `opencode serve` запустит новый сервер. - ---- - -#### Подключиться к существующему серверу - -Когда вы запускаете TUI, он случайным образом назначает порт и имя хоста. Вместо этого вы можете передать `--hostname` и `--port` [flags](/docs/cli). Затем используйте это для подключения к его серверу. - -Конечную точку [`/tui`](#tui) можно использовать для управления TUI через сервер. Например, вы можете предварительно заполнить или запустить подсказку. Эта настройка используется плагинами opencode [IDE](/docs/ide). - ---- - -## Спецификация - -Сервер публикует спецификацию OpenAPI 3.1, которую можно просмотреть по адресу: - -``` -http://:/doc -``` - -For example, `http://localhost:4096/doc`. Use the spec to generate clients or inspect request and response types. Or view it in a Swagger explorer. - ---- - -## API - -Сервер opencode предоставляет следующие API. - ---- - -### Глобальный - -| Метод | Путь | Описание | Ответ | -| ----- | ---------------- | --------------------------------------- | ------------------------------------ | -| `GET` | `/global/health` | Получить состояние и версию сервера | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | Получить глобальные события (поток SSE) | Поток событий | - ---- - -### Проект - -| Метод | Путь | Описание | Ответ | -| ----- | ------------------ | ----------------------- | --------------------------------------------- | -| `GET` | `/project` | Список всех проектов | Project[] | -| `GET` | `/project/current` | Получить текущий проект | Project | - ---- - -### Путь и система контроля версий - -| Метод | Путь | Описание | Ответ | -| ----- | ------- | ---------------------------------------------- | ------------------------------------------- | -| `GET` | `/path` | Получить текущий путь | Path | -| `GET` | `/vcs` | Получить информацию о VCS для текущего проекта | VcsInfo | - ---- - -### Экземпляр - -| Метод | Путь | Описание | Ответ | -| ------ | ------------------- | ------------------------- | --------- | -| `POST` | `/instance/dispose` | Удалить текущий экземпляр | `boolean` | - ---- - -### Конфигурация - -| Метод | Путь | Описание | Ответ | -| ------- | ------------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | Получить информацию о конфигурации | Config | -| `PATCH` | `/config` | Обновить конфигурацию | Config | -| `GET` | `/config/providers` | Список провайдеров и моделей по умолчанию | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -### Поставщик - -| Метод | Путь | Описание | Ответ | -| ------ | -------------------------------- | ----------------------------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | Список всех провайдеров | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | Получить методы аутентификации провайдера | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | Авторизация провайдера через OAuth | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | Обработка callback OAuth для провайдера | `boolean` | - ---- - -### Сессии - -| Метод | Путь | Описание | Примечания | -| -------- | ---------------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------- | -| `GET` | `/session` | Список всех сессий | Возвращает Session[] | -| `POST` | `/session` | Создать новую сессию | body: `{ parentID?, title? }`, возвращает Session | -| `GET` | `/session/status` | Получить статус всех сессий | Возвращает `{ [sessionID: string]: `SessionStatus` }` | -| `GET` | `/session/:id` | Получить детали сессии | Возвращает Session | -| `DELETE` | `/session/:id` | Удалить сессию и все её данные | Возвращает `boolean` | -| `PATCH` | `/session/:id` | Обновить свойства сессии | body: `{ title? }`, возвращает Session | -| `GET` | `/session/:id/children` | Получить дочерние сессии | Возвращает Session[] | -| `GET` | `/session/:id/todo` | Получить список задач для сессии | Возвращает Todo[] | -| `POST` | `/session/:id/init` | Анализ приложения и создание `AGENTS.md` | body: `{ messageID, providerID, modelID }`, возвращает `boolean` | -| `POST` | `/session/:id/fork` | Ответвление сессии от сообщения | body: `{ messageID? }`, возвращает Session | -| `POST` | `/session/:id/abort` | Прервать запущенную сессию | Возвращает `boolean` | -| `POST` | `/session/:id/share` | Поделиться сессией | Возвращает Session | -| `DELETE` | `/session/:id/share` | Отменить общий доступ к сессии | Возвращает Session | -| `GET` | `/session/:id/diff` | Получить diff для этой сессии | query: `messageID?`, возвращает FileDiff[] | -| `POST` | `/session/:id/summarize` | Суммировать сессию | body: `{ providerID, modelID }`, возвращает `boolean` | -| `POST` | `/session/:id/revert` | Отменить сообщение | body: `{ messageID, partID? }`, возвращает `boolean` | -| `POST` | `/session/:id/unrevert` | Восстановить все отмененные сообщения | Возвращает `boolean` | -| `POST` | `/session/:id/permissions/:permissionID` | Ответить на запрос разрешения | body: `{ response, remember? }`, возвращает `boolean` | - ---- - -### Сообщения - -| Метод | Путь | Описание | Примечания | -| ------ | --------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `GET` | `/session/:id/message` | Список сообщений в сессии | query: `limit?`, возвращает `{ info: `Message`, parts: `Part[]`}[]` | -| `POST` | `/session/:id/message` | Отправить сообщение и ждать ответа | body: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, возвращает `{ info: `Message`, parts: `Part[]`}` | -| `GET` | `/session/:id/message/:messageID` | Получить детали сообщения | Возвращает `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/prompt_async` | Отправить сообщение асинхронно (без ожидания) | body: как в `/session/:id/message`, возвращает `204 No Content` | -| `POST` | `/session/:id/command` | Выполнить слэш-команду | body: `{ messageID?, agent?, model?, command, arguments }`, возвращает `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/shell` | Запустить команду оболочки | body: `{ agent, model?, command }`, возвращает `{ info: `Message`, parts: `Part[]`}` | - ---- - -### Команды - -| Метод | Путь | Описание | Ответ | -| ----- | ---------- | ------------------ | --------------------------------------------- | -| `GET` | `/command` | Список всех команд | Command[] | - ---- - -### Файлы - -| Метод | Путь | Описание | Ответ | -| ----- | ------------------------ | ------------------------------------ | -------------------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | Поиск текста в файлах | Массив объектов совпадения с `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `GET` | `/find/file?query=` | Поиск файлов и директорий по имени | `string[]` (пути) | -| `GET` | `/find/symbol?query=` | Поиск символов рабочего пространства | Symbol[] | -| `GET` | `/file?path=` | Список файлов и директорий | FileNode[] | -| `GET` | `/file/content?path=

` | Прочитать файл | FileContent | -| `GET` | `/file/status` | Получить статус отслеживаемых файлов | File[] | - -#### `/find/file` параметры запроса - -- `query` (обязательно) — строка поиска (нечеткое совпадение) -- `type` (необязательно) — ограничить результаты `"file"` или `"directory"`. -- `directory` (необязательно) — переопределить корень проекта для поиска. -- `limit` (необязательно) — максимальное количество результатов (1–200) -- `dirs` (необязательно) — устаревший флаг (`"false"` возвращает только файлы) - ---- - -### Инструменты (Экспериментальные) - -| Метод | Путь | Описание | Ответ | -| ----- | ------------------------------------------- | ---------------------------------------------- | -------------------------------------------- | -| `GET` | `/experimental/tool/ids` | Список всех идентификаторов инструментов | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | Список инструментов со схемами JSON для модели | ToolList | - ---- - -### LSP, форматтеры и MCP - -| Метод | Путь | Описание | Ответ | -| ------ | ------------ | ------------------------------- | -------------------------------------------------------- | -| `GET` | `/lsp` | Получить статус сервера LSP | LSPStatus[] | -| `GET` | `/formatter` | Получить статус форматера | FormatterStatus[] | -| `GET` | `/mcp` | Получить статус сервера MCP | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | Добавить сервер MCP динамически | body: `{ name, config }`, возвращает статус объекта MCP | - ---- - -### Агенты - -| Метод | Путь | Описание | Ответ | -| ----- | -------- | ----------------------------- | ------------------------------------------- | -| `GET` | `/agent` | Список всех доступных агентов | Agent[] | - ---- - -### Ведение журнала - -| Метод | Путь | Описание | Ответ | -| ------ | ------ | --------------------------------------------------------------------- | --------- | -| `POST` | `/log` | Записать запись в журнал. Body: `{ 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` | Показать уведомление (`{ title?, message, variant }`) | `boolean` | -| `GET` | `/tui/control/next` | Ожидание следующего запроса управления | Объект запроса управления | -| `POST` | `/tui/control/response` | Ответить на запрос управления (`{ body }`) | `boolean` | - ---- - -### Авторизация - -| Метод | Путь | Описание | Ответ | -| ----- | ----------- | -------------------------------------------------------------------------------------- | --------- | -| `PUT` | `/auth/:id` | Установить учетные данные аутентификации. Body должен соответствовать схеме провайдера | `boolean` | - ---- - -### События - -| Метод | Путь | Описание | Ответ | -| ----- | -------- | --------------------------------------------------------------------------------------------- | ------------------------------------ | -| `GET` | `/event` | Поток событий, отправляемых сервером. Первое событие — `server.connected`, затем события шины | Поток событий, отправляемых сервером | - ---- - -### Документы - -| Метод | Путь | Описание | Ответ | -| ----- | ------ | ------------------------ | -------------------------------------- | -| `GET` | `/doc` | Спецификация OpenAPI 3.1 | HTML-страница со спецификацией OpenAPI | diff --git a/packages/web/src/content/docs/ru/share.mdx b/packages/web/src/content/docs/ru/share.mdx deleted file mode 100644 index 8982afb08d..0000000000 --- a/packages/web/src/content/docs/ru/share.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Делиться -description: Поделитесь своими разговорами об opencode. ---- - -Функция общего доступа opencode позволяет вам создавать общедоступные ссылки на ваши беседы opencode, чтобы вы могли сотрудничать с товарищами по команде или получать помощь от других. - -:::note -Общие беседы общедоступны для всех, у кого есть ссылка. -::: - ---- - -## Как это работает - -Когда вы делитесь беседой, opencode: - -1. Создает уникальный общедоступный URL-адрес для вашего сеанса. -2. Синхронизирует историю ваших разговоров с нашими серверами -3. Делает беседу доступной по общей ссылке — `opncd.ai/s/`. - ---- - -## Совместное использование - -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 -``` - -Это приведет к удалению ссылки общего доступа и удалению данных, связанных с разговором. - ---- - -## Конфиденциальность - -Есть несколько вещей, которые следует учитывать при общении. - ---- - -### Хранение данных - -Общие разговоры остаются доступными до тех пор, пока вы явно не отмените общий доступ к ним. Этот -включает в себя: - -- Полная история разговоров -- Все сообщения и ответы -- Метаданные сеанса - ---- - -### Рекомендации - -- Делитесь только разговорами, которые не содержат конфиденциальной информации. -- Прежде чем поделиться, просмотрите содержимое разговора. -- Отмените общий доступ к разговорам после завершения сотрудничества. -- Избегайте обмена разговорами с проприетарным кодом или конфиденциальными данными. -- Для конфиденциальных проектов полностью отключите общий доступ. - ---- - -## Для предприятий - -Для корпоративных развертываний функция общего доступа может быть: - -- **Отключено** полностью из соображений безопасности. -- **Доступно только** для пользователей, прошедших аутентификацию посредством единого входа. -- **Автономное размещение** в вашей собственной инфраструктуре - -[Узнайте больше](/docs/enterprise) об использовании opencode в вашей организации. diff --git a/packages/web/src/content/docs/ru/skills.mdx b/packages/web/src/content/docs/ru/skills.mdx deleted file mode 100644 index 152e48782b..0000000000 --- a/packages/web/src/content/docs/ru/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: Навыки агента -description: Определите повторно используемое поведение с помощью определений SKILL.md ---- - -Навыки агента позволяют opencode обнаруживать многократно используемые инструкции из вашего репозитория или домашнего каталога. -Навыки загружаются по требованию с помощью встроенного инструмента `skill`: агенты видят доступные навыки и при необходимости могут загрузить весь контент. - ---- - -## Разместить файлы - -Создайте одну папку для каждого имени навыка и поместите в нее `SKILL.md`. -opencode выполняет поиск в следующих местах: - -- Конфигурация проекта: `.opencode/skills//SKILL.md` -- Глобальная конфигурация: `~/.config/opencode/skills//SKILL.md`. -- Совместимость с Project Claude: `.claude/skills//SKILL.md` -- Глобальная совместимость с Claude: `~/.claude/skills//SKILL.md` -- Совместимость с агентом проекта: `.agents/skills//SKILL.md` -- Совместимость с глобальным агентом: `~/.agents/skills//SKILL.md` - ---- - -## Понимание обнаружения - -Для локальных путей проекта opencode переходит из вашего текущего рабочего каталога, пока не достигнет рабочего дерева git. -Он загружает все соответствующие `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`. - ---- - -## Напишите заголовок - -Каждый `SKILL.md` должен начинаться с заголовка YAML. -Распознаются только эти поля: - -- `name` (required) -- `description` (required) -- `license` (необязательно) -- `compatibility` (необязательно) -- `metadata` (необязательно, преобразование строк в строки) - -Неизвестные поля заголовка игнорируются. - ---- - -## Проверка имен - -`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 - - - git-release - Create consistent releases and changelogs - - -``` - -Агент загружает навык, вызывая инструмент: - -``` -skill({ name: "git-release" }) -``` - ---- - -## Настройка разрешений - -Контролируйте, к каким навыкам агенты могут получить доступ, используя разрешения на основе шаблонов в `opencode.json`: - -```json -{ - "permission": { - "skill": { - "*": "allow", - "pr-review": "allow", - "internal-*": "deny", - "experimental-*": "ask" - } - } -} -``` - -| Разрешение | Поведение | -| ---------- | ----------------------------------------- | -| `allow` | Skill loads immediately | -| `deny` | Skill hidden from agent, access rejected | -| `ask` | User prompted for approval before loading | - -Шаблоны поддерживают подстановочные знаки: `internal-*` соответствует `internal-docs`, `internal-tools` и т. д. - ---- - -## Переопределить для каждого агента - -Предоставьте конкретным агентам разрешения, отличные от глобальных настроек по умолчанию. - -**Для пользовательских агентов** (в заголовке агента): - -```yaml ---- -permission: - skill: - "documents-*": "allow" ---- -``` - -**Для встроенных агентов** (в формате `opencode.json`): - -```json -{ - "agent": { - "plan": { - "permission": { - "skill": { - "internal-*": "allow" - } - } - } - } -} -``` - ---- - -## Отключить инструмент навыков - -Полностью отключить навыки для агентов, которым не следует их использовать: - -**Для индивидуальных агентов**: - -```yaml ---- -tools: - skill: false ---- -``` - -**Для встроенных агентов**: - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -Если этот параметр отключен, раздел `` полностью опускается. - ---- - -## Устранение неполадок с загрузкой - -Если навык не отображается: - -1. Убедитесь, что `SKILL.md` написано заглавными буквами. -2. Убедитесь, что заголовок включает `name` и `description`. -3. Убедитесь, что названия навыков уникальны во всех локациях. -4. Проверьте разрешения — навыки с `deny` скрыты от агентов. diff --git a/packages/web/src/content/docs/ru/themes.mdx b/packages/web/src/content/docs/ru/themes.mdx deleted file mode 100644 index 05ace2c7b8..0000000000 --- a/packages/web/src/content/docs/ru/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -title: Темы -description: Выберите встроенную тему или определите свою собственную. ---- - -С помощью opencode вы можете выбрать одну из нескольких встроенных тем, использовать тему, которая адаптируется к теме вашего терминала, или определить свою собственную тему. - -По умолчанию opencode использует нашу собственную тему `opencode`. - ---- - -## Требования к терминалу - -Чтобы темы корректно отображались в полной цветовой палитре, ваш терминал должен поддерживать **truecolor** (24-битный цвет). Большинство современных терминалов поддерживают это по умолчанию, но вам может потребоваться включить его: - -- **Проверьте поддержку**: запустите `echo $COLORTERM` — должен появиться `truecolor` или `24bit`. -- **Включить truecolor**: установите переменную среды `COLORTERM=truecolor` в профиле shell. -- **Совместимость терминала**: убедитесь, что ваш эмулятор терминала поддерживает 24-битный цвет (большинство современных терминалов, таких как iTerm2, Alacritty, Kitty, Windows Terminal и последние версии GNOME Terminal, поддерживают). - -Без поддержки truecolor темы могут отображаться с пониженной точностью цветопередачи или вернуться к ближайшему приближению к 256 цветам. - ---- - -## Встроенные темы - -opencode поставляется с несколькими встроенными темами. - -| Имя | Описание | -| ---------------------- | ---------------------------------------------------------------------------- | -| `system` | Адаптируется к фоновому цвету терминала | -| `tokyonight` | Based on the [tokyonight](https://github.com/folke/tokyonight.nvim) theme | -| `everforest` | Based on the [Everforest](https://github.com/sainnhe/everforest) theme | -| `ayu` | Based on the [Ayu](https://github.com/ayu-theme) dark theme | -| `catppuccin` | Based on the [Catppuccin](https://github.com/catppuccin) theme | -| `catppuccin-macchiato` | Based on the [Catppuccin](https://github.com/catppuccin) theme | -| `gruvbox` | Based on the [Gruvbox](https://github.com/morhetz/gruvbox) theme | -| `kanagawa` | Based on the [Kanagawa](https://github.com/rebelot/kanagawa.nvim) theme | -| `nord` | Based on the [Nord](https://github.com/nordtheme/nord) theme | -| `matrix` | Хакерская тема: зеленый на черном | -| `one-dark` | Based on the [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) Dark theme | - -И более того, мы постоянно добавляем новые темы. - ---- - -## Системная тема - -Тема `system` автоматически адаптируется к цветовой схеме вашего терминала. В отличие от традиционных тем, использующих фиксированные цвета, тема _system_: - -- **Создает шкалу серого**: создает пользовательскую шкалу серого на основе цвета фона вашего терминала, обеспечивая оптимальный контраст. -- **Использует цвета ANSI**: использует стандартные цвета ANSI (0–15) для подсветки синтаксиса и элементов пользовательского интерфейса, которые соответствуют цветовой палитре вашего терминала. -- **Сохраняет настройки терминала по умолчанию**: использует `none` для цветов текста и фона, чтобы сохранить естественный вид вашего терминала. - -Системная тема предназначена для пользователей, которые: - -- Хотите, чтобы opencode соответствовал внешнему виду их терминала -- Используйте пользовательские цветовые схемы терминала -- Предпочитайте единообразный вид для всех терминальных приложений. - ---- - -## Использование темы - -Вы можете выбрать тему, вызвав выбор темы с помощью команды `/theme`. Или вы можете указать это в файле [tui.json](/docs/config#tui). - -```json title="tui.json" {3} -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - ---- - -## Пользовательские темы - -opencode поддерживает гибкую систему тем на основе JSON, которая позволяет пользователям легко создавать и настраивать темы. - ---- - -### Иерархия - -Темы загружаются из нескольких каталогов в следующем порядке: более поздние каталоги переопределяют предыдущие: - -1. **Встроенные темы** – они встроены в двоичный файл. -2. **Каталог конфигурации пользователя** – определяется в `~/.config/opencode/themes/*.json` или `$XDG_CONFIG_HOME/opencode/themes/*.json`. -3. **Корневой каталог проекта** – определено в `/.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"` — используется цвет терминала по умолчанию или прозрачный. - ---- - -### Определения цвета - -Раздел `defs` является необязательным и позволяет вам определять повторно используемые цвета, на которые можно ссылаться в теме. - ---- - -### Настройки терминала по умолчанию - -Специальное значение `"none"` можно использовать для любого цвета, чтобы наследовать цвет терминала по умолчанию. Это особенно полезно для создания тем, которые органично сочетаются с цветовой схемой вашего терминала: - -- `"text": "none"` — использует цвет переднего плана терминала по умолчанию. -- `"background": "none"` — использует цвет фона терминала по умолчанию. - ---- - -### Пример - -Вот пример пользовательской темы: - -```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" - } - } -} -``` diff --git a/packages/web/src/content/docs/ru/tools.mdx b/packages/web/src/content/docs/ru/tools.mdx deleted file mode 100644 index b34d30465b..0000000000 --- a/packages/web/src/content/docs/ru/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -title: Инструменты -description: Управляйте инструментами, которые может использовать LLM. ---- - -Инструменты позволяют LLM выполнять действия в вашей кодовой базе. opencode поставляется с набором встроенных инструментов, но вы можете расширить его с помощью [пользовательских инструментов](/docs/custom-tools) или [MCP-серверов](/docs/mcp-servers). - -По умолчанию все инструменты **включены** и не требуют разрешения для запуска. Вы можете контролировать поведение инструмента через [permissions](/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 запускать команды терминала, такие как `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 - -Поиск содержимого файла с помощью регулярных выражений. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "grep": "allow" - } -} -``` - -Быстрый поиск контента по вашей кодовой базе. Поддерживает полный синтаксис регулярных выражений и фильтрацию шаблонов файлов. - ---- - -### glob - -Найдите файлы по шаблону. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "glob": "allow" - } -} -``` - -Ищите файлы, используя шаблоны glob, например `**/*.js` или `src/**/*.ts`. Возвращает соответствующие пути к файлам, отсортированные по времени изменения. - ---- - -### lsp (экспериментальный) - -Взаимодействуйте с настроенными серверами 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 Servers](/docs/lsp). - ---- - -### patch - -Применяйте патчи к файлам. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Этот инструмент применяет файлы исправлений к вашей кодовой базе. Полезно для применения различий и патчей из различных источников. - -:::note -Инструмент `patch` контролируется разрешением `edit`, которое распространяется на все модификации файлов (`edit`, `write`, `patch`). -::: - ---- - -### skill - -Загрузите [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`, когда вам нужно найти информацию (обнаружение), и `webfetch`, когда вам нужно получить контент с определенного URL-адреса (извлечение). -::: - ---- - -### 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`. diff --git a/packages/web/src/content/docs/ru/troubleshooting.mdx b/packages/web/src/content/docs/ru/troubleshooting.mdx deleted file mode 100644 index d1d240cb71..0000000000 --- a/packages/web/src/content/docs/ru/troubleshooting.mdx +++ /dev/null @@ -1,300 +0,0 @@ ---- -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, он хранится в `.//storage/`. - - Если это не репозиторий Git, он хранится в `./global/storage/`. - ---- - -## Настольное приложение - -opencode Desktop запускает локальный сервер opencode (спутник `opencode-cli`) в фоновом режиме. Большинство проблем вызвано неправильно работающим плагином, поврежденным кешем или неверными настройками сервера. - -### Быстрые проверки - -- Полностью закройте и перезапустите приложение. -- Если приложение отображает экран с ошибкой, нажмите **Перезапустить** и скопируйте сведения об ошибке. -- Только для macOS: меню `OpenCode` -> **Обновить веб-просмотр** (помогает, если пользовательский интерфейс пуст или завис). - ---- - -### Отключить плагины - -Если настольное приложение дает сбой при запуске, зависает или ведет себя странно, начните с отключения плагинов. - -#### Проверьте глобальную конфигурацию - -Откройте файл глобальной конфигурации и найдите ключ `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`. -- **Плагины проекта** (только если вы используете конфигурацию для каждого проекта) - - `/.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. - ---- - -### Исправить проблемы с подключением к серверу - -opencode Desktop может либо запустить собственный локальный сервер (по умолчанию), либо подключиться к настроенному вами URL-адресу сервера. - -Если вы видите диалоговое окно **Ошибка подключения** (или приложение никогда не выходит за пределы заставки), проверьте URL-адрес пользовательского сервера. - -#### Очистите URL-адрес сервера по умолчанию для рабочего стола. - -На главном экране щелкните имя сервера (с точкой состояния), чтобы открыть окно выбора сервера. В разделе **Сервер по умолчанию** нажмите **Очистить**. - -#### Удалите `server.port`/`server.hostname` из вашей конфигурации. - -Если ваш `opencode.json(c)` содержит раздел `server`, временно удалите его и перезапустите настольное приложение. - -#### Проверьте переменные среды - -Если в вашей среде установлен `OPENCODE_PORT`, настольное приложение попытается использовать этот порт для локального сервера. - -- Отмените настройку `OPENCODE_PORT` (или выберите свободный порт) и перезапустите. - ---- - -### Linux: проблемы с Wayland/X11 - -В Linux некоторые настройки Wayland могут вызывать пустые окна или ошибки компоновщика. - -- Если вы используете Wayland, а приложение не работает или вылетает, попробуйте запустить с помощью `OC_ALLOW_WAYLAND=1`. -- Если это усугубляет ситуацию, удалите его и попробуйте вместо этого запустить сеанс X11. - ---- - -### Windows: среда выполнения WebView2. - -В Windows для opencode Desktop требуется Microsoft Edge **WebView2 Runtime**. Если приложение открывается в пустом окне или не запускается, установите/обновите WebView2 и повторите попытку. - ---- - -### Windows: общие проблемы с производительностью - -Если вы испытываете низкую производительность, проблемы с доступом к файлам или проблемы с terminal в Windows, попробуйте использовать [WSL (подсистема Windows для Linux)](/docs/windows-wsl). WSL предоставляет среду Linux, которая более эффективно работает с функциями opencode. - ---- - -### Уведомления не отображаются - -opencode Desktop отображает системные уведомления только в следующих случаях: - -- уведомления для opencode включены в настройках вашей ОС, и -- окно приложения не в фокусе. - ---- - -### Сбросить хранилище настольных приложений (последнее средство) - -Если приложение не запускается и вы не можете очистить настройки из пользовательского интерфейса, сбросьте сохраненное состояние настольного приложения. - -1. Закройте рабочий стол opencode. -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`, вы, скорее всего, ошибаетесь. -ссылка на модель где-то. -На модели следует ссылаться следующим образом: `/`. - -Примеры: - -- `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`. diff --git a/packages/web/src/content/docs/ru/tui.mdx b/packages/web/src/content/docs/ru/tui.mdx deleted file mode 100644 index 19d44539fe..0000000000 --- a/packages/web/src/content/docs/ru/tui.mdx +++ /dev/null @@ -1,429 +0,0 @@ ---- -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 TUI вы можете ввести `/`, а затем имя команды, чтобы быстро выполнить действия. Например: - -```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` - ---- - -### theme - -Список доступных тем. - -```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`. - - - - ```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" - ``` - - Чтобы сделать его постоянным, добавьте это в свой профиль shell; - `~/.bashrc`, `~/.zshrc` и т. д. - - - - - ```bash - set EDITOR=notepad - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - set EDITOR=code --wait - ``` - - Чтобы сделать его постоянным, используйте **Свойства системы** > **Среда - Переменные**. - - - - - ```powershell - $env:EDITOR = "notepad" - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - $env:EDITOR = "code --wait" - ``` - - Чтобы сделать его постоянным, добавьте его в свой профиль PowerShell. - - - - -Популярные варианты редактора включают в себя: - -- `code` — VS Code -- `cursor` — Cursor -- `windsurf` - Windsurf -- `nvim` - Редактор Neovim -- `vim` — редактор Vim -- `nano` — Нано-редактор -- `notepad` — Блокнот Windows -- `subl` — Sublime Text - -:::note -Некоторые редакторы, такие как VS Code, необходимо запускать с флагом `--wait`. -::: - -Некоторым редакторам для работы в режиме блокировки необходимы CLI-аргументы. Флаг `--wait` блокирует процесс редактора до его закрытия. - ---- - -## Настройка - -Вы можете настроить поведение TUI через `tui.json` (или `tui.jsonc`). - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -Это отдельный файл от `opencode.json`, который настраивает поведение сервера/выполнения. - -`keybinds` объединяется со встроенными значениями по умолчанию, поэтому достаточно настроить только те сочетания клавиш, которые вы хотите изменить. - -### Параметры - -- `theme` — Устанавливает тему пользовательского интерфейса. [Подробнее](/docs/themes). -- `keybinds` — Настраивает сочетания клавиш. [Подробнее](/docs/keybinds). -- `leader_timeout` — Управляет тем, как долго OpenCode ждёт после нажатия leader key. По умолчанию `2000`. -- `scroll_acceleration.enabled` — включите ускорение прокрутки в стиле macOS для плавной и естественной прокрутки. Если этот параметр включен, скорость прокрутки увеличивается при быстрой прокрутке и остается точной при более медленных движениях. **Этот параметр имеет приоритет над `scroll_speed` и переопределяет его, если он включен.** -- `scroll_speed` — контролирует скорость прокрутки TUI при использовании команд прокрутки (минимум: `0.001`, поддерживает десятичные значения). По умолчанию `3`. **Примечание. Это игнорируется, если для `scroll_acceleration.enabled` установлено значение `true`.** -- `diff_style` — Управляет отображением различий. `"auto"` адаптируется к ширине терминала, `"stacked"` всегда показывает одноколоночный макет. -- `mouse` — Включает или отключает захват мыши в TUI (по умолчанию `true`). Если отключено, сохраняется нативное поведение терминала для выделения мышью и прокрутки. -- `attention` — Настраивает уведомления рабочего стола и звуки TUI. По умолчанию отключено. - -Используйте `OPENCODE_TUI_CONFIG` для загрузки пользовательского пути конфигурации TUI. - -### Attention - -Attention позволяет TUI уведомлять вас, когда OpenCode ждёт ответа, требует подтверждения разрешения, сообщает об ошибке сеанса или завершает сеанс. Включите это с помощью `attention.enabled`; встроенные события воспроизводят звук при срабатывании. Уведомления рабочего стола отправляются только тогда, когда окно терминала не в фокусе, и не используются для событий subagent. - -- `enabled` — Включает все уведомления и звуки Attention. По умолчанию `false`. -- `notifications` — Когда Attention включён, разрешает TUI отправлять уведомления рабочего стола через терминал. По умолчанию `true`. -- `sound` — Когда Attention включён, разрешает воспроизводить звуковые оповещения. По умолчанию `true`. -- `volume` — Громкость звуковых оповещений по умолчанию от `0` до `1`. По умолчанию `0.4`. -- `sound_pack` — ID sound pack для использования. По умолчанию `opencode.default`. -- `sounds` — Задаёт пользовательские звуковые файлы для `default`, `question`, `permission`, `error`, `done` или `subagent_done`. Пути могут быть абсолютными, `file://` URL или относительными к `tui.json`. - ---- - -## Кастомизация - -Вы можете настроить различные аспекты представления TUI, используя палитру команд (`ctrl+x h` или `/help`). Эти настройки сохраняются после перезапуска. - ---- - -#### Отображение имени пользователя - -Включите, будет ли ваше имя пользователя отображаться в сообщениях чата. Доступ к этому через: - -- Палитра команд: поиск «имя пользователя» или «скрыть имя пользователя». -- Настройка сохраняется автоматически и будет запоминаться во время сеансов TUI. diff --git a/packages/web/src/content/docs/ru/web.mdx b/packages/web/src/content/docs/ru/web.mdx deleted file mode 100644 index 53122749f2..0000000000 --- a/packages/web/src/content/docs/ru/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Интернет -description: Использование opencode в вашем браузере. ---- - -opencode может работать как веб-приложение в вашем браузере, обеспечивая такой же мощный опыт кодирования AI без необходимости использования терминала. - -![opencode Web — новый сеанс](../../../assets/web/web-homepage-new-session.png) - -## Начало работы - -Запустите веб-интерфейс, выполнив: - -```bash -opencode web -``` - -Это запустит локальный сервер `127.0.0.1` со случайным доступным портом и автоматически откроет opencode в браузере по умолчанию. - -:::caution -Если `OPENCODE_SERVER_PASSWORD` не установлен, сервер будет незащищен. Это подходит для локального использования, но его следует настроить для доступа к сети. -::: - -:::tip[Пользователи Windows] -Для получения наилучших результатов запустите `opencode web` из [WSL](/docs/windows-wsl), а не из PowerShell. Это обеспечивает правильный доступ к файловой системе и интеграцию терминала. -::: - ---- - -## Конфигурация - -Вы можете настроить веб-сервер с помощью CLI-флагов или в файле [config file](/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. - -### Сессии - -Просматривайте свои сеансы и управляйте ими с главной страницы. Вы можете видеть активные сеансы и начинать новые. - -![opencode Web — активный сеанс](../../../assets/web/web-homepage-active-session.png) - -### Статус сервера - -Нажмите «Просмотреть серверы», чтобы просмотреть подключенные серверы и их статус. - -![opencode Web — см. Серверы](../../../assets/web/web-homepage-see-servers.png) - ---- - -## Подключение терминала - -Вы можете подключить TUI терминала к работающему веб-серверу: - -```bash -# Start the web server -opencode web --port 4096 - -# In another terminal, attach the TUI -opencode attach http://localhost:4096 -``` - -Это позволяет вам одновременно использовать веб-интерфейс и терминал, используя одни и те же сеансы и состояние. - ---- - -## Конфигурационный файл - -Вы также можете настроить параметры сервера в файле конфигурации `opencode.json`: - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -CLI-флаги имеют приоритет над настройками файла конфигурации. diff --git a/packages/web/src/content/docs/ru/windows-wsl.mdx b/packages/web/src/content/docs/ru/windows-wsl.mdx deleted file mode 100644 index 7ca28449b5..0000000000 --- a/packages/web/src/content/docs/ru/windows-wsl.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -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 дает более высокую производительность файловой системы, полноценную поддержку терминала и совместимость с инструментами разработки, на которые опирается opencode. -::: - ---- - -## Настройка - - - -1. **Установите WSL** - - Если вы еще не сделали этого, установите WSL по [официальному руководству Microsoft](https://learn.microsoft.com/en-us/windows/wsl/install). - -2. **Установите opencode в WSL** - - После настройки WSL откройте терминал 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 - ``` - - - ---- - -## Десктопное приложение + сервер в WSL - -Если вы предпочитаете opencode Desktop, но хотите запускать сервер в 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://: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` в терминале WSL**, а не в PowerShell: - - ```bash - opencode web --hostname 0.0.0.0 - ``` - -2. **Открывайте в браузере Windows** адрес `http://localhost:` (opencode выведет URL) - -Запуск `opencode web` из WSL обеспечивает корректный доступ к файловой системе и интеграцию с терминалом, при этом интерфейс остается доступным из браузера Windows. - ---- - -## Доступ к файлам Windows - -WSL может получать доступ ко всем вашим файлам Windows через каталог `/mnt/`: - -- `C:` drive → `/mnt/c/` -- `D:` drive → `/mnt/d/` -- И так далее - -Пример: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -Для максимально плавной работы стоит клонировать или скопировать репозиторий в файловую систему WSL (например, в `~/code/`) и запускать opencode оттуда. -::: - ---- - -## Советы - -- Даже для проектов на дисках Windows запускайте opencode в WSL, чтобы получить более плавный доступ к файлам -- Используйте opencode вместе с [расширением WSL для VS Code](https://code.visualstudio.com/docs/remote/wsl) для единого рабочего процесса -- Конфигурация и сессии opencode хранятся в среде WSL по пути `~/.local/share/opencode/` diff --git a/packages/web/src/content/docs/ru/zen.mdx b/packages/web/src/content/docs/ru/zen.mdx deleted file mode 100644 index 218d4c0295..0000000000 --- a/packages/web/src/content/docs/ru/zen.mdx +++ /dev/null @@ -1,319 +0,0 @@ ---- -title: Zen -description: Подобранный список моделей, предоставленный OpenCode. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen — это список протестированных и проверенных моделей, предоставленный командой OpenCode. - -Zen работает как любой другой провайдер в OpenCode. Вы входите в OpenCode Zen и получаете -свой ключ API. Это **полностью необязательно**, и вам не нужно использовать его, -чтобы пользоваться OpenCode. - ---- - -## Предыстория - -Существует огромное количество моделей, но только немногие из -них хорошо работают как агенты для программирования. Кроме того, большинство провайдеров -настроены очень по-разному, поэтому производительность и качество могут сильно отличаться. - -:::tip -Мы протестировали выбранную группу моделей и провайдеров, которые хорошо работают с OpenCode. -::: - -Поэтому, если вы используете модель через что-то вроде OpenRouter, вы никогда не можете -быть уверены, что получаете лучшую версию нужной вам модели. - -Чтобы это исправить, мы сделали несколько вещей: - -1. Мы протестировали выбранную группу моделей и обсудили с их командами, как - лучше всего их запускать. -2. Затем мы поработали с несколькими провайдерами, чтобы убедиться, что эти модели - отдаются корректно. -3. Наконец, мы сравнили комбинации модель/провайдер и составили - список, который готовы рекомендовать. - -OpenCode Zen — это AI-шлюз, который дает вам доступ к этим моделям. - ---- - -## Как это работает - -OpenCode Zen работает как любой другой провайдер в OpenCode. - -1. Вы входите в **OpenCode Zen**, добавляете платежные - данные и копируете свой ключ 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -[идентификатор модели](/docs/config/#models) в вашей конфигурации OpenCode -использует формат `opencode/`. Например, для GPT 5.5 вам нужно -использовать `opencode/gpt-5.5` в своей конфигурации. - ---- - -### Модели - -Вы можете получить полный список доступных моделей и их метаданных по адресу: - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## Цены - -Мы поддерживаем оплату по мере использования. Ниже указаны цены **за 1M токенов**. - -| Модель | Вход | Выход | Cached Read | Cached Write | -| --------------------------------- | ------ | ------- | ----------- | ------------ | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -Вы можете заметить _Claude Haiku 3.5_ в истории использования. Это [недорогая модель](/docs/config/#models), которая используется для генерации заголовков ваших сессий. - -:::note -Комиссии по кредитным картам передаются по себестоимости (4.4% + $0.30 за транзакцию); мы ничего не начисляем сверх этого. -::: - -Бесплатные модели: - -- DeepSeek V4 Flash Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. -- MiMo-V2.5 Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. -- North Mini Code Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. -- Nemotron 3 Ultra Free доступна в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. -- Big Pickle — это скрытая модель, которая доступна бесплатно в OpenCode ограниченное время. Команда использует это время, чтобы собирать отзывы и улучшать модель. - -Свяжитесь с нами, если у вас есть вопросы. - ---- - -### Автопополнение - -Если ваш баланс опустится ниже $5, Zen автоматически пополнит его на $20. - -Вы можете изменить сумму автопополнения. Также можно полностью отключить автопополнение. - ---- - -### Ежемесячные лимиты - -Вы также можете установить ежемесячный лимит использования для всего рабочего пространства и для каждого -участника вашей команды. - -Например, предположим, что вы установили ежемесячный лимит использования в $20. Zen не будет -использовать больше $20 в месяц. Но если у вас включено автопополнение, Zen может -в итоге списать с вас больше $20, если ваш баланс опустится ниже $5. - ---- - -### Устаревшие модели - -| Модель | Дата устаревания | -| ------------------ | ----------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## Конфиденциальность - -Все наши модели размещены в US. Наши провайдеры придерживаются политики нулевого хранения и не используют ваши данные для обучения моделей, за следующими исключениями: - -- Big Pickle: во время бесплатного периода собранные данные могут использоваться для улучшения модели. -- DeepSeek V4 Flash Free: во время бесплатного периода собранные данные могут использоваться для улучшения модели. -- MiMo-V2.5 Free: во время бесплатного периода собранные данные могут использоваться для улучшения модели. -- North Mini Code Free: В течение бесплатного периода собранные данные могут храниться и использоваться для улучшения модели. Не отправляйте персональные или конфиденциальные данные. Ознакомьтесь с нашими [Условиями использования](https://cohere.com/terms-of-use) и [Политикой конфиденциальности](https://cohere.com/privacy). -- Nemotron 3 Ultra Free (бесплатные эндпоинты NVIDIA): только для пробного использования — не отправляйте персональные или конфиденциальные данные. Использование логируется в целях безопасности и для улучшения продуктов и сервисов NVIDIA. Логируемые данные сессии, используемые в целях улучшения, не связаны с вашей личностью или каким-либо постоянным идентификатором. Подробнее о наших практиках обработки данных см. в нашей [Политике конфиденциальности](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). Взаимодействуя с этим эндпоинтом, вы соглашаетесь на сбор, запись и использование нами такой информации, а также с [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf). -- 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. - -Когда вы используете собственные ключи, токены тарифицируются напрямую провайдером, а не Zen. - -Например, у вашей организации уже может быть ключ для OpenAI или Anthropic, -и вы хотите использовать его вместо того, который предоставляет Zen. - ---- - -## Цели - -Мы создали OpenCode Zen, чтобы: - -1. **Сравнить** лучшие комбинации модель/провайдер для агентов для программирования. -2. Иметь доступ к вариантам **наивысшего качества** и не снижать производительность, а также не маршрутизировать запросы к более дешевым провайдерам. -3. Передавать любые **снижения цен**, продавая по себестоимости; так что единственная наценка нужна для покрытия наших комиссий за обработку. -4. Обеспечить **отсутствие привязки**, позволяя вам использовать его с любым другим агентом для программирования. И всегда позволять вам использовать любого другого провайдера с OpenCode. diff --git a/packages/web/src/content/docs/th/acp.mdx b/packages/web/src/content/docs/th/acp.mdx deleted file mode 100644 index f7850ed407..0000000000 --- a/packages/web/src/content/docs/th/acp.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: การรองรับ ACP -description: ใช้ OpenCode ในโปรแกรมแก้ไขที่รองรับ ACP ---- - -OpenCode รองรับ [Agent Client Protocol](https://agentclientprotocol.com) (ACP) ซึ่งช่วยให้สามารถทำงานร่วมกับ editor และ IDE ต่างๆ ได้โดยตรง - -:::tip -สำหรับรายชื่อเครื่องมือที่รองรับ ACP สามารถดูได้ที่ [ACP progress report](https://zed.dev/blog/acp-progress-report#available-now) -::: - -ACP เป็นมาตรฐานเปิดสำหรับการสื่อสารระหว่างโปรแกรมแก้ไขโค้ดและ AI agent - ---- - -## การกำหนดค่า - -ในการใช้ OpenCode ผ่าน ACP ให้กำหนดค่าโปรแกรมแก้ไขของคุณให้รันคำสั่ง `opencode acp` - -คำสั่งนี้จะเริ่ม OpenCode เป็น process ย่อยที่รองรับ 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** - -คุณต้องตั้งค่า keybinding ใน `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/) ของคุณตาม [เอกสาร](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" } - } - } -} -``` - -หากคุณต้องการส่งผ่าน environment variables (เช่น `OPENCODE_API_KEY`) คุณต้องระบุใน `env`: - -```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 agent สำหรับแชท - -หากคุณต้องส่ง environment variables (เช่น `OPENCODE_API_KEY`) โปรดดู [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) ในเอกสารของ CodeCompanion.nvim สำหรับรายละเอียดทั้งหมด - -## การรองรับ - -opencode ทำงานผ่าน ACP เหมือนกับใน terminal และรองรับฟีเจอร์ทั้งหมด: - -:::note -คำสั่ง slash ในตัวบางคำสั่งเช่น `/undo` และ `/redo` ยังไม่รองรับในขณะนี้ -::: - -- เครื่องมือใน (ไฟล์ไฟล์คำสั่งอื่นๆ) -- คำอธิบายและคำสั่งสแลช -- MCP แขกที่นี่คือข้อมูลเพิ่มเติมของ OpenCode ของคุณ -- กฎเฉพาะโครงการจาก `AGENTS.md` -- คนจัดรูปแบบและ linters เวียนนา -- ระบบตัวแทนและระบบ diff --git a/packages/web/src/content/docs/th/agents.mdx b/packages/web/src/content/docs/th/agents.mdx deleted file mode 100644 index e37df6ce47..0000000000 --- a/packages/web/src/content/docs/th/agents.mdx +++ /dev/null @@ -1,744 +0,0 @@ ---- -title: เอเจนต์ -description: เอเจนต์พิเศษและปรับแต่งได้ ---- - -เอเจนต์ (Agent) คือผู้ช่วย AI ที่เชี่ยวชาญในงานเฉพาะด้าน คุณสามารถสร้างเอเจนต์ที่มีเครื่องมือ (tools) ที่เหมาะสมกับงานและคำสั่งระบบ (system prompt) ที่ต้องการได้ - -:::tip -ใช้เอเจนต์ **Plan** เพื่อวิเคราะห์โค้ดและตรวจสอบเหตุผลก่อนทำการเปลี่ยนแปลงโค้ดใดๆ -::: - -คุณสามารถสลับเอเจนต์ได้ระหว่างการสนทนาโดยใช้ปุ่ม **Tab** หรือเรียกใช้โดยระบุ `@` - ---- - -## ประเภท - -OpenCode มีเอเจนต์สองประเภท: **Primary Agent** (เอเจนต์หลัก) และ **Subagent** (เอเจนต์ย่อย) - ---- - -### Primary Agent (เอเจนต์หลัก) - -Primary Agent คือผู้ช่วยหลักที่คุณคุยด้วยโดยตรง คุณสามารถวนดูเอเจนต์หลักที่มีอยู่ได้โดยกดปุ่ม **Tab** หรือปุ่ม `switch_agent` ที่ตั้งค่าไว้ เอเจนต์เหล่านี้สามารถจัดการงานที่ซับซ้อนและเข้าถึงเครื่องมือที่มีความเสี่ยงสูงได้ เช่น **Build** ที่มีเครื่องมือทั้งหมด หรือ **Plan** ที่ถูกจำกัดสิทธิ์ - -:::tip -**Tab** จะเก็บประวัติการสนทนาไว้เมื่อสลับระหว่างเอเจนต์ -::: - -OpenCode มีเอเจนต์หลักในตัวได้แก่ **Build** และ **Plan** -ดูรายละเอียดด้านล่าง - ---- - -### Subagent (เอเจนต์ย่อย) - -Subagent คือผู้ช่วยเฉพาะทางที่ Primary Agent สามารถเรียกใช้งานได้ หรือคุณสามารถเรียกใช้โดยตรงโดยพิมพ์ **@** ตามด้วยชื่อเอเจนต์ในข้อความของคุณ - -OpenCode มี subagent ในตัวได้แก่ **General**, **Explore** และ **Scout** ดูรายละเอียดด้านล่าง - ---- - -## บิวท์อิน - -OpenCode มาพร้อมกับเอเจนต์หลัก 2 ตัวและ subagent ในตัว 3 ตัว - ---- - -### Build - -_Mode_: `primary` - -เอเจนต์หลักสำหรับ **การพัฒนา** มาพร้อมกับเครื่องมือทั้งหมดเพื่อให้มีสิทธิ์การเข้าถึงไฟล์และคำสั่งระบบโดยสมบูรณ์ - ---- - -### Plan - -_Mode_: `primary` - -เอเจนต์ที่ถูกจำกัดสิทธิ์ เน้นการคิดวิเคราะห์และวางแผน โดยป้องกันการเปลี่ยนแปลงไฟล์โดยไม่ได้ตั้งใจ -เครื่องมือต่อไปนี้จะถูกตั้งค่าเป็น `ask` (ต้องขออนุญาต): - -- `file edits`: การแก้ไขไฟล์, patch, และการเขียนไฟล์ -- `bash`: คำสั่ง bash ทั้งหมด - -เอเจนต์นี้มีประโยชน์เมื่อต้องการให้ LLM ตรวจสอบโค้ด หรือสร้างแผนงานก่อนที่จะลงมือทำจริง - ---- - -### General - -_Mode_: `subagent` - -เอเจนต์สำหรับตอบคำถามทั่วไปและการคิดวิเคราะห์หลายขั้นตอน อนุญาตให้เข้าถึงเครื่องมือต่างๆ (ยกเว้นการแก้ไขไฟล์) ใช้สิ่งนี้เมื่อต้องการรันงานที่ไม่ต้องแก้ไขโค้ด - ---- - -### Explore - -_Mode_: `subagent` - -เอเจนต์ความเร็วสูงสำหรับอ่านและสำรวจ codebase ใช้สิ่งนี้เมื่อคุณต้องการค้นหาไฟล์อย่างรวดเร็ว, ค้นหาโค้ดด้วยคำสำคัญ, หรือสอบถามเกี่ยวกับโครงสร้าง codebase - ---- - -### Scout - -_Mode_: `subagent` - -เอเจนต์แบบอ่านอย่างเดียวสำหรับค้นคว้าเอกสารภายนอกและ dependency ใช้สิ่งนี้เมื่อคุณต้องการ clone repository ของ dependency เข้าไปใน cache ที่ OpenCode จัดการให้, ตรวจสอบ source code ของไลบรารี, หรือเทียบโค้ดในเครื่องกับ implementation จาก upstream โดยไม่แก้ไข workspace ของคุณ - ---- - -### Compact - -_Mode_: `primary` - -เอเจนต์ระบบที่มีหน้าที่สรุปประวัติการสนทนาที่ยาวให้สั้นลง โดยยังคงใจความสำคัญไว้ - ---- - -### Name - -_Mode_: `primary` - -เอเจนต์ระบบที่มีหน้าที่สร้างชื่อ session ให้สั้นและได้ใจความ ทำงานอัตโนมัติโดยไม่ต้องมี UI - ---- - -### Summarize - -_Mode_: `primary` - -เอเจนต์ระบบที่มีหน้าที่สร้างสรุปการเปลี่ยนแปลงและงานที่ทำไป ทำงานอัตโนมัติโดยไม่ต้องมี UI - ---- - -## การใช้งาน - -1. สำหรับ Primary Agent ให้ใช้ปุ่ม **Tab** เพื่อวนดูเอเจนต์ที่มีอยู่ หรือใช้ keybind `switch_agent` ที่คุณตั้งค่าไว้ - -2. สำหรับ Subagent: - - เรียกใช้โดย Primary Agent โดยอัตโนมัติตามความเหมาะสม - - เรียกใช้ด้วยตนเองโดยพิมพ์ **@** ตามด้วยชื่อ subagent ในข้อความของคุณ เช่น - - ```txt frame="none" - @general help me search for this function - ``` - -3. **การนำทางระหว่าง Agent**: เมื่อ Subagent ทำงานเสร็จและส่งผลลัพธ์กลับมายัง Primary Agent คุณสามารถดูประวัติการทำงานได้: - - **\+Right** (หรือ `session_child_cycle` keybind) เพื่อวนผ่าน parent → child1 → child2 → ... → parent - - **\+Left** (หรือ `session_child_cycle_reverse` keybind) เพื่อวนย้อนกลับผ่าน 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 ได้ใน: - -- ระดับผู้ใช้ (Global): `~/.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 (คำอธิบาย) - -ใช้ฟิลด์ `description` เพื่ออธิบายว่าเอเจนต์นี้ทำอะไร - -```json title="opencode.json" -{ - "agent": { - "review": { - "description": "Reviews code for best practices and potential issues" - } - } -} -``` - -ฟิลด์นี้ **จำเป็น** สำหรับ JSON - ---- - -### Temperature (อุณหภูมิ) - -ควบคุมความสุ่มและความคิดสร้างสรรค์ของการตอบกลับของ LLM ด้วย `temperature` - -ค่าที่ต่ำกว่าจะให้ผลลัพธ์ที่แน่นอนและแม่นยำกว่า ส่วนค่าที่สูงกว่าจะให้ความหลากหลายและความคิดสร้างสรรค์มากกว่า - -```json title="opencode.json" -{ - "agent": { - "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" -{ - "agent": { - "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 - ---- - -### Steps (ขั้นตอน) - -จำกัดจำนวนการวนซ้ำ (iterations) สูงสุดที่เอเจนต์สามารถทำได้ เพื่อควบคุมค่าใช้จ่ายและป้องกันการทำงานไม่รู้จบ - -หากไม่ได้ตั้งค่านี้ เอเจนต์จะทำงานต่อไปจนกว่างานจะเสร็จหรือผู้ใช้ขัดจังหวะ - -```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` แทน -::: - ---- - -### Disable (ปิดใช้งาน) - -ตั้งค่าเป็น `true` เพื่อปิดการใช้งานเอเจนต์ - -```json title="opencode.json" -{ - "agent": { - "review": { - "disable": true - } - } -} -``` - ---- - -### พรอมต์ - -ระบุ System Prompt สำหรับเอเจนต์นี้ด้วย `prompt` - -```json title="opencode.json" -{ - "agent": { - "review": { - "prompt": "{file:./prompts/code-review.txt}" - } - } -} -``` - -รองรับเส้นทางสัมพัทธ์ (Relative paths) ซึ่งทำให้ใช้งานได้สะดวกทั้งในระดับ Global และ Project - ---- - -### Model (โมเดล) - -ใช้ตัวเลือก `model` เพื่อกำหนดโมเดลเฉพาะสำหรับเอเจนต์นี้ มีประโยชน์เมื่อต้องการใช้โมเดลที่เชี่ยวชาญเฉพาะด้าน หรือโมเดลที่มี Context window ขนาดใหญ่สำหรับการตรวจสอบ codebase - -:::tip -หากไม่ได้ระบุโมเดล เอเจนต์จะใช้ [โมเดลเริ่มต้น](/docs/config#models) ของ OpenCode -::: - -```json title="opencode.json" -{ - "agent": { - "plan": { - "model": "anthropic/claude-haiku-4-20250514" - } - } -} -``` - -ID ของโมเดลใช้รูปแบบ `provider/model-id` - ---- - -### เครื่องมือ - -กำหนดเครื่องมือที่เอเจนต์สามารถใช้งานได้ด้วย `tools` คุณสามารถระบุชื่อเครื่องมือ หรือใช้ wildcard - -```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 -การกำหนดค่าเครื่องมือในระดับเอเจนต์จะมีความสำคัญเหนือกว่าระดับ Global -::: - -คุณสามารถใช้ wildcard `*` เพื่อควบคุมเครื่องมือหลายรายการพร้อมกัน เช่น เครื่องมือจากเซิร์ฟเวอร์ MCP: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "readonly": { - "tools": { - "mymcp_*": false, - "write": false, - "edit": false - } - } - } -} -``` - -[เรียนรู้เพิ่มเติมเกี่ยวกับเครื่องมือ](/docs/tools) - ---- - -### Permissions (สิทธิ์) - -กำหนดสิทธิ์สำหรับเครื่องมือที่มีความละเอียดอ่อน เช่น `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 agent: - -```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 patterns: - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git *": "ask" - } - } - } - } -} -``` - -ใช้ `*` wildcard เพื่อตั้งค่าเริ่มต้นสำหรับคำสั่งอื่นๆ ทั้งหมด กฎที่ตรงกันล่าสุดจะมีผลบังคับใช้ (Last match wins): - -```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` หากไม่ระบุ ค่าเริ่มต้นจะเป็น `all` - ---- - -### Hidden (ซ่อน) - -ซ่อน subagent จากเมนู autocomplete `@` ด้วย `hidden: true` มีประโยชน์สำหรับ subagent ภายในที่ถูกเรียกใช้โดยเอเจนต์อื่นผ่านเครื่องมือ task เท่านั้น - -```json title="opencode.json" -{ - "agent": { - "internal-helper": { - "mode": "subagent", - "hidden": true - } - } -} -``` - -:::note -ใช้ได้กับเอเจนต์ที่มี `mode: subagent` เท่านั้น -::: - ---- - -### Task Permissions (สิทธิ์งาน) - -กำหนดว่า subagent ใดที่เอเจนต์นี้สามารถเรียกใช้ได้ผ่านเครื่องมือ task ด้วย `permission.task` - -```json title="opencode.json" -{ - "agent": { - "orchestrator": { - "mode": "primary", - "permission": { - "task": { - "*": "deny", - "orchestrator-*": "allow", - "code-reviewer": "ask" - } - } - } - } -} -``` - -หากตั้งเป็น `deny` เอเจนต์จะมองไม่เห็นเครื่องมือ task สำหรับ subagent นั้นๆ - -:::tip -กฎทำงานตามลำดับ และ **กฎที่ตรงกันล่าสุดจะมีผล** ในตัวอย่างข้างต้น `orchestrator-planner` ตรงกับทั้ง `*` (deny) และ `orchestrator-*` (allow) แต่เนื่องจาก `orchestrator-*` มาทีหลัง ผลลัพธ์จึงเป็น `allow` -::: - ---- - -### สี - -ปรับแต่งสีของเอเจนต์ใน UI ด้วยตัวเลือก `color` - -ใช้รหัสสี hex (เช่น `#FF5733`) หรือชื่อสีมาตรฐาน: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info` - -```json title="opencode.json" -{ - "agent": { - "creative": { - "color": "#ff6b6b" - }, - "code-reviewer": { - "color": "accent" - } - } -} -``` - ---- - -### Top P - -ควบคุมความหลากหลายของการตอบกลับด้วยตัวเลือก `top_p` - -```json title="opencode.json" -{ - "agent": { - "brainstorm": { - "top_p": 0.9 - } - } -} -``` - -ช่วงค่า 0.0 ถึง 1.0 ค่าที่ต่ำกว่าจะเน้นไปที่โทเค็นที่มีความน่าจะเป็นสูง - ---- - -### Additional (เพิ่มเติม) - -คุณสมบัติอื่นๆ ที่คุณระบุใน object ของเอเจนต์จะถูก **ส่งผ่านโดยตรง** ไปยัง LLM config - -เช่น สำหรับโมเดลที่มีการให้เหตุผลของ 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 หรือ Project) -2. คำอธิบายหน้าที่ของเอเจนต์ -3. สร้างพรอมต์และเลือกไอคอนที่เหมาะสม -4. เลือกเครื่องมือที่เอเจนต์สามารถใช้ได้ -5. สร้างไฟล์ Markdown ของเอเจนต์ - ---- - -## ตัวอย่างการใช้งาน - -ต่อไปนี้เป็นกรณีการใช้งานทั่วไปสำหรับเอเจนต์ต่างๆ - -- **Developer**: งานพัฒนาทั่วไป ใช้เครื่องมือทั้งหมด -- **Planner**: วิเคราะห์และวางแผนโดยไม่ทำการเปลี่ยนแปลง -- **Reviewer**: ตรวจสอบโค้ดแบบอ่านอย่างเดียว (Read-only) -- **Debugger**: แก้ไขข้อผิดพลาดโดยเน้นการอ่าน log และทดสอบ -- **Docs Writer**: เขียนและปรับปรุงเอกสาร - ---- - -## ตัวอย่างเอเจนต์ - -นี่คือตัวอย่างเอเจนต์ที่คุณอาจพบว่ามีประโยชน์ - -:::tip -คุณมีเอเจนต์เจ๋งๆ ที่ต้องการแบ่งปันหรือไม่? [ส่ง PR มาที่นี่](https://github.com/anomalyco/opencode) -::: - -### Docs Writer - -```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 -``` - ---- - -### Security Auditor - -```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 -``` diff --git a/packages/web/src/content/docs/th/cli.mdx b/packages/web/src/content/docs/th/cli.mdx deleted file mode 100644 index 49df515c81..0000000000 --- a/packages/web/src/content/docs/th/cli.mdx +++ /dev/null @@ -1,618 +0,0 @@ ---- -title: CLI -description: สัญญาณและคำสั่งของ OpenCode CLI ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode CLI จะเริ่มต้น [TUI](/docs/tui) เป็นค่าเริ่มต้นเมื่อเรียกใช้โดยไม่มีอาร์กิวเมนต์ - -```bash -opencode -``` - -นอกจากนี้ยังรับคำสั่งและแฟล็ก ซึ่งช่วยให้คุณใช้ OpenCode ผ่านโปรแกรมได้ - -```bash -opencode run "Explain how closures work in JavaScript" -``` - ---- - -### tui - -เริ่ม TUI เพื่อใช้ OpenCode แบบโต้ตอบ - -```bash -opencode [project] -``` - -#### แฟล็ก - -| แฟล็ก | สั้น | คำอธิบาย | -| ---------------------------------------- | ---- | ---------------------------------------------------------- | -| {"--continue"} | `-c` | ดำเนินการต่อจากเซสชันล่าสุด | -| {"--session"} | `-s` | ID เซสชันเพื่อดำเนินการต่อ | -| {"--fork"} | | แยกเซสชันเมื่อทำต่อ (ใช้กับ `--continue` หรือ `--session`) | -| {"--prompt"} | | พรอมต์เริ่มต้นที่จะใช้ | -| {"--model"} | `-m` | โมเดลที่จะใช้ในรูปแบบ provider/model | -| {"--agent"} | | เอเจนต์ที่จะใช้ | -| {"--port"} | | พอร์ตที่จะฟัง | -| {"--hostname"} | | ชื่อโฮสต์ที่จะฟัง | - ---- - -## คำสั่ง - -OpenCode CLI ยังมีคำสั่งย่อยอีกมากมาย - ---- - -### agent - -จัดการเอเจนต์สำหรับ OpenCode - -```bash -opencode agent [command] -``` - ---- - -### attach - -เชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ OpenCode ที่กำลังทำงานอยู่ ซึ่งเริ่มต้นผ่านคำสั่ง `serve` หรือ `web` - -```bash -opencode attach [url] -``` - -วิธีนี้ช่วยให้คุณใช้ TUI กับแบ็กเอนด์ OpenCode ระยะไกลได้ ตัวอย่าง: - -```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 -``` - -#### แฟล็ก - -| แฟล็ก | สั้น | คำอธิบาย | -| ---------------------------------------- | ---- | ------------------------------------------------------------------------------------------- | -| {"--dir"} | | ไดเร็กทอรีการทำงานเพื่อเริ่มต้น TUI ใน | -| {"--continue"} | `-c` | ดำเนินการต่อจากเซสชันล่าสุด | -| {"--session"} | `-s` | ID เซสชันเพื่อดำเนินการต่อ | -| {"--fork"} | | แยกเซสชันเมื่อดำเนินการต่อ (ใช้กับ `--continue` หรือ `--session`) | -| {"--password"} | `-p` | รหัสผ่านการยืนยันตัวตนพื้นฐาน (ค่าเริ่มต้นคือ `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | ชื่อผู้ใช้การยืนยันตัวตนพื้นฐาน (ค่าเริ่มต้นคือ `OPENCODE_SERVER_USERNAME` หรือ `opencode`) | - ---- - -#### create - -สร้างเอเจนต์ใหม่ - -```bash -opencode agent create -``` - -คำสั่งนี้จะแนะนำคุณตลอดกระบวนการสร้างเอเจนต์ใหม่ พร้อมพรอมต์ระบบและความสามารถของเครื่องมือ - ---- - -#### list - -แสดงรายชื่อเอเจนต์ที่พร้อมใช้งานทั้งหมด - -```bash -opencode agent list -``` - ---- - -### auth - -จัดการการตรวจสอบสิทธิ์และข้อมูลรับรอง - -```bash -opencode auth [command] -``` - ---- - -#### login - -OpenCode ได้รับการกำหนดค่าไว้ล่วงหน้าด้วยรายชื่อผู้ให้บริการทั่วไปที่ [Models.dev](https://models.dev) ดังนั้นคุณเพียงแค่ต้องใส่คีย์ API สำหรับผู้ให้บริการที่คุณต้องการใช้ ข้อมูลนี้จะถูกเก็บไว้ที่ `~/.local/share/opencode/auth.json` - -```bash -opencode auth login -``` - -เมื่อ OpenCode เริ่มต้น ระบบจะโหลดข้อมูลรับรองจากไฟล์นี้ ดังนั้นคุณจึงไม่ต้องกังวลกับการตั้งค่าตัวแปรสภาพแวดล้อมหรือไฟล์ `.env` ในโปรเจ็กต์ของคุณ - ---- - -#### list - -แสดงรายการข้อมูลรับรองการตรวจสอบสิทธิ์ทั้งหมดที่กำหนดค่าไว้ - -```bash -opencode auth list -``` - -หรือใช้นามแฝงสั้น - -```bash -opencode auth ls -``` - ---- - -#### logout - -ออกจากระบบของผู้ให้บริการและลบข้อมูลรับรองออกจากไฟล์ auth - -```bash -opencode auth logout -``` - ---- - -### github - -จัดการเอเจนต์ GitHub สำหรับเวิร์กโฟลว์อัตโนมัติ - -```bash -opencode github [command] -``` - ---- - -#### install - -ติดตั้งเอเจนต์ GitHub ใน repository ของคุณ - -```bash -opencode github install -``` - -คำสั่งนี้จะสร้างเวิร์กโฟลว์ GitHub Actions และแนะนำคุณตลอดกระบวนการตั้งค่า [เรียนรู้เพิ่มเติม](/docs/github) - ---- - -#### run - -รันเอเจนต์ GitHub ด้วยตนเองหรือใน GitHub Actions - -```bash -opencode github run -``` - -##### แฟล็ก - -| แฟล็ก | คำอธิบาย | -| ------------------------------------- | -------------------------------------- | -| {"--event"} | เหตุการณ์ GitHub เพื่อทริกเกอร์เอเจนต์ | -| {"--token"} | GitHub token | - ---- - -### mcp - -จัดการเซิร์ฟเวอร์ Model Context Protocol (MCP) - -```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 - -ดีบักการเชื่อมต่อเซิร์ฟเวอร์ MCP - -```bash -opencode mcp debug -``` - ---- - -### models - -แสดงรายการโมเดลที่พร้อมใช้งานทั้งหมดจากผู้ให้บริการที่กำหนดค่าไว้ - -```bash -opencode models [provider] -``` - -คำสั่งนี้จะแสดง ID โมเดลทั้งหมดในรูปแบบ `provider/model` - -คุณสามารถใช้ชื่อโมเดลเหล่านี้ในการกำหนดค่า [config](/docs/config/) ของคุณ - -คุณยังสามารถส่งผ่านรหัสผู้ให้บริการเพื่อกรองโมเดลตามผู้ให้บริการรายนั้นได้ - -```bash -opencode models anthropic -``` - -#### แฟล็ก - -| แฟล็ก | คำอธิบาย | -| --------------------------------------- | ------------------------------------------------------ | -| {"--refresh"} | รีเฟรชแคชโมเดลจาก models.dev | -| {"--verbose"} | แสดงรายละเอียดโมเดลเพิ่มเติม (รวมข้อมูลเมตาเช่นต้นทุน) | -| {"--json"} | แสดงผลลัพธ์เป็น JSON | - -ใช้แฟล็ก `--refresh` เพื่ออัปเดตรายการโมเดลที่แคชไว้ มีประโยชน์เมื่อมีการเพิ่มโมเดลใหม่ให้กับผู้ให้บริการและคุณต้องการเห็นใน OpenCode - -```bash -opencode models --refresh -``` - ---- - -### run - -รัน OpenCode โดยไม่ต้องใช้ TUI โดยส่งพรอมต์โดยตรง - -```bash -opencode run [message..] -``` - -มีประโยชน์สำหรับการทำงานอัตโนมัติหรือเมื่อต้องการคำตอบอย่างรวดเร็วโดยไม่ต้องเปิด TUI ตัวอย่าง: - -```bash "opencode run" -opencode run Explain the use of context in Go -``` - -คุณยังสามารถแนบไปกับเซิร์ฟเวอร์ `opencode serve` ที่ทำงานอยู่ หรือใช้เซิร์ฟเวอร์ MCP แบบ headless: - -```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" -``` - -#### แฟล็ก - -| แฟล็ก | สั้น | คำอธิบาย | -| ---------------------------------------- | ---- | ------------------------------------------------------------------------------------------- | -| {"--command"} | | คำสั่งที่จะรัน (ใช้ส่วนที่เหลือของ args เป็นอาร์กิวเมนต์) | -| {"--continue"} | `-c` | ดำเนินการต่อจากเซสชันล่าสุด | -| {"--session"} | `-s` | ID เซสชันเพื่อดำเนินการต่อ | -| {"--fork"} | | แยกเซสชันเมื่อทำต่อ (ใช้กับ `--continue` หรือ `--session`) | -| {"--share"} | | สร้างลิงก์แชร์สำหรับเซสชัน | -| {"--model"} | `-m` | โมเดลที่จะใช้ในรูปแบบ provider/model | -| {"--agent"} | | เอเจนต์ที่จะใช้ | -| {"--file"} | `-f` | แนบไฟล์ไปกับข้อความ | -| {"--format"} | | รูปแบบเอาต์พุต: text (จัดรูปแบบ) หรือ json (JSON ดิบ) | -| {"--title"} | | ชื่อสำหรับเซสชัน (หากไม่ได้ระบุ จะสร้างจากพรอมต์) | -| {"--attach"} | | แนบไปกับเซิร์ฟเวอร์ opencode ที่ทำงานอยู่ (เช่น http://localhost:4096) | -| {"--password"} | `-p` | รหัสผ่านการยืนยันตัวตนพื้นฐาน (ค่าเริ่มต้นคือ `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | ชื่อผู้ใช้การยืนยันตัวตนพื้นฐาน (ค่าเริ่มต้นคือ `OPENCODE_SERVER_USERNAME` หรือ `opencode`) | -| {"--dir"} | | ไดเร็กทอรีสำหรับรัน หรือเส้นทางบนเซิร์ฟเวอร์ระยะไกลเมื่อแนบ | -| {"--variant"} | | ตัวแปรโมเดล (ระดับการใช้เหตุผลเฉพาะผู้ให้บริการ) | -| {"--thinking"} | | แสดงบล็อกความคิด | -| {"--port"} | | พอร์ตสำหรับเซิร์ฟเวอร์ภายในเครื่อง (หากไม่ได้ระบุ จะใช้พอร์ตสุ่ม) | - ---- - -### serve - -เริ่มต้นเซิร์ฟเวอร์ OpenCode headless ที่ให้บริการ API HTTP ดู [เอกสารเซิร์ฟเวอร์](/docs/server) สำหรับรายละเอียด API เต็มรูปแบบ - -```bash -opencode serve -``` - -คำสั่งนี้จะเริ่มต้นเซิร์ฟเวอร์ HTTP ให้ API เข้าถึงฟังก์ชันการทำงานของ OpenCode ได้โดยไม่ต้องมี TUI นอกจากนี้ยังรองรับการตรวจสอบสิทธิ์พื้นฐาน HTTP (ชื่อผู้ใช้เริ่มต้นคือ `opencode` และรหัสผ่านระบุโดย `OPENCODE_SERVER_PASSWORD`) - -#### แฟล็ก - -| แฟล็ก | คำอธิบาย | -| ---------------------------------------- | -------------------------------------- | -| {"--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 | - ---- - -### stats - -แสดงสถิติการใช้งานและค่าใช้จ่ายสำหรับ OpenCode ของคุณ - -```bash -opencode stats -``` - -#### แฟล็ก - -| แฟล็ก | คำอธิบาย | -| --------------------------------------- | ---------------------------------------------------- | -| {"--days"} | แสดงสถิติของ N วันที่ผ่านมา (ค่าเริ่มต้น: ตลอดเวลา) | -| {"--tools"} | แสดงสถิติการใช้เครื่องมือ | -| {"--models"} | แสดงรายละเอียดการใช้งานโมเดล (ซ่อนไว้ตามค่าเริ่มต้น) | -| {"--project"} | กรองตามโครงการ (ค่าเริ่มต้น: โครงการปัจจุบัน) | - ---- - -### export - -ส่งออกประวัติเซสชันเป็น JSON - -```bash -opencode export [sessionID] -``` - -หากไม่ระบุรหัสเซสชัน คุณจะได้รับแจ้งให้เลือกจากรายการล่าสุด - ---- - -### import - -นำเข้าเซสชันจากไฟล์ JSON หรือ URL ที่แชร์ของ OpenCode - -```bash -opencode import -``` - -คุณสามารถนำเข้าไฟล์ในเครื่องหรือ URL ที่แชร์ - -```bash -opencode import session.json -opencode import https://opncd.ai/s/abc123 -``` - ---- - -### web - -เริ่ม OpenCode ในโหมดเซิร์ฟเวอร์พร้อมเว็บอินเตอร์เฟส - -```bash -opencode web -``` - -คำสั่งนี้จะเริ่มต้นเซิร์ฟเวอร์ HTTP และเปิดเว็บเบราว์เซอร์เพื่อเข้าถึง OpenCode ผ่านทางเว็บอินเตอร์เฟส รองรับการตรวจสอบสิทธิ์พื้นฐาน HTTP (ชื่อผู้ใช้เริ่มต้นคือ `opencode` และรหัสผ่านระบุโดย `OPENCODE_SERVER_PASSWORD`) - -#### แฟล็ก - -| แฟล็ก | คำอธิบาย | -| ---------------------------------------- | -------------------------------------- | -| {"--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 CLI ยอมรับแฟล็กสากลต่อไปนี้สำหรับทุกคำสั่ง - -| แฟล็ก | สั้น | คำอธิบาย | -| ------------------------------------------ | ---- | ----------------------------------------- | -| {"--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_TUI_CONFIG` | String | เส้นทางไปยังไฟล์การกำหนดค่า TUI | -| `OPENCODE_CONFIG_DIR` | String | เส้นทางไปยังไดเร็กทอรีการกำหนดค่า | -| `OPENCODE_CONFIG_CONTENT` | String | เนื้อหาการกำหนดค่าแบบ inline JSON | -| `OPENCODE_DISABLE_AUTOUPDATE` | Boolean | ปิดใช้งานการอัปเดตอัตโนมัติ | -| `OPENCODE_DISABLE_PRUNE` | Boolean | ปิดใช้งานการลบข้อมูลเซสชันเก่า | -| `OPENCODE_DISABLE_TERMINAL_TITLE` | Boolean | ปิดใช้งานการตั้งชื่อหน้าต่าง terminal | -| `OPENCODE_PERMISSION` | String | การกำหนดค่าสิทธิ์แบบ inline 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` (prompt + skills) | -| `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 แทน ls หากมี | -| `OPENCODE_SERVER_PASSWORD` | String | รหัสผ่านสำหรับการตรวจสอบสิทธิ์พื้นฐาน `serve`/`web` | -| `OPENCODE_SERVER_USERNAME` | String | ชื่อผู้ใช้สำหรับการตรวจสอบสิทธิ์พื้นฐาน (ค่าเริ่มต้น `opencode`) | -| `OPENCODE_MODELS_URL` | String | URL ที่กำหนดเองสำหรับการดึงรายการโมเดล | - ---- - -### ขั้นทดลอง - -ตัวแปรสภาพแวดล้อมเหล่านี้เปิดใช้งานฟีเจอร์ทดลองที่อาจมีการเปลี่ยนแปลงหรือถูกลบออก - -| ตัวแปร | ชนิด | คำอธิบาย | -| ----------------------------------------------- | ------- | ---------------------------------------------- | -| `OPENCODE_EXPERIMENTAL` | Boolean | เปิดใช้งานฟีเจอร์ทดลองภายใต้แฟล็กรวม | -| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | Boolean | การค้นหาไอคอนทดลอง | -| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | Boolean | ปิดใช้งานการคัดลอกเมื่อเลือกใน TUI | -| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | Number | การหมดเวลาเริ่มต้นสำหรับคำสั่ง bash ในหน่วย ms | -| `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_PLAN_MODE` | Boolean | เปิดใช้งาน Plan mode | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | Boolean | เปิดใช้งานงาน subagent เบื้องหลัง | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | Boolean | เปิดใช้งานระบบเหตุการณ์ทดลอง | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | Boolean | เปิดใช้งานเส้นทางคำขอ LLM แบบ native | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | Boolean | เปิดใช้งานการค้นหาเว็บแบบขนาน | -| `OPENCODE_EXPERIMENTAL_SCOUT` | Boolean | เปิดใช้งาน Scout subagent | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | Boolean | เปิดใช้งานการรองรับ workspace | diff --git a/packages/web/src/content/docs/th/commands.mdx b/packages/web/src/content/docs/th/commands.mdx deleted file mode 100644 index 0ef947e05f..0000000000 --- a/packages/web/src/content/docs/th/commands.mdx +++ /dev/null @@ -1,320 +0,0 @@ ---- -title: คำสั่ง -description: คำสั่งที่กำหนดเองสำหรับงานที่ทำซ้ำๆ ---- - -คำสั่งช่วยให้คุณกำหนดชุดของพรอมต์ที่ใช้บ่อย เพื่อให้สามารถเรียกใช้งานได้อย่างรวดเร็วใน TUI - -```bash frame="none" -/my-command -``` - -คำสั่งแบบกำหนดเองเป็นส่วนเพิ่มเติมจากคำสั่งในตัว เช่น `/init`, `/undo`, `/redo`, `/share`, `/help` [เรียนรู้เพิ่มเติม](/docs/tui#คำสั่ง) - ---- - -## การสร้างคำสั่ง - -สร้างไฟล์ 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 กำหนดคุณสมบัติของคำสั่ง และเนื้อหาคือพรอมต์ที่จะส่งไปยัง LLM - -ใช้คำสั่งโดยพิมพ์ `/` ตามด้วยชื่อไฟล์ (ไม่รวมนามสกุล) ใน TUI: - -```bash frame="none" -"/test" -``` - ---- - -## วิธีการกำหนด - -คุณสามารถกำหนดคำสั่งได้สองวิธี: ผ่านการกำหนดค่า JSON หรือโดยการสร้างไฟล์ Markdown - ---- - -### JSON - -ใช้ส่วน `command` ในไฟล์ [config](/docs/config) ของ OpenCode: - -```json title="opencode.jsonc" {4-12} -{ - "$schema": "https://opencode.ai/config.json", - "command": { - // This becomes the name of the command - "test": { - // This is the prompt that will be sent to the LLM - "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.", - // This is shown as the description in the TUI - "description": "Run tests with coverage", - "agent": "build", - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -รันคำสั่งนี้ใน TUI: - -```bash frame="none" -/test -``` - ---- - -### Markdown - -หากต้องการกำหนดคำสั่งด้วยไฟล์ Markdown ให้วางไฟล์ไว้ใน: - -- ระดับผู้ใช้ (Global): `~/.config/opencode/commands/` -- ระดับโปรเจ็กต์: `.opencode/commands/` - -```markdown title="~/.config/opencode/commands/test.md" ---- -description: Run tests with coverage -agent: build -model: anthropic/claude-3-5-sonnet-20241022 ---- - -Run the full test suite with coverage report and show any failures. -Focus on the failing tests and suggest fixes. -``` - -ชื่อไฟล์ Markdown จะกลายเป็นชื่อคำสั่ง เช่น `test.md` ให้คุณเรียกใช้: - -```bash frame="none" -/test -``` - ---- - -## อาร์กิวเมนต์และการแทนที่ - -คำสั่งรองรับอาร์กิวเมนต์ตามตำแหน่งและการแทนที่ค่าพิเศษหลายรายการ - ---- - -### อาร์กิวเมนต์ - -คุณสามารถส่งผ่านอาร์กิวเมนต์ไปยังคำสั่งของคุณได้โดยใช้ `$ARGUMENTS` - -```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. -``` - -หรือตรวจสอบการเปลี่ยนแปลงล่าสุดใน git: - -```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. -``` - -เนื้อหาของไฟล์จะถูกอ่านและรวมเข้าไปในพรอมต์ที่ส่งไปยัง LLM - ---- - -## ตัวเลือก - -มาดูรายละเอียดของตัวเลือกการกำหนดค่าต่างๆ - ---- - -### 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." - } - } -} -``` - -ฟิลด์นี้ **จำเป็น** สำหรับการกำหนดค่าแบบ JSON (ใน Markdown คือส่วนเนื้อหา) - ---- - -### Description (คำอธิบาย) - -ใช้ตัวเลือก `description` เพื่อให้คำอธิบายโดยย่อเกี่ยวกับสิ่งที่คำสั่งทำ - -```json title="opencode.json" -{ - "command": { - "test": { - "description": "Run tests with coverage" - } - } -} -``` - -คำอธิบายนี้จะแสดงในรายการเติมคำอัตโนมัติของ TUI เมื่อคุณพิมพ์คำสั่ง - ---- - -### Agent (เอเจนต์) - -ใช้ `agent` เพื่อระบุว่า [เอเจนต์](/docs/agents) ใดควรดำเนินการคำสั่งนี้ - -```json title="opencode.json" -{ - "command": { - "review": { - "agent": "plan" - } - } -} -``` - -นี่คือ **ทางเลือก** หากไม่ได้ระบุ จะใช้เอเจนต์ปัจจุบันของคุณ - ---- - -### Subtask (งานย่อย) - -ใช้ `subtask` (บูลีน) เพื่อระบุว่าคำสั่งควรทำงานเป็น [subagent](/docs/agents/#subagents) หรือไม่ - -การตั้งค่านี้จะป้องกันไม่ให้คำสั่งรบกวนบริบทหลักของเซสชัน และจะ **บังคับ** ให้เอเจนต์ใช้โหมดที่เหมาะสม - -```json title="opencode.json" -{ - "command": { - "analyze": { - "subtask": true - } - } -} -``` - -ส่วนนี้ **ทางเลือก** - ---- - -### Model (โมเดล) - -ใช้ `model` เพื่อกำหนดโมเดลเฉพาะสำหรับคำสั่งนี้ - -```json title="opencode.json" -{ - "command": { - "analyze": { - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -ส่วนนี้ **ทางเลือก** - ---- - -### Built-ins (ในตัว) - -OpenCode มีคำสั่งในตัวหลายคำสั่ง เช่น `/init`, `/undo`, `/redo`, `/share`, `/help` [เรียนรู้เพิ่มเติม](/docs/tui#คำสั่ง) - -:::note -คุณสามารถเขียนทับคำสั่งในตัวได้โดยกำหนดคำสั่งที่กำหนดเองด้วยชื่อเดียวกัน -::: - -อย่างไรก็ตาม เราไม่แนะนำให้ทำเช่นนั้น เว้นแต่คุณจะมีเหตุผลที่เฉพาะเจาะจง diff --git a/packages/web/src/content/docs/th/config.mdx b/packages/web/src/content/docs/th/config.mdx deleted file mode 100644 index e323d8f299..0000000000 --- a/packages/web/src/content/docs/th/config.mdx +++ /dev/null @@ -1,690 +0,0 @@ ---- -title: การกำหนดค่า -description: การใช้การกำหนดค่า OpenCode JSON ---- - -คุณสามารถกำหนดค่า OpenCode ได้โดยใช้ไฟล์กำหนดค่า JSON - ---- - -## รูปแบบ - -OpenCode รองรับทั้งรูปแบบ **JSON** และ **JSONC** (JSON พร้อมความคิดเห็น) - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-5", - "autoupdate": true, - "server": { - "port": 4096, - }, -} -``` - ---- - -## สถานที่ - -คุณสามารถวางการกำหนดค่าของคุณในสถานที่ต่าง ๆ สองสามแห่งและมี -ลำดับความสำคัญที่แตกต่างกัน - -:::note -ไฟล์การกำหนดค่า **ถูกรวมเข้าด้วยกัน** โดยไม่มีการแทนที่ -::: - -ไฟล์การกำหนดค่าจะถูกรวมเข้าด้วยกัน โดยไม่มีการแทนที่ การตั้งค่าจากตำแหน่งการกำหนดค่าต่อไปนี้จะรวมกัน การกำหนดค่าในภายหลังจะแทนที่การกำหนดค่าก่อนหน้าสำหรับคีย์ที่ขัดแย้งกันเท่านั้น การตั้งค่าที่ไม่ขัดแย้งจากการกำหนดค่าทั้งหมดจะยังคงอยู่ - -ตัวอย่างเช่น หากการกำหนดค่าส่วนกลางของคุณตั้งค่า `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` ใช้การกำหนดค่าส่วนกลางสำหรับการตั้งค่าทั้งผู้ใช้ เช่น ผู้ให้บริการ รุ่น และสิทธิ์ - -สำหรับการตั้งค่าเฉพาะ TUI ให้ใช้ `~/.config/opencode/tui.json` - -การกำหนดค่าส่วนกลางจะแทนที่ค่าเริ่มต้นขององค์กรระยะไกล - ---- - -### ต่อโครงการ - -เพิ่ม `opencode.json` ในรูทโปรเจ็กต์ของคุณ การกำหนดค่าโปรเจ็กต์มีความสำคัญสูงสุดในบรรดาไฟล์กำหนดค่ามาตรฐาน โดยจะแทนที่การกำหนดค่าทั้งส่วนกลางและระยะไกล - -สำหรับการตั้งค่า TUI เฉพาะโครงการ ให้เพิ่ม `tui.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" -``` - -ไดเร็กทอรีที่กำหนดเองถูกโหลดหลังจากไดเร็กทอรี config ส่วนกลางและ `.opencode` ดังนั้นจึง **สามารถแทนที่** การตั้งค่าได้ - ---- - -## สคีมา - -ไฟล์กำหนดค่ามีสคีมาที่กำหนดไว้ใน [**`opencode.ai/config.json`**](https://opencode.ai/config.json) - -การกำหนดค่า TUI ใช้ [**`opencode.ai/tui.json`**](https://opencode.ai/tui.json) - -ผู้แก้ไขของคุณควรสามารถตรวจสอบและเติมข้อความอัตโนมัติตามสคีมาได้ - ---- - -### TUI - -ใช้ไฟล์ `tui.json` (หรือ `tui.jsonc`) เฉพาะสำหรับการตั้งค่าเฉพาะ TUI - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": true - }, - "diff_style": "auto" -} -``` - -ใช้ `OPENCODE_TUI_CONFIG` เพื่อชี้ไปยังไฟล์กำหนดค่า TUI ที่กำหนดเอง - -คีย์ `theme`, `keybinds` และ `tui` แบบเดิมใน `opencode.json` เลิกใช้แล้วและจะถูกย้ายโดยอัตโนมัติเมื่อเป็นไปได้ - -[เรียนรู้เพิ่มเติมเกี่ยวกับการใช้ TUI ที่นี่](/docs/tui#configure) - ---- - -### เซิร์ฟเวอร์ - -คุณสามารถกำหนดการตั้งค่าเซิร์ฟเวอร์สำหรับคำสั่ง `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) - ---- - -### Models - -คุณสามารถกำหนดค่าผู้ให้บริการและรุ่นที่คุณต้องการใช้ในการกำหนดค่า 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` env var หรือ `us-east-1`) -- `profile` - ​​AWS ตั้งชื่อโปรไฟล์จาก `~/.aws/credentials` (ค่าเริ่มต้นเป็น `AWS_PROFILE` env var) -- `endpoint` - ​​จุดสิ้นสุดที่กำหนดเอง URL สำหรับจุดสิ้นสุด VPC นี่เป็นนามแฝงสำหรับตัวเลือก `baseURL` ทั่วไปโดยใช้คำศัพท์เฉพาะ AWS หากระบุทั้งสองรายการ `endpoint` จะมีความสำคัญกว่า - -:::note -Bearer Token (`AWS_BEARER_TOKEN_BEDROCK` หรือ `/connect`) มีความสำคัญมากกว่าการตรวจสอบสิทธิ์ตามโปรไฟล์ ดู [ลำดับความสำคัญในการรับรองความถูกต้อง](/docs/providers#การรับรองความถูกต้อง-เหนือกว่า) สำหรับรายละเอียด -::: - -[เรียนรู้เพิ่มเติมเกี่ยวกับการกำหนดค่า Amazon Bedrock](/docs/providers#amazon-bedrock) - ---- - -### Themes - -ตั้งค่าธีม UI ของคุณใน `tui.json` - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - -[เรียนรู้เพิ่มเติมที่นี่](/docs/themes) - ---- - -### Agents - -คุณสามารถกำหนดค่าตัวแทนเฉพาะสำหรับงานเฉพาะผ่านตัวเลือก `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, - }, - }, - }, -} -``` - -คุณยังสามารถกำหนดตัวแทนโดยใช้ไฟล์ Markdown ใน `~/.config/opencode/agents/` หรือ `.opencode/agents/` [เรียนรู้เพิ่มเติมที่นี่](/docs/agents) - ---- - -### Default Agent - -คุณสามารถตั้งค่าตัวแทนเริ่มต้นได้โดยใช้ตัวเลือก `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 - ---- - -### Sharing - -คุณสามารถกำหนดค่าคุณสมบัติ [แบ่งปัน](/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) - ---- - -### คีย์ลัด - -ปรับแต่งปุ่มลัดใน `tui.json` - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.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": false, - "reserved": 10000 - } -} -``` - -- `auto` - ​​กระชับเซสชันโดยอัตโนมัติเมื่อบริบทเต็ม (ค่าเริ่มต้น: `true`) -- `prune` - ​​ลบเอาท์พุตเครื่องมือเก่าเพื่อบันทึก tokens (ค่าเริ่มต้น: `false`) -- `reserved` - บัฟเฟอร์โทเค็นสำหรับการบีบอัด ให้หน้าต่างเพียงพอเพื่อหลีกเลี่ยงการล้นระหว่างการบีบอัด - ---- - -### ตัวเฝ้าดู - -คุณสามารถกำหนดค่ารูปแบบการละเว้นตัวเฝ้าดูไฟล์ได้ผ่านตัวเลือก `watcher` - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "watcher": { - "ignore": ["node_modules/**", "dist/**", ".git/**"] - } -} -``` - -รูปแบบเป็นไปตามไวยากรณ์ glob ใช้ตัวเลือกนี้เพื่อยกเว้นไดเร็กทอรีที่มีเสียงดังจากการดูไฟล์ - ---- - -### MCP Servers - -คุณสามารถกำหนดค่าเซิร์ฟเวอร์ MCP ที่คุณต้องการใช้ผ่านตัวเลือก `mcp` - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": {} -} -``` - -[เรียนรู้เพิ่มเติมที่นี่](/docs/mcp-servers) - ---- - -### ปลั๊กอิน - -[ปลั๊กอิน](/docs/plugins) ขยาย OpenCode ด้วยเครื่องมือที่กำหนดเอง hooks และการผสานรวม - -วางไฟล์ปลั๊กอินใน `.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 - -คุณสามารถปิดการใช้งานผู้ให้บริการที่โหลดโดยอัตโนมัติผ่านตัวเลือก `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 - -คุณสามารถระบุรายชื่อผู้ให้บริการที่อนุญาตได้ผ่านตัวเลือก `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 - -ใช้ `{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 ไว้ในไฟล์แยกกัน -- รวมไฟล์คำสั่งขนาดใหญ่โดยไม่ทำให้การกำหนดค่าของคุณเกะกะ -- การแชร์ข้อมูลโค้ดการกำหนดค่าทั่วไปในไฟล์กำหนดค่าหลายไฟล์ diff --git a/packages/web/src/content/docs/th/custom-tools.mdx b/packages/web/src/content/docs/th/custom-tools.mdx deleted file mode 100644 index c5e6385357..0000000000 --- a/packages/web/src/content/docs/th/custom-tools.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -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` - ---- - -#### เครื่องมือหลายอย่างต่อไฟล์ - -คุณยังสามารถส่งออกเครื่องมือหลายรายการจากไฟล์เดียวได้ การส่งออกแต่ละครั้งจะกลายเป็น **เครื่องมือแยกต่างหาก** โดยมีชื่อ **`_`**: - -```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 -ชอบชื่อที่ไม่ซ้ำกันเว้นแต่คุณตั้งใจจะแทนที่เครื่องมือในตัว หากคุณต้องการปิดใช้งานเครื่องมือในตัวแต่ไม่ต้องการแทนที่ ให้ใช้ [permissions](/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` สำหรับรูท git worktree - ---- - -## ตัวอย่าง - -### เขียนเครื่องมือใน 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 diff --git a/packages/web/src/content/docs/th/ecosystem.mdx b/packages/web/src/content/docs/th/ecosystem.mdx deleted file mode 100644 index ccbf2f1907..0000000000 --- a/packages/web/src/content/docs/th/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: ระบบนิเวศ -description: โปรเจ็กต์และการผสานรวมที่สร้างด้วย OpenCode ---- - -ชุดโครงการชุมชนที่สร้างขึ้นบน OpenCode - -:::note -ต้องการเพิ่มโครงการที่เกี่ยวข้องกับ OpenCode ของคุณลงในรายการนี้หรือไม่ ส่งพีอาร์. -::: - -คุณยังสามารถลองดู [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 sync และการแสดงตัวอย่างแบบสด | -| [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 แบบหลายสาขาพร้อมโคลนแบบตื้นและพอร์ตที่กำหนดอัตโนมัติ | -| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | ปลั๊กอิน Google Antigravity OAuth พร้อมรองรับ Google Search และการจัดการ 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 | -| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | ช่วยให้ตัวแทน AI สามารถเรียกใช้กระบวนการเบื้องหลังใน 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 ที่ผลิตโดย LLM | -| [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 อัตโนมัติที่ขับเคลื่อนด้วย AI ตามบริบทของ OpenCode | -| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | อนุญาตให้ตัวแทน OpenCode โหลดแบบ Lazy Load ตามความต้องการพร้อมการค้นพบทักษะและการแทรก | -| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | หน่วยความจำถาวรตลอดเซสชันโดยใช้ Supermemory | -| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | การตรวจสอบแผนเชิงโต้ตอบพร้อมคำอธิบายประกอบแบบภาพและการแชร์ส่วนตัว/offline | -| [@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) | UI เบราว์เซอร์แบบโต้ตอบสำหรับการระดมความคิด AI ด้วยแบบฟอร์มคำถามหลายข้อ | -| [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) | เวิร์กทรีคอมไพล์ไร้แรงเสียดทานสำหรับ OpenCode | -| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | ติดตามและแก้ไขข้อบกพร่องเอเจนต์ AI ของคุณด้วย 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) | UI เว็บบนมือถือเป็นครั้งแรกสำหรับ 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 ที่ใช้ terminal | -| [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 ไว้ใน UI ของ 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) | เอเจนต์ AI แบบแยกส่วนและคำสั่งสำหรับการพัฒนาแบบมีโครงสร้าง | -| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | กำหนดค่า พรอมต์ เอเจนต์ และปลั๊กอินสำหรับเวิร์กโฟลว์ที่ได้รับการปรับปรุง | diff --git a/packages/web/src/content/docs/th/enterprise.mdx b/packages/web/src/content/docs/th/enterprise.mdx deleted file mode 100644 index 9bc041fa7c..0000000000 --- a/packages/web/src/content/docs/th/enterprise.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: องค์กร -description: การใช้ OpenCode อย่างปลอดภัยในองค์กรของคุณ ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -OpenCode Enterprise เหมาะสำหรับองค์กรที่ต้องการให้แน่ใจว่าโค้ดและข้อมูลของตนไม่หลุดออกจากโครงสร้างพื้นฐาน ซึ่งสามารถทำได้โดยใช้การกำหนดค่าแบบรวมศูนย์ที่ทำงานร่วมกับ SSO และเกตเวย์ AI ภายในของคุณ - -:::note -OpenCode จะไม่เก็บโค้ดหรือข้อมูลบริบทใดๆ ของคุณ -::: - -ในการเริ่มต้นใช้งาน OpenCode Enterprise: - -1. ทดลองใช้งานภายในกับทีมของคุณ -2. **ติดต่อเรา** เพื่อหารือเกี่ยวกับตัวเลือกด้านราคาและการใช้งาน - ---- - -## การทดลอง - -OpenCode เป็นโอเพ่นซอร์สและไม่ได้จัดเก็บโค้ดหรือข้อมูลบริบทใดๆ ของคุณ ดังนั้นนักพัฒนาของคุณสามารถ [เริ่มต้น](/docs/) และดำเนินการทดลองใช้งานได้อย่างง่ายดาย - ---- - -### การจัดการข้อมูล - -**OpenCode จะไม่จัดเก็บโค้ดหรือข้อมูลบริบทของคุณ** การประมวลผลทั้งหมดเกิดขึ้นภายในเครื่องหรือผ่านการเรียก API โดยตรงไปยังผู้ให้บริการ AI ของคุณ - -ซึ่งหมายความว่าตราบใดที่คุณใช้ผู้ให้บริการที่คุณเชื่อถือหรือผู้ให้บริการภายใน -เกตเวย์ AI คุณสามารถใช้ OpenCode ได้อย่างปลอดภัย - -ข้อแม้เดียวที่นี่คือคุณสมบัติเสริม `/share` - ---- - -#### การแบ่งปันการสนทนา - -หากผู้ใช้เปิดใช้งานคุณสมบัติ `/share` การสนทนาและข้อมูลที่เกี่ยวข้องกับการสนทนาจะถูกส่งไปยังบริการที่เราใช้เพื่อโฮสต์เพจแชร์เหล่านี้ที่ opencode.ai - -ขณะนี้ข้อมูลให้บริการผ่านเครือข่าย Edge ของ CDN ของเรา และถูกแคชไว้ที่ Edge ใกล้ผู้ใช้ของคุณ - -เราขอแนะนำให้คุณปิดการใช้งานนี้สำหรับการทดลองใช้ของคุณ - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -[เรียนรู้เพิ่มเติมเกี่ยวกับการแชร์](/docs/share) - ---- - -### ความเป็นเจ้าของรหัส - -**คุณเป็นเจ้าของโค้ดทั้งหมดที่สร้างโดย OpenCode** ไม่มีข้อจำกัดด้านใบอนุญาตหรือการอ้างสิทธิ์ความเป็นเจ้าของ - ---- - -## ราคา - -เราใช้แบบจำลองต่อที่นั่งสำหรับ OpenCode Enterprise หากคุณมีเกตเวย์ LLM ของคุณเอง เราจะไม่เรียกเก็บเงินสำหรับtokensที่ใช้ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับตัวเลือกราคาและการใช้งาน **ติดต่อเรา** - ---- - -## การปรับใช้ - -เมื่อคุณทดลองใช้งานเสร็จแล้วและพร้อมที่จะใช้ OpenCode ที่ -องค์กรของคุณ คุณสามารถ **ติดต่อเรา** เพื่อหารือเกี่ยวกับ -ตัวเลือกการกำหนดราคาและการใช้งาน - ---- - -### การกำหนดค่าส่วนกลาง - -เราสามารถตั้งค่า OpenCode เพื่อใช้การกำหนดค่าส่วนกลางเพียงรายการเดียวสำหรับทั้งองค์กรของคุณได้ - -การกำหนดค่าแบบรวมศูนย์นี้สามารถทำงานร่วมกับผู้ให้บริการ SSO ของคุณได้ และรับรองว่าผู้ใช้ทุกคนจะเข้าถึงเฉพาะเกตเวย์ AI ภายในของคุณเท่านั้น - ---- - -### SSO บูรณาการ - -ด้วยการกำหนดค่าส่วนกลาง OpenCode สามารถทำงานร่วมกับผู้ให้บริการ SSO ขององค์กรของคุณเพื่อตรวจสอบสิทธิ์ได้ - -ซึ่งช่วยให้ OpenCode รับข้อมูลรับรองสำหรับเกตเวย์ AI ภายในของคุณผ่านระบบการจัดการข้อมูลประจำตัวที่คุณมีอยู่ - ---- - -### เกตเวย์ AI ภายใน - -ด้วยการกำหนดค่าส่วนกลาง คุณสามารถกำหนดค่า OpenCode ให้ใช้เกตเวย์ AI ภายในของคุณเท่านั้น - -คุณยังสามารถปิดการใช้งานผู้ให้บริการ AI อื่นๆ ทั้งหมดได้ เพื่อให้มั่นใจว่าคำขอทั้งหมดจะผ่านโครงสร้างพื้นฐานที่ได้รับอนุมัติขององค์กรของคุณ - ---- - -### โฮสติ้งด้วยตนเอง - -ในขณะที่เราแนะนำให้ปิดการใช้งานหน้าแบ่งปันเพื่อให้แน่ใจว่าข้อมูลของคุณจะไม่หายไป -องค์กรของคุณ เราก็สามารถช่วยคุณโฮสต์พวกเขาเองบนโครงสร้างพื้นฐานของคุณได้ - -ขณะนี้อยู่ในแผนงานของเรา หากคุณสนใจ **แจ้งให้เราทราบ** - ---- - -## FAQ - -

-OpenCode Enterprise คืออะไร? - -OpenCode Enterprise เหมาะสำหรับองค์กรที่ต้องการให้แน่ใจว่าโค้ดและข้อมูลของตนไม่หลุดออกจากโครงสร้างพื้นฐาน ซึ่งสามารถทำได้โดยใช้การกำหนดค่าแบบรวมศูนย์ที่ทำงานร่วมกับ SSO และเกตเวย์ AI ภายในของคุณ - -
- -
-ฉันจะเริ่มต้นใช้งาน OpenCode Enterprise ได้อย่างไร? - -เพียงเริ่มต้นด้วยการทดลองใช้ภายในกับทีมของคุณ ตามค่าเริ่มต้น OpenCode จะไม่จัดเก็บโค้ดหรือข้อมูลบริบทของคุณ ทำให้ง่ายต่อการเริ่มต้น - -จากนั้น **ติดต่อเรา** เพื่อหารือเกี่ยวกับตัวเลือกด้านราคาและการใช้งาน - -
- -
-ราคาสำหรับองค์กรทำงานอย่างไร? - -เราเสนอราคาสำหรับองค์กรต่อที่นั่ง หากคุณมีเกตเวย์ LLM ของคุณเอง เราจะไม่เรียกเก็บเงินสำหรับtokensที่ใช้ สำหรับรายละเอียดเพิ่มเติม **ติดต่อเรา** เพื่อขอใบเสนอราคาที่กำหนดเองตามความต้องการขององค์กรของคุณ - -
- -
-ข้อมูลของฉันปลอดภัยกับ OpenCode Enterprise หรือไม่? - -ใช่. OpenCode จะไม่เก็บโค้ดหรือข้อมูลบริบทของคุณ การประมวลผลทั้งหมดเกิดขึ้นภายในเครื่องหรือผ่านการโทรศัพท์ API โดยตรงไปยังผู้ให้บริการ AI ของคุณ ด้วยการกำหนดค่าส่วนกลางและการบูรณาการ SSO ข้อมูลของคุณยังคงปลอดภัยภายในโครงสร้างพื้นฐานขององค์กรของคุณ - -
- -
-เราสามารถใช้ private NPM registry ของเราเองได้หรือไม่? - -OpenCode รองรับการลงทะเบียน npm ส่วนตัวผ่านการรองรับไฟล์ `.npmrc` ดั้งเดิมของ Bun หากองค์กรของคุณใช้รีจิสทรีส่วนตัว เช่น 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 เพื่อให้แน่ใจว่าสามารถติดตั้งแพ็คเกจจากรีจิสทรีขององค์กรของคุณได้ - -
diff --git a/packages/web/src/content/docs/th/formatters.mdx b/packages/web/src/content/docs/th/formatters.mdx deleted file mode 100644 index 8b6122ca69..0000000000 --- a/packages/web/src/content/docs/th/formatters.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -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` ใช้ได้กับ config | -| rust | .rs | `rustfmt` คำสั่งใช้ได้ | -| cargo fmt | .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` คำสั่งใช้ได้ | -| nix | .nix | `nixfmt` คำสั่งใช้ได้ | -| shfmt | .sh, .bash | `shfmt` คำสั่งใช้ได้ | -| pint | .php | `laravel/pint` การพึ่งพาใน `composer.json` | -| oxfmt (ทดลอง) | .js, .jsx, .ts, .tsx | `oxfmt` การพึ่งพาใน `package.json` และ [แฟล็กตัวแปร env ทดลอง](/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` | บูลีน | ตั้งค่านี้เป็น `true` เพื่อปิดใช้งานฟอร์แมตเตอร์ | -| `command` | สตริง[] | คำสั่งให้เรียกใช้การจัดรูปแบบ | -| `environment` | วัตถุ | ตัวแปรสภาพแวดล้อมที่จะตั้งค่าเมื่อรันฟอร์แมตเตอร์ | -| `extensions` | สตริง[] | นามสกุลไฟล์ที่ฟอร์แมตเตอร์นี้ควรรองรับ | - -ลองดูตัวอย่างบางส่วน - ---- - -### ปิดการใช้งานฟอร์แมตเตอร์ - -หากต้องการปิดการใช้งาน **ทั้งหมด** ฟอร์แมตเตอร์ทั่วโลก ให้ตั้งค่า `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`** ในคำสั่งจะถูกแทนที่ด้วยเส้นทางไปยังไฟล์ที่กำลังจัดรูปแบบ diff --git a/packages/web/src/content/docs/th/github.mdx b/packages/web/src/content/docs/th/github.mdx deleted file mode 100644 index 40816d7841..0000000000 --- a/packages/web/src/content/docs/th/github.mdx +++ /dev/null @@ -1,321 +0,0 @@ ---- -title: GitHub -description: ใช้ OpenCode ในปัญหา GitHub และคำขอแบบดึง ---- - -OpenCode ผสานรวมกับเวิร์กโฟลว์ GitHub ของคุณ พูดถึง `/opencode` หรือ `/oc` ในความคิดเห็นของคุณ แล้ว OpenCode จะดำเนินการงานภายใน GitHub Actions runner ของคุณ - ---- - -## คุณสมบัติ - -- **Issue Triage**: ขอให้ OpenCode ตรวจสอบปัญหาและอธิบายให้คุณทราบ -- **แก้ไขและนำไปใช้**: ขอให้ OpenCode แก้ไขปัญหาหรือใช้ฟีเจอร์ และมันจะทำงานในสาขาใหม่และส่ง PR พร้อมการเปลี่ยนแปลงทั้งหมด -- **ปลอดภัย**: OpenCode ทำงานภายในรันเนอร์ของ GitHub ของคุณ - ---- - -## การติดตั้ง - -รันคำสั่งต่อไปนี้ในโปรเจ็กต์ที่อยู่ใน repo GitHub: - -```bash -opencode github install -``` - -ขั้นตอนนี้จะแนะนำคุณตลอดขั้นตอนการติดตั้งแอป GitHub การสร้างเวิร์กโฟลว์ และการตั้งค่าความลับ - ---- - -### การตั้งค่าด้วยตนเอง - -หรือคุณสามารถตั้งค่าได้ด้วยตนเอง - -1. **ติดตั้งแอป GitHub** - - ไปที่ [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent) ตรวจสอบให้แน่ใจว่าได้ติดตั้งบนที่เก็บเป้าหมายแล้ว - -2. **เพิ่มขั้นตอนการทำงาน** - - เพิ่มไฟล์เวิร์กโฟลว์ต่อไปนี้ไปที่ `.github/workflows/opencode.yml` ใน repo ของคุณ ตรวจสอบให้แน่ใจว่าได้ตั้งค่า `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 เป็นความลับ** - - ในองค์กรหรือโครงการ **การตั้งค่า** ให้ขยาย **ความลับและตัวแปร** ทางด้านซ้าย แล้วเลือก **การดำเนินการ** และเพิ่มคีย์ API ที่จำเป็น - ---- - -## การกำหนดค่า - -- `model`: โมเดลที่จะใช้กับ OpenCode ใช้รูปแบบของ `provider/model` นี่คือ **จำเป็น** -- `agent`: ตัวแทนที่จะใช้ จะต้องเป็นตัวแทนหลัก ย้อนกลับไปที่ `default_agent` จาก config หรือ `"build"` หากไม่พบ -- `share`: ไม่ว่าจะแชร์เซสชัน OpenCode หรือไม่ ค่าเริ่มต้นเป็น **จริง** สำหรับที่เก็บข้อมูลสาธารณะ -- `prompt`: ตัวเลือกที่กำหนดเองพร้อมท์เพื่อแทนที่การทำงานเริ่มต้น ใช้สิ่งนี้เพื่อปรับแต่งวิธีที่ OpenCode ประมวลผลคำขอ -- `token`: GitHub Access Token เสริมสำหรับการดำเนินการ เช่น การสร้างความคิดเห็น การยอมรับการเปลี่ยนแปลง และการเปิดคำขอดึง ตามค่าเริ่มต้น OpenCode จะใช้โทเค็นการเข้าถึงการติดตั้งจาก OpenCode GitHub App ดังนั้นคอมมิต แสดงความคิดเห็น และคำขอดึงข้อมูลจะปรากฏว่ามาจากแอป - - หรือคุณสามารถใช้ [ในตัว `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) ของ GitHub Action runner ได้โดยไม่ต้องติดตั้งแอป OpenCode GitHub เพียงตรวจสอบให้แน่ใจว่าได้ให้สิทธิ์ที่จำเป็นในขั้นตอนการทำงานของคุณ: - - ```yaml - permissions: - id-token: write - contents: write - pull-requests: write - issues: write - ``` - - คุณยังสามารถใช้ [Personal Access Token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) ได้หากต้องการ - ---- - -## กิจกรรมที่รองรับ - -OpenCode สามารถทริกเกอร์ได้โดยเหตุการณ์ GitHub ต่อไปนี้: - -| ประเภทเหตุการณ์ | กระตุ้นโดย | รายละเอียด | -| ----------------------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -| `issue_comment` | แสดงความคิดเห็นในประเด็นหรือประชาสัมพันธ์ | พูดถึง `/opencode` หรือ `/oc` ในความคิดเห็นของคุณ OpenCode อ่านบริบทและสามารถสร้างสาขา เปิด PR หรือตอบกลับได้ | -| `pull_request_review_comment` | แสดงความคิดเห็นเกี่ยวกับบรรทัดรหัสเฉพาะในการประชาสัมพันธ์ | พูดถึง `/opencode` หรือ `/oc` ในขณะที่ตรวจสอบโค้ด OpenCode รับเส้นทางไฟล์ หมายเลขบรรทัด และบริบทที่แตกต่าง | -| `issues` | ปัญหาเปิดหรือแก้ไข | ทริกเกอร์ OpenCode โดยอัตโนมัติเมื่อมีการสร้างหรือแก้ไขปัญหา ต้องป้อนข้อมูล `prompt` | -| `pull_request` | PR เปิดหรืออัปเดตแล้ว | ทริกเกอร์ OpenCode โดยอัตโนมัติเมื่อมีการเปิด ซิงโครไนซ์ หรือเปิด PR อีกครั้ง มีประโยชน์สำหรับการตรวจสอบอัตโนมัติ | -| `schedule` | กำหนดการตาม Cron | เรียกใช้ OpenCode ตามกำหนดเวลา ต้องป้อนข้อมูล `prompt` เอาต์พุตไปที่บันทึกและ PR (ไม่มีปัญหาในการแสดงความคิดเห็น) | -| `workflow_dispatch` | ทริกเกอร์ด้วยตนเองจาก GitHub UI | ทริกเกอร์ OpenCode ตามความต้องการผ่านแท็บการดำเนินการ ต้องป้อนข้อมูล `prompt` เอาต์พุตไปที่บันทึกและ PR | - -### ตัวอย่างกำหนดการ - -เรียกใช้ 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. -``` - -สำหรับกิจกรรมที่กำหนดเวลาไว้ อินพุต `prompt` เป็นสิ่งที่จำเป็น\*\* เนื่องจากไม่มีความคิดเห็นที่จะดึงคำแนะนำออกมา เวิร์กโฟลว์ตามกำหนดการทำงานโดยไม่มีบริบทผู้ใช้ในการตรวจสอบสิทธิ์ ดังนั้นเวิร์กโฟลว์จะต้องให้สิทธิ์ `contents: write` และ `pull-requests: write` หากคุณคาดหวังให้ OpenCode สร้างสาขาหรือ PR - ---- - -### ตัวอย่างคำขอดึง - -ตรวจสอบ PR โดยอัตโนมัติเมื่อมีการเปิดหรืออัปเดต: - -```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 จะใช้ค่าเริ่มต้นในการตรวจสอบคำขอดึง - ---- - -### ตัวอย่าง Triage ปัญหา - -คัดแยกปัญหาใหม่โดยอัตโนมัติ ตัวอย่างนี้กรองไปยังบัญชีที่มีอายุมากกว่า 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 สำหรับเวิร์กโฟลว์ของคุณ - -```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 - -- **อธิบายปัญหา** - - เพิ่มความคิดเห็นนี้ในปัญหา GitHub - - ``` - /opencode explain this issue - ``` - - OpenCode จะอ่านกระทู้ทั้งหมด รวมถึงความคิดเห็นทั้งหมด และตอบกลับพร้อมคำอธิบายที่ชัดเจน - -- **แก้ไขปัญหา** - - ในปัญหา GitHub ให้พูดว่า: - - ``` - /opencode fix this - ``` - - และ OpenCode จะสร้างสาขาใหม่ ดำเนินการเปลี่ยนแปลง และเปิด PR ที่มีการเปลี่ยนแปลง - -- **ตรวจสอบ PR และทำการเปลี่ยนแปลง** - - แสดงความคิดเห็นต่อไปนี้ใน GitHub PR - - ``` - Delete the attachment from S3 when the note is removed /oc - ``` - - OpenCode จะดำเนินการเปลี่ยนแปลงที่ร้องขอและส่งมอบให้กับ PR เดียวกัน - -- **ตรวจสอบบรรทัดรหัสเฉพาะ** - - แสดงความคิดเห็นโดยตรงบนบรรทัดโค้ดในแท็บ "ไฟล์" ของ PR OpenCode จะตรวจจับไฟล์ หมายเลขบรรทัด และบริบทต่างโดยอัตโนมัติเพื่อให้การตอบสนองที่แม่นยำ - - ``` - [Comment on specific lines in Files tab] - /oc add error handling here - ``` - - เมื่อแสดงความคิดเห็นในบรรทัดใดบรรทัดหนึ่ง OpenCode จะได้รับ: - - กำลังตรวจสอบไฟล์ที่แน่นอน - - บรรทัดโค้ดเฉพาะ - - บริบทที่แตกต่างโดยรอบ - - ข้อมูลหมายเลขบรรทัด - - ซึ่งช่วยให้สามารถร้องขอที่ตรงเป้าหมายมากขึ้นโดยไม่จำเป็นต้องระบุเส้นทางไฟล์หรือหมายเลขบรรทัดด้วยตนเอง diff --git a/packages/web/src/content/docs/th/gitlab.mdx b/packages/web/src/content/docs/th/gitlab.mdx deleted file mode 100644 index 44bee1ddac..0000000000 --- a/packages/web/src/content/docs/th/gitlab.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: GitLab -description: ใช้ OpenCode ในปัญหา GitLab และรวมคำขอ ---- - -OpenCode ทำงานร่วมกับเวิร์กโฟลว์ GitLab ของคุณผ่านไปป์ไลน์ GitLab CI/CD หรือกับ GitLab Duo - -ในทั้งสองกรณี OpenCode จะทำงานบน GitLab runners ของคุณ - ---- - -## 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 และข้อความแจ้งเริ่มต้นเท่านั้น -- **ยืดหยุ่น**: ส่วนประกอบ CI รองรับอินพุตหลายอินพุตเพื่อปรับแต่งลักษณะการทำงาน - ---- - -### ตั้งค่า - -1. จัดเก็บการรับรองความถูกต้อง OpenCode ของคุณ JSON เป็นประเภทไฟล์ CI ตัวแปรสภาพแวดล้อมภายใต้ **การตั้งค่า** > **CI/CD** > **ตัวแปร** ตรวจสอบให้แน่ใจว่าได้ทำเครื่องหมายว่าเป็น "ปิดบังและซ่อนไว้" -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 ของคุณ - ---- - -### คุณสมบัติ - -- **Issue Triage**: ขอให้ 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. รับผู้ให้บริการโมเดล AI API คีย์ -4. สร้างบัญชีบริการ -5. กำหนดค่าตัวแปร CI/CD -6. สร้างไฟล์กำหนดค่าโฟลว์ ต่อไปนี้เป็นตัวอย่าง: - -
- - Flow configuration - - ```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. - - - 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. - - " - - 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 - ``` - -
- -คุณสามารถดูคำแนะนำโดยละเอียดได้ที่ [GitLab CLI agent docs](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 จะตรวจสอบคำขอรวมและให้ข้อเสนอแนะ diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx deleted file mode 100644 index 0ec4283224..0000000000 --- a/packages/web/src/content/docs/th/go.mdx +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: Go -description: การสมัครสมาชิกราคาประหยัดสำหรับโมเดลโอเพนซอร์สเพื่อการเขียนโค้ด ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Go คือการสมัครสมาชิกในราคาประหยัด — **$5 สำหรับเดือนแรก** จากนั้น **$10/เดือน** — ซึ่งให้คุณเข้าถึงโมเดลโอเพนซอร์สยอดนิยมสำหรับการเขียนโค้ดได้อย่างเสถียร - -Go ทำงานเหมือนกับผู้ให้บริการ (provider) รายอื่นๆ ใน OpenCode คุณสามารถสมัครสมาชิก OpenCode Go และรับ API key ของคุณ บริการนี้เป็น**ทางเลือกเพิ่มเติม** และคุณไม่จำเป็นต้องใช้มันเพื่อใช้งาน OpenCode - -บริการนี้ออกแบบมาเพื่อผู้ใช้ในระดับสากลเป็นหลัก โดยมีโมเดลโฮสต์อยู่ในสหรัฐอเมริกา สหภาพยุโรป และสิงคโปร์ เพื่อการเข้าถึงทั่วโลกที่เสถียร - ---- - -## Background - -โมเดลแบบเปิด (Open models) ได้รับการพัฒนาจนมีประสิทธิภาพดีมาก ตอนนี้ประสิทธิภาพในการเขียนโค้ดใกล้เคียงกับโมเดลแบบปิด (proprietary models) แล้ว และเนื่องจากมีผู้ให้บริการหลายรายสามารถให้บริการแข่งขันกันได้ จึงทำให้มีราคาถูกกว่ามาก - -อย่างไรก็ตาม การเข้าถึงโมเดลเหล่านี้อย่างเสถียรและมีค่า Latency ต่ำนั้นอาจเป็นเรื่องยาก ผู้ให้บริการแต่ละรายมีคุณภาพและความพร้อมในการให้บริการแตกต่างกันไป - -:::tip -เราได้ทดสอบกลุ่มโมเดลและผู้ให้บริการที่คัดเลือกมาเพื่อให้ทำงานร่วมกับ OpenCode ได้เป็นอย่างดี -::: - -เพื่อแก้ปัญหานี้ เราได้ดำเนินการดังต่อไปนี้: - -1. เราทดสอบกลุ่มโมเดลแบบเปิดที่คัดเลือกมาและพูดคุยกับทีมผู้พัฒนาเกี่ยวกับวิธีการรันโมเดลเหล่านี้ให้ดีที่สุด -2. จากนั้นเราได้ทำงานร่วมกับผู้ให้บริการบางรายเพื่อให้แน่ใจว่าการให้บริการเป็นไปอย่างถูกต้อง -3. สุดท้าย เราได้ทำการวัดประสิทธิภาพ (benchmark) ของการทำงานร่วมกันระหว่างโมเดลและผู้ให้บริการ จนได้รายชื่อที่เรามั่นใจในการแนะนำ - -OpenCode Go ให้คุณเข้าถึงโมเดลเหล่านี้ได้ในราคา **$5 สำหรับเดือนแรก** จากนั้น **$10/เดือน** - ---- - -## How it works - -OpenCode Go ทำงานเหมือนกับผู้ให้บริการรายอื่นๆ ใน OpenCode - -1. ลงชื่อเข้าใช้ที่ **OpenCode Zen**, สมัครสมาชิก Go และคัดลอก API key ของคุณ -2. รันคำสั่ง `/connect` ใน TUI, เลือก `OpenCode Go`, และวาง API key ของคุณ -3. รัน `/models` ใน TUI เพื่อดูรายชื่อโมเดลที่ใช้งานได้ผ่าน Go - -:::note -มีเพียงสมาชิกหนึ่งคนต่อ workspace เท่านั้นที่สามารถสมัครสมาชิก OpenCode Go ได้ -::: - -รายชื่อโมเดลในปัจจุบันประกอบด้วย: - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -รายชื่อโมเดลอาจมีการเปลี่ยนแปลงเมื่อเราทำการทดสอบและเพิ่มโมเดลใหม่ๆ - ---- - -## Usage limits - -OpenCode Go มีขีดจำกัดดังต่อไปนี้: - -- **ขีดจำกัดต่อ 5 ชั่วโมง** — การใช้งานมูลค่า $12 -- **ขีดจำกัดรายสัปดาห์** — การใช้งานมูลค่า $30 -- **ขีดจำกัดรายเดือน** — การใช้งานมูลค่า $60 - -ขีดจำกัดถูกกำหนดเป็นมูลค่าดอลลาร์ ซึ่งหมายความว่าจำนวน request จริงของคุณจะขึ้นอยู่กับโมเดลที่คุณใช้งาน โมเดลที่ราคาถูกกว่าอย่าง DeepSeek V4 Flash จะสามารถส่ง request ได้มากกว่า ในขณะที่โมเดลที่มีราคาสูงกว่าอย่าง GLM-5.2 จะส่งได้น้อยกว่า - -ตารางด้านล่างแสดงจำนวน request โดยประมาณตามรูปแบบการใช้งานปกติของ Go: - -| Model | requests ต่อ 5 ชั่วโมง | requests ต่อสัปดาห์ | requests ต่อเดือน | -| ----------------- | ---------------------- | ------------------- | ----------------- | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -การประมาณการนี้อ้างอิงจากรูปแบบการใช้งาน request โดยเฉลี่ยที่สังเกตพบ: - -- GLM-5.2/5.1 — 700 input, 52,000 cached, 150 output tokens ต่อ request -- Kimi K2.7 Code/K2.6 — 870 input, 55,000 cached, 200 output tokens ต่อ request -- DeepSeek V4 Pro — 750 input, 82,000 cached, 290 output tokens ต่อ request -- DeepSeek V4 Flash — 790 input, 68,000 cached, 280 output tokens ต่อ request -- MiniMax M3 — 510 input, 56,000 cached, 190 output tokens ต่อ request -- MiniMax M2.7 — 300 input, 55,000 cached, 125 output tokens ต่อ request -- Qwen3.7 Max — 420 input, 66,000 cached, 200 output tokens ต่อ request -- Qwen3.7 Plus — 500 input, 57,000 cached, 190 output tokens ต่อ request -- Qwen3.6 Plus — 500 input, 57,000 cached, 190 output tokens ต่อ request -- MiMo-V2.5 — 830 input, 71,500 cached, 295 output tokens ต่อ request -- MiMo-V2.5-Pro — 790 input, 86,000 cached, 305 output tokens ต่อ request - -การประมาณการนี้ยังอ้างอิงจากราคาต่อ 1M tokens ดังต่อไปนี้: - -| Model | Input | Output | Cached Read | Cached Write | -| ---------------------------- | ----- | ------ | ----------- | ------------ | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -คุณสามารถติดตามการใช้งานปัจจุบันของคุณได้ใน **console** - -:::tip -หากคุณใช้งานถึงขีดจำกัดแล้ว คุณยังสามารถใช้งานโมเดลฟรีต่อไปได้ -::: - -ขีดจำกัดการใช้งานอาจมีการเปลี่ยนแปลงเมื่อเราได้เรียนรู้จากการใช้งานในช่วงแรกและรับฟังข้อเสนอแนะ - ---- - -### Usage beyond limits - -หากคุณมีเครดิตในยอดเงินคงเหลือของ Zen ด้วย คุณสามารถเปิดใช้งานตัวเลือก **Use balance** ใน console เมื่อเปิดใช้งาน Go จะหันไปใช้ยอดเงินคงเหลือใน Zen ของคุณหลังจากที่คุณใช้งานถึงขีดจำกัดแล้วแทนที่จะบล็อก request - ---- - -## Endpoints - -คุณสามารถเข้าถึงโมเดลของ Go ผ่าน API endpoints ต่อไปนี้ได้เช่นกัน - -| Model | Model ID | Endpoint | AI SDK Package | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -[model id](/docs/config/#models) ใน OpenCode config ของคุณจะใช้รูปแบบ `opencode-go/` ตัวอย่างเช่น สำหรับ Kimi K2.7 Code คุณจะใช้ `opencode-go/kimi-k2.7-code` ใน config ของคุณ - ---- - -### Models - -คุณสามารถดึงรายการโมเดลทั้งหมดที่พร้อมใช้งานและ metadata ของมันได้จาก: - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## Privacy - -แพลนนี้ออกแบบมาสำหรับผู้ใช้ทั่วโลกเป็นหลัก โดยโฮสต์โมเดลไว้ใน US, EU และ Singapore เพื่อให้เข้าถึงได้อย่างเสถียรจากทั่วโลก ผู้ให้บริการของเราปฏิบัติตามนโยบาย zero-retention และไม่นำข้อมูลของคุณไปใช้ในการฝึกโมเดล - ---- - -## Goals - -เราสร้าง OpenCode Go เพื่อ: - -1. ทำให้การเขียนโค้ดด้วย AI **เข้าถึงได้** สำหรับผู้คนจำนวนมากขึ้นด้วยการสมัครสมาชิกในราคาประหยัด -2. มอบการเข้าถึงโมเดลโอเพนซอร์สสำหรับการเขียนโค้ดที่ดีที่สุดได้อย่าง**เสถียร** -3. คัดสรรโมเดลที่ผ่าน**การทดสอบและวัดประสิทธิภาพ**สำหรับการใช้งาน coding agent แล้ว -4. **ไม่ผูกขาดการใช้งาน (no lock-in)** โดยอนุญาตให้คุณใช้งานผู้ให้บริการรายอื่นๆ ร่วมกับ OpenCode ได้เช่นกัน diff --git a/packages/web/src/content/docs/th/ide.mdx b/packages/web/src/content/docs/th/ide.mdx deleted file mode 100644 index 5668048231..0000000000 --- a/packages/web/src/content/docs/th/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: IDE -description: ส่วนขยาย OpenCode สำหรับ VS Code, Cursor และ IDE อื่นๆ ---- - -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 ใน UI ได้ด้วย -- **การรับรู้บริบท**: แชร์การเลือกหรือแท็บปัจจุบันของคุณโดยอัตโนมัติด้วย 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 แล้วคลิก **ติดตั้ง** - ---- - -### การแก้ไขปัญหา - -หากส่วนขยายไม่สามารถติดตั้งได้โดยอัตโนมัติ: - -- ตรวจสอบให้แน่ใจว่าคุณใช้งาน `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 มีสิทธิ์ในการติดตั้งส่วนขยาย diff --git a/packages/web/src/content/docs/th/index.mdx b/packages/web/src/content/docs/th/index.mdx deleted file mode 100644 index 5336db3c9e..0000000000 --- a/packages/web/src/content/docs/th/index.mdx +++ /dev/null @@ -1,360 +0,0 @@ ---- -title: บทนำ -description: เริ่มต้นใช้งาน OpenCode ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" -import config from "../../../../config.mjs" -export const console = config.console - -[**OpenCode**](/) คือเอเจนต์การเข้ารหัส AI แบบโอเพ่นซอร์ส มีให้บริการในรูปแบบอินเทอร์เฟซบน terminal แอปเดสก์ท็อป หรือส่วนขยาย IDE - -![OpenCode TUI พร้อม opencode theme](../../../assets/lander/screenshot.png) - -มาเริ่มกันเลย - ---- - -#### ข้อกำหนดเบื้องต้น - -หากต้องการใช้ 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 Key สำหรับผู้ให้บริการ LLM ที่คุณต้องการใช้ - ---- - -## ติดตั้ง - -วิธีที่ง่ายที่สุดในการติดตั้ง OpenCode คือการใช้สคริปต์การติดตั้ง - -```bash -curl -fsSL https://opencode.ai/install | bash -``` - -คุณยังสามารถติดตั้งได้ด้วยคำสั่งต่อไปนี้: - -- **ใช้ Node.js** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **ใช้ Homebrew บน macOS และ Linux** - - ```bash - brew install anomalyco/tap/opencode - ``` - - > เราขอแนะนำให้ใช้ OpenCode tap เพื่อเผยแพร่ข้อมูลล่าสุด สูตร `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 สำหรับ 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 อยู่ระหว่างดำเนินการ - -คุณยังสามารถคว้าไบนารี่ได้จาก [เผยแพร่](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#ไดเรกทอรี) - ---- - -## เริ่มต้น - -เมื่อคุณได้กำหนดค่าผู้ให้บริการแล้ว คุณสามารถนำทางไปยังโปรเจ็กต์นั้นได้ -คุณอยากทำงานต่อ - -```bash -cd /path/to/project -``` - -และเรียกใช้ OpenCode - -```bash -opencode -``` - -จากนั้น เริ่มต้น OpenCode สำหรับโปรเจ็กต์โดยการรันคำสั่งต่อไปนี้ - -```bash frame="none" -/init -``` - -นี่จะได้รับ OpenCode เพื่อวิเคราะห์โครงการของคุณและสร้างไฟล์ `AGENTS.md` -รากของโครงการ - -:::tip -คุณควรคอมมิตไฟล์ `AGENTS.md` ของโปรเจ็กต์ของคุณไปที่ Git -::: - -ซึ่งจะช่วยให้ OpenCode เข้าใจโครงสร้างโปรเจ็กต์และรูปแบบการเขียนโค้ด -ใช้แล้ว. - ---- - -## การใช้งาน - -ตอนนี้คุณพร้อมที่จะใช้ OpenCode เพื่อทำงานในโครงการของคุณแล้ว อย่าลังเลที่จะถามมัน -อะไรก็ตาม! - -หากคุณยังใหม่ต่อการใช้เอเจนต์การเข้ารหัส AI ต่อไปนี้คือตัวอย่างบางส่วนที่อาจเป็นไปได้ -ช่วย. - ---- - -### ถามคำถาม - -คุณสามารถขอให้ OpenCode อธิบาย codebase ให้คุณได้ - -:::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_ ที่ปิดการใช้งานความสามารถในการเปลี่ยนแปลงและ - แนะนำ _how_ ว่าจะใช้งานฟีเจอร์นี้แทน - - เปลี่ยนไปใช้ปุ่ม **Tab** คุณจะเห็นตัวบ่งชี้นี้ที่มุมขวาล่าง - - ```bash frame="none" title="Switch to Plan mode" - - ``` - - ตอนนี้เรามาอธิบายสิ่งที่เราต้องการให้ทำ - - ```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 mode_ ภายใน - กดปุ่ม **Tab** อีกครั้ง - - ```bash frame="none" - - ``` - - และขอให้ทำการเปลี่ยนแปลง - - ```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? -``` - -จากที่นี่ คุณสามารถปรับแต่งข้อความแจ้งและขอให้ OpenCode ลองอีกครั้ง - -:::tip -คุณสามารถเรียกใช้ `/undo` ได้หลายครั้งเพื่อเลิกทำการเปลี่ยนแปลงหลายรายการ -::: - -หรือคุณสามารถ **สามารถทำซ้ำ** การเปลี่ยนแปลงโดยใช้คำสั่ง `/redo` - -```bash frame="none" -/redo -``` - ---- - -## แบ่งปัน - -การสนทนาที่คุณมีกับ OpenCode สามารถ [แชร์กับคุณได้ -ทีมงาน](/docs/share) - -```bash frame="none" -/share -``` - -การดำเนินการนี้จะสร้างลิงก์ไปยังการสนทนาปัจจุบันและคัดลอกไปยังคลิปบอร์ดของคุณ - -:::note -การสนทนาจะไม่ถูกแชร์โดยค่าเริ่มต้น -::: - -นี่คือ [ตัวอย่างการสนทนา](https://opencode.ai/s/4XP1fce5) กับ OpenCode - ---- - -## ปรับแต่ง - -แค่นั้นแหละ! ตอนนี้คุณเป็นมืออาชีพในการใช้ OpenCode แล้ว - -หากต้องการทำให้เป็นของคุณเอง เราขอแนะนำให้ [เลือกธีม](/docs/themes), [ปรับแต่งปุ่มลัด](/docs/keybinds), [กำหนดค่าตัวจัดรูปแบบโค้ด](/docs/formatters), [สร้างคำสั่งที่กำหนดเอง](/docs/commands) หรือลองใช้ [การกำหนดค่า OpenCode](/docs/config) diff --git a/packages/web/src/content/docs/th/keybinds.mdx b/packages/web/src/content/docs/th/keybinds.mdx deleted file mode 100644 index 2f5bcc5d74..0000000000 --- a/packages/web/src/content/docs/th/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: ปุ่มลัด -description: ปรับแต่งปุ่มลัดของคุณ ---- - -OpenCode มีรายการปุ่มลัดที่คุณปรับแต่งได้ผ่าน `tui.json` - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "h", - "display_thinking": "none" - } -} -``` - ---- - -## ปุ่ม Leader - -OpenCode ใช้ปุ่ม `leader` สำหรับการเชื่อมโยงคีย์ส่วนใหญ่ วิธีนี้จะหลีกเลี่ยงความขัดแย้งใน terminal ของคุณ - -ตามค่าเริ่มต้น `ctrl+x` จะเป็นปุ่ม leader และการดำเนินการส่วนใหญ่ต้องการให้คุณกดปุ่ม leader ก่อน จากนั้นจึงกดทางลัด ตัวอย่างเช่น หากต้องการเริ่มเซสชันใหม่ คุณต้องกด `ctrl+x` ก่อน จากนั้นจึงกด `n` - -คุณไม่จำเป็นต้องใช้ปุ่ม leader สำหรับการผูกคีย์ แต่เราขอแนะนำให้ทำเช่นนั้น - ---- - -## ปิดการใช้งานการผูกปุ่ม - -คุณสามารถปิดการใช้งานการผูกปุ่มได้โดยการเพิ่มคีย์ลงใน `tui.json` ด้วยค่า "none" - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "session_compact": "none" - } -} -``` - ---- - -## ทางลัดพร้อมท์เดสก์ท็อป - -การป้อนข้อมูลพร้อมท์ของแอป OpenCode บนเดสก์ท็อปรองรับทางลัด Readline/Emacs-style ทั่วไปสำหรับการแก้ไขข้อความ สิ่งเหล่านี้มีอยู่แล้วภายในและปัจจุบันไม่สามารถกำหนดค่าผ่าน `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 หรือเปิดแท็บใหม่ diff --git a/packages/web/src/content/docs/th/lsp.mdx b/packages/web/src/content/docs/th/lsp.mdx deleted file mode 100644 index 52d7980365..0000000000 --- a/packages/web/src/content/docs/th/lsp.mdx +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: LSP เซิร์ฟเวอร์ -description: OpenCode ทำงานร่วมกับเซิร์ฟเวอร์ LSP ของคุณ ---- - -OpenCode สามารถทำงานร่วมกับเซิร์ฟเวอร์ Language Server Protocol (LSP) เพื่อใช้ diagnostics เป็น feedback สำหรับ agent - ---- - -## บิวท์อิน - -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+)` ติดตั้งแล้ว | -| julials | .jl | ติดตั้ง `julia` และ `LanguageServer.jl` แล้ว | -| 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` (`xcode` บน macOS) | -| 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 | ติดตั้งเซิร์ฟเวอร์ภาษา Red Hat yaml โดยอัตโนมัติ | -| zls | .zig, .zon | `zig` คำสั่งใช้ได้ | - -LSP ปิดใช้งานเป็นค่าเริ่มต้น เมื่อเปิดใช้งาน เซิร์ฟเวอร์จะเริ่มทำงานเมื่อตรวจพบนามสกุลไฟล์ข้างต้นและเป็นไปตามข้อกำหนด - -:::note -คุณสามารถปิดใช้งานการดาวน์โหลดเซิร์ฟเวอร์ LSP อัตโนมัติได้โดยตั้งค่าตัวแปรสภาพแวดล้อม `OPENCODE_DISABLE_LSP_DOWNLOAD` เป็น `true` -::: - ---- - -## มันทำงานอย่างไร - -เมื่อเปิดใช้งาน LSP และ opencode เปิดไฟล์ มันจะ: - -1. ตรวจสอบนามสกุลไฟล์กับเซิร์ฟเวอร์ LSP ที่เปิดใช้งานทั้งหมด -2. เริ่มเซิร์ฟเวอร์ LSP ที่เหมาะสมหากยังไม่ได้ทำงาน - ---- - -## แนวทางปฏิบัติที่แนะนำ - -LSP สามารถช่วยให้ agent ค้นหาและแก้ไขปัญหาโดยให้ diagnostics จากเซิร์ฟเวอร์ภาษา สิ่งนี้มีประโยชน์ในบางโปรเจ็กต์ แต่ไม่ได้เป็นผลบวกเสมอไป - -เซิร์ฟเวอร์ภาษาอาจไม่ตรงกับสถานะโปรเจ็กต์ ใช้หน่วยความจำมาก แตกต่างกันตามเวอร์ชันหรือโปรเจ็กต์ และทำให้เวิร์กโฟลว์ของ agent ช้าลง ในหลายโปรเจ็กต์ การให้ agent รัน lint, typecheck หรือเครื่องมือ CLI สำหรับ diagnostics อื่นโดยตรงจะดีกว่า เพราะข้อผิดพลาดจะถูกส่งกลับเข้า loop ของ agent โดยไม่มีข้อแลกเปลี่ยนเหล่านี้ ระบุคำสั่งเหล่านี้ไว้ในไฟล์คำแนะนำ เช่น `AGENTS.md` หรือ skills เพื่อให้ agent รู้ว่าต้องรันอะไร เปิดใช้งาน LSP เมื่อโปรเจ็กต์ของคุณได้ประโยชน์จาก feedback เพิ่มเติมของเซิร์ฟเวอร์ภาษา - ---- - -## กำหนดค่า - -คุณสามารถเปิดใช้งานและปรับแต่งเซิร์ฟเวอร์ LSP ผ่านส่วน `lsp` ในการกำหนดค่า opencode - -หากต้องการเปิดใช้งานเซิร์ฟเวอร์ LSP ในตัวทั้งหมด ให้ตั้งค่า `lsp` เป็น `true` - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -ใช้อ็อบเจ็กต์เพื่อให้เซิร์ฟเวอร์ในตัวยังคงเปิดใช้งานอยู่ พร้อมกำหนดค่าการแทนที่หรือเซิร์ฟเวอร์แบบกำหนดเอง - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": {} -} -``` - -เซิร์ฟเวอร์ LSP แต่ละเซิร์ฟเวอร์รองรับสิ่งต่อไปนี้: - -| คุณสมบัติ | พิมพ์ | คำอธิบาย | -| ---------------- | ------- | ------------------------------------------------------ | -| `disabled` | บูลีน | ตั้งค่านี้เป็น `true` เพื่อปิดการใช้งานเซิร์ฟเวอร์ LSP | -| `command` | สตริง[] | คำสั่งเพื่อเริ่มต้นเซิร์ฟเวอร์ LSP | -| `extensions` | สตริง[] | นามสกุลไฟล์ที่เซิร์ฟเวอร์ LSP นี้ควรจัดการ | -| `env` | วัตถุ | ตัวแปรสภาพแวดล้อมที่จะตั้งค่าเมื่อเริ่มต้นเซิร์ฟเวอร์ | -| `initialization` | วัตถุ | ตัวเลือกการเริ่มต้นที่จะส่งไปยังเซิร์ฟเวอร์ 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 ทั้งหมดจะถูกปิดใช้งาน หากการกำหนดค่าอื่นเปิดใช้งาน LSP ไว้ ให้ตั้งค่า `lsp` เป็น `false` เพื่อปิดใช้งานเซิร์ฟเวอร์ LSP ทั้งหมด: - -```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 อินเทเลฟินส์ - -PHP Intelephense นำเสนอคุณสมบัติระดับพรีเมียมผ่านรหัสลิขสิทธิ์ คุณสามารถระบุรหัสสัญญาอนุญาตได้โดยการวาง (เท่านั้น) รหัสในไฟล์ข้อความที่: - -- บน macOS/Linux: `$HOME/intelephense/license.txt` -- บน Windows: `%USERPROFILE%/intelephense/license.txt` - -ไฟล์ควรมีเฉพาะรหัสลิขสิทธิ์โดยไม่มีเนื้อหาเพิ่มเติม diff --git a/packages/web/src/content/docs/th/mcp-servers.mdx b/packages/web/src/content/docs/th/mcp-servers.mdx deleted file mode 100644 index bd5a4365c3..0000000000 --- a/packages/web/src/content/docs/th/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -title: MCP เซิร์ฟเวอร์ -description: เพิ่มเครื่องมือ MCP ในพื้นที่และระยะไกล ---- - -คุณสามารถเพิ่มเครื่องมือภายนอกให้กับ OpenCode ได้โดยใช้ _Model Context Protocol_ หรือ MCP OpenCode รองรับทั้งเซิร์ฟเวอร์ภายในและเซิร์ฟเวอร์ระยะไกล - -เมื่อเพิ่มแล้ว เครื่องมือ MCP จะพร้อมใช้งานโดยอัตโนมัติสำหรับ LLM ควบคู่ไปกับเครื่องมือในตัว - ---- - -#### คำเตือน - -เมื่อคุณใช้เซิร์ฟเวอร์ MCP เซิร์ฟเวอร์ดังกล่าวจะเพิ่มบริบท สิ่งนี้สามารถเพิ่มขึ้นได้อย่างรวดเร็วหากคุณมีเครื่องมือมากมาย ดังนั้นเราขอแนะนำให้ระมัดระวังเซิร์ฟเวอร์ MCP ที่คุณใช้ - -:::tip -เซิร์ฟเวอร์ MCP เพิ่มในบริบทของคุณ ดังนั้นคุณจึงต้องระวังด้วยว่าเซิร์ฟเวอร์ใดที่คุณเปิดใช้งาน -::: - -เซิร์ฟเวอร์ MCP บางตัว เช่น เซิร์ฟเวอร์ GitHub MCP มีแนวโน้มที่จะเพิ่มโทเค็นจำนวนมากและอาจเกินขีดจำกัดบริบทได้อย่างง่ายดาย - ---- - -## เปิดใช้งาน - -คุณสามารถกำหนดเซิร์ฟเวอร์ MCP ได้ใน [OpenCode Config](https://opencode.ai/docs/config/) ภายใต้ `mcp` เพิ่ม 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 - } - } -} -``` - -ค่าการกำหนดค่าในเครื่องของคุณจะแทนที่ค่าเริ่มต้นระยะไกล ดู [config ลำดับความสำคัญ](/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", - }, - }, - }, -} -``` - -คำสั่งคือวิธีที่เซิร์ฟเวอร์ MCP ท้องถิ่นเริ่มทำงาน คุณยังสามารถส่งผ่านรายการตัวแปรสภาพแวดล้อมได้เช่นกัน - -ตัวอย่างเช่น นี่คือวิธีที่คุณสามารถเพิ่มการทดสอบเซิร์ฟเวอร์ [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP เซิร์ฟเวอร์ - -```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` | สตริง | ย | ประเภทของการเชื่อมต่อเซิร์ฟเวอร์ MCP ต้องเป็น `"local"` | -| `command` | อาร์เรย์ | ย | คำสั่งและอาร์กิวเมนต์เพื่อรันเซิร์ฟเวอร์ MCP | -| `environment` | วัตถุ | | ตัวแปรสภาพแวดล้อมที่จะตั้งค่าเมื่อรันเซิร์ฟเวอร์ | -| `enabled` | บูลีน | | เปิดหรือปิดใช้งานเซิร์ฟเวอร์ MCP เมื่อเริ่มต้นระบบ | -| `timeout` | ตัวเลข | | หมดเวลาเป็น ms สำหรับการดึงเครื่องมือจากเซิร์ฟเวอร์ MCP ค่าเริ่มต้นคือ 5,000 (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` คุณสามารถส่งผ่านรายการส่วนหัวได้ - ---- - -#### ตัวเลือก - -| ตัวเลือก | พิมพ์ | ที่จำเป็น | คำอธิบาย | -| --------- | ------ | --------- | --------------------------------------------------------------------------------------- | -| `type` | สตริง | ย | ประเภทของการเชื่อมต่อเซิร์ฟเวอร์ MCP ต้องเป็น `"remote"` | -| `url` | สตริง | ย | URL ของเซิร์ฟเวอร์ MCP ระยะไกล | -| `enabled` | บูลีน | | เปิดหรือปิดใช้งานเซิร์ฟเวอร์ MCP เมื่อเริ่มต้นระบบ | -| `headers` | วัตถุ | | ส่วนหัวที่จะส่งพร้อมกับคำขอ | -| `oauth` | วัตถุ | | การกำหนดค่าการตรวจสอบสิทธิ์ OAuth ดูส่วน [OAuth](#oauth) ด้านล่าง | -| `timeout` | ตัวเลข | | หมดเวลาเป็น ms สำหรับการดึงเครื่องมือจากเซิร์ฟเวอร์ MCP ค่าเริ่มต้นคือ 5,000 (5 วินาที) | - ---- - -## OAuth - -OpenCode จะจัดการการตรวจสอบสิทธิ์ OAuth สำหรับเซิร์ฟเวอร์ MCP ระยะไกลโดยอัตโนมัติ เมื่อเซิร์ฟเวอร์ต้องการการรับรองความถูกต้อง OpenCode จะ: - -1. ตรวจหาการตอบสนอง 401 และเริ่มโฟลว์ OAuth -2. ใช้ **การลงทะเบียนไคลเอ็นต์แบบไดนามิก (RFC 7591)** หากเซิร์ฟเวอร์รองรับ -3. จัดเก็บโทเค็นอย่างปลอดภัยสำหรับคำขอในอนาคต - ---- - -### อัตโนมัติ - -สำหรับเซิร์ฟเวอร์ 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 จะแจ้งให้คุณตรวจสอบความถูกต้องเมื่อคุณพยายามใช้งานครั้งแรก หากไม่เป็นเช่นนั้น คุณสามารถ[ทริกเกอร์โฟลว์ด้วยตนเอง](#การตรวจสอบสิทธิ์) ด้วย `opencode mcp auth ` - ---- - -### ลงทะเบียนล่วงหน้า - -หากคุณมีข้อมูลประจำตัวไคลเอ็นต์จากผู้ให้บริการเซิร์ฟเวอร์ 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` | วัตถุ \| เท็จ | ออบเจ็กต์การกำหนดค่า OAuth หรือ `false` เพื่อปิดใช้การตรวจจับอัตโนมัติของ OAuth | -| `clientId` | สตริง | รหัสไคลเอ็นต์ OAuth หากไม่ได้ระบุไว้ จะพยายามลงทะเบียนไคลเอ็นต์แบบไดนามิก | -| `clientSecret` | สตริง | ข้อมูลลับไคลเอ็นต์ OAuth หากเซิร์ฟเวอร์การให้สิทธิ์กำหนดไว้ | -| `scope` | สตริง | ขอบเขต OAuth ที่จะขอระหว่างการให้สิทธิ์ | - -#### การดีบัก - -หากเซิร์ฟเวอร์ MCP ระยะไกลไม่สามารถตรวจสอบสิทธิ์ได้ คุณสามารถวินิจฉัยปัญหาด้วย: - -```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 -``` - -คำสั่ง `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. ใน [agent config](/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 ใช้รูปแบบ globbing regex แบบง่าย: - -- `*` ตรงกับอักขระใดๆ ตั้งแต่ศูนย์ขึ้นไป (เช่น `"my-mcp*"` ตรงกับ `my-mcp_search`, `my-mcp_list` ฯลฯ) -- `?` ตรงกับอักขระหนึ่งตัวเท่านั้น -- อักขระอื่นๆ ทั้งหมดตรงกันอย่างแท้จริง - -:::note -MCP เครื่องมือเซิร์ฟเวอร์ได้รับการลงทะเบียนด้วยชื่อเซิร์ฟเวอร์เป็นคำนำหน้า ดังนั้นหากต้องการปิดการใช้งานเครื่องมือทั้งหมดสำหรับเซิร์ฟเวอร์ เพียงใช้: - -``` -"mymcpservername_*": false -``` - -::: - ---- - -## ตัวอย่าง - -ด้านล่างนี้เป็นตัวอย่างของเซิร์ฟเวอร์ MCP ทั่วไปบางส่วน คุณสามารถส่ง PR ได้ถ้าคุณต้องการจัดทำเอกสารเซิร์ฟเวอร์อื่น - ---- - -### Sentry - -เพิ่ม [เซิร์ฟเวอร์ Sentry MCP](https://mcp.sentry.dev) เพื่อโต้ตอบกับโครงการและปัญหา Sentry ของคุณ - -```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 - -เพิ่ม [Context7 MCP server](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` ในข้อความแจ้งของคุณเพื่อใช้เซิร์ฟเวอร์ Context7 MCP - -```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 - -เพิ่มเซิร์ฟเวอร์ [Grep by Vercel](https://grep.app) MCP เพื่อค้นหาผ่านข้อมูลโค้ดบน 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. -``` diff --git a/packages/web/src/content/docs/th/models.mdx b/packages/web/src/content/docs/th/models.mdx deleted file mode 100644 index 859aff4800..0000000000 --- a/packages/web/src/content/docs/th/models.mdx +++ /dev/null @@ -1,223 +0,0 @@ ---- -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" -} -``` - -ID แบบเต็มคือ `provider_id/model_id` ตัวอย่างเช่น หากคุณใช้ [OpenCode Zen](/docs/zen) คุณจะใช้ `opencode/gpt-5.1-codex` สำหรับ GPT 5.1 Codex - -หากคุณได้กำหนดค่า [ผู้ให้บริการที่กำหนดเอง](/docs/providers#กำหนดเอง) `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/#เพิ่มเติม) - -คุณยังสามารถกำหนดตัวแปรแบบกำหนดเองที่ขยายตัวแปรในตัวได้ ตัวแปรช่วยให้คุณกำหนดการตั้งค่าที่แตกต่างกันสำหรับรุ่นเดียวกันโดยไม่ต้องสร้างรายการที่ซ้ำกัน: - -```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", - }, - }, - }, - }, - }, - }, -} -``` - ---- - -## Variants (แบบ) - -โมเดลหลายตัวรองรับหลาย variants (รูปแบบย่อย) ที่มีการกำหนดค่าต่างกัน OpenCode มาพร้อมกับ variants เริ่มต้นในตัวสำหรับผู้ให้บริการยอดนิยม - -### Variants ในตัว (Built-in Variants) - -OpenCode มาพร้อมกับ variants เริ่มต้นสำหรับผู้ให้บริการหลายราย: - -**Anthropic**: - -- `high` - งบประมาณการคิดสูง (ค่าเริ่มต้น) -- `max` - งบประมาณการคิดสูงสุด - -**OpenAI**: - -แตกต่างกันไปตามรุ่น แต่โดยประมาณ: - -- `none` - ไม่ใช้การให้เหตุผล -- `minimal` - ความพยายามในการให้เหตุผลน้อยที่สุด -- `low` - ความพยายามในการให้เหตุผลต่ำ -- `medium` - ความพยายามในการให้เหตุผลปานกลาง -- `high` - ความพยายามในการให้เหตุผลสูง -- `xhigh` - ความพยายามในการให้เหตุผลสูงเป็นพิเศษ - -**Google**: - -- `low` - งบประมาณการคิดต่ำ/token ต่ำ -- `high` - งบประมาณการคิดสูง/token สูง - -:::tip -รายการนี้ไม่ครอบคลุมทั้งหมด ผู้ให้บริการรายอื่นหลายรายก็มีค่าเริ่มต้นในตัวเช่นกัน -::: - -### Variants แบบกำหนดเอง - -คุณสามารถแทนที่ variants ที่มีอยู่หรือเพิ่มของคุณเองได้: - -```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, - }, - }, - }, - }, - }, - }, -} -``` - -### การหมุนเวียน Variants - -ใช้ปุ่มลัด `variant_cycle` เพื่อสลับระหว่าง variants ต่างๆ อย่างรวดเร็ว [เรียนรู้เพิ่มเติม](/docs/keybinds) - ---- - -## กำลังโหลดโมเดล - -เมื่อ OpenCode เริ่มทำงาน ระบบจะตรวจสอบรุ่นตามลำดับความสำคัญต่อไปนี้: - -1. การตั้งค่าสถานะบรรทัดคำสั่ง `--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. รุ่นแรกที่ใช้ลำดับความสำคัญภายใน diff --git a/packages/web/src/content/docs/th/network.mdx b/packages/web/src/content/docs/th/network.mdx deleted file mode 100644 index 86e7f86131..0000000000 --- a/packages/web/src/content/docs/th/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: เครือข่าย -description: กำหนดค่าพร็อกซีและใบรับรองที่กำหนดเอง ---- - -OpenCode รองรับตัวแปรสภาพแวดล้อมพร็อกซีมาตรฐานและใบรับรองที่กำหนดเองสำหรับสภาพแวดล้อมเครือข่ายองค์กร - ---- - -## พร็อกซี - -OpenCode เคารพตัวแปรสภาพแวดล้อมพร็อกซีมาตรฐาน - -```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 สื่อสารกับเซิร์ฟเวอร์ HTTP ในพื้นที่ คุณต้องข้ามพร็อกซีสำหรับการเชื่อมต่อนี้เพื่อป้องกันการกำหนดเส้นทางวนซ้ำ -::: - -คุณสามารถกำหนดค่าพอร์ตของเซิร์ฟเวอร์และชื่อโฮสต์ได้โดยใช้ [CLI flags](/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 -``` - -ซึ่งใช้ได้กับทั้งการเชื่อมต่อพร็อกซีและการเข้าถึง API โดยตรง diff --git a/packages/web/src/content/docs/th/permissions.mdx b/packages/web/src/content/docs/th/permissions.mdx deleted file mode 100644 index 55457ec563..0000000000 --- a/packages/web/src/content/docs/th/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -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" - } - } -} -``` - -กฎจะได้รับการประเมินโดยการจับคู่รูปแบบ โดย **กฎการจับคู่สุดท้ายจะชนะ** รูปแบบทั่วไปคือการใส่กฎ catch-all `"*"` ก่อน และใส่กฎที่เฉพาะเจาะจงมากขึ้นหลังจากนั้น - -### สัญลักษณ์แทน - -รูปแบบการอนุญาตใช้การจับคู่ไวด์การ์ดแบบง่าย: - -- `*` จับคู่อักขระใดๆ ตั้งแต่ศูนย์ขึ้นไป -- `?` ตรงกับอักขระหนึ่งตัวเท่านั้น -- อักขระอื่นๆ ทั้งหมดตรงกันอย่างแท้จริง - -### การขยายโฮมไดเร็กทอรี - -คุณสามารถใช้ `~` หรือ `$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" - } - } -} -``` - -ให้รายการมุ่งเน้นไปที่เส้นทางที่เชื่อถือได้ และเลเยอร์อนุญาตหรือปฏิเสธกฎเพิ่มเติมตามที่จำเป็นสำหรับเครื่องมืออื่นๆ (เช่น `bash`) - ---- - -## สิทธิ์ที่มีอยู่ - -สิทธิ์ของ OpenCode จะกำหนดไว้ตามชื่อเครื่องมือ พร้อมด้วย guardrails อีก 2-3 คน: - -- `read` — อ่านไฟล์ (ตรงกับเส้นทางของไฟล์) -- `edit` — การแก้ไขไฟล์ทั้งหมด (ครอบคลุมถึง `edit`, `write`, `patch`) -- `glob` — ไฟล์ globbing (ตรงกับรูปแบบ glob) -- `grep` — การค้นหาเนื้อหา (ตรงกับรูปแบบ regex) -- `bash` — การรันคำสั่ง shell (ตรงกับคำสั่งที่แยกวิเคราะห์เช่น `git status --porcelain`) -- `task` — การเปิดตัวตัวแทนย่อย (ตรงกับประเภทตัวแทนย่อย) -- `skill` — กำลังโหลดทักษะ (ตรงกับชื่อทักษะ) -- `lsp` — กำลังเรียกใช้คำสั่ง LSP (ปัจจุบันยังไม่ละเอียด) -- `webfetch` — กำลังดึง URL (ตรงกับ URL) -- `websearch` — การค้นหาเว็บ (ตรงกับข้อความค้นหา) -- `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" - } - } -} -``` - ---- - -## สิ่งที่ "ถาม" ทำ - -เมื่อ OpenCode แจ้งให้อนุมัติ UI จะเสนอผลลัพธ์สามประการ: - -- `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 *"`) เมื่ออาร์กิวเมนต์ถูกส่งผ่าน -::: diff --git a/packages/web/src/content/docs/th/plugins.mdx b/packages/web/src/content/docs/th/plugins.mdx deleted file mode 100644 index e672715a4e..0000000000 --- a/packages/web/src/content/docs/th/plugins.mdx +++ /dev/null @@ -1,389 +0,0 @@ ---- -title: ปลั๊กอิน -description: เขียนปลั๊กอินของคุณเองเพื่อขยาย OpenCode ---- - -ปลั๊กอินช่วยให้คุณสามารถขยาย OpenCode ได้โดยเชื่อมโยงกับเหตุการณ์ต่างๆ และปรับแต่งลักษณะการทำงาน คุณสามารถสร้างปลั๊กอินเพื่อเพิ่มคุณสมบัติใหม่ บูรณาการกับบริการภายนอก หรือแก้ไขการทำงานเริ่มต้นของ OpenCode - -ตัวอย่างเช่น ลองดู [ปลั๊กอิน](/docs/ecosystem#ปลั๊กอิน) ที่สร้างโดยชุมชน - ---- - -## ใช้ปลั๊กอิน - -มีสองวิธีในการโหลดปลั๊กอิน - ---- - -### จากไฟล์ในเครื่อง - -วางไฟล์ 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 ทั้งแบบปกติและแบบกำหนดขอบเขต - -เรียกดูปลั๊กอินที่มีอยู่ใน [ระบบนิเวศ](/docs/ecosystem#plugins) - ---- - -### วิธีการติดตั้งปลั๊กอิน - -**ปลั๊กอิน npm** ได้รับการติดตั้งโดยอัตโนมัติโดยใช้ Bun เมื่อเริ่มต้น แพ็คเกจและการขึ้นต่อกันถูกแคชไว้ใน `~/.cache/opencode/node_modules/` - -**ปลั๊กอินท้องถิ่น** โหลดโดยตรงจากไดเร็กทอรีปลั๊กอิน หากต้องการใช้แพ็คเกจภายนอก คุณต้องสร้าง `package.json` ภายในไดเร็กทอรีการกำหนดค่าของคุณ (ดู [การพึ่งพา](#dependencies)) หรือเผยแพร่ปลั๊กอินไปที่ npm และ [เพิ่มลงในการกำหนดค่าของคุณ](/docs/config#plugins) - ---- - -### โหลดออเดอร์ - -ปลั๊กอินถูกโหลดจากทุกแหล่งและ hooks ทั้งหมดทำงานตามลำดับ ลำดับการโหลดคือ: - -1. การกำหนดค่าส่วนกลาง (`~/.config/opencode/opencode.json`) -2. การกำหนดค่าโครงการ (`opencode.json`) -3. ไดเร็กทอรีปลั๊กอินสากล (`~/.config/opencode/plugins/`) -4. ไดเรกทอรีปลั๊กอินโครงการ (`.opencode/plugins/`) - -แพ็กเกจ npm ที่ซ้ำกันซึ่งมีชื่อและเวอร์ชันเดียวกันจะถูกโหลดหนึ่งครั้ง อย่างไรก็ตาม ทั้งปลั๊กอินในเครื่องและปลั๊กอิน npm ที่มีชื่อคล้ายกันจะโหลดแยกกัน - ---- - -## สร้างปลั๊กอิน - -ปลั๊กอินคือ **JavaScript/TypeScript module** ที่ส่งออกปลั๊กอินอย่างน้อยหนึ่งรายการ -ฟังก์ชั่น แต่ละฟังก์ชันได้รับวัตถุบริบทและส่งกลับวัตถุ hooks - ---- - -### การพึ่งพาอาศัยกัน - -ปลั๊กอินท้องถิ่นและเครื่องมือแบบกำหนดเองสามารถใช้แพ็คเกจ npm ภายนอกได้ เพิ่ม `package.json` ลงในไดเร็กทอรี config ของคุณด้วยการอ้างอิงที่คุณต้องการ - -```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`: เส้นทางเวิร์กทรีคอมไพล์ -- `client`: ไคลเอนต์ opencode SDK สำหรับการโต้ตอบกับ AI -- `$`: [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.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 ทั้งหมด (เครื่องมือ AI และ 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 schema และส่งกลับคำจำกัดความของเครื่องมือด้วย: - -- `description`: เครื่องมือนี้ทำอะไร -- `args`: Zod schema สำหรับข้อโต้แย้งของเครื่องมือ -- `execute`: ฟังก์ชั่นที่ทำงานเมื่อมีการเรียกใช้เครื่องมือ - -เครื่องมือที่คุณกำหนดเองจะพร้อมใช้งานสำหรับ opencode ควบคู่ไปกับเครื่องมือในตัว - -:::note -หากเครื่องมือปลั๊กอินใช้ชื่อเดียวกับเครื่องมือในตัว เครื่องมือปลั๊กอินจะมีความสำคัญเหนือกว่า -::: - ---- - -### การบันทึก - -ใช้ `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)สำหรับรายละเอียด - ---- - -### Hooks สำหรับการกระชับข้อมูล - -ปรับแต่งบริบทที่รวมไว้เมื่อมีการกระชับเซสชัน: - -```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` hook เริ่มทำงานก่อนที่ 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` จะถูกละเว้นในกรณีนี้ diff --git a/packages/web/src/content/docs/th/providers.mdx b/packages/web/src/content/docs/th/providers.mdx deleted file mode 100644 index 07008de218..0000000000 --- a/packages/web/src/content/docs/th/providers.mdx +++ /dev/null @@ -1,2532 +0,0 @@ ---- -title: ผู้ให้บริการ -description: ใช้ผู้ให้บริการ LLM ใน OpenCode ---- - -import config from "../../../../config.mjs" -export const console = config.console - -OpenCode ใช้ [AI SDK](https://ai-sdk.dev/) และ [Models.dev](https://models.dev) เพื่อรองรับผู้ให้บริการ **75+ LLM** และรองรับการใช้งานโมเดลท้องถิ่น - -หากต้องการเพิ่มผู้ให้บริการ คุณต้อง: - -1. เพิ่มคีย์ API สำหรับผู้ให้บริการโดยใช้คำสั่ง `/connect` -2. กำหนดค่าผู้ให้บริการในการกำหนดค่า OpenCode ของคุณ - ---- - -### ข้อมูลรับรอง - -เมื่อคุณเพิ่มคีย์ API ของผู้ให้บริการด้วยคำสั่ง `/connect` คีย์เหล่านั้นจะถูกเก็บไว้ -ใน `~/.local/share/opencode/auth.json`. - ---- - -### การกำหนดค่า - -คุณสามารถปรับแต่งผู้ให้บริการได้ผ่านทางส่วน `provider` ใน OpenCode ของคุณ -กำหนดค่า - ---- - -#### Base URL (URL พื้นฐาน) - -คุณสามารถปรับแต่งฐาน URL สำหรับผู้ให้บริการรายใดก็ได้โดยตั้งค่าตัวเลือก `baseURL` สิ่งนี้มีประโยชน์เมื่อใช้บริการพร็อกซีหรือจุดสิ้นสุดแบบกำหนดเอง - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen คือรายชื่อโมเดลที่จัดทำโดยทีมงาน OpenCode ที่ได้รับ -ทดสอบและตรวจสอบแล้วว่าทำงานได้ดีกับ OpenCode [เรียนรู้เพิ่มเติม](/docs/zen) - -:::tip -หากคุณยังใหม่ เราขอแนะนำให้เริ่มต้นด้วย OpenCode Zen -::: - -1. เรียกใช้คำสั่ง `/connect` ใน TUI เลือก opencode และไปที่ [opencode.ai/auth](https://opencode.ai/auth) - - ```txt - /connect - ``` - -2. ลงชื่อเข้าใช้ เพิ่มรายละเอียดการเรียกเก็บเงินของคุณ และคัดลอกรหัส API ของคุณ - -3. วางคีย์ API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. เรียกใช้ `/models` ใน TUI เพื่อดูรายการรุ่นที่เราแนะนำ - - ```txt - /models - ``` - -มันทำงานเหมือนกับผู้ให้บริการรายอื่นใน OpenCode และเป็นทางเลือกในการใช้งานโดยสมบูรณ์ - ---- - -## OpenCode Go - -OpenCode Go คือแผนการสมัครสมาชิกราคาประหยัดที่ให้การเข้าถึงโมเดลการเขียนโค้ดแบบเปิดยอดนิยมที่เชื่อถือได้ ซึ่งจัดเตรียมโดยทีมงาน OpenCode ที่ได้รับการทดสอบและตรวจสอบแล้วว่าทำงานได้ดีกับ OpenCode - -1. เรียกใช้คำสั่ง `/connect` ใน TUI เลือก `OpenCode Go` และไปที่ [opencode.ai/auth](https://opencode.ai/zen) - - ```txt - /connect - ``` - -2. ลงชื่อเข้าใช้ เพิ่มรายละเอียดการเรียกเก็บเงินของคุณ และคัดลอกรหัส API ของคุณ - -3. วางคีย์ API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. เรียกใช้ `/models` ใน TUI เพื่อดูรายการรุ่นที่เราแนะนำ - - ```txt - /models - ``` - -มันทำงานเหมือนกับผู้ให้บริการรายอื่นใน OpenCode และเป็นทางเลือกในการใช้งานโดยสมบูรณ์ - ---- - -## ไดเรกทอรี - -มาดูรายละเอียดผู้ให้บริการบางรายกัน หากคุณต้องการเพิ่มผู้ให้บริการให้กับ -รายการอย่าลังเลที่จะเปิดประชาสัมพันธ์ - -:::note -ไม่เห็นผู้ให้บริการที่นี่ใช่ไหม ส่งพีอาร์. -::: - ---- - -### 302.AI - -1. ไปที่ [302.AI console](https://302.ai/) สร้างบัญชี และสร้างคีย์ API - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **302.AI** - - ```txt - /connect - ``` - -3. ป้อนคีย์ 302.AI API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกรุ่น - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -วิธีใช้ Amazon Bedrock กับ OpenCode: - -1. ไปที่ **แค็ตตาล็อกโมเดล** ในคอนโซล Amazon Bedrock และขอ - เข้าถึงโมเดลที่คุณต้องการ - - :::tip - คุณต้องมีสิทธิ์เข้าถึงโมเดลที่คุณต้องการใน Amazon Bedrock - ::: - -2. **กำหนดค่าการตรวจสอบสิทธิ์** โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้: - - #### ตัวแปรสภาพแวดล้อม (เริ่มต้นอย่างรวดเร็ว) - - ตั้งค่าหนึ่งในตัวแปรสภาพแวดล้อมเหล่านี้ขณะเรียกใช้ opencode: - - ```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - หรือเพิ่มลงในโปรไฟล์ทุบตีของคุณ: - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - #### ไฟล์การกำหนดค่า (แนะนำ) - - สำหรับการกำหนดค่าเฉพาะโครงการหรือแบบถาวร ให้ใช้ `opencode.json`: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **ตัวเลือกที่มี:** - - `region` - ​​AWS ภูมิภาค (เช่น `us-east-1`, `eu-west-1`) - - `profile` - ​​AWS ตั้งชื่อโปรไฟล์จาก `~/.aws/credentials` - - `endpoint` - ​​จุดสิ้นสุดที่กำหนดเอง URL สำหรับ VPC จุดสิ้นสุด (นามแฝงสำหรับตัวเลือก `baseURL` ทั่วไป) - - :::tip - ตัวเลือกไฟล์การกำหนดค่ามีความสำคัญเหนือกว่าตัวแปรสภาพแวดล้อม - ::: - - #### ขั้นสูง: VPC จุดสิ้นสุด - - หากคุณใช้จุดสิ้นสุด VPC สำหรับ Bedrock: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } - } - ``` - - :::note - ตัวเลือก `endpoint` เป็นนามแฝงสำหรับตัวเลือก `baseURL` ทั่วไป โดยใช้คำศัพท์เฉพาะ AWS หากมีการระบุทั้ง `endpoint` และ `baseURL` `endpoint` จะมีความสำคัญเหนือกว่า - ::: - - #### วิธีการรับรองความถูกต้อง - - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: สร้างผู้ใช้ IAM และสร้างคีย์การเข้าถึงในคอนโซล AWS - - **`AWS_PROFILE`**: ใช้โปรไฟล์ที่มีชื่อจาก `~/.aws/credentials` ขั้นแรกให้กำหนดค่าด้วย `aws configure --profile my-profile` หรือ `aws sso login` - - **`AWS_BEARER_TOKEN_BEDROCK`**: สร้างคีย์ API ระยะยาวจากคอนโซล Amazon Bedrock - - **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**: สำหรับ EKS IRSA (IAM บทบาทสำหรับบัญชีบริการ) หรือสภาพแวดล้อม Kubernetes อื่นๆ ที่มีการเชื่อมโยง OIDC Kubernetes แทรกตัวแปรสภาพแวดล้อมเหล่านี้โดยอัตโนมัติเมื่อใช้คำอธิบายประกอบของบัญชีบริการ - - #### ลำดับความสำคัญของการรับรองความถูกต้อง - - Amazon Bedrock ใช้ลำดับความสำคัญในการรับรองความถูกต้องต่อไปนี้: - 1. **Bearer Token** - `AWS_BEARER_TOKEN_BEDROCK` ตัวแปรสภาพแวดล้อมหรือโทเค็นจากคำสั่ง `/connect` - 2. **AWS Credential Chain** - โปรไฟล์, คีย์การเข้าถึง, ข้อมูลประจำตัวที่แชร์, บทบาท IAM, โทเค็นข้อมูลประจำตัวของเว็บ (EKS IRSA), ข้อมูลเมตาของอินสแตนซ์ - - :::note - เมื่อตั้งค่าBearer Token (ผ่าน `/connect` หรือ `AWS_BEARER_TOKEN_BEDROCK`) โทเค็นนั้นจะมีความสำคัญเหนือกว่าวิธีการข้อมูลประจำตัว AWS ทั้งหมด รวมถึงโปรไฟล์ที่กำหนดค่าไว้ - ::: - -3. รันคำสั่ง `/models` เพื่อเลือกรุ่นที่ต้องการ - - ```txt - /models - ``` - -:::note -สำหรับโปรไฟล์การอนุมานแบบกำหนดเอง ให้ใช้ชื่อรุ่นและผู้ให้บริการในคีย์และตั้งค่าคุณสมบัติ `id` เป็น arn สิ่งนี้ทำให้มั่นใจได้ว่าแคชถูกต้อง: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - -::: - ---- - -### Anthropic - -1. เมื่อคุณสมัครแล้ว ให้รันคำสั่ง `/connect` และเลือก Anthropic - - ```txt - /connect - ``` - -2. ที่นี่คุณสามารถเลือกตัวเลือก **Claude Pro/Max** และมันจะเปิดเบราว์เซอร์ของคุณ - และขอให้คุณตรวจสอบสิทธิ์ - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. ตอนนี้โมเดล Anthropic ทั้งหมดควรจะพร้อมใช้งานเมื่อคุณใช้คำสั่ง `/models` - - ```txt - /models - ``` - -:::info -การใช้การสมัครสมาชิก Claude Pro/Max ใน OpenCode ไม่ได้รับการสนับสนุนอย่างเป็นทางการจาก [Anthropic](https://anthropic.com) -::: - -##### การใช้ API Key - -คุณยังสามารถเลือก **สร้าง API คีย์** หากคุณไม่มีการสมัครสมาชิก Pro/Max นอกจากนี้ยังจะเปิดเบราว์เซอร์ของคุณและขอให้คุณเข้าสู่ระบบ Anthropic และให้รหัสที่คุณสามารถวางใน terminal ของคุณ - -หรือหากคุณมีคีย์ API อยู่แล้ว คุณสามารถเลือก **ป้อนคีย์ API ด้วยตนเอง** และวางลงใน terminal ของคุณ - ---- - -### Atomic Chat - -คุณสามารถกำหนดค่า opencode ให้ใช้โมเดลท้องถิ่นผ่าน [Atomic Chat](https://atomic.chat) ซึ่งเป็นแอปพลิเคชันเดสก์ท็อปที่เรียกใช้ LLM ในเครื่องภายใต้เซิร์ฟเวอร์ API ที่เข้ากันได้กับ OpenAI (ปลายทางเริ่มต้น `http://127.0.0.1:1337/v1`) - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -ในตัวอย่างนี้: - -- `atomic-chat` คือรหัสผู้ให้บริการที่กำหนดเอง สามารถเป็นสตริงใดก็ได้ที่คุณต้องการ -- `npm` ระบุแพ็กเกจที่จะใช้สำหรับผู้ให้บริการนี้ ที่นี่ใช้ `@ai-sdk/openai-compatible` สำหรับ API ใดๆ ที่เข้ากันได้กับ OpenAI -- `name` คือชื่อแสดงของผู้ให้บริการในอินเทอร์เฟซ -- `options.baseURL` คือปลายทางของเซิร์ฟเวอร์ท้องถิ่น เปลี่ยนโฮสต์และพอร์ตให้ตรงกับการตั้งค่า Atomic Chat ของคุณ -- `models` คือแผนที่ระหว่างรหัสโมเดลกับชื่อแสดง แต่ละรหัสต้องตรงกับ `id` ที่ส่งคืนโดย `GET /v1/models` — รัน `curl http://127.0.0.1:1337/v1/models` เพื่อแสดงรายการรหัสที่โหลดอยู่ใน Atomic Chat - -:::tip -หากการเรียกเครื่องมือทำงานได้ไม่ดี ให้เลือกโมเดลที่โหลดแล้วซึ่งรองรับ tool calling ได้ดี (ตัวอย่างเช่น รุ่น Qwen-Coder หรือ DeepSeek-Coder) -::: - ---- - -### Azure OpenAI - -:::note -หากคุณพบข้อผิดพลาด "ฉันขอโทษ แต่ฉันไม่สามารถช่วยเหลือคำขอนั้นได้" ให้ลองเปลี่ยนตัวกรองเนื้อหาจาก **DefaultV2** เป็น **Default** ในทรัพยากร Azure ของคุณ -::: - -1. ไปที่ [พอร์ทัล Azure](https://portal.azure.com/) และสร้างทรัพยากร **Azure OpenAI** คุณจะต้องการ: - - **ชื่อทรัพยากร**: นี่จะกลายเป็นส่วนหนึ่งของจุดสิ้นสุด API ของคุณ (`https://RESOURCE_NAME.openai.azure.com/`) - - **API key**: `KEY 1` หรือ `KEY 2` จากทรัพยากรของคุณ - -2. ไปที่ [Azure AI Foundry](https://ai.azure.com/) และปรับใช้โมเดล - - :::note - ชื่อการปรับใช้จะต้องตรงกับชื่อรุ่นเพื่อให้ opencode ทำงานได้อย่างถูกต้อง - ::: - -3. เรียกใช้คำสั่ง `/connect` และค้นหา **Azure** - - ```txt - /connect - ``` - -4. ป้อน API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. ตั้งชื่อทรัพยากรของคุณเป็นตัวแปรสภาพแวดล้อม: - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - - หรือเพิ่มลงในโปรไฟล์ทุบตีของคุณ: - - ```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX - ``` - -6. รันคำสั่ง `/models` เพื่อเลือกโมเดลที่ปรับใช้ของคุณ - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. ไปที่ [พอร์ทัล Azure](https://portal.azure.com/) และสร้างทรัพยากร **Azure OpenAI** คุณจะต้องการ: - - **ชื่อทรัพยากร**: นี่จะกลายเป็นส่วนหนึ่งของจุดสิ้นสุด API ของคุณ (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) - - **API key**: `KEY 1` หรือ `KEY 2` จากทรัพยากรของคุณ - -2. ไปที่ [Azure AI Foundry](https://ai.azure.com/) และปรับใช้โมเดล - - :::note - ชื่อการปรับใช้จะต้องตรงกับชื่อรุ่นเพื่อให้ opencode ทำงานได้อย่างถูกต้อง - ::: - -3. เรียกใช้คำสั่ง `/connect` และค้นหา **Azure Cognitive Services** - - ```txt - /connect - ``` - -4. ป้อน API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. ตั้งชื่อทรัพยากรของคุณเป็นตัวแปรสภาพแวดล้อม: - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - - หรือเพิ่มลงในโปรไฟล์ทุบตีของคุณ: - - ```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX - ``` - -6. รันคำสั่ง `/models` เพื่อเลือกโมเดลที่ปรับใช้ของคุณ - - ```txt - /models - ``` - ---- - -### Baseten - -1. ไปที่ [Baseten](https://app.baseten.co/) สร้างบัญชี และสร้างคีย์ API - -2. รันคำสั่ง `/connect` และค้นหา **Baseten** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Baseten API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกรุ่น - - ```txt - /models - ``` - ---- - -### Cerebras - -1. ไปที่ [คอนโซล Cerebras](https://inference.cerebras.ai/) สร้างบัญชี และสร้างคีย์ API - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **Cerebras** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Cerebras API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกรุ่นเช่น _Qwen 3 Coder 480B_ - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -Cloudflare AI Gateway ช่วยให้คุณเข้าถึงโมเดลจาก OpenAI, Anthropic, Workers AI และอื่นๆ อีกมากมายผ่านตำแหน่งข้อมูลแบบรวม ด้วย [การเรียกเก็บเงินแบบรวม](https://developers.cloudflare.com/ai-gateway/features/unified-billing/) คุณไม่จำเป็นต้องใช้คีย์ API แยกต่างหากสำหรับผู้ให้บริการแต่ละราย - -1. ไปที่ [แดชบอร์ด Cloudflare](https://dash.cloudflare.com/) ไปที่ **AI** > **AI Gateway** และสร้างเกตเวย์ใหม่ - -2. ตั้งค่ารหัสบัญชีและรหัสเกตเวย์ของคุณเป็นตัวแปรสภาพแวดล้อม - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. รันคำสั่ง `/connect` และค้นหา **Cloudflare AI Gateway** - - ```txt - /connect - ``` - -4. ป้อน Cloudflare API Token ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - - หรือตั้งเป็นตัวแปรสภาพแวดล้อม - - ```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token - ``` - -5. รันคำสั่ง `/models` เพื่อเลือกรุ่น - - ```txt - /models - ``` - - คุณยังสามารถเพิ่มโมเดลผ่านการกำหนดค่า opencode ของคุณได้ - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } - } - ``` - ---- - -### Cortecs - -1. ไปที่ [คอนโซล Cortecs](https://cortecs.ai/) สร้างบัญชี และสร้างคีย์ API - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **Cortecs** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Cortecs API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Kimi K2 Instruct_ - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. ไปที่ [คอนโซล DeepSeek](https://platform.deepseek.com/) สร้างบัญชี แล้วคลิก **สร้างคีย์ API ใหม่** - -2. รันคำสั่ง `/connect` และค้นหา **DeepSeek** - - ```txt - /connect - ``` - -3. ป้อนคีย์ DeepSeek API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดล DeepSeek เช่น _DeepSeek V4 Pro_ - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. ไปที่ [แดชบอร์ด Deep Infra](https://deepinfra.com/dash) สร้างบัญชี และสร้างคีย์ API - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **Deep Infra** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Deep Infra API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกรุ่น - - ```txt - /models - ``` - ---- - -### FrogBot - -1. ไปที่ [แดชบอร์ด FrogBot](https://app.frogbot.ai/signup) สร้างบัญชี และสร้างคีย์ API - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **FrogBot** - - ```txt - /connect - ``` - -3. ป้อนคีย์ FrogBot API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกรุ่น - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. ไปที่ [คอนโซล Fireworks AI](https://app.fireworks.ai/) สร้างบัญชี แล้วคลิก **Create API Key** - -2. รันคำสั่ง `/connect` และค้นหา **Fireworks AI** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Fireworks AI API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Kimi K2 Instruct_ - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo ให้การแชทแบบเอเจนต์ที่ขับเคลื่อนด้วย AI พร้อมความสามารถในการเรียกใช้เครื่องมือแบบเนทีฟผ่านพร็อกซี Anthropic ของ GitLab - -1. รันคำสั่ง `/connect` และเลือก GitLab - - ```txt - /connect - ``` - -2. เลือกวิธีการรับรองความถูกต้องของคุณ: - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### การใช้ OAuth (แนะนำ) - - เลือก **OAuth** และเบราว์เซอร์ของคุณจะเปิดขึ้นเพื่อรับสิทธิ์ - -#### การใช้ Personal Access Token - -1. ไปที่ [GitLab User Settings > Access Tokens](https://gitlab.com/-/user_settings/personal_access_tokens) -2. คลิก **เพิ่มโทเค็นใหม่** -3. ชื่อ: `OpenCode`, ขอบเขต: `api` -4. คัดลอกโทเค็น (เริ่มต้นด้วย `glpat-`) -5. ป้อนลงใน terminal - -6. รันคำสั่ง `/models` เพื่อดูรุ่นที่มีจำหน่าย - - ```txt - /models - ``` - - มีโมเดลที่ใช้ Claude สามรุ่นให้เลือก: - - **duo-chat-haiku-4-5** (ค่าเริ่มต้น) - ตอบสนองรวดเร็วสำหรับงานด่วน - - **duo-chat-sonnet-4-5** - ประสิทธิภาพที่สมดุลสำหรับขั้นตอนการทำงานส่วนใหญ่ - - **duo-chat-opus-4-5** - มีความสามารถมากที่สุดสำหรับการวิเคราะห์ที่ซับซ้อน - -:::note -คุณยังสามารถระบุตัวแปรสภาพแวดล้อม 'GITLAB_TOKEN' ได้หากคุณไม่ต้องการ -เพื่อจัดเก็บโทเค็นในที่เก็บข้อมูลการรับรองความถูกต้องของ opencode -::: - -##### GitLab ที่โฮสต์เอง - -:::note[บันทึกการปฏิบัติตาม] -OpenCode ใช้โมเดลขนาดเล็กสำหรับงาน AI บางอย่าง เช่น การสร้างชื่อเซสชัน -มีการกำหนดค่าให้ใช้ gpt-5-nano ตามค่าเริ่มต้น ซึ่งโฮสต์โดย Zen เพื่อล็อค OpenCode -หากต้องการใช้เฉพาะอินสแตนซ์ที่โฮสต์บน GitLab ของคุณเอง ให้เพิ่มสิ่งต่อไปนี้ในของคุณ -`opencode.json` ไฟล์. ขอแนะนำให้ปิดใช้งานการแชร์เซสชันด้วย - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -สำหรับอินสแตนซ์ GitLab ที่โฮสต์เอง: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -หากอินสแตนซ์ของคุณใช้งาน AI Gateway แบบกำหนดเอง: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -หรือเพิ่มในโปรไฟล์ทุบตีของคุณ: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -ผู้ดูแลระบบ GitLab ของคุณต้องเปิดใช้งานสิ่งต่อไปนี้: - -1. [Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) สำหรับผู้ใช้ กลุ่ม หรืออินสแตนซ์ -2. แฟล็กคุณลักษณะ (ผ่านคอนโซล Rails): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### OAuth สำหรับอินสแตนซ์ที่โฮสต์เอง - -คุณต้องสร้างเพื่อให้ Oauth ทำงานกับอินสแตนซ์ที่โฮสต์เองได้ -แอพพลิเคชั่นใหม่ (Settings → Applications) ด้วย -โทรกลับ URL `http://127.0.0.1:8080/callback` และขอบเขตต่อไปนี้: - -- api (เข้าถึง API ในนามของคุณ) -- read_user (อ่านข้อมูลส่วนตัวของคุณ) -- read_repository (อนุญาตให้เข้าถึงที่เก็บแบบอ่านอย่างเดียว) - -จากนั้นเปิดเผย ID แอปพลิเคชันเป็นตัวแปรสภาพแวดล้อม: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -เอกสารประกอบเพิ่มเติมเกี่ยวกับหน้าแรกของ [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth) - -##### การกำหนดค่า - -ปรับแต่งผ่าน `opencode.json`: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### GitLab API Tools (เป็นทางเลือก แต่แนะนำเป็นอย่างยิ่ง) - -วิธีเข้าถึงเครื่องมือ GitLab (รวมคำขอ ปัญหา ไปป์ไลน์ CI/CD ฯลฯ): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -ปลั๊กอินนี้มอบความสามารถในการจัดการพื้นที่เก็บข้อมูล GitLab ที่ครอบคลุม รวมถึงการตรวจสอบ MR การติดตามปัญหา การตรวจสอบไปป์ไลน์ และอื่นๆ - ---- - -### GitHub Copilot - -วิธีใช้การสมัครสมาชิก GitHub Copilot ด้วย opencode: - -:::note -บางรุ่นอาจต้องมี [Pro+ -subscription](https://github.com/features/copilot/plans) เพื่อใช้งาน - -บางรุ่นจำเป็นต้องเปิดใช้งานด้วยตนเองใน [การตั้งค่า GitHub Copilot](https://docs.github.com/en/copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use) -::: - -1. รันคำสั่ง `/connect` และค้นหา GitHub Copilot - - ```txt - /connect - ``` - -2. ไปที่ [github.com/login/device](https://github.com/login/device) และป้อนรหัส - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - │ Waiting for authorization... - ``` - -3. ตอนนี้รันคำสั่ง `/models` เพื่อเลือกรุ่นที่คุณต้องการ - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -วิธีใช้ Google Vertex AI กับ OpenCode: - -1. ไปที่ **Model Garden** ใน Google Cloud Console แล้วตรวจสอบ - รุ่นที่มีในภูมิภาคของคุณ - - :::note - คุณต้องมีโปรเจ็กต์ Google Cloud ที่เปิดใช้งาน Vertex AI API - ::: - -2. ตั้งค่าตัวแปรสภาพแวดล้อมที่ต้องการ: - - `GOOGLE_CLOUD_PROJECT`: รหัสโครงการ Google Cloud ของคุณ - - `VERTEX_LOCATION` (เป็นทางเลือก): ภูมิภาคสำหรับ Vertex AI (ค่าเริ่มต้นคือ `global`) - - การรับรองความถูกต้อง (เลือกหนึ่งรายการ): - - `GOOGLE_APPLICATION_CREDENTIALS`: เส้นทางไปยังบัญชีบริการของคุณ JSON ไฟล์คีย์ - - ตรวจสอบสิทธิ์โดยใช้ gcloud CLI: `gcloud auth application-default login` - - ตั้งค่าในขณะที่เรียกใช้ opencode - - ```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode - ``` - - หรือเพิ่มลงในโปรไฟล์ทุบตีของคุณ - - ```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global - ``` - -:::tip -ภูมิภาค `global` ปรับปรุงความพร้อมใช้งานและลดข้อผิดพลาดโดยไม่มีค่าใช้จ่ายเพิ่มเติม ใช้ตำแหน่งข้อมูลระดับภูมิภาค (เช่น `us-central1`) สำหรับข้อกำหนดด้านถิ่นที่อยู่ของข้อมูล [เรียนรู้เพิ่มเติม](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. รันคำสั่ง `/models` เพื่อเลือกรุ่นที่ต้องการ - - ```txt - /models - ``` - ---- - -### Groq - -1. ไปที่ [Groq console](https://console.groq.com/) คลิก **Create API Key** และคัดลอกคีย์ - -2. เรียกใช้คำสั่ง `/connect` และค้นหา Groq - - ```txt - /connect - ``` - -3. ป้อนคีย์ API สำหรับผู้ให้บริการ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกคำสั่งที่คุณต้องการ - - ```txt - /models - ``` - ---- - -### Hugging Face - -[ผู้ให้บริการการอนุมาน Hugging Face](https://huggingface.co/docs/inference-providers) ช่วยให้สามารถเข้าถึงโมเดลแบบเปิดที่รองรับโดยผู้ให้บริการมากกว่า 17 ราย - -1. ไปที่ [การตั้งค่า Hugging Face](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained) เพื่อสร้างโทเค็นที่มีสิทธิ์ในการโทรไปยังผู้ให้บริการการอนุมาน - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **Hugging Face** - - ```txt - /connect - ``` - -3. ป้อน Hugging Face Token ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดล เช่น _Kimi-K2-Instruct_ หรือ _GLM-4.6_ - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) เป็นแพลตฟอร์มการติดตาม LLM ที่ให้การบันทึก การตรวจสอบ และการวิเคราะห์สำหรับแอปพลิเคชัน AI ของคุณ Helicone AI Gateway กำหนดเส้นทางคำขอของคุณไปยังผู้ให้บริการที่เหมาะสมโดยอัตโนมัติตามรุ่น - -1. ไปที่ [Helicone](https://helicone.ai) สร้างบัญชี และสร้างคีย์ API จากแดชบอร์ดของคุณ - -2. รันคำสั่ง `/connect` และค้นหา **Helicone** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Helicone API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกรุ่น - - ```txt - /models - ``` - -หากต้องการทราบผู้ให้บริการเพิ่มเติมและฟีเจอร์ขั้นสูง เช่น การแคชและการจำกัดอัตรา โปรดตรวจสอบ [เอกสารประกอบของ Helicone](https://docs.helicone.ai) - -#### การกำหนดค่าเพิ่มเติม - -ในกรณีที่คุณเห็นคุณสมบัติหรือรุ่นจาก Helicone ที่ไม่ได้กำหนดค่าโดยอัตโนมัติผ่าน opencode คุณสามารถกำหนดค่าด้วยตนเองได้ตลอดเวลา - -นี่คือ [Helicone's Model Directory](https://helicone.ai/models) คุณจะต้องใช้สิ่งนี้เพื่อรับ ID ของโมเดลที่คุณต้องการเพิ่ม - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### ส่วนหัวที่กำหนดเอง - -Helicone รองรับส่วนหัวแบบกำหนดเองสำหรับฟีเจอร์ต่างๆ เช่น การแคช การติดตามผู้ใช้ และการจัดการเซสชัน เพิ่มลงในการกำหนดค่าผู้ให้บริการของคุณโดยใช้ `options.headers`: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### การติดตามเซสชัน - -คุณลักษณะ [เซสชัน](https://docs.helicone.ai/features/sessions) ของ Helicone ช่วยให้คุณสามารถจัดกลุ่มคำขอ LLM ที่เกี่ยวข้องเข้าด้วยกันได้ ใช้ปลั๊กอิน [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) เพื่อบันทึกการสนทนา OpenCode แต่ละรายการเป็นเซสชันใน Helicone โดยอัตโนมัติ - -```bash -npm install -g opencode-helicone-session -``` - -เพิ่มลงในการกำหนดค่าของคุณ - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -ปลั๊กอินจะแทรกส่วนหัว `Helicone-Session-Id` และ `Helicone-Session-Name` ลงในคำขอของคุณ ในหน้าเซสชันของ Helicone คุณจะเห็นการสนทนา OpenCode แต่ละรายการแยกเป็นเซสชันแยกกัน - -##### ส่วนหัวของ Helicone ทั่วไป - -| ส่วนหัว | คำอธิบาย | -| -------------------------- | ---------------------------------------------------------------- | -| `Helicone-Cache-Enabled` | เปิดใช้งานการแคชการตอบกลับ (`true`/`false`) | -| `Helicone-User-Id` | ติดตามตัวชี้วัดตามผู้ใช้ | -| `Helicone-Property-[Name]` | เพิ่มคุณสมบัติที่กำหนดเอง (เช่น `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | เชื่อมโยงคำขอกับเวอร์ชันพร้อมท์ | - -ดู [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory) สำหรับส่วนหัวที่มีอยู่ทั้งหมด - ---- - -### llama.cpp - -คุณสามารถกำหนดค่า opencode เพื่อใช้โมเดลท้องถิ่นผ่านยูทิลิตี้ [llama.cpp's](https://github.com/ggml-org/llama.cpp) llama-server - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -ในตัวอย่างนี้: - -- `llama.cpp` คือ ID ผู้ให้บริการที่กำหนดเอง นี่อาจเป็นสตริงใดก็ได้ที่คุณต้องการ -- `npm` ระบุแพ็คเกจที่จะใช้สำหรับผู้ให้บริการรายนี้ ในที่นี้ `@ai-sdk/openai-compatible` ใช้สำหรับ API ที่เข้ากันได้กับ OpenAI -- `name` คือชื่อที่แสดงของผู้ให้บริการใน UI -- `options.baseURL` เป็นจุดสิ้นสุดสำหรับเซิร์ฟเวอร์ภายในเครื่อง -- `models` คือแมปของ ID โมเดลกับการกำหนดค่า ชื่อรุ่นจะปรากฏในรายการเลือกรุ่น - ---- - -### IO.NET - -IO.NET มี 17 โมเดลที่ได้รับการปรับให้เหมาะกับการใช้งานที่หลากหลาย: - -1. ไปที่ [IO.NET console](https://ai.io.net/) สร้างบัญชี และสร้างคีย์ API - -2. รันคำสั่ง `/connect` และค้นหา **IO.NET** - - ```txt - /connect - ``` - -3. ป้อนคีย์ IO.NET API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกรุ่น - - ```txt - /models - ``` - ---- - -### LM Studio - -คุณสามารถกำหนดค่า opencode เพื่อใช้โมเดลท้องถิ่นผ่าน LM Studio - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -ในตัวอย่างนี้: - -- `lmstudio` คือ ID ผู้ให้บริการที่กำหนดเอง นี่อาจเป็นสตริงใดก็ได้ที่คุณต้องการ -- `npm` ระบุแพ็คเกจที่จะใช้สำหรับผู้ให้บริการรายนี้ ในที่นี้ `@ai-sdk/openai-compatible` ใช้สำหรับ API ที่เข้ากันได้กับ OpenAI -- `name` คือชื่อที่แสดงของผู้ให้บริการใน UI -- `options.baseURL` เป็นจุดสิ้นสุดสำหรับเซิร์ฟเวอร์ภายในเครื่อง -- `models` คือแมปของ ID โมเดลกับการกำหนดค่า ชื่อรุ่นจะปรากฏในรายการเลือกรุ่น - ---- - -### Moonshot AI - -วิธีใช้ Kimi K2 จาก Moonshot AI: - -1. ไปที่ [Moonshot AI console](https://platform.moonshot.ai/console) สร้างบัญชี แล้วคลิก **Create API Key** - -2. รันคำสั่ง `/connect` และค้นหา **Moonshot AI** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Moonshot API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือก _Kimi K2_ - - ```txt - /models - ``` - ---- - -### MiniMax - -1. ไปที่ [MiniMax API Console](https://platform.minimax.io/login) สร้างบัญชี และสร้างคีย์ API - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **MiniMax** - - ```txt - /connect - ``` - -3. ป้อนคีย์ MiniMax API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกรุ่นเช่น _M2.1_ - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. ไปที่ [คอนโซล Nebius Token Factory](https://tokenfactory.nebius.com/) สร้างบัญชี แล้วคลิก **Add key** - -2. รันคำสั่ง `/connect` และค้นหา **Nebius Token Factory** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Nebius Token Factory API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Kimi K2 Instruct_ - - ```txt - /models - ``` - ---- - -### Ollama - -คุณสามารถกำหนดค่า opencode เพื่อใช้โมเดลท้องถิ่นผ่าน Ollama - -:::tip -Ollama สามารถกำหนดค่าตัวเองสำหรับ OpenCode ได้โดยอัตโนมัติ ดู [เอกสารการบูรณาการ Ollama](https://docs.ollama.com/integrations/opencode) เพื่อดูรายละเอียด -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -ในตัวอย่างนี้: - -- `ollama` คือ ID ผู้ให้บริการที่กำหนดเอง นี่อาจเป็นสตริงใดก็ได้ที่คุณต้องการ -- `npm` ระบุแพ็คเกจที่จะใช้สำหรับผู้ให้บริการรายนี้ ในที่นี้ `@ai-sdk/openai-compatible` ใช้สำหรับ API ที่เข้ากันได้กับ OpenAI -- `name` คือชื่อที่แสดงของผู้ให้บริการใน UI -- `options.baseURL` เป็นจุดสิ้นสุดสำหรับเซิร์ฟเวอร์ภายในเครื่อง -- `models` คือแมปของ ID โมเดลกับการกำหนดค่า ชื่อรุ่นจะปรากฏในรายการเลือกรุ่น - -:::tip -หากการเรียกใช้เครื่องมือไม่ทำงาน ให้ลองเพิ่ม `num_ctx` ใน Ollama เริ่มต้นประมาณ 16,000 - 32,000 -::: - ---- - -### Ollama Cloud - -วิธีใช้ Ollama Cloud กับ OpenCode: - -1. ไปที่ [https://ollama.com/](https://ollama.com/) แล้วลงชื่อเข้าใช้หรือสร้างบัญชี - -2. ไปที่ **Settings** > **Keys** แล้วคลิก **Add API Key** เพื่อสร้างคีย์ API ใหม่ - -3. คัดลอกคีย์ API เพื่อใช้ใน OpenCode - -4. เรียกใช้คำสั่ง `/connect` และค้นหา **Ollama Cloud** - - ```txt - /connect - ``` - -5. ป้อนคีย์ Ollama Cloud API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **สำคัญ**: ก่อนที่จะใช้โมเดลคลาวด์ใน OpenCode คุณต้องดึงข้อมูลโมเดลในเครื่อง: - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. รันคำสั่ง `/models` เพื่อเลือกโมเดล Ollama Cloud ของคุณ - - ```txt - /models - ``` - ---- - -### OpenAI - -เราขอแนะนำให้สมัคร [ChatGPT Plus หรือ Pro](https://chatgpt.com/pricing) - -1. เมื่อคุณสมัครแล้ว ให้รันคำสั่ง `/connect` และเลือก OpenAI - - ```txt - /connect - ``` - -2. ที่นี่คุณสามารถเลือกตัวเลือก **ChatGPT Plus/Pro** จากนั้นเบราว์เซอร์จะเปิดขึ้นมา - และขอให้คุณตรวจสอบสิทธิ์ - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. ตอนนี้โมเดล OpenAI ทั้งหมดควรจะพร้อมใช้งานเมื่อคุณใช้คำสั่ง `/models` - - ```txt - /models - ``` - -##### การใช้ API Key - -หากคุณมีคีย์ API อยู่แล้ว คุณสามารถเลือก **Manually enter API Key** และวางลงใน terminal ของคุณ - ---- - -### OpenCode Zen - -OpenCode Zen คือรายการโมเดลที่ได้รับการทดสอบและตรวจสอบแล้วโดยทีมงาน OpenCode [เรียนรู้เพิ่มเติม](/docs/zen) - -1. ลงชื่อเข้าใช้ **OpenCode Zen** และคลิก **สร้าง API คีย์** - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **OpenCode Zen** - - ```txt - /connect - ``` - -3. ป้อนคีย์ OpenCode API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Qwen 3 Coder 480B_ - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. ไปที่ [OpenRouter dashboard](https://openrouter.ai/settings/keys) คลิก **Create API Key** และคัดลอกคีย์ - -2. เรียกใช้คำสั่ง `/connect` และค้นหา OpenRouter - - ```txt - /connect - ``` - -3. ป้อนคีย์ API สำหรับผู้ให้บริการ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. โมเดล OpenRouter จำนวนมากถูกโหลดไว้ล่วงหน้าตามค่าเริ่มต้น รันคำสั่ง `/models` เพื่อเลือกโมเดลที่คุณต้องการ - - ```txt - /models - ``` - - คุณยังสามารถเพิ่มโมเดลเพิ่มเติมผ่านการกำหนดค่า opencode ของคุณได้ - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. คุณยังสามารถปรับแต่งได้ผ่านการกำหนดค่า opencode ของคุณ นี่คือตัวอย่างการระบุผู้ให้บริการ - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI Core ให้การเข้าถึงโมเดลมากกว่า 40 รุ่นจาก OpenAI, Anthropic, Google, Amazon, Meta, Mistral และ AI21 ผ่านแพลตฟอร์มเดียว - -1. ไปที่ [SAP BTP Cockpit](https://account.hana.ondemand.com/) ของคุณ ไปที่อินสแตนซ์บริการ SAP AI Core และสร้างคีย์บริการ - - :::tip - คีย์บริการคือวัตถุ JSON ที่มี `clientid`, `clientsecret`, `url` และ `serviceurls.AI_API_URL` คุณสามารถค้นหาอินสแตนซ์ AI Core ของคุณได้ภายใต้ **Services** > **Instances and Subscriptions** ใน BTP Cockpit - ::: - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **SAP AI Core** - - ```txt - /connect - ``` - -3. ป้อน JSON คีย์บริการของคุณ - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - หรือตั้งค่าตัวแปรสภาพแวดล้อม `AICORE_SERVICE_KEY`: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - หรือเพิ่มลงในโปรไฟล์ทุบตีของคุณ: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. เลือกตั้งค่ารหัสการปรับใช้และกลุ่มทรัพยากร: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - การตั้งค่าเหล่านี้เป็นทางเลือกและควรกำหนดค่าตามการตั้งค่า SAP AI Core ของคุณ - ::: - -5. รันคำสั่ง `/models` เพื่อเลือกจาก 40+ รุ่นที่มีอยู่ - - ```txt - /models - ``` - ---- - -### STACKIT - -STACKIT AI Model Serving มอบสภาพแวดล้อมการโฮสต์ที่มีการจัดการเต็มรูปแบบสำหรับโมเดล AI โดยเน้นที่ LLM เช่น Llama, Mistral และ Qwen โดยมีอธิปไตยของข้อมูลสูงสุดบนโครงสร้างพื้นฐานยุโรป - -1. ไปที่ [STACKIT Portal](https://portal.stackit.cloud) ไปที่ **AI Model Serving** และสร้างโทเค็นการตรวจสอบสิทธิ์สำหรับโครงการของคุณ - - :::tip - คุณต้องมีบัญชีลูกค้า STACKIT บัญชีผู้ใช้ และโครงการก่อนสร้างโทเค็นการตรวจสอบสิทธิ์ - ::: - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **STACKIT** - - ```txt - /connect - ``` - -3. ป้อนโทเค็นการตรวจสอบสิทธิ์ STACKIT AI Model Serving ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกจากโมเดลที่มีอยู่ เช่น _Qwen3-VL 235B_ หรือ _Llama 3.3 70B_ - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. ไปที่ [OVHcloud panel](https://ovh.com/manager) ไปที่ส่วน `Public Cloud`, `AI & Machine Learning` > `AI Endpoints` และในแท็บ `API Keys` ให้คลิก **Create a new API key** - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **OVHcloud AI Endpoints** - - ```txt - /connect - ``` - -3. ป้อนคีย์ API OVHcloud AI Endpoints ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _gpt-oss-120b_ - - ```txt - /models - ``` - ---- - -### Scaleway - -วิธีใช้ [Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/) กับ Opencode: - -1. ไปที่ [Scaleway Console IAM settings](https://console.scaleway.com/iam/api-keys) เพื่อสร้างคีย์ API ใหม่ - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **Scaleway** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Scaleway API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _devstral-2-123b-instruct-2512_ หรือ _gpt-oss-120b_ - - ```txt - /models - ``` - ---- - -### Together AI - -1. ไปที่ [Together AI console](https://api.together.ai) สร้างบัญชี และคลิก **Add Key** - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **Together AI** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Together AI API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Kimi K2 Instruct_ - - ```txt - /models - ``` - ---- - -### Venice AI - -1. ไปที่ [Venice AI console](https://venice.ai) สร้างบัญชี และสร้างคีย์ API - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **Venice AI** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Venice AI API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Llama 3.3 70B_ - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -Vercel AI Gateway ช่วยให้คุณเข้าถึงโมเดลจาก OpenAI, Anthropic, Google, xAI และอื่นๆ อีกมากมายผ่านจุดสิ้นสุดแบบรวม โมเดลถูกนำเสนอในราคาปลีกโดยไม่มีการบวกเพิ่ม - -1. ไปที่ [Vercel dashboard](https://vercel.com/) ไปที่แท็บ **AI Gateway** และคลิก **API keys** เพื่อสร้างคีย์ API ใหม่ - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **Vercel AI Gateway** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Vercel AI Gateway API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกรุ่น - - ```txt - /models - ``` - -คุณยังสามารถปรับแต่งโมเดลผ่านการกำหนดค่า opencode ของคุณได้ นี่คือตัวอย่างการระบุลำดับการกำหนดเส้นทางผู้ให้บริการ - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -ตัวเลือกการกำหนดเส้นทางที่มีประโยชน์บางประการ: - -| ตัวเลือก | คำอธิบาย | -| ------------------- | ---------------------------------------------------------- | -| `order` | ลำดับผู้ให้บริการที่จะลอง | -| `only` | จำกัดเฉพาะผู้ให้บริการที่ระบุ | -| `zeroDataRetention` | ใช้เฉพาะผู้ให้บริการที่มีนโยบายการเก็บรักษาข้อมูลเป็นศูนย์ | - ---- - -### xAI - -1. ไปที่ [xAI console](https://console.x.ai/) สร้างบัญชี และสร้างคีย์ API - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **xAI** - - ```txt - /connect - ``` - -3. ป้อนคีย์ xAI API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Grok Beta_ - - ```txt - /models - ``` - ---- - -### Z.AI - -1. ไปที่ [Z.AI API console](https://z.ai/manage-apikey/apikey-list) สร้างบัญชี และคลิก **Create a new API key** - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **Z.AI** - - ```txt - /connect - ``` - - หากคุณสมัครรับ **GLM Coding Plan** ให้เลือก **Z.AI Coding Plan** - -3. ป้อนคีย์ Z.AI API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _GLM-4.7_ - - ```txt - /models - ``` - ---- - -### ZenMux - -1. ไปที่ [ZenMux dashboard](https://zenmux.ai/settings/keys) คลิก **Create API Key** และคัดลอกคีย์ - -2. เรียกใช้คำสั่ง `/connect` และค้นหา ZenMux - - ```txt - /connect - ``` - -3. ป้อนคีย์ API สำหรับผู้ให้บริการ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. โมเดล ZenMux จำนวนมากถูกโหลดไว้ล่วงหน้าตามค่าเริ่มต้น รันคำสั่ง `/models` เพื่อเลือกโมเดลที่คุณต้องการ - - ```txt - /models - ``` - - คุณยังสามารถเพิ่มโมเดลเพิ่มเติมผ่านการกำหนดค่า opencode ของคุณได้ - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## ผู้ให้บริการที่กำหนดเอง - -หากต้องการเพิ่มผู้ให้บริการที่ **เข้ากันได้กับ OpenAI** ใดๆ ที่ไม่มีรายชื่ออยู่ในคำสั่ง `/connect`: - -:::tip -คุณสามารถใช้ผู้ให้บริการที่เข้ากันได้กับ OpenAI กับ opencode ได้ ผู้ให้บริการ AI สมัยใหม่ส่วนใหญ่เสนอ API ที่เข้ากันได้กับ OpenAI -::: - -1. เรียกใช้คำสั่ง `/connect` และเลื่อนลงไปที่ **Other** - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. ป้อน ID เฉพาะสำหรับผู้ให้บริการ - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - เลือก ID ที่น่าจดจำ คุณจะใช้ ID นี้ในไฟล์กำหนดค่าของคุณ - ::: - -3. ป้อนคีย์ API สำหรับผู้ให้บริการ - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. สร้างหรืออัปเดตไฟล์ `opencode.json` ของคุณในไดเร็กทอรีโครงการของคุณ: - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - - นี่คือตัวเลือกการกำหนดค่า: - - **npm**: แพ็คเกจ AI SDK ที่จะใช้ `@ai-sdk/openai-compatible` สำหรับผู้ให้บริการที่เข้ากันได้กับ OpenAI - - **name**: ชื่อที่แสดงใน UI - - **models**: โมเดลที่มีจำหน่าย - - **options.baseURL**: URL จุดสิ้นสุด API - - **options.apiKey**: ตั้งค่าคีย์ API ทางเลือก หากไม่ได้ใช้การรับรองความถูกต้อง - - **options.headers**: ตั้งค่าส่วนหัวที่กำหนดเองได้ตามต้องการ - - ข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกขั้นสูงในตัวอย่างด้านล่าง - -5. รันคำสั่ง `/models` และผู้ให้บริการและโมเดลที่คุณกำหนดเองจะปรากฏในรายการตัวเลือก - ---- - -##### ตัวอย่าง - -นี่คือตัวอย่างการตั้งค่าตัวเลือก `apiKey`, `headers` และรุ่น `limit` - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -รายละเอียดการกำหนดค่า: - -- **apiKey**: ตั้งค่าโดยใช้ไวยากรณ์ตัวแปร `env` [เรียนรู้เพิ่มเติม](/docs/config#env-vars) -- **headers**: ส่วนหัวที่กำหนดเองที่ส่งไปกับแต่ละคำขอ -- **limit.context**: โทเค็นอินพุตสูงสุดที่โมเดลยอมรับ -- **limit.output**: โทเค็นสูงสุดที่โมเดลสามารถสร้างได้ - -ฟิลด์ `limit` ช่วยให้ OpenCode เข้าใจว่าคุณมีบริบทเหลืออยู่เท่าใด ผู้ให้บริการมาตรฐานจะดึงข้อมูลเหล่านี้จาก models.dev โดยอัตโนมัติ - ---- - -## การแก้ไขปัญหา - -หากคุณประสบปัญหาในการกำหนดค่าผู้ให้บริการ ให้ตรวจสอบสิ่งต่อไปนี้: - -1. **ตรวจสอบการตั้งค่าการรับรองความถูกต้อง**: รัน `opencode auth list` เพื่อดูว่ามีการเพิ่มข้อมูลรับรอง - สำหรับผู้ให้บริการในการกำหนดค่าของคุณหรือไม่ - - สิ่งนี้ใช้ไม่ได้กับผู้ให้บริการเช่น Amazon Bedrock ซึ่งอาศัยตัวแปรสภาพแวดล้อมสำหรับการตรวจสอบสิทธิ์ - -2. สำหรับผู้ให้บริการที่กำหนดเอง ให้ตรวจสอบการกำหนดค่า opencode และ: - - ตรวจสอบให้แน่ใจว่า ID ผู้ให้บริการที่ใช้ในคำสั่ง `/connect` ตรงกับ ID ในการกำหนดค่า opencode ของคุณ - - ใช้แพ็คเกจ npm ที่ถูกต้องสำหรับผู้ให้บริการ ตัวอย่างเช่น ใช้ `@ai-sdk/cerebras` สำหรับ Cerebras และสำหรับผู้ให้บริการอื่นๆ ที่เข้ากันได้กับ OpenAI ให้ใช้ `@ai-sdk/openai-compatible` - - ตรวจสอบว่าใช้จุดสิ้นสุด API ที่ถูกต้องในฟิลด์ `options.baseURL` - -3. ป้อนคีย์ OpenCode API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกรุ่นเช่น _Qwen 3 Coder 480B_ - - ```txt - /models - ``` - ---- - -### เปิดเราเตอร์ - -1. ไปที่ [แดชบอร์ด OpenRouter](https://openrouter.ai/settings/keys) คลิก **สร้าง API คีย์** และคัดลอกคีย์ - -2. เรียกใช้คำสั่ง `/connect` และค้นหา OpenRouter - - ```txt - /connect - ``` - -3. ป้อนคีย์ API สำหรับผู้ให้บริการ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. OpenRouter หลายรุ่นถูกโหลดไว้ล่วงหน้าตามค่าเริ่มต้น ให้รันคำสั่ง `/models` เพื่อเลือกรุ่นที่คุณต้องการ - - ```txt - /models - ``` - - คุณยังสามารถเพิ่มโมเดลเพิ่มเติมผ่านการกำหนดค่า opencode ของคุณ - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. คุณยังสามารถปรับแต่งได้ผ่านการกำหนดค่า opencode ของคุณ นี่คือตัวอย่างการระบุผู้ให้บริการ - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP เอไอคอร์ - -SAP AI Core ให้การเข้าถึงโมเดลมากกว่า 40 โมเดลจาก OpenAI, Anthropic, Google, Amazon, Meta, Mistral และ AI21 ผ่านแพลตฟอร์มแบบครบวงจร - -1. ไปที่ห้องนักบิน [SAP BTP](https://account.hana.ondemand.com/) นำทางไปยังอินสแตนซ์บริการ SAP AI Core ของคุณ และสร้างรหัสบริการ - - :::tip - รหัสบริการคือวัตถุ JSON ที่ประกอบด้วย `clientid`, `clientsecret`, `url` และ `serviceurls.AI_API_URL` คุณสามารถค้นหาอินสแตนซ์ AI Core ของคุณได้ภายใต้ **บริการ** > **อินสแตนซ์และการสมัครสมาชิก** ในห้องควบคุม BTP - ::: - -2. รันคำสั่ง `/connect` และค้นหา **SAP AI Core** - - ```txt - /connect - ``` - -3. ป้อนรหัสบริการของคุณ JSON - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - หรือตั้งค่าตัวแปรสภาพแวดล้อม `AICORE_SERVICE_KEY`: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - หรือเพิ่มลงในโปรไฟล์ทุบตีของคุณ: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. ตั้งค่า ID การนำไปใช้งานและกลุ่มทรัพยากรเพิ่มเติม: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - การตั้งค่าเหล่านี้เป็นทางเลือกและควรกำหนดค่าตามการตั้งค่า SAP AI Core ของคุณ - ::: - -5. รันคำสั่ง `/models` เพื่อเลือกจากรุ่นที่มีให้เลือกมากกว่า 40 รุ่น - - ```txt - /models - ``` - ---- - -### ตำแหน่งข้อมูล AI ของ OVHcloud - -1. ไปที่ [แผง OVHcloud](https://ovh.com/manager) ไปที่ส่วน `Public Cloud` `AI & Machine Learning` > `AI Endpoints` และในแท็บ `API Keys` คลิก **สร้างคีย์ API ใหม่** - -2. รันคำสั่ง `/connect` และค้นหา **OVHcloud AI Endpoints** - - ```txt - /connect - ``` - -3. ป้อนคีย์ OVHcloud AI Endpoints API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _gpt-oss-120b_ - - ```txt - /models - ``` - ---- - -### สเกลเวย์ - -วิธีใช้ [Scaleway Generative API](https://www.scaleway.com/en/docs/generative-apis/) กับ Opencode: - -1. ไปที่ [การตั้งค่า Scaleway Console IAM](https://console.scaleway.com/iam/api-keys) เพื่อสร้างคีย์ API ใหม่ - -2. รันคำสั่ง `/connect` และค้นหา **Scaleway** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Scaleway API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดล เช่น _devstral-2-123b-instruct-2512_ หรือ _gpt-oss-120b_ - - ```txt - /models - ``` - ---- - -### ร่วมกันเอไอ - -1. ไปที่ [Together AI console](https://api.together.ai) สร้างบัญชี แล้วคลิก **เพิ่มรหัส** - -2. เรียกใช้คำสั่ง `/connect` และค้นหา **Together AI** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Together AI API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Kimi K2 Instruct_ - - ```txt - /models - ``` - ---- - -### เวนิส เอไอ - -1. ไปที่ [คอนโซล AI ของเวนิส](https://venice.ai) สร้างบัญชี และสร้างคีย์ API - -2. รันคำสั่ง `/connect` และค้นหา **Venice AI** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Venice AI API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Llama 3.3 70B_ - - ```txt - /models - ``` - ---- - -### เกตเวย์ AI ของ Vercel - -Vercel AI Gateway ช่วยให้คุณเข้าถึงโมเดลจาก OpenAI, Anthropic, Google, xAI และอื่นๆ อีกมากมายผ่านจุดสิ้นสุดแบบรวม โมเดลมีจำหน่ายในราคาปลีกโดยไม่มีส่วนเพิ่ม - -1. ไปที่ [แดชบอร์ด Vercel](https://vercel.com/) ไปที่แท็บ **เกตเวย์ AI** และคลิก **API คีย์** เพื่อสร้างคีย์ API ใหม่ - -2. รันคำสั่ง `/connect` และค้นหา **Vercel AI Gateway** - - ```txt - /connect - ``` - -3. ป้อนคีย์ Vercel AI Gateway API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกรุ่น - - ```txt - /models - ``` - -คุณยังสามารถปรับแต่งโมเดลผ่านการกำหนดค่า opencode ของคุณได้อีกด้วย นี่คือตัวอย่างการระบุลำดับการกำหนดเส้นทางของผู้ให้บริการ - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -ตัวเลือกการกำหนดเส้นทางที่มีประโยชน์: - -| ตัวเลือก | คำอธิบาย | -| ------------------- | ------------------------------------------------------- | -| `order` | ลำดับผู้ให้บริการที่จะลอง | -| `only` | จำกัดเฉพาะผู้ให้บริการบางราย | -| `zeroDataRetention` | ใช้ผู้ให้บริการที่ไม่มีนโยบายการเก็บรักษาข้อมูลเท่านั้น | - ---- - -### xAI - -1. ไปที่ [xAI console](https://console.x.ai/) สร้างบัญชี และสร้างคีย์ API - -2. รันคำสั่ง `/connect` และค้นหา **xAI** - - ```txt - /connect - ``` - -3. ป้อนคีย์ xAI API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _Grok Beta_ - - ```txt - /models - ``` - ---- - -### ซี.เอ.ไอ - -1. ไปที่ [Z.AI API console](https://z.ai/manage-apikey/apikey-list) สร้างบัญชี และคลิก **สร้างคีย์ API ใหม่** - -2. รันคำสั่ง `/connect` และค้นหา **Z.AI** - - ```txt - /connect - ``` - - หากคุณสมัครสมาชิก **GLM Coding Plan** ให้เลือก **Z.AI Coding Plan** - -3. ป้อนคีย์ Z.AI API ของคุณ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. รันคำสั่ง `/models` เพื่อเลือกโมเดลเช่น _GLM-4.7_ - - ```txt - /models - ``` - ---- - -### ZenMux - -1. ไปที่ [แดชบอร์ด ZenMux](https://zenmux.ai/settings/keys) คลิก **สร้าง API คีย์** และคัดลอกคีย์ - -2. รันคำสั่ง `/connect` และค้นหา ZenMux - - ```txt - /connect - ``` - -3. ป้อนคีย์ API สำหรับผู้ให้บริการ - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. ZenMux หลายรุ่นถูกโหลดไว้ล่วงหน้าตามค่าเริ่มต้น รันคำสั่ง `/models` เพื่อเลือกรุ่นที่คุณต้องการ - - ```txt - /models - ``` - - คุณยังสามารถเพิ่มโมเดลเพิ่มเติมผ่านการกำหนดค่า opencode ของคุณ - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## ผู้ให้บริการที่กำหนดเอง - -หากต้องการเพิ่มผู้ให้บริการ **รองรับ OpenAI** ที่ไม่อยู่ในคำสั่ง `/connect`: - -:::tip -คุณสามารถใช้ผู้ให้บริการที่เข้ากันได้กับ OpenAI ด้วย opencode ผู้ให้บริการ AI สมัยใหม่ส่วนใหญ่เสนอ API ที่เข้ากันได้กับ OpenAI -::: - -1. เรียกใช้คำสั่ง `/connect` และเลื่อนลงไปที่ **อื่นๆ** - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. ป้อนรหัสเฉพาะสำหรับผู้ให้บริการ - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - เลือก ID ที่น่าจดจำ คุณจะใช้รหัสนี้ในไฟล์กำหนดค่าของคุณ - ::: - -3. ป้อนรหัส API ของคุณสำหรับผู้ให้บริการ - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. สร้างหรืออัปเดตไฟล์ `opencode.json` ในไดเรกทอรีโครงการของคุณ: - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - - นี่คือตัวเลือกการกำหนดค่า: - - **npm**: แพ็คเกจ AI SDK ที่จะใช้ `@ai-sdk/openai-compatible` สำหรับผู้ให้บริการที่เข้ากันได้กับ OpenAI - - **ชื่อ**: ชื่อที่แสดงใน UI - - **รุ่น**: รุ่นที่มีจำหน่าย - - **options.baseURL**: API ปลายทาง URL - - **options.apiKey**: ตั้งค่าคีย์ API หรือไม่ก็ได้ หากไม่ได้ใช้การตรวจสอบสิทธิ์ - - **options.headers**: ตั้งค่าส่วนหัวที่กำหนดเองหรือไม่ก็ได้ - - ข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกขั้นสูงในตัวอย่างด้านล่าง - -5. รันคำสั่ง `/models` จากนั้นผู้ให้บริการและโมเดลที่คุณกำหนดเองจะปรากฏในรายการตัวเลือก - ---- - -##### ตัวอย่าง - -นี่คือตัวอย่างการตั้งค่าตัวเลือก `apiKey`, `headers` และโมเดล `limit` - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -รายละเอียดการกำหนดค่า: - -- **apiKey**: ตั้งค่าโดยใช้ไวยากรณ์ของตัวแปร `env` [เรียนรู้เพิ่มเติม](/docs/config#env-vars) -- **ส่วนหัว**: ส่วนหัวที่กำหนดเองส่งไปพร้อมกับคำขอแต่ละรายการ -- **limit.context**: Input Tokens สูงสุดที่โมเดลยอมรับ -- **limit.output**: Output Tokens สูงสุดที่โมเดลสามารถสร้างได้ - -ช่อง `limit` ช่วยให้ OpenCode เข้าใจบริบทที่คุณเหลืออยู่ ผู้ให้บริการมาตรฐานจะดึงข้อมูลเหล่านี้จาก models.dev โดยอัตโนมัติ - ---- - -## การแก้ไขปัญหา - -หากคุณประสบปัญหาในการกำหนดค่าผู้ให้บริการ ให้ตรวจสอบสิ่งต่อไปนี้: - -1. **ตรวจสอบการตั้งค่าการรับรองความถูกต้อง**: เรียกใช้ `opencode auth list` เพื่อดูว่ามีข้อมูลรับรองหรือไม่ - สำหรับผู้ให้บริการจะถูกเพิ่มในการกำหนดค่าของคุณ - - สิ่งนี้ใช้ไม่ได้กับผู้ให้บริการอย่าง Amazon Bedrock ที่ต้องอาศัยตัวแปรสภาพแวดล้อมสำหรับการตรวจสอบสิทธิ์ - -2. สำหรับผู้ให้บริการแบบกำหนดเอง ให้ตรวจสอบการกำหนดค่า opencode และ: - - ตรวจสอบให้แน่ใจว่า ID ผู้ให้บริการที่ใช้ในคำสั่ง `/connect` ตรงกับ ID ในการกำหนดค่า opencode ของคุณ - - มีการใช้แพ็คเกจ npm ที่ถูกต้องสำหรับผู้ให้บริการ ตัวอย่างเช่น ใช้ `@ai-sdk/cerebras` สำหรับ Cerebras และสำหรับผู้ให้บริการรายอื่นที่เข้ากันได้กับ OpenAI ให้ใช้ `@ai-sdk/openai-compatible` - - ตรวจสอบว่ามีการใช้จุดสิ้นสุด API ที่ถูกต้องในช่อง `options.baseURL` diff --git a/packages/web/src/content/docs/th/rules.mdx b/packages/web/src/content/docs/th/rules.mdx deleted file mode 100644 index c8deed792c..0000000000 --- a/packages/web/src/content/docs/th/rules.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: กฎ -description: ตั้งค่าคำแนะนำที่กำหนดเองสำหรับ opencode ---- - -คุณสามารถให้คำแนะนำที่กำหนดเองแก่ opencode ได้โดยการสร้างไฟล์ `AGENTS.md` ซึ่งคล้ายกับกฎของเคอร์เซอร์ ประกอบด้วยคำแนะนำที่จะรวมอยู่ในบริบทของ LLM เพื่อปรับแต่งลักษณะการทำงานสำหรับโครงการเฉพาะของคุณ - ---- - -## เริ่มต้น - -หากต้องการสร้างไฟล์ `AGENTS.md` ใหม่ คุณสามารถเรียกใช้คำสั่ง `/init` ใน opencode - -:::tip -คุณควรคอมมิตไฟล์ `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 ทั้งหมด - -เนื่องจากสิ่งนี้ไม่ได้ผูกมัดกับ Git หรือแชร์กับทีมของคุณ เราขอแนะนำให้ใช้สิ่งนี้เพื่อระบุกฎส่วนบุคคลที่ LLM ควรปฏิบัติตาม - -### ความเข้ากันได้กับ 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 files** ที่ `~/.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. -``` - -แนวทางนี้ช่วยให้คุณ: - -- สร้างไฟล์กฎแบบโมดูลาร์ที่สามารถนำมาใช้ซ้ำได้ -- แชร์กฎระหว่างโปรเจ็กต์ผ่าน symlink หรือโมดูลย่อย git -- เขียน AGENTS.md ให้กระชับโดยอ้างอิงหลักเกณฑ์โดยละเอียด -- ตรวจสอบให้แน่ใจว่า opencode จะโหลดไฟล์เมื่อจำเป็นสำหรับงานเฉพาะเท่านั้น - -:::tip -สำหรับ monorepos หรือโปรเจ็กต์ที่มีมาตรฐานร่วมกัน การใช้ `opencode.json` ที่มีรูปแบบ glob (เช่น `packages/*/AGENTS.md`) จะสามารถบำรุงรักษาได้ดีกว่าคำสั่งแบบแมนนวล -::: diff --git a/packages/web/src/content/docs/th/sdk.mdx b/packages/web/src/content/docs/th/sdk.mdx deleted file mode 100644 index 3454b57667..0000000000 --- a/packages/web/src/content/docs/th/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: SDK -description: ไคลเอนต์ JS ประเภทที่ปลอดภัยสำหรับเซิร์ฟเวอร์ opencode ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -opencode JS/TS SDK จัดเตรียมไคลเอ็นต์ประเภทที่ปลอดภัยสำหรับการโต้ตอบกับเซิร์ฟเวอร์ -ใช้เพื่อสร้างการบูรณาการและควบคุม opencode โดยทางโปรแกรม - -[เรียนรู้เพิ่มเติม](/docs/server) เกี่ยวกับวิธีการทำงานของเซิร์ฟเวอร์ ตัวอย่างเช่น ลองดู [โครงการ](/docs/ecosystem#โครงการ) ที่สร้างโดยชุมชน - ---- - -## ติดตั้ง - -ติดตั้ง SDK จาก npm: - -```bash -npm install @opencode-ai/sdk -``` - ---- - -## สร้างไคลเอนต์ - -สร้างอินสแตนซ์ของ opencode: - -```javascript -import { createOpencode } from "@opencode-ai/sdk" - -const { client } = await createOpencode() -``` - -สิ่งนี้จะเริ่มต้นทั้งเซิร์ฟเวอร์และไคลเอนต์ - -#### ตัวเลือก - -| ตัวเลือก | Type | คำอธิบาย | ค่าเริ่มต้น | -| ---------- | ------------- | ------------------------------------------- | ----------- | -| `hostname` | `string` | ชื่อโฮสต์ของเซิร์ฟเวอร์ | `127.0.0.1` | -| `port` | `number` | พอร์ตเซิร์ฟเวอร์ | `4096` | -| `signal` | `AbortSignal` | ยกเลิกสัญญาณสำหรับการยกเลิก | `undefined` | -| `timeout` | `number` | หมดเวลาเป็น ms สำหรับการเริ่มต้นเซิร์ฟเวอร์ | `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", -}) -``` - -#### ตัวเลือก - -| ตัวเลือก | Type | คำอธิบาย | ค่าเริ่มต้น | -| --------------- | ---------- | ---------------------------------------- | ----------------------- | -| `baseUrl` | `string` | URL ของเซิร์ฟเวอร์ | `http://localhost:4096` | -| `fetch` | `function` | การใช้งานการดึงข้อมูลแบบกำหนดเอง | `globalThis.fetch` | -| `parseAs` | `string` | Methodการแยกวิเคราะห์การตอบสนอง | `auto` | -| `responseStyle` | `string` | รูปแบบการคืนสินค้า: `data` หรือ `fields` | `fields` | -| `throwOnError` | `boolean` | โยนข้อผิดพลาดแทนการส่งคืน | `false` | - ---- - -## ประเภท - -SDK มีคำจำกัดความ TypeScript สำหรับ API ประเภททั้งหมด นำเข้าโดยตรง: - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -ทุกประเภทสร้างขึ้นจากข้อกำหนด OpenAPI ของเซิร์ฟเวอร์และมีอยู่ใน ไฟล์ประเภท - ---- - -## ข้อผิดพลาด - -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 schema โมเดลจะใช้เครื่องมือ `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 Schema - -เมื่อใช้ `type: 'json_schema'` ให้ระบุ: - -| ฟิลด์ | Type | คำอธิบาย | -| ------------ | --------------- | --------------------------------------------------------------------- | -| `type` | `'json_schema'` | จำเป็น ระบุโหมด JSON schema | -| `schema` | `object` | จำเป็น วัตถุ JSON Schema ที่กำหนดโครงสร้างผลลัพธ์ | -| `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` ที่เหมาะสม** - เพิ่มสำหรับสคีมาที่ซับซ้อน ลดลงสำหรับสคีมาที่เรียบง่าย - ---- - -## API - -SDK เปิดเผย API ของเซิร์ฟเวอร์ทั้งหมดผ่านไคลเอ็นต์ประเภทที่ปลอดภัย - ---- - -### ทั่วโลก - -| Method | คำอธิบาย | การตอบสนอง | -| ----------------- | ------------------------------------ | ------------------------------------ | -| `global.health()` | ตรวจสอบสภาพและเวอร์ชันของเซิร์ฟเวอร์ | `{ healthy: true, version: string }` | - ---- - -#### ตัวอย่าง - -```javascript -const health = await client.global.health() -console.log(health.data.version) -``` - ---- - -### แอป - -| Method | คำอธิบาย | การตอบสนอง | -| -------------- | ----------------------------- | -------------------------------------------- | -| `app.log()` | เขียนรายการบันทึก | `boolean` | -| `app.agents()` | รายชื่อตัวแทนที่มีอยู่ทั้งหมด | ตัวแทน[] | - ---- - -#### ตัวอย่าง - -```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() -``` - ---- - -### โครงการ - -| Method | คำอธิบาย | การตอบสนอง | -| ------------------- | ------------------------ | --------------------------------------------- | -| `project.list()` | แสดงรายการโครงการทั้งหมด | Project[] | -| `project.current()` | รับโครงการปัจจุบัน | Project | - ---- - -#### ตัวอย่าง - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### เส้นทาง - -| Method | คำอธิบาย | การตอบสนอง | -| ------------ | ------------------ | ---------------------------------------- | -| `path.get()` | รับเส้นทางปัจจุบัน | Path | - ---- - -#### ตัวอย่าง - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### การกำหนดค่า - -| Method | คำอธิบาย | การตอบสนอง | -| -------------------- | ----------------------------------- | --------------------------------------------------------------------------------------------------------- | -| `config.get()` | รับข้อมูลการกำหนดค่า | กำหนดค่า | -| `config.providers()` | ผู้ให้บริการรายชื่อและโมเดลเริ่มต้น | `{ providers: `ผู้ให้บริการ[]`, default: { [key: string]: string } }` | - ---- - -#### ตัวอย่าง - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### เซสชัน - -| Method | คำอธิบาย | หมายเหตุ | -| ---------------------------------------------------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `session.list()` | แสดงรายการเซสชัน | ส่งคืน เซสชัน[] | -| `session.get({ path })` | รับเซสชัน | ส่งคืน เซสชัน | -| `session.children({ path })` | แสดงรายการเซสชันย่อย | ส่งคืน เซสชัน[] | -| `session.create({ body })` | สร้างเซสชัน | ส่งคืน เซสชัน | -| `session.delete({ path })` | ลบเซสชัน | ส่งคืน `boolean` | -| `session.update({ path, body })` | อัปเดตคุณสมบัติเซสชัน | ส่งคืน เซสชัน | -| `session.init({ path, body })` | วิเคราะห์แอปและสร้าง `AGENTS.md` | ส่งคืน `boolean` | -| `session.abort({ path })` | ยกเลิกเซสชันที่ทำงานอยู่ | ส่งคืน `boolean` | -| `session.share({ path })` | แบ่งปันเซสชั่น | ส่งคืน เซสชัน | -| `session.unshare({ path })` | เลิกแชร์เซสชัน | ส่งคืน เซสชัน | -| `session.summarize({ path, body })` | สรุปเซสชัน | ส่งคืน `boolean` | -| `session.messages({ path })` | แสดงรายการข้อความในเซสชัน | ส่งคืน `{ info: `ข้อความ`, parts: `ส่วน[]`}[]` | -| `session.message({ path })` | รับรายละเอียดข้อความ | ส่งคืน `{ info: `ข้อความ`, parts: `ส่วน[]`}` | -| `session.prompt({ path, body })` | ส่งข้อความแจ้ง | `body.noReply: true` ส่งคืน UserMessage (บริบทเท่านั้น) ค่าเริ่มต้นส่งคืน AssistantMessage พร้อมการตอบสนองของ AI รองรับ `body.outputFormat` สำหรับ [ผลลัพธ์แบบมีโครงสร้าง](#ผลลัพธ์แบบมีโครงสร้าง) | -| `session.command({ path, body })` | ส่งคำสั่งไปยังเซสชั่น | ส่งคืน `{ info: `AssistantMessage`, parts: `ส่วน[]`}` | -| `session.shell({ path, body })` | รันคำสั่ง shell | ส่งคืน AssistantMessage | -| `session.revert({ path, body })` | คืนค่าข้อความ | ส่งคืน เซสชัน | -| `session.unrevert({ path })` | คืนค่าข้อความที่เปลี่ยนกลับ | ส่งคืน เซสชัน | -| `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." }], - }, -}) -``` - ---- - -### ไฟล์ - -| Method | คำอธิบาย | การตอบสนอง | -| ------------------------- | ------------------------------ | ----------------------------------------------------------------------------------------- | -| `find.text({ query })` | ค้นหาข้อความในไฟล์ | อาร์เรย์ของวัตถุที่ตรงกับ `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `find.files({ query })` | ค้นหาไฟล์และไดเร็กทอรีตามชื่อ | `string[]` (paths) | -| `find.symbols({ query })` | ค้นหาสัญลักษณ์พื้นที่ทำงาน | Symbol[] | -| `file.read({ query })` | อ่านไฟล์ | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | รับสถานะสำหรับไฟล์ที่ถูกติดตาม | File[] | - -`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 - -| Method | คำอธิบาย | การตอบสนอง | -| ------------------------------ | ------------------------------ | ---------- | -| `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 })` | แสดงการแจ้งเตือนขนมปังปิ้ง | `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" }, -}) -``` - ---- - -### การรับรองความถูกต้อง - -| Method | คำอธิบาย | การตอบสนอง | -| ------------------- | ----------------------------------------- | ---------- | -| `auth.set({ ... })` | ตั้งค่าข้อมูลประจำตัวการรับรองความถูกต้อง | `boolean` | - ---- - -#### ตัวอย่าง - -```javascript -await client.auth.set({ - path: { id: "anthropic" }, - body: { type: "api", key: "your-api-key" }, -}) -``` - ---- - -### กิจกรรม - -| Method | คำอธิบาย | การตอบสนอง | -| ------------------- | ------------------------------- | ------------------------------- | -| `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) -} -``` diff --git a/packages/web/src/content/docs/th/server.mdx b/packages/web/src/content/docs/th/server.mdx deleted file mode 100644 index 13302cf578..0000000000 --- a/packages/web/src/content/docs/th/server.mdx +++ /dev/null @@ -1,287 +0,0 @@ ---- -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 ] [--hostname ] [--cors ] -``` - -#### ตัวเลือก - -| Flag | คำอธิบาย | ค่าเริ่มต้น | -| --------------- | ---------------------------------------- | ---------------- | -| `--port` | พอร์ตที่จะฟัง | `4096` | -| `--hostname` | ชื่อโฮสต์ที่จะฟัง | `127.0.0.1` | -| `--mdns` | เปิดใช้งานการค้นพบ mDNS | `false` | -| `--mdns-domain` | ชื่อโดเมนที่กำหนดเองสำหรับบริการ mDNS | `opencode.local` | -| `--cors` | ต้นกำเนิดเบราว์เซอร์เพิ่มเติมที่จะอนุญาต | `[]` | - -`--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` มันจะเริ่มต้น TUI และเซิร์ฟเวอร์ โดยที่ TUI คือ -ลูกค้าที่พูดคุยกับเซิร์ฟเวอร์ เซิร์ฟเวอร์เปิดเผยข้อมูลจำเพาะของ OpenAPI 3.1 -จุดสิ้นสุด ตำแหน่งข้อมูลนี้ยังใช้เพื่อสร้าง [SDK](/docs/sdk) - -:::tip -ใช้เซิร์ฟเวอร์ opencode เพื่อโต้ตอบกับ opencode โดยทางโปรแกรม -::: - -สถาปัตยกรรมนี้ช่วยให้ opencode รองรับไคลเอนต์หลายตัว และช่วยให้คุณสามารถโต้ตอบกับ opencode โดยทางโปรแกรมได้ - -คุณสามารถเรียกใช้ `opencode serve` เพื่อเริ่มเซิร์ฟเวอร์แบบสแตนด์อโลน ถ้าคุณมี -opencode TUI ทำงาน `opencode serve` จะเริ่มเซิร์ฟเวอร์ใหม่ - ---- - -#### เชื่อมต่อกับเซิร์ฟเวอร์ที่มีอยู่ - -เมื่อคุณเริ่ม TUI มันจะสุ่มกำหนดพอร์ตและชื่อโฮสต์ คุณสามารถผ่าน `--hostname` และ `--port` [ธง](/docs/cli) แทนได้ จากนั้นใช้สิ่งนี้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ - -ตำแหน่งข้อมูล [`/tui`](#tui) สามารถใช้เพื่อขับเคลื่อน TUI ผ่านเซิร์ฟเวอร์ ตัวอย่างเช่น คุณสามารถกรอกข้อมูลล่วงหน้าหรือเรียกใช้พร้อมท์ได้ การตั้งค่านี้ถูกใช้โดยปลั๊กอิน OpenCode [IDE](/docs/ide) - ---- - -## ข้อมูลจำเพาะ - -เซิร์ฟเวอร์เผยแพร่ข้อมูลจำเพาะ OpenAPI 3.1 ที่สามารถดูได้ที่: - -``` -http://:/doc -``` - -ตัวอย่างเช่น `http://localhost:4096/doc` ใช้ข้อมูลจำเพาะเพื่อสร้างไคลเอ็นต์หรือตรวจสอบคำขอและประเภทการตอบกลับ หรือดูใน Swagger explorer - ---- - -## API - -เซิร์ฟเวอร์ opencode เปิดเผย API ต่อไปนี้ - ---- - -### ทั่วโลก - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | ---------------- | --------------------------------- | ------------------------------------ | -| `GET` | `/global/health` | รับสถานะและเวอร์ชันของเซิร์ฟเวอร์ | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | รับกิจกรรมระดับโลก (SSE สตรีม) | สตรีมกิจกรรม | - ---- - -### โครงการ - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | ------------------ | ------------------------ | --------------------------------------------- | -| `GET` | `/project` | แสดงรายการโครงการทั้งหมด | Project[] | -| `GET` | `/project/current` | รับโครงการปัจจุบัน | Project | - ---- - -### เส้นทาง & VCS - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | ------- | ----------------------------------- | ------------------------------------------- | -| `GET` | `/path` | รับเส้นทางปัจจุบัน | Path | -| `GET` | `/vcs` | รับข้อมูล VCS สำหรับโครงการปัจจุบัน | VcsInfo | - ---- - -### ตัวอย่าง - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | ------------------- | ---------------------- | ---------- | -| `POST` | `/instance/dispose` | กำจัดอินสแตนซ์ปัจจุบัน | `boolean` | - ---- - -### การกำหนดค่า - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------- | ------------------- | ----------------------------------- | -------------------------------------------------------------------------------------------- | -| `GET` | `/config` | รับข้อมูลการกำหนดค่า | กำหนดค่า | -| `PATCH` | `/config` | อัปเดตการกำหนดค่า | กำหนดค่า | -| `GET` | `/config/providers` | ผู้ให้บริการรายชื่อและโมเดลเริ่มต้น | `{ providers: `ผู้ให้บริการ[]`, default: { [key: string]: string } }` | - ---- - -### ผู้ให้บริการ - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | -------------------------------- | ------------------------------------------- | --------------------------------------------------------------------------------------- | -| `GET` | `/provider` | รายชื่อผู้ให้บริการทั้งหมด | `{ all: `ผู้ให้บริการ[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | รับวิธีการตรวจสอบความถูกต้องของผู้ให้บริการ | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | ให้สิทธิ์ผู้ให้บริการโดยใช้ OAuth | การอนุญาตของผู้ให้บริการ | -| `POST` | `/provider/{id}/oauth/callback` | จัดการการโทรกลับ OAuth สำหรับผู้ให้บริการ | `boolean` | - ---- - -### เซสชัน - -| Method | เส้นทาง | คำอธิบาย | หมายเหตุ | -| -------- | ---------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------- | -| `GET` | `/session` | แสดงรายการเซสชันทั้งหมด | ส่งคืน เซสชัน[] | -| `POST` | `/session` | สร้างเซสชันใหม่ | body: `{ parentID?, title? }` ส่งคืน เซสชัน | -| `GET` | `/session/status` | รับสถานะเซสชันสำหรับเซสชันทั้งหมด | ส่งคืน `{ [sessionID: string]: `SessionStatus` }` | -| `GET` | `/session/:id` | รับรายละเอียดเซสชั่น | ส่งคืน เซสชัน | -| `DELETE` | `/session/:id` | ลบเซสชันและข้อมูลทั้งหมด | ส่งคืน `boolean` | -| `PATCH` | `/session/:id` | อัปเดตคุณสมบัติเซสชัน | body: `{ title? }` ส่งคืน เซสชัน | -| `GET` | `/session/:id/children` | รับเซสชันย่อยของเซสชัน | ส่งคืน เซสชัน[] | -| `GET` | `/session/:id/todo` | รับรายการสิ่งที่ต้องทำสำหรับเซสชัน | ส่งคืน สิ่งที่ต้องทำ[] | -| `POST` | `/session/:id/init` | วิเคราะห์แอปและสร้าง `AGENTS.md` | เนื้อความ: `{ messageID, providerID, modelID }` ส่งคืน `boolean` | -| `POST` | `/session/:id/fork` | แยกเซสชันที่มีอยู่ไปที่ข้อความ | body: `{ messageID? }` ส่งคืน เซสชัน | -| `POST` | `/session/:id/abort` | ยกเลิกเซสชันที่ทำงานอยู่ | ส่งคืน `boolean` | -| `POST` | `/session/:id/share` | แบ่งปันเซสชั่น | ส่งคืน เซสชัน | -| `DELETE` | `/session/:id/share` | ยกเลิกการแชร์เซสชัน | ส่งคืน เซสชัน | -| `GET` | `/session/:id/diff` | รับความแตกต่างสำหรับเซสชั่นนี้ | ข้อความค้นหา: `messageID?` ส่งคืน FileDiff[] | -| `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` | - ---- - -### ข้อความ - -| Method | เส้นทาง | คำอธิบาย | หมายเหตุ | -| ------ | --------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `GET` | `/session/:id/message` | แสดงรายการข้อความในเซสชัน | ข้อความค้นหา: `limit?` ส่งคืน `{ info: `ข้อความ`, parts: `ส่วน[]`}[]` | -| `POST` | `/session/:id/message` | ส่งข้อความและรอการตอบกลับ | เนื้อความ: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }` ส่งคืน `{ info: `ข้อความ`, parts: `ส่วน[]`}` | -| `GET` | `/session/:id/message/:messageID` | รับรายละเอียดข้อความ | ส่งคืน `{ info: `ข้อความ`, parts: `ส่วนหนึ่ง[]`}` | -| `POST` | `/session/:id/prompt_async` | ส่งข้อความแบบอะซิงโครนัส (ไม่ต้องรอ) | เนื้อความ: เหมือนกับ `/session/:id/message` ส่งคืน `204 No Content` | -| `POST` | `/session/:id/command` | ดำเนินการคำสั่งเครื่องหมายทับ | เนื้อความ: `{ messageID?, agent?, model?, command, arguments }` ส่งคืน `{ info: `ข้อความ`, parts: `ส่วน[]`}` | -| `POST` | `/session/:id/shell` | รันคำสั่ง shell | เนื้อความ: `{ agent, model?, command }` ส่งคืน `{ info: `ข้อความ`, parts: `ส่วน[]`}` | - ---- - -### คำสั่ง - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | ---------- | ----------------------- | --------------------------------------------- | -| `GET` | `/command` | แสดงรายการคำสั่งทั้งหมด | Command[] | - ---- - -### ไฟล์ - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | ------------------------ | ------------------------------ | ----------------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | ค้นหาข้อความในไฟล์ | อาร์เรย์ของวัตถุที่ตรงกับ `path`, `lines`, `line_number`, `absolute_offset`, `submatches` | -| `GET` | `/find/file?query=` | ค้นหาไฟล์และไดเร็กทอรีตามชื่อ | `string[]` (paths) | -| `GET` | `/find/symbol?query=` | ค้นหาสัญลักษณ์พื้นที่ทำงาน | Symbol[] | -| `GET` | `/file?path=` | แสดงรายการไฟล์และไดเร็กทอรี | FileNode[] | -| `GET` | `/file/content?path=

` | อ่านไฟล์ | เนื้อหาไฟล์ | -| `GET` | `/file/status` | รับสถานะสำหรับไฟล์ที่ถูกติดตาม | File[] | - -#### `/find/file` พารามิเตอร์การสืบค้น - -- `query` (จำเป็น) — สตริงการค้นหา (การจับคู่แบบคลุมเครือ) -- `type` (ไม่บังคับ) — จำกัดผลลัพธ์ไว้ที่ `"file"` หรือ `"directory"` -- `directory` (เป็นทางเลือก) — แทนที่รูทโปรเจ็กต์สำหรับการค้นหา -- `limit` (ไม่บังคับ) — ผลลัพธ์สูงสุด (1–200) -- `dirs` (ไม่บังคับ) — แฟล็กดั้งเดิม (`"false"` ส่งคืนเฉพาะไฟล์) - ---- - -### เครื่องมือ (ขั้นทดลอง) - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | ------------------------------------------- | ----------------------------------------------- | ---------------------------------------------------- | -| `GET` | `/experimental/tool/ids` | แสดงรายการรหัสเครื่องมือทั้งหมด | รหัสเครื่องมือ | -| `GET` | `/experimental/tool?provider=

&model=` | แสดงรายการเครื่องมือที่มีสกีมา JSON สำหรับโมเดล | รายการเครื่องมือ | - ---- - -### LSP, ฟอร์แมตเตอร์ & MCP - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | ------------ | ------------------------------- | -------------------------------------------------------- | -| `GET` | `/lsp` | รับ LSP สถานะเซิร์ฟเวอร์ | LSPStatus[] | -| `GET` | `/formatter` | รับสถานะฟอร์แมตเตอร์ | FormatterStatus[] | -| `GET` | `/mcp` | รับ MCP สถานะเซิร์ฟเวอร์ | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | เพิ่มเซิร์ฟเวอร์ MCP แบบไดนามิก | body: `{ name, config }` ส่งคืนออบเจ็กต์สถานะ MCP | - ---- - -### ตัวแทน - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | -------- | ----------------------------- | -------------------------------------------- | -| `GET` | `/agent` | รายชื่อตัวแทนที่มีอยู่ทั้งหมด | ตัวแทน[] | - ---- - -### การบันทึก - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | ------- | ------------------------------------------------------------------ | ---------- | -| `POST` | `/log` | เขียนรายการบันทึก เนื้อความ: `{ service, level, message, extra? }` | `boolean` | - ---- - -### TUI - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | ----------------------- | ----------------------------------------------- | --------------- | -| `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` | โชว์ขนมปังปิ้ง (`{ title?, message, variant }`) | `boolean` | -| `GET` | `/tui/control/next` | รอคำขอควบคุมถัดไป | วัตถุคำขอควบคุม | -| `POST` | `/tui/control/response` | ตอบสนองต่อคำขอควบคุม (`{ body }`) | `boolean` | - ---- - -### การรับรองความถูกต้อง - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | ----------- | --------------------------------------------------------------------------------- | ---------- | -| `PUT` | `/auth/:id` | ตั้งค่าข้อมูลประจำตัวการรับรองความถูกต้อง เนื้อความต้องตรงกับสคีมาของผู้ให้บริการ | `boolean` | - ---- - -### กิจกรรม - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | -------- | ---------------------------------------------------------------------------- | ------------------------------- | -| `GET` | `/event` | สตรีมเหตุการณ์ที่เซิร์ฟเวอร์ส่ง งานแรกคือ `server.connected` จากนั้นงานรถบัส | สตรีมเหตุการณ์ที่เซิร์ฟเวอร์ส่ง | - ---- - -### เอกสาร - -| Method | เส้นทาง | คำอธิบาย | การตอบสนอง | -| ------ | ------- | --------------------------- | ---------------------------------- | -| `GET` | `/doc` | ข้อมูลจำเพาะของ OpenAPI 3.1 | HTML หน้าพร้อมข้อมูลจำเพาะ OpenAPI | diff --git a/packages/web/src/content/docs/th/share.mdx b/packages/web/src/content/docs/th/share.mdx deleted file mode 100644 index 91bfce4417..0000000000 --- a/packages/web/src/content/docs/th/share.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: แบ่งปัน -description: แบ่งปันการสนทนา OpenCode ของคุณ ---- - -คุณลักษณะการแชร์ของ OpenCode ช่วยให้คุณสร้างลิงก์สาธารณะไปยังการสนทนา OpenCode ของคุณ เพื่อให้คุณสามารถทำงานร่วมกับเพื่อนร่วมทีมหรือรับความช่วยเหลือจากผู้อื่นได้ - -:::note -ทุกคนที่มีลิงก์สามารถเข้าถึงการสนทนาที่แชร์ได้แบบสาธารณะ -::: - ---- - -## มันทำงานอย่างไร - -เมื่อคุณแบ่งปันการสนทนา OpenCode: - -1. สร้าง URL สาธารณะที่ไม่ซ้ำสำหรับเซสชันของคุณ -2. ซิงค์ประวัติการสนทนาของคุณกับเซิร์ฟเวอร์ของเรา -3. ทำให้สามารถเข้าถึงการสนทนาผ่านลิงก์ที่แชร์ได้ — `opncd.ai/s/` - ---- - -## การแบ่งปัน - -OpenCode รองรับโหมดการแชร์สามโหมดที่ควบคุมวิธีการแชร์การสนทนา: - ---- - -### Manual (ค่าเริ่มต้น) - -ตามค่าเริ่มต้น 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 ในองค์กรของคุณ diff --git a/packages/web/src/content/docs/th/skills.mdx b/packages/web/src/content/docs/th/skills.mdx deleted file mode 100644 index d3658e66c3..0000000000 --- a/packages/web/src/content/docs/th/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: ทักษะของเอเจนต์ -description: "กำหนดพฤติกรรมที่นำมาใช้ซ้ำได้ผ่านคำจำกัดความ SKILL.md" ---- - -ทักษะของเจ้าหน้าที่ช่วยให้ OpenCode ค้นพบคำแนะนำที่ใช้ซ้ำได้จาก repo หรือโฮมไดเร็กทอรีของคุณ -ทักษะจะถูกโหลดตามความต้องการผ่านเครื่องมือ `skill` ดั้งเดิม ตัวแทนจะเห็นทักษะที่มีอยู่และสามารถโหลดเนื้อหาทั้งหมดได้เมื่อจำเป็น - ---- - -## วางไฟล์ - -สร้างหนึ่งโฟลเดอร์ต่อชื่อทักษะ และใส่ `SKILL.md` ไว้ข้างใน -OpenCode ค้นหาตำแหน่งเหล่านี้: - -- การกำหนดค่าโครงการ: `.opencode/skills//SKILL.md` -- การกำหนดค่าส่วนกลาง: `~/.config/opencode/skills//SKILL.md` -- เข้ากันได้กับโครงการ Claude: `.claude/skills//SKILL.md` -- เข้ากันได้กับ Global Claude: `~/.claude/skills//SKILL.md` -- เข้ากันได้กับตัวแทนโครงการ: `.agents/skills//SKILL.md` -- รองรับตัวแทนทั่วโลก: `~/.agents/skills//SKILL.md` - ---- - -## ทำความเข้าใจกับการค้นพบ - -สำหรับเส้นทางภายในโปรเจ็กต์ OpenCode จะเดินขึ้นมาจากไดเร็กทอรีการทำงานปัจจุบันของคุณจนกว่าจะถึงแผนผังงาน git -โดยจะโหลด `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` แต่ละอันต้องขึ้นต้นด้วย YAML frontmatter -เฉพาะฟิลด์เหล่านี้เท่านั้นที่ได้รับการยอมรับ: - -- `name` (จำเป็น) -- `description` (จำเป็น) -- `license` (ไม่บังคับ) -- `compatibility` (ไม่บังคับ) -- `metadata` (ตัวเลือก แมปแบบสตริงต่อสตริง) - -ช่อง frontmatter ที่ไม่รู้จักจะถูกละเว้น - ---- - -## ตรวจสอบชื่อ - -`name` ต้อง: - -- มีความยาว 1–64 อักขระ -- เป็นตัวพิมพ์เล็กและตัวเลขคละกันที่มีเครื่องหมายยัติภังค์ตัวคั่นเดียว -- ไม่ขึ้นต้นหรือลงท้ายด้วย `-` -- ไม่มี `--` ติดต่อกัน -- จับคู่ชื่อไดเร็กทอรีที่มี `SKILL.md` - -regex ที่เทียบเท่า: - -```text -^[a-z0-9]+(-[a-z0-9]+)*$ -``` - ---- - -## ปฏิบัติตามกฎความยาว - -`description` ต้องมีความยาว 1-1,024 ตัวอักษร -เจาะจงให้ตัวแทนเลือกได้ถูกต้อง - ---- - -## ใช้ตัวอย่าง - -สร้าง `.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 - - - git-release - Create consistent releases and changelogs - - -``` - -ตัวแทนโหลดทักษะโดยการเรียกเครื่องมือ: - -``` -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` ฯลฯ - ---- - -## แทนที่ต่อเอเจนต์ - -ให้สิทธิ์แก่ตัวแทนเฉพาะเจาะจงที่แตกต่างจากค่าเริ่มต้นทั่วไป - -**สำหรับตัวแทนแบบกำหนดเอง** (ในตัวแทนส่วนหน้า): - -```yaml ---- -permission: - skill: - "documents-*": "allow" ---- -``` - -**สำหรับตัวแทนในตัว** (ใน `opencode.json`): - -```json -{ - "agent": { - "plan": { - "permission": { - "skill": { - "internal-*": "allow" - } - } - } - } -} -``` - ---- - -## ปิดการใช้งานเครื่องมือทักษะ - -ปิดการใช้งานทักษะโดยสิ้นเชิงสำหรับตัวแทนที่ไม่ควรใช้: - -**สำหรับตัวแทนแบบกำหนดเอง**: - -```yaml ---- -tools: - skill: false ---- -``` - -**สำหรับตัวแทนในตัว**: - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -เมื่อปิดใช้งาน ส่วน `` จะถูกละเว้นทั้งหมด - ---- - -## แก้ไขปัญหาการโหลด - -หากทักษะไม่แสดง: - -1. ตรวจสอบว่า `SKILL.md` สะกดด้วยตัวพิมพ์ใหญ่ทั้งหมด -2. ตรวจสอบว่าส่วนหน้าประกอบด้วย `name` และ `description` -3. ตรวจสอบให้แน่ใจว่าชื่อทักษะไม่ซ้ำกันในทุกสถานที่ -4. ตรวจสอบการอนุญาต ทักษะที่มี `deny` ถูกซ่อนไม่ให้ตัวแทนเห็น diff --git a/packages/web/src/content/docs/th/themes.mdx b/packages/web/src/content/docs/th/themes.mdx deleted file mode 100644 index 44514148ea..0000000000 --- a/packages/web/src/content/docs/th/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -title: ธีมส์ -description: เลือกธีมในตัวหรือกำหนดธีมของคุณเอง ---- - -ด้วย OpenCode คุณสามารถเลือกจากหนึ่งในธีมที่มีอยู่แล้วภายใน ใช้ธีมที่ปรับให้เข้ากับธีม terminal ของคุณ หรือกำหนดธีมที่คุณกำหนดเองได้ - -ตามค่าเริ่มต้น OpenCode จะใช้ธีม `opencode` ของเราเอง - ---- - -## ข้อกำหนดของ terminal - -เพื่อให้ธีมแสดงได้อย่างถูกต้องด้วยชุดสีทั้งหมด terminal ของคุณต้องรองรับ **truecolor** (สี 24 บิต) terminal สมัยใหม่ส่วนใหญ่จะรองรับสิ่งนี้ตามค่าเริ่มต้น แต่คุณอาจต้องเปิดใช้งาน: - -- **ตรวจสอบการสนับสนุน**: เรียกใช้ `echo $COLORTERM` - ​​ควรส่งออก `truecolor` หรือ `24bit` -- **เปิดใช้งานสีจริง**: ตั้งค่าตัวแปรสภาพแวดล้อม `COLORTERM=truecolor` ในโปรไฟล์ shell ของคุณ -- **ความเข้ากันได้ของ terminal**: ตรวจสอบให้แน่ใจว่าโปรแกรมจำลอง terminal ของคุณรองรับสี 24 บิต (terminal ที่ทันสมัยที่สุด เช่น iTerm2, Alacritty, Kitty, Windows Terminal และ GNOME Terminal do เวอร์ชันล่าสุด) - -หากไม่รองรับสีจริง ธีมอาจปรากฏขึ้นโดยมีความแม่นยำของสีลดลงหรือกลับไปใช้การประมาณสี 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) Dark | - -และยิ่งไปกว่านั้น เรายังเพิ่มธีมใหม่ๆ อย่างต่อเนื่อง - ---- - -## ธีมของระบบ - -ธีม `system` ได้รับการออกแบบให้ปรับให้เข้ากับโทนสีของเครื่อง terminal ของคุณโดยอัตโนมัติ ไม่เหมือนกับธีมดั้งเดิมที่ใช้สีคงที่ ธีม _system_: - -- **สร้างระดับสีเทา**: สร้างระดับสีเทาแบบกำหนดเองตามสีพื้นหลังของ terminal ของคุณ เพื่อให้มั่นใจว่ามีคอนทราสต์ที่เหมาะสมที่สุด -- **ใช้สี ANSI**: ใช้ประโยชน์จากสี ANSI มาตรฐาน (0-15) สำหรับการเน้นไวยากรณ์และองค์ประกอบ UI ซึ่งเคารพชุดสีของ terminal ของคุณ -- **รักษาค่าเริ่มต้นของ terminal**: ใช้ `none` สำหรับสีข้อความและพื้นหลัง เพื่อรักษารูปลักษณ์ดั้งเดิมของ terminal ของคุณ - -ธีมของระบบมีไว้สำหรับผู้ใช้ที่: - -- ต้องการให้ OpenCode ตรงกับรูปลักษณ์ของ terminal -- ใช้โครงร่างสี terminal แบบกำหนดเอง -- ต้องการรูปลักษณ์ที่สอดคล้องกันในแอปพลิเคชัน terminal ทั้งหมด - ---- - -## การใช้ธีม - -คุณสามารถเลือกธีมได้โดยเปิดการเลือกธีมขึ้นมาด้วยคำสั่ง `/theme` หรือคุณสามารถระบุได้ใน `tui.json` - -```json title="tui.json" {3} -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - ---- - -## ธีมที่กำหนดเอง - -OpenCode รองรับระบบธีมที่ใช้ JSON ที่ยืดหยุ่น ซึ่งช่วยให้ผู้ใช้สามารถสร้างและปรับแต่งธีมได้อย่างง่ายดาย - ---- - -### ลำดับชั้น - -ธีมจะถูกโหลดจากหลายไดเร็กทอรีตามลำดับต่อไปนี้ โดยไดเร็กทอรีรุ่นหลังจะแทนที่ไดเร็กทอรีก่อนหน้า: - -1. **ธีมในตัว** - ธีมเหล่านี้ฝังอยู่ในไบนารี -2. **ไดเรกทอรีกำหนดค่าผู้ใช้** - กำหนดใน `~/.config/opencode/themes/*.json` หรือ `$XDG_CONFIG_HOME/opencode/themes/*.json` -3. **ไดเรกทอรีรากของโครงการ** - กำหนดไว้ใน `/.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/light ตัวแปร**: `{"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" - } - } -} -``` diff --git a/packages/web/src/content/docs/th/tools.mdx b/packages/web/src/content/docs/th/tools.mdx deleted file mode 100644 index 5006b41de6..0000000000 --- a/packages/web/src/content/docs/th/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -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 - -ค้นหาเนื้อหาไฟล์โดยใช้นิพจน์ทั่วไป - -```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 (ขั้นทดลอง) - -โต้ตอบกับเซิร์ฟเวอร์ 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 - -ใช้แพทช์กับไฟล์ - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -เครื่องมือนี้ใช้ไฟล์แพทช์กับโค้ดเบสของคุณ มีประโยชน์สำหรับการใช้ความแตกต่างและแพตช์จากแหล่งต่างๆ - -:::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/#สิทธิ์) -::: - ---- - -### 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` เมื่อคุณต้องการค้นหาข้อมูล (การค้นพบ) และใช้ `webfetch` เมื่อคุณต้องการดึงเนื้อหาจาก URL เฉพาะ (การดึงข้อมูล) -::: - ---- - -### 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` ก็ตาม diff --git a/packages/web/src/content/docs/th/troubleshooting.mdx b/packages/web/src/content/docs/th/troubleshooting.mdx deleted file mode 100644 index cd50c13797..0000000000 --- a/packages/web/src/content/docs/th/troubleshooting.mdx +++ /dev/null @@ -1,300 +0,0 @@ ---- -title: การแก้ไขปัญหา -description: ปัญหาทั่วไปและวิธีแก้ปัญหา ---- - -หากต้องการแก้ไขข้อบกพร่องเกี่ยวกับ OpenCode ให้เริ่มต้นด้วยการตรวจสอบบันทึกและข้อมูลในเครื่องที่จัดเก็บไว้ในดิสก์ - ---- - -## บันทึก - -ไฟล์บันทึกถูกเขียนไปที่: - -- **macOS/Linux**: `~/.local/share/opencode/log/` -- **Windows**: กด `WIN+R` แล้ววาง `%USERPROFILE%\.local\share\opencode\log` - -ไฟล์บันทึกจะถูกตั้งชื่อด้วยการประทับเวลา (เช่น `2025-01-09T123456.log`) และไฟล์บันทึกล่าสุด 10 ไฟล์จะถูกเก็บไว้ - -คุณสามารถตั้งค่าระดับการบันทึกด้วยตัวเลือกบรรทัดคำสั่ง `--log-level` เพื่อรับข้อมูลการแก้ไขข้อบกพร่องโดยละเอียดเพิ่มเติม ตัวอย่างเช่น `opencode --log-level DEBUG` - ---- - -## พื้นที่จัดเก็บ - -opencode เก็บข้อมูลเซสชันและข้อมูลแอปพลิเคชันอื่น ๆ ไว้บนดิสก์ที่: - -- **macOS/Linux**: `~/.local/share/opencode/` -- **Windows**: กด `WIN+R` แล้ววาง `%USERPROFILE%\.local\share\opencode` - -ไดเรกทอรีนี้ประกอบด้วย: - -- `auth.json` - ​​ข้อมูลการตรวจสอบสิทธิ์ เช่น คีย์ API, OAuth Token -- `log/` - ​​บันทึกแอปพลิเคชัน -- `project/` - ​​ข้อมูลเฉพาะโครงการ เช่น ข้อมูลเซสชันและข้อความ - - หากโปรเจ็กต์อยู่ภายใน repo Git มันจะถูกจัดเก็บไว้ใน `.//storage/` - - หากไม่ใช่ repo Git มันจะถูกเก็บไว้ใน `./global/storage/` - ---- - -## แอปเดสก์ท็อป - -OpenCode Desktop รันเซิร์ฟเวอร์ OpenCode ในเครื่อง (ไฟล์ `opencode-cli` sidecar) ในเบื้องหลัง ปัญหาส่วนใหญ่มีสาเหตุมาจากปลั๊กอินที่ทำงานผิดปกติ แคชเสียหาย หรือการตั้งค่าเซิร์ฟเวอร์ไม่ถูกต้อง - -### การตรวจสอบอย่างรวดเร็ว - -- ออกจากระบบโดยสมบูรณ์แล้วเปิดแอปใหม่อีกครั้ง -- หากแอปแสดงหน้าจอข้อผิดพลาด ให้คลิก **รีสตาร์ท** และคัดลอกรายละเอียดข้อผิดพลาด -- macOS เท่านั้น: เมนู `OpenCode` -> **โหลด Webview ใหม่** (ช่วยได้หาก UI ว่างเปล่า/frozen) - ---- - -### ปิดการใช้งานปลั๊กอิน - -หากแอปเดสก์ท็อปขัดข้องเมื่อเปิดใช้งาน หยุดทำงาน หรือทำงานผิดปกติ ให้เริ่มต้นด้วยการปิดใช้งานปลั๊กอิน - -#### ตรวจสอบการกำหนดค่าส่วนกลาง - -เปิดไฟล์กำหนดค่าส่วนกลางของคุณแล้วมองหาคีย์ `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` -- **ปลั๊กอินโครงการ** (เฉพาะในกรณีที่คุณใช้การกำหนดค่าต่อโครงการ) - - `/.opencode/plugins/` - -หากแอปเริ่มทำงานอีกครั้ง ให้เปิดใช้งานปลั๊กอินอีกครั้งทีละรายการเพื่อดูว่าปลั๊กอินใดเป็นสาเหตุของปัญหา - ---- - -### ล้างแคช - -หากการปิดใช้งานปลั๊กอินไม่ได้ผล (หรือการติดตั้งปลั๊กอินค้าง) ให้ล้างแคชเพื่อให้ OpenCode สามารถสร้างใหม่ได้ - -1. ออกจาก OpenCode Desktop โดยสมบูรณ์ -2. ลบไดเรกทอรีแคช: - -- **macOS**: ตัวค้นหา -> `Cmd+Shift+G` -> วาง `~/.cache/opencode` -- **Linux**: ลบ `~/.cache/opencode` (หรือรัน `rm -rf ~/.cache/opencode`) -- **Windows**: กด `WIN+R` แล้ววาง `%USERPROFILE%\.cache\opencode` - -3. รีสตาร์ทเดสก์ท็อป OpenCode - ---- - -### แก้ไขปัญหาการเชื่อมต่อเซิร์ฟเวอร์ - -OpenCode Desktop สามารถเริ่มต้นเซิร์ฟเวอร์ภายในเครื่องของตนเองได้ (ค่าเริ่มต้น) หรือเชื่อมต่อกับเซิร์ฟเวอร์ URL ที่คุณกำหนดค่าไว้ - -หากคุณเห็นกล่องโต้ตอบ **"การเชื่อมต่อล้มเหลว"** (หรือแอปไม่เคยผ่านหน้าจอเริ่มต้น) ให้ตรวจสอบเซิร์ฟเวอร์ที่กำหนดเอง URL - -#### ล้างเซิร์ฟเวอร์เริ่มต้นของเดสก์ท็อป URL - -จากหน้าจอหลัก คลิกชื่อเซิร์ฟเวอร์ (ที่มีจุดสถานะ) เพื่อเปิดตัวเลือกเซิร์ฟเวอร์ ในส่วน **เซิร์ฟเวอร์เริ่มต้น** คลิก **ล้าง** - -#### ลบ `server.port` / `server.hostname` ออกจากการกำหนดค่าของคุณ - -หาก `opencode.json(c)` ของคุณมีส่วน `server` ให้ลบออกชั่วคราวแล้วรีสตาร์ทแอปเดสก์ท็อป - -#### ตรวจสอบตัวแปรสภาพแวดล้อม - -หากคุณตั้งค่า `OPENCODE_PORT` ในสภาพแวดล้อมของคุณ แอปเดสก์ท็อปจะพยายามใช้พอร์ตนั้นสำหรับเซิร์ฟเวอร์ภายในเครื่อง - -- ยกเลิกการตั้งค่า `OPENCODE_PORT` (หรือเลือกพอร์ตว่าง) แล้วรีสตาร์ท - ---- - -### Linux: ปัญหา Wayland / X11 - -บน Linux การตั้งค่า Wayland บางอย่างอาจทำให้เกิดหน้าต่างว่างหรือข้อผิดพลาดของตัวประกอบ - -- หากคุณอยู่บน Wayland และแอปว่างเปล่า/crashing ให้ลองเปิดใช้งานด้วย `OC_ALLOW_WAYLAND=1` -- หากสิ่งนั้นทำให้สิ่งต่าง ๆ แย่ลง ให้ลบออกแล้วลองเปิดใช้งานภายใต้เซสชัน X11 แทน - ---- - -### Windows: รันไทม์ WebView2 - -บน Windows OpenCode Desktop ต้องใช้ Microsoft Edge **WebView2 Runtime** หากแอปเปิดเป็นหน้าต่างว่างหรือไม่เริ่มทำงาน ให้ติดตั้ง/update WebView2 แล้วลองอีกครั้ง - ---- - -### Windows: ปัญหาด้านประสิทธิภาพทั่วไป - -หากคุณประสบปัญหาประสิทธิภาพการทำงานช้า ปัญหาการเข้าถึงไฟล์ หรือปัญหา terminal บน Windows ให้ลองใช้ [WSL (ระบบย่อย Windows สำหรับ Linux)](/docs/windows-wsl) WSL มอบสภาพแวดล้อม Linux ที่ทำงานร่วมกับคุณสมบัติของ OpenCode ได้อย่างราบรื่นยิ่งขึ้น - ---- - -### การแจ้งเตือนไม่แสดง - -OpenCode Desktop จะแสดงการแจ้งเตือนของระบบเฉพาะเมื่อ: - -- การแจ้งเตือนเปิดใช้งานสำหรับ OpenCode ในการตั้งค่าระบบปฏิบัติการของคุณและ -- หน้าต่างแอพไม่ได้โฟกัส - ---- - -### รีเซ็ตที่เก็บข้อมูลแอปเดสก์ท็อป (วิธีสุดท้าย) - -หากแอปไม่เริ่มทำงานและคุณไม่สามารถล้างการตั้งค่าจากภายใน UI ได้ ให้รีเซ็ตสถานะที่บันทึกไว้ของแอปเดสก์ท็อป - -1. ออกจากเดสก์ท็อป OpenCode -2. ค้นหาและลบไฟล์เหล่านี้ (อยู่ในไดเร็กทอรีข้อมูลแอป OpenCode Desktop): - -- `opencode.settings.dat` (เซิร์ฟเวอร์เริ่มต้นของเดสก์ท็อป URL) -- `opencode.global.dat` และ `opencode.workspace.*.dat` (สถานะ UI เช่น เซิร์ฟเวอร์ล่าสุด/projects) - -หากต้องการค้นหาไดเร็กทอรีอย่างรวดเร็ว: - -- **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` เป็นไปได้มากว่าคุณจะคิดผิด -อ้างอิงแบบจำลองที่ไหนสักแห่ง -ควรอ้างอิงโมเดลดังนี้: `/` - -ตัวอย่าง: - -- `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 - ---- - -### Copy/paste ไม่ทำงานบน Linux - -ผู้ใช้ Linux จำเป็นต้องติดตั้งยูทิลิตี้คลิปบอร์ดตัวใดตัวหนึ่งต่อไปนี้เพื่อให้ฟังก์ชัน copy/paste ทำงาน: - -**สำหรับระบบ X11:** - -```bash -apt install -y xclip -# or -apt install -y xsel -``` - -**สำหรับระบบ Wayland:** - -```bash -apt install -y wl-clipboard -``` - -**สำหรับสภาพแวดล้อมที่ไม่มีหัว:** - -```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` diff --git a/packages/web/src/content/docs/th/tui.mdx b/packages/web/src/content/docs/th/tui.mdx deleted file mode 100644 index e3c5203ece..0000000000 --- a/packages/web/src/content/docs/th/tui.mdx +++ /dev/null @@ -1,429 +0,0 @@ ---- -title: TUI -description: การใช้อินเทอร์เฟซผู้ใช้ terminal 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 TUI คุณสามารถพิมพ์ `/` ตามด้วยชื่อคำสั่งเพื่อดำเนินการอย่างรวดเร็ว ตัวอย่างเช่น: - -```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" -/themes -``` - -**ผูกปุ่ม:** `ctrl+x t` - ---- - -### thinking - -สลับการเปิดเผยการบล็อก thinking/reasoning ในการสนทนา เมื่อเปิดใช้งาน คุณสามารถดูกระบวนการให้เหตุผลของแบบจำลองสำหรับแบบจำลองที่รองรับการคิดแบบขยาย - -:::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` ของคุณ - - - - ```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" - ``` - - หากต้องการทำให้เป็นแบบถาวร ให้เพิ่มสิ่งนี้ลงในโปรไฟล์ shell ของคุณ - `~/.bashrc`, `~/.zshrc` ฯลฯ - - - - - ```bash - set EDITOR=notepad - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - set EDITOR=code --wait - ``` - - หากต้องการทำให้เป็นแบบถาวร ให้ใช้ **คุณสมบัติของระบบ** > **สภาพแวดล้อม - ตัวแปร**. - - - - - ```powershell - $env:EDITOR = "notepad" - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - $env:EDITOR = "code --wait" - ``` - - หากต้องการทำให้เป็นแบบถาวร ให้เพิ่มสิ่งนี้ลงในโปรไฟล์ PowerShell ของคุณ - - - - -ตัวเลือกตัวแก้ไขยอดนิยม ได้แก่ : - -- `code` - ​​รหัส Visual Studio -- `cursor` - ​​เคอร์เซอร์ -- `windsurf` - ​​วินด์เซิร์ฟ -- `nvim` - ​​บรรณาธิการ Neovim -- `vim` - ​​โปรแกรมแก้ไขเป็นกลุ่ม -- `nano` - ​​โปรแกรมแก้ไขนาโน -- `notepad` - ​​สมุดบันทึกของ Windows -- `subl` - ​​ข้อความประเสริฐ - -:::note -บรรณาธิการบางคนเช่น VS Code จำเป็นต้องเริ่มต้นด้วยแฟล็ก `--wait` -::: - -ผู้แก้ไขบางรายจำเป็นต้องมีอาร์กิวเมนต์บรรทัดคำสั่งเพื่อทำงานในโหมดการบล็อก แฟล็ก `--wait` ทำให้กระบวนการแก้ไขบล็อกจนกว่าจะปิด - ---- - -## กำหนดค่า - -คุณสามารถปรับแต่งพฤติกรรม TUI ได้ผ่าน `tui.json` (หรือ `tui.jsonc`) - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -สิ่งนี้แยกจาก `opencode.json` ซึ่งกำหนดค่าพฤติกรรมเซิร์ฟเวอร์/รันไทม์ - -`keybinds` จะถูกรวมกับค่าเริ่มต้นในตัว ดังนั้นคุณต้องกำหนดค่าเฉพาะ shortcut ที่ต้องการเปลี่ยนเท่านั้น - -### ตัวเลือก - -- `theme` - ตั้งค่าธีม UI ของคุณ [เรียนรู้เพิ่มเติม](/docs/themes) -- `keybinds` - ปรับแต่งแป้นพิมพ์ลัด [เรียนรู้เพิ่มเติม](/docs/keybinds) -- `leader_timeout` - ควบคุมระยะเวลาที่ OpenCode จะรอหลังจากกด leader key ค่าเริ่มต้นคือ `2000` -- `scroll_acceleration.enabled` - ​​เปิดใช้งานการเร่งความเร็วการเลื่อนแบบ macOS เพื่อการเลื่อนที่ราบรื่นและเป็นธรรมชาติ เมื่อเปิดใช้งาน ความเร็วในการเลื่อนจะเพิ่มขึ้นตามท่าทางการเลื่อนอย่างรวดเร็ว และคงความแม่นยำไว้สำหรับการเคลื่อนไหวที่ช้าลง **การตั้งค่านี้มีความสำคัญมากกว่า `scroll_speed` และแทนที่เมื่อเปิดใช้งาน** -- `scroll_speed` - ​​ควบคุมความเร็วของการเลื่อน TUI เมื่อใช้คำสั่งการเลื่อน (ขั้นต่ำ: `0.001` รองรับค่าทศนิยม) ค่าเริ่มต้นเป็น `3` **หมายเหตุ: สิ่งนี้จะถูกละเว้นหากตั้งค่า `scroll_acceleration.enabled` เป็น `true`.** -- `diff_style` - ควบคุมการเรนเดอร์ diff `"auto"` ปรับให้เข้ากับความกว้างของ terminal `"stacked"` จะแสดงคอลัมน์เดียวเสมอ -- `mouse` - เปิดหรือปิดการจับเมาส์ใน TUI (ค่าเริ่มต้น: `true`) เมื่อปิดใช้งาน terminal จะยังคงใช้พฤติกรรมการเลือกข้อความและเลื่อนด้วยเมาส์แบบเดิม -- `attention` - กำหนดค่า desktop notifications และ sounds ของ TUI ปิดใช้งานตามค่าเริ่มต้น - -ใช้ `OPENCODE_TUI_CONFIG` เพื่อโหลดเส้นทางการกำหนดค่า TUI แบบกำหนดเอง - -### Attention - -Attention ช่วยให้ TUI แจ้งเตือนคุณเมื่อ OpenCode กำลังรอคำตอบ ต้องการการอนุมัติ permission พบ session error หรือ session เสร็จสิ้นแล้ว เปิดใช้งานด้วย `attention.enabled`; เหตุการณ์ในตัวจะเล่นเสียงเมื่อเกิดขึ้น Desktop notifications จะส่งเฉพาะเมื่อหน้าต่าง terminal ไม่ได้อยู่ในโฟกัส และจะไม่ใช้กับ subagent events - -- `enabled` - เปิดใช้งาน notifications และ sounds ทั้งหมดของ Attention ค่าเริ่มต้นคือ `false` -- `notifications` - เมื่อเปิด Attention แล้ว อนุญาตให้ TUI ส่ง desktop notifications ผ่าน terminal ค่าเริ่มต้นคือ `true` -- `sound` - เมื่อเปิด Attention แล้ว อนุญาตให้เล่นเสียงแจ้งเตือน ค่าเริ่มต้นคือ `true` -- `volume` - ระดับเสียงแจ้งเตือนเริ่มต้นตั้งแต่ `0` ถึง `1` ค่าเริ่มต้นคือ `0.4` -- `sound_pack` - sound pack ID ที่จะใช้ ค่าเริ่มต้นคือ `opencode.default` -- `sounds` - กำหนด sound files แบบกำหนดเองสำหรับ `default`, `question`, `permission`, `error`, `done` หรือ `subagent_done` Paths สามารถเป็น absolute, `file://` URLs หรือ relative กับ `tui.json` - ---- - -## การปรับแต่ง - -คุณสามารถปรับแต่งแง่มุมต่างๆ ของมุมมอง TUI ได้โดยใช้ชุดคำสั่ง (`ctrl+x h` หรือ `/help`) การตั้งค่าเหล่านี้ยังคงมีอยู่ตลอดการรีสตาร์ท - ---- - -#### การแสดงชื่อผู้ใช้ - -สลับว่าจะให้ชื่อผู้ใช้ของคุณปรากฏในข้อความแชทหรือไม่ เข้าถึงสิ่งนี้ผ่าน: - -- Command Palette: ค้นหา "ชื่อผู้ใช้" หรือ "ซ่อนชื่อผู้ใช้" -- การตั้งค่าจะคงอยู่โดยอัตโนมัติและจะถูกจดจำตลอดเซสชัน TUI diff --git a/packages/web/src/content/docs/th/web.mdx b/packages/web/src/content/docs/th/web.mdx deleted file mode 100644 index 33bd3020cf..0000000000 --- a/packages/web/src/content/docs/th/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: เว็บ -description: การใช้ OpenCode ในเบราว์เซอร์ของคุณ ---- - -OpenCode สามารถทำงานเป็นเว็บแอปพลิเคชันในเบราว์เซอร์ของคุณได้ โดยมอบประสบการณ์การเขียนโค้ด AI อันทรงพลังแบบเดียวกันโดยไม่ต้องใช้ terminal - -![เว็บ OpenCode - เซสชันใหม่](../../../assets/web/web-homepage-new-session.png) - -## เริ่มต้นใช้งาน - -เริ่มเว็บอินเตอร์เฟสด้วยการรัน: - -```bash -opencode web -``` - -สิ่งนี้จะเริ่มต้นเซิร์ฟเวอร์ท้องถิ่นบน `127.0.0.1` ด้วยพอร์ตที่มีอยู่แบบสุ่มและเปิด OpenCode โดยอัตโนมัติในเบราว์เซอร์เริ่มต้นของคุณ - -:::caution -หากไม่ได้ตั้งค่า `OPENCODE_SERVER_PASSWORD` เซิร์ฟเวอร์จะไม่ปลอดภัย นี่เป็นเรื่องปกติสำหรับการใช้งานภายในเครื่อง แต่ควรตั้งค่าสำหรับการเข้าถึงเครือข่าย -::: - -:::tip[ผู้ใช้ Windows] -เพื่อประสบการณ์ที่ดีที่สุด ให้เรียกใช้ `opencode web` จาก [WSL](/docs/windows-wsl) แทนที่จะเป็น PowerShell สิ่งนี้ทำให้มั่นใจได้ถึงการเข้าถึงระบบไฟล์ที่เหมาะสมและการรวม terminal -::: - ---- - -## การกำหนดค่า - -คุณสามารถกำหนดค่าเว็บเซิร์ฟเวอร์ได้โดยใช้แฟล็กบรรทัดคำสั่งหรือใน [ไฟล์กำหนดค่า](/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 ของคุณ - -### เซสชัน - -ดูและจัดการเซสชันของคุณจากหน้าแรก คุณสามารถดูเซสชันที่ใช้งานอยู่และเริ่มต้นเซสชันใหม่ได้ - -![OpenCode Web - เซสชันที่ใช้งานอยู่](../../../assets/web/web-homepage-active-session.png) - -### สถานะเซิร์ฟเวอร์ - -คลิก "ดูเซิร์ฟเวอร์" เพื่อดูเซิร์ฟเวอร์ที่เชื่อมต่อและสถานะ - -![เว็บ OpenCode - ดูเซิร์ฟเวอร์](../../../assets/web/web-homepage-see-servers.png) - ---- - -## การต่อ terminal - -คุณสามารถแนบ terminal TUI กับเว็บเซิร์ฟเวอร์ที่ทำงานอยู่: - -```bash -# Start the web server -opencode web --port 4096 - -# In another terminal, attach the TUI -opencode attach http://localhost:4096 -``` - -ซึ่งจะทำให้คุณสามารถใช้ทั้งเว็บอินเทอร์เฟซและ terminal พร้อมกัน โดยแชร์เซสชันและสถานะเดียวกัน - ---- - -## ไฟล์กำหนดค่า - -คุณยังสามารถกำหนดการตั้งค่าเซิร์ฟเวอร์ในไฟล์กำหนดค่า `opencode.json` ของคุณได้: - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -ธงบรรทัดคำสั่งมีความสำคัญเหนือกว่าการตั้งค่าไฟล์กำหนดค่า diff --git a/packages/web/src/content/docs/th/windows-wsl.mdx b/packages/web/src/content/docs/th/windows-wsl.mdx deleted file mode 100644 index 93aedd2a32..0000000000 --- a/packages/web/src/content/docs/th/windows-wsl.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -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 ใช้งาน -::: - ---- - -## การตั้งค่า - - - -1. **ติดตั้ง WSL** - - ถ้ายังไม่ได้ติดตั้ง ให้ทำตามคู่มือทางการของ Microsoft เพื่อ [ติดตั้ง WSL](https://learn.microsoft.com/en-us/windows/wsl/install) - -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 - ``` - - - ---- - -## เดสก์ท็อปแอป + เซิร์ฟเวอร์บน WSL - -ถ้าคุณต้องการใช้ OpenCode Desktop แต่ให้เซิร์ฟเวอร์ทำงานบน 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://: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:` (OpenCode จะแสดง URL ให้) - -การรัน `opencode web` จาก WSL ช่วยให้เข้าถึงระบบไฟล์และใช้งาน terminal ได้ถูกต้อง พร้อมเปิดใช้งานผ่านเบราว์เซอร์ Windows ได้เหมือนเดิม - ---- - -## การเข้าถึงไฟล์ Windows - -WSL สามารถเข้าถึงไฟล์ Windows ทั้งหมดของคุณได้ผ่านไดเรกทอรี `/mnt/`: - -- `C:` drive → `/mnt/c/` -- `D:` drive → `/mnt/d/` -- ไดรฟ์อื่นก็ใช้รูปแบบเดียวกัน - -ตัวอย่าง: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -เพื่อให้ใช้งานได้ลื่นที่สุด แนะนำให้โคลนหรือคัดลอกรีโปไปไว้ในไฟล์ซิสเต็มของ WSL (เช่น `~/code/`) แล้วรัน OpenCode จากที่นั่น -::: - ---- - -## เคล็ดลับ - -- แม้โปรเจกต์จะอยู่บนไดรฟ์ Windows ก็ควรรัน OpenCode ใน WSL เพื่อการเข้าถึงไฟล์ที่ลื่นกว่า -- ใช้ OpenCode ควบคู่กับ [WSL extension ของ VS Code](https://code.visualstudio.com/docs/remote/wsl) เพื่อเวิร์กโฟลว์ที่ต่อเนื่อง -- การตั้งค่าและเซสชันของ OpenCode จะถูกเก็บในสภาพแวดล้อม WSL ที่ `~/.local/share/opencode/` diff --git a/packages/web/src/content/docs/th/zen.mdx b/packages/web/src/content/docs/th/zen.mdx deleted file mode 100644 index 4f2c3aebd4..0000000000 --- a/packages/web/src/content/docs/th/zen.mdx +++ /dev/null @@ -1,303 +0,0 @@ ---- -title: เซน -description: รายการโมเดลที่คัดสรรโดย OpenCode ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen คือรายการโมเดลที่ผ่านการทดสอบและยืนยันแล้วโดยทีม OpenCode - -Zen ทำงานเหมือน provider อื่น ๆ ใน OpenCode คุณล็อกอินเข้า OpenCode Zen แล้วรับ -API key ของคุณได้เลย มันเป็น **ทางเลือกทั้งหมด** และคุณไม่จำเป็นต้องใช้มันเพื่อใช้งาน -OpenCode - ---- - -## ข้อมูลเบื้องหลัง - -ปัจจุบันมีโมเดลจำนวนมาก แต่มีเพียงไม่กี่โมเดลเท่านั้นที่ทำงานได้ดีในฐานะ coding agent นอกจากนี้ provider ส่วนใหญ่ยังถูกตั้งค่าแตกต่างกันมาก จึงทำให้ประสิทธิภาพและคุณภาพที่ได้ต่างกันมากเช่นกัน - -:::tip -เราได้ทดสอบโมเดลและ provider ที่คัดมาแล้วกลุ่มหนึ่งซึ่งทำงานได้ดีกับ OpenCode -::: - -ดังนั้นหากคุณใช้โมเดลผ่านอะไรอย่าง OpenRouter คุณจะไม่มีทางแน่ใจได้ว่าคุณกำลังได้โมเดลเวอร์ชันที่ดีที่สุดที่คุณต้องการจริง ๆ - -เพื่อแก้ปัญหานี้ เราทำอยู่สองสามอย่าง: - -1. เราทดสอบโมเดลที่คัดมาแล้วกลุ่มหนึ่ง และพูดคุยกับทีมของพวกเขาเกี่ยวกับวิธีรันให้ดีที่สุด -2. จากนั้นเราทำงานร่วมกับ provider บางรายเพื่อให้แน่ใจว่าโมเดลเหล่านี้ถูกเสิร์ฟอย่างถูกต้อง -3. สุดท้าย เรา benchmark ชุดจับคู่ model/provider และสรุปออกมาเป็นรายการที่เรามั่นใจพอจะแนะนำ - -OpenCode Zen คือ AI gateway ที่ให้คุณเข้าถึงโมเดลเหล่านี้ - ---- - -## วิธีการทำงาน - -OpenCode Zen ทำงานเหมือน provider อื่น ๆ ใน OpenCode - -1. คุณลงชื่อเข้าใช้ **OpenCode Zen** เพิ่มรายละเอียดการเรียกเก็บเงิน แล้วคัดลอก API key ของคุณ -2. รันคำสั่ง `/connect` ใน TUI เลือก OpenCode Zen แล้ววาง API key ของคุณ -3. รัน `/models` ใน TUI เพื่อดูรายการโมเดลที่เราแนะนำ - -คุณจะถูกคิดค่าบริการตามแต่ละ request และสามารถเติมเครดิตเข้าบัญชีได้ - ---- - -## Endpoints - -คุณยังสามารถเข้าถึงโมเดลของเราผ่าน API endpoints ต่อไปนี้ได้ - -| 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -[model id](/docs/config/#models) ใน OpenCode config ของคุณใช้รูปแบบ `opencode/` ตัวอย่างเช่น สำหรับ GPT 5.5 คุณจะใช้ `opencode/gpt-5.5` ใน config ของคุณ - ---- - -### Models - -คุณสามารถดึงรายการโมเดลทั้งหมดที่พร้อมใช้งานและ metadata ของมันได้จาก: - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## ราคา - -เรารองรับรูปแบบจ่ายตามการใช้งาน ด้านล่างคือราคา **ต่อ 1M tokens** - -| Model | Input | Output | Cached Read | Cached Write | -| --------------------------------- | ------ | ------- | ----------- | ------------ | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -คุณอาจสังเกตเห็น _Claude Haiku 3.5_ ในประวัติการใช้งานของคุณ นี่คือ [low cost model](/docs/config/#models) ที่ใช้สร้างชื่อ session ของคุณ - -:::note -ค่าธรรมเนียมบัตรเครดิตจะถูกส่งต่อในราคาทุน (4.4% + $0.30 ต่อธุรกรรม); เราไม่ได้คิดค่าใช้จ่ายเพิ่มจากนั้น -::: - -โมเดลฟรี: - -- DeepSeek V4 Flash Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล -- MiMo-V2.5 Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล -- North Mini Code Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล -- Nemotron 3 Ultra Free เปิดให้ใช้บน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล -- Big Pickle เป็น stealth model ที่ใช้งานฟรีบน OpenCode ในช่วงเวลาจำกัด ทีมกำลังใช้ช่วงเวลานี้เพื่อเก็บ feedback และปรับปรุงโมเดล - -ติดต่อเรา หากคุณมีคำถาม - ---- - -### Auto-reload - -หากยอดคงเหลือของคุณต่ำกว่า $5 Zen จะเติมเงิน $20 ให้อัตโนมัติ - -คุณสามารถเปลี่ยนจำนวนเงินสำหรับ auto-reload ได้ และยังสามารถปิด auto-reload ทั้งหมดได้ด้วย - ---- - -### Monthly limits - -คุณยังสามารถตั้งขีดจำกัดการใช้งานรายเดือนสำหรับทั้ง workspace และสำหรับสมาชิกแต่ละคนในทีมของคุณได้ - -ตัวอย่างเช่น หากคุณตั้งขีดจำกัดการใช้งานรายเดือนไว้ที่ $20 Zen จะไม่ใช้งานเกิน $20 ในหนึ่งเดือน แต่ถ้าคุณเปิด auto-reload ไว้ Zen อาจลงเอยด้วยการเรียกเก็บเงินคุณเกิน $20 หากยอดคงเหลือของคุณต่ำกว่า $5 - ---- - -### โมเดลที่ถูกยกเลิก - -| Model | Deprecation date | -| ------------------ | ----------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## ความเป็นส่วนตัว - -โมเดลทั้งหมดของเราโฮสต์อยู่ใน US provider ของเราปฏิบัติตามนโยบาย zero-retention และจะไม่ใช้ข้อมูลของคุณเพื่อฝึกโมเดล ยกเว้นกรณีต่อไปนี้: - -- Big Pickle: ระหว่างช่วงที่เปิดให้ใช้ฟรี ข้อมูลที่เก็บรวบรวมอาจถูกนำไปใช้เพื่อปรับปรุงโมเดล -- DeepSeek V4 Flash Free: ระหว่างช่วงที่เปิดให้ใช้ฟรี ข้อมูลที่เก็บรวบรวมอาจถูกนำไปใช้เพื่อปรับปรุงโมเดล -- MiMo-V2.5 Free: ระหว่างช่วงที่เปิดให้ใช้ฟรี ข้อมูลที่เก็บรวบรวมอาจถูกนำไปใช้เพื่อปรับปรุงโมเดล -- North Mini Code Free: ในช่วงที่เปิดให้ใช้ฟรี ข้อมูลที่เก็บรวบรวมอาจถูกเก็บรักษาและนำไปใช้เพื่อปรับปรุงโมเดล โปรดอย่าส่งข้อมูลส่วนบุคคลหรือข้อมูลที่เป็นความลับ ดู[ข้อกำหนดการใช้งาน](https://cohere.com/terms-of-use)และ[นโยบายความเป็นส่วนตัว](https://cohere.com/privacy)ของเรา -- Nemotron 3 Ultra Free (endpoint ฟรีของ NVIDIA): ใช้สำหรับการทดลองเท่านั้น — โปรดอย่าส่งข้อมูลส่วนบุคคลหรือข้อมูลลับ การใช้งานของคุณจะถูกบันทึกเพื่อวัตถุประสงค์ด้านความปลอดภัยและเพื่อปรับปรุงผลิตภัณฑ์และบริการของ NVIDIA ข้อมูลเซสชันที่บันทึกไว้เพื่อวัตถุประสงค์ในการปรับปรุงจะไม่เชื่อมโยงกับตัวตนของคุณหรือตัวระบุถาวรใด ๆ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแนวปฏิบัติในการประมวลผลข้อมูลของเรา โปรดดู [นโยบายความเป็นส่วนตัว](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) ของเรา การโต้ตอบกับ endpoint นี้ถือว่าคุณยินยอมให้เราเก็บรวบรวม บันทึก และใช้ข้อมูลดังกล่าว รวมถึง [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) -- 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 ทำงานได้ดีกับทีมเช่นกัน คุณสามารถเชิญเพื่อนร่วมทีม กำหนด roles คัดเลือกโมเดลที่ทีมของคุณใช้ และทำอย่างอื่นได้อีกมาก - -:::note -Workspace สำหรับทีมยังใช้งานได้ฟรีในช่วงเบต้า -::: - -การจัดการ workspace ของคุณยังใช้งานได้ฟรีสำหรับทีมในช่วงเบต้า เราจะแชร์รายละเอียดเรื่องราคาเพิ่มเติมเร็ว ๆ นี้ - ---- - -### Roles - -คุณสามารถเชิญเพื่อนร่วมทีมเข้ามาใน workspace และกำหนด roles ได้: - -- **Admin**: จัดการโมเดล สมาชิก API keys และการเรียกเก็บเงิน -- **Member**: จัดการได้เฉพาะ API keys ของตัวเอง - -Admins ยังสามารถตั้งขีดจำกัดค่าใช้จ่ายรายเดือนสำหรับสมาชิกแต่ละคน เพื่อช่วยควบคุมต้นทุนได้ด้วย - ---- - -### Model access - -Admins สามารถเปิดหรือปิดโมเดลบางตัวสำหรับ workspace ได้ request ที่ส่งไปยังโมเดลที่ถูกปิดจะส่งกลับเป็น error - -สิ่งนี้มีประโยชน์ในกรณีที่คุณต้องการปิดการใช้งานโมเดลที่มีการเก็บข้อมูล - ---- - -### Bring your own key - -คุณสามารถใช้ OpenAI หรือ Anthropic API keys ของคุณเองได้ ขณะเดียวกันก็ยังเข้าถึงโมเดลอื่น ๆ ใน Zen ได้อยู่ - -เมื่อคุณใช้ keys ของคุณเอง ค่า tokens จะถูกคิดโดย provider โดยตรง ไม่ได้คิดโดย Zen - -ตัวอย่างเช่น องค์กรของคุณอาจมี key สำหรับ OpenAI หรือ Anthropic อยู่แล้ว และคุณต้องการใช้ key นั้นแทน key ที่ Zen จัดให้ - ---- - -## เป้าหมาย - -เราสร้าง OpenCode Zen ขึ้นมาเพื่อ: - -1. **Benchmark** โมเดล/provider ที่ดีที่สุดสำหรับ coding agents -2. เข้าถึงตัวเลือกที่มี **คุณภาพสูงสุด** โดยไม่ลดประสิทธิภาพหรือ route ไปยัง provider ที่ถูกกว่า -3. ส่งต่อ **การลดราคา** ด้วยการขายในราคาทุน ดังนั้น markup เพียงอย่างเดียวคือเพื่อครอบคลุมค่าธรรมเนียมการประมวลผลของเรา -4. ทำให้เกิด **no lock-in** โดยให้คุณใช้มันร่วมกับ coding agent อื่น ๆ ได้ และยังเปิดให้คุณใช้ provider อื่น ๆ กับ OpenCode ได้เสมอ diff --git a/packages/web/src/content/docs/tr/acp.mdx b/packages/web/src/content/docs/tr/acp.mdx deleted file mode 100644 index abdfda0910..0000000000 --- a/packages/web/src/content/docs/tr/acp.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: ACP Desteği -description: opencode'u ACP uyumlu herhangi bir editörde kullanın. ---- - -opencode, [Agent Client Protocol](https://agentclientprotocol.com) veya (ACP) dosyalarını destekleyerek onu doğrudan uyumlu editörlerde ve IDE'lerde kullanmanızı sağlar. - -:::tip -ACP'yi destekleyen editörlerin ve araçların listesi için [ACP progress report](https://zed.dev/blog/acp-progress-report#available-now)'e bakın. -::: - -ACP, kod editörleri ile AI kodlama ajanları arasındaki iletişimi standartlaştıran açık bir protokoldür. - ---- - -## Yapılandırma - -opencode'u ACP aracılığıyla kullanmak için düzenleyicinizi `opencode acp` komutunu çalıştıracak şekilde yapılandırın. - -Komut, opencode'u, editörünüzle stdio aracılığıyla JSON-RPC üzerinden iletişim kuran ACP uyumlu bir alt süreç olarak başlatır. - -Aşağıda ACP'yi destekleyen popüler düzenleyicilere ilişkin örnekler verilmiştir. - ---- - -### Zed - -[Zed](https://zed.dev) yapılandırmanıza (`~/.config/zed/settings.json`) ekleyin: - -```json title="~/.config/zed/settings.json" -{ - "agent_servers": { - "OpenCode": { - "command": "opencode", - "args": ["acp"] - } - } -} -``` - -Açmak için **Komut Paleti**'ndeki `agent: new thread` eylemini kullanın. - -`keymap.json` dosyanızı düzenleyerek de bir klavye kısayolunu bağlayabilirsiniz: - -```json title="keymap.json" -[ - { - "bindings": { - "cmd-alt-o": [ - "agent::NewExternalAgentThread", - { - "agent": { - "custom": { - "name": "OpenCode", - "command": { - "command": "opencode", - "args": ["acp"] - } - } - } - } - ] - } - } -] -``` - ---- - -### JetBrains IDEs - -[documentation](https://www.jetbrains.com/help/ai-assistant/acp.html) uyarınca [JetBrains IDE](https://www.jetbrains.com/) acp.json dosyanıza ekleyin: - -```json title="acp.json" -{ - "agent_servers": { - "OpenCode": { - "command": "/absolute/path/bin/opencode", - "args": ["acp"] - } - } -} -``` - -Açmak için AI Chat agent seçicisindeki yeni 'OpenCode' ajanını kullanın. - ---- - -### Avante.nvim - -[Avante.nvim](https://github.com/yetone/avante.nvim) yapılandırmanıza ekleyin: - -```lua -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" } - } - } -} -``` - -Ortam değişkenlerini iletmeniz gerekiyor: - -```lua {6-8} -{ - acp_providers = { - ["opencode"] = { - command = "opencode", - args = { "acp" }, - env = { - OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY") - } - } - } -} -``` - ---- - -### CodeCompanion.nvim - -opencode'u [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim)'de ACP ajanı olarak kullanmak için Neovim yapılandırmanıza aşağıdakileri ekleyin: - -```lua -require("codecompanion").setup({ - interactions = { - chat = { - adapter = { - name = "opencode", - model = "claude-sonnet-4", - }, - }, - }, -}) -``` - -Bu yapılandırma, CodeCompanion'ı opencode'u sohbet için ACP ajanı olarak kullanacak şekilde ayarlar. - -Ortam değişkenlerini (`OPENCODE_API_KEY` gibi) iletmeniz gerekiyorsa, tüm ayrıntılar için CodeCompanion.nvim belgelerindeki [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key)'ye bakın. - -## Destek - -opencode, terminalde olduğu gibi ACP aracılığıyla aynı şekilde çalışır. Tüm özellikler desteklenir: - -:::note -`/undo` ve `/redo` gibi bazı yerleşik slash komutları şu anda desteklenmemektedir. -::: - -- Yerleşik araçlar (dosya işlemleri, terminal komutları vb.) -- Özel araçlar ve slash komutları -- opencode yapılandırmanızda yapılandırılmış MCP sunucuları -- `AGENTS.md`'dan projeye özel kurallar -- Özel biçimlendiriciler ve linter'lar -- Aracılar ve izin sistemi diff --git a/packages/web/src/content/docs/tr/agents.mdx b/packages/web/src/content/docs/tr/agents.mdx deleted file mode 100644 index c523b2b3bf..0000000000 --- a/packages/web/src/content/docs/tr/agents.mdx +++ /dev/null @@ -1,754 +0,0 @@ ---- -title: Agent'lar -description: Özel agent'ları yapılandırın ve kullanın. ---- - -Agent'lar, belirli görevler ve iş akışları için yapılandırılabilen uzmanlaşmış AI asistanlarıdır. Özel istemler, modeller ve araç erişimiyle odaklanmış araçlar oluşturmanıza olanak tanır. - -:::tip -Herhangi bir kod değişikliği yapmadan kodu analiz etmek ve önerileri gözden geçirmek için Plan agent'ını kullanın. -::: - -Bir oturum sırasında agent'lar arasında geçiş yapabilir veya onları `@` ifadesi ile çağırabilirsiniz. - ---- - -## Türler - -opencode'da iki tür agent vardır; birincil agent'lar ve alt agent'lar. - ---- - -### Birincil agent'lar - -Birincil agent'lar, doğrudan etkileşim kurduğunuz ana yardımcılardır. **Sekme** tuşunu veya yapılandırılmış `switch_agent` tuş atamanızı kullanarak bunlar arasında geçiş yapabilirsiniz. Bu agent'lar ana görüşmenizi yönetir. Araç erişimi, izinler aracılığıyla yapılandırılır; örneğin, Build'de tüm araçlar etkindir ancak Plan kısıtlıdır. - -:::tip -Bir oturum sırasında birincil agent'lar arasında geçiş yapmak için **Sekme** tuşunu kullanabilirsiniz. -::: - -opencode, **Build** ve **Plan** olmak üzere iki yerleşik birincil agent ile birlikte gelir. Bunlara aşağıda bakacağız. - ---- - -### Alt agent'lar - -Alt agent'lar, birincil agent'ların belirli görevler için çağırabileceği uzman yardımcılardır. Ayrıca mesajlarınızda **@ bahsederek** bunları manuel olarak da çağırabilirsiniz. - -OpenCode, **General**, **Explore** ve **Scout** olmak üzere üç yerleşik alt agent ile birlikte gelir. Buna aşağıda bakacağız. - ---- - -## Yerleşik - -OpenCode iki yerleşik birincil agent ve üç yerleşik alt agent ile birlikte gelir. - ---- - -### Build Kullanımı - -_Mod_: `primary` - -Build, tüm araçların etkin olduğu **varsayılan** birincil agent'tır. Bu, dosya işlemlerine ve sistem komutlarına tam erişime ihtiyaç duyduğunuz geliştirme çalışmaları için standart agent'tır. - ---- - -### Plan Kullanımı - -_Mod_: `primary` - -Planlama ve analiz için tasarlanmış kısıtlı bir agent. Size daha fazla kontrol sağlamak ve istenmeyen değişiklikleri önlemek için bir izin sistemi kullanıyoruz. -Varsayılan olarak aşağıdakilerin tümü `ask` olarak ayarlanmıştır: - -- `file edits`: Tüm yazmalar, yamalar ve düzenler -- `bash`: Tüm bash komutları - -Bu agent, LLM'in kodu analiz etmesini, değişiklik önermesini veya kod tabanınızda herhangi bir gerçek değişiklik yapmadan plan oluşturmasını istediğinizde kullanışlıdır. - ---- - -### General Kullanımı - -_Mod_: `subagent` - -Karmaşık soruları araştırmak ve çok adımlı görevleri yürütmek için genel amaçlı bir agent. Tam araç erişimine sahiptir (yapılacaklar hariç), böylece gerektiğinde dosya değişiklikleri yapabilir. Birden fazla iş birimini paralel olarak çalıştırmak için bunu kullanın. - ---- - -### Explore Kullanımı - -_Mod_: `subagent` - -Kod tabanlarını keşfetmeye yönelik hızlı, salt okunur bir agent. Dosyalar değiştirilemiyor. Dosyaları kalıplara göre hızla bulmanız, anahtar sözcükler için kod aramanız veya kod tabanıyla ilgili soruları yanıtlamanız gerektiğinde bunu kullanın. - ---- - -### Scout Kullanımı - -_Mod_: `subagent` - -Harici dokümanlar ve bağımlılık araştırmaları için salt okunur bir agent. Bir bağımlılık repository'sini OpenCode'un yönetilen cache'ine clone etmeniz, kütüphane kaynak kodunu incelemeniz veya workspace'inizi değiştirmeden yerel kodu upstream implementasyonlarla karşılaştırmanız gerektiğinde bunu kullanın. - ---- - -### Compaction Kullanımı - -_Mod_: `primary` - -Uzun bağlamı daha küçük bir özete sıkıştıran gizli sistem agent'ı. Gerektiğinde otomatik olarak çalışır ve kullanıcı arayüzünde seçilemez. - ---- - -### Title Kullanımı - -_Mod_: `primary` - -Kısa oturum başlıkları oluşturan gizli sistem agent'ı. Otomatik olarak çalışır ve kullanıcı arayüzünde seçilemez. - ---- - -### Summary Kullanımı - -_Mod_: `primary` - -Oturum özetleri oluşturan gizli sistem agent'ı. Otomatik olarak çalışır ve kullanıcı arayüzünde seçilemez. - ---- - -## Kullanım - -1. Birincil agent'lar için, oturum sırasında bunlar arasında geçiş yapmak için **Sekme** tuşunu kullanın. Yapılandırılmış `switch_agent` tuş bağınızı da kullanabilirsiniz. - -2. Alt agent'lar çağrılabilir: - - Açıklamalarına göre özel görevler için birincil agent'lar tarafından **otomatik olarak**. - - Mesajınızda bir alt agent'tan **@ bahsederek** manuel olarak. Örneğin. - - ```txt frame="none" - @general help me search for this function - ``` - -3. **Oturumlar arasında gezinme**: Alt agent'lar kendi alt oturumlarını oluşturduğunda, aşağıdakileri kullanarak ana oturum ile tüm alt oturumlar arasında gezinebilirsiniz: - - **\+Right** (veya yapılandırılmış `session_child_cycle` tuş atamanız) ebeveyn → çocuk1 → çocuk2 → ... → ebeveyn arasında ileri doğru geçiş yapmak için - - **\+Left** (veya yapılandırılmış `session_child_cycle_reverse` tuş atamanız) ebeveyn ← çocuk1 ← çocuk2 ← ... ← ebeveyn arasında geriye doğru geçiş yapmak için - - Bu, ana görüşme ile özel alt agent çalışması arasında sorunsuz bir şekilde geçiş yapmanıza olanak tanır. - ---- - -## Yapılandırma - -Yerleşik agent'ları özelleştirebilir veya yapılandırma yoluyla kendinizinkini oluşturabilirsiniz. Agent'lar iki şekilde yapılandırılabilir: - ---- - -### JSON - -Agent'ları `opencode.json` yapılandırma dosyanızda yapılandırın: - -```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 - -Ayrıca agent'ları Markdown dosyalarını kullanarak da tanımlayabilirsiniz. Bunları şuraya yerleştirin: - -- Global: `~/.config/opencode/agents/` -- Proje başına: `.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 dosyasının adı agent'ın adı olur. Örneğin, `review.md` bir `review` agent'ı oluşturur. - ---- - -## Seçenekler - -Bu yapılandırma seçeneklerine ayrıntılı olarak bakalım. - ---- - -### Açıklama - -Agent'ın ne yaptığına ve ne zaman kullanılacağına ilişkin kısa bir açıklama sağlamak için `description` seçeneğini kullanın. - -```json title="opencode.json" -{ - "agent": { - "review": { - "description": "Reviews code for best practices and potential issues" - } - } -} -``` - -Bu **gerekli** bir yapılandırma seçeneğidir. - ---- - -### Sıcaklık - -LLM'in yanıtlarının rastgeleliğini ve yaratıcılığını `temperature` yapılandırmasıyla kontrol edin. - -Düşük değerler yanıtları daha odaklı ve belirleyici hale getirirken, yüksek değerler yaratıcılığı ve değişkenliği artırır. - -```json title="opencode.json" -{ - "agent": { - "plan": { - "temperature": 0.1 - }, - "creative": { - "temperature": 0.8 - } - } -} -``` - -Sıcaklık değerleri tipik olarak 0,0 ila 1,0 arasındadır: - -- **0,0-0,2**: Çok odaklı ve belirleyici yanıtlar, kod analizi ve planlama için idealdir -- **0,3-0,5**: Biraz yaratıcılık içeren dengeli yanıtlar, genel gelişim görevleri için iyi -- **0,6-1,0**: Daha yaratıcı ve çeşitli yanıtlar, beyin fırtınası ve keşif için yararlı - -```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}" - } - } -} -``` - -Sıcaklık belirtilmezse opencode modeline özgü varsayılanları kullanır; çoğu model için genellikle 0, Qwen modelleri için 0,55. - ---- - -### Maksimum adım - -Bir agent'ın yalnızca metinle yanıt vermeye zorlanmadan önce gerçekleştirebileceği maksimum agent yineleme sayısını kontrol edin. Bu, maliyetleri kontrol etmek isteyen kullanıcıların agent eylemlerine bir sınır koymasına olanak tanır. - -Bu ayarlanmazsa, model durmayı seçene veya kullanıcı oturumu kesene kadar agent yinelemeye devam edecektir. - -```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 - } - } -} -``` - -Sınıra ulaşıldığında, agent, işinin özeti ve önerilen kalan görevlerin bir özetiyle yanıt vermesi talimatını veren özel bir sistem prompt'u alır. - -:::caution -Eski `maxSteps` alanı kullanımdan kaldırıldı. Bunun yerine `steps` kullanın. -::: - ---- - -### Devre dışı bırakma - -Agent'ı devre dışı bırakmak için `true` olarak ayarlayın. - -```json title="opencode.json" -{ - "agent": { - "review": { - "disable": true - } - } -} -``` - ---- - -### İstem - -Bu agent için `prompt` yapılandırmasıyla özel bir sistem prompt dosyası belirtin. Prompt dosyası, agent'ın amacına özel talimatlar içermelidir. - -```json title="opencode.json" -{ - "agent": { - "review": { - "prompt": "{file:./prompts/code-review.txt}" - } - } -} -``` - -Bu yol, yapılandırma dosyasının bulunduğu yere göredir. Yani bu hem global opencode yapılandırması hem de projeye özel yapılandırma için işe yarar. - ---- - -### Model - -Bu agent'ın modelini geçersiz kılmak için `model` ayarını kullanın. Farklı bölümler için optimize edilmiş farklı modelleri kullanmak için kullanışlıdır. Örneğin planlama için daha hızlı bir model, uygulama için daha yetenekli bir model. - -:::tip -Bir model belirtmezseniz, birincil agent'lar [küresel olarak yapılandırılmış modeli](/docs/config#models) kullanırken alt agent'lar, alt agent'ı çağıran birincil agent'ın modelini kullanır. -::: - -```json title="opencode.json" -{ - "agent": { - "plan": { - "model": "anthropic/claude-haiku-4-20250514" - } - } -} -``` - -opencode yapılandırmanızdaki model kimliği `provider/model-id` biçimini kullanır. Örneğin, [OpenCode Zen](/docs/zen) kullanıyorsanız, GPT 5.1 Codex için `opencode/gpt-5.1-codex` kullanırsınız. - ---- - -### Araçlar - -`tools` yapılandırmasıyla bu agent'ta hangi araçların mevcut olduğunu kontrol edin. Belirli araçları `true` veya `false` olarak ayarlayarak etkinleştirebilir veya devre dışı bırakabilirsiniz. - -```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 -Agent'a özgü yapılandırma, genel yapılandırmayı geçersiz kılar. -::: - -Aynı anda birden fazla aracı kontrol etmek için joker karakterleri de kullanabilirsiniz. Örneğin, bir MCP sunucusundaki tüm araçları devre dışı bırakmak için: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "readonly": { - "tools": { - "mymcp_*": false, - "write": false, - "edit": false - } - } - } -} -``` - -[Araçlar hakkında daha fazla bilgi](/docs/tools). - ---- - -### İzinler - -Bir agent'ın gerçekleştirebileceği eylemleri yönetmek için izinleri yapılandırabilirsiniz. Şu anda `edit`, `bash` ve `webfetch` araçlarının izinleri şu şekilde yapılandırılabilir: - -- `"ask"` — Agent çalıştırmadan önce onay iste -- `"allow"` — Onay olmadan tüm işlemlere izin ver -- `"deny"` — Agent'ı devre dışı bırakır - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - } -} -``` - -Bu izinleri agent başına geçersiz kılabilirsiniz. - -```json title="opencode.json" {3-5,8-10} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny" - }, - "agent": { - "build": { - "permission": { - "edit": "ask" - } - } - } -} -``` - -İzinleri Markdown agent'larında da ayarlayabilirsiniz. - -```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. -``` - -Belirli bash komutları için izinleri ayarlayabilirsiniz. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git push": "ask", - "grep *": "allow" - } - } - } - } -} -``` - -Bu küresel bir desen alabilir. - -```json title="opencode.json" {7} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "git *": "ask" - } - } - } - } -} -``` - -Ayrıca tüm komutların izinlerini yönetmek için `*` joker karakterini de kullanabilirsiniz. -Son eşleşen kural öncelikli olduğundan, `*` joker karakterini ilk sıraya ve belirli kuralları sonraya koyun. - -```json title="opencode.json" {8} -{ - "$schema": "https://opencode.ai/config.json", - "agent": { - "build": { - "permission": { - "bash": { - "*": "ask", - "git status *": "allow" - } - } - } - } -} -``` - -[İzinler hakkında daha fazla bilgi](/docs/permissions). - ---- - -### Mod - -Agent'ın modunu `mode` yapılandırmasıyla kontrol edin. `mode` seçeneği agent'ın nasıl kullanılabileceğini belirlemek için kullanılır. - -```json title="opencode.json" -{ - "agent": { - "review": { - "mode": "subagent" - } - } -} -``` - -`mode` seçeneği `primary`, `subagent` veya `all` olarak ayarlanabilir. `mode` belirtilmezse varsayılan olarak `all` olur. - ---- - -### Gizli - -`@` otomatik tamamlama menüsünden bir alt agent'ı `hidden: true` ile gizleyin. Yalnızca diğer agent'lar tarafından Task aracı aracılığıyla programlı olarak çağrılması gereken dahili alt agent'lar için kullanışlıdır. - -```json title="opencode.json" -{ - "agent": { - "internal-helper": { - "mode": "subagent", - "hidden": true - } - } -} -``` - -Bu yalnızca otomatik menüdeki görünürlüğü etkiler. İzinler izin verirse, gizli agent'lar model tarafından Task aracı aracılığıyla çağrılmaya devam edilebilir. - -:::note -Yalnızca `mode: subagent` agent'ları için geçerlidir. -::: - ---- - -### Görev izinleri - -`permission.task` ile bir agent'ın Task aracı aracılığıyla hangi alt agent'ları çağırabileceğini kontrol edin. Esnek eşleştirme için küresel desenleri kullanır. - -```json title="opencode.json" -{ - "agent": { - "orchestrator": { - "mode": "primary", - "permission": { - "task": { - "*": "deny", - "orchestrator-*": "allow", - "code-reviewer": "ask" - } - } - } - } -} -``` - -`deny` olarak ayarlandığında, alt agent Task aracı açıklamasından tamamen kaldırılır, böylece model onu çağırmaya çalışmaz. - -:::tip -Kurallar sırayla değerlendirilir ve **son eşleşen kural kazanır**. Yukarıdaki örnekte `orchestrator-planner`, hem `*` (reddet) hem de `orchestrator-*` (izin ver) ile eşleşir, ancak `orchestrator-*`, `*`'den sonra geldiğinden sonuç `allow` olur. -::: - -:::tip -Kullanıcılar, agent'ın görev izinleri bunu reddetse bile, her zaman herhangi bir alt agent'ı `@` otomatik tamamlama menüsü aracılığıyla doğrudan çağırabilir. -::: - ---- - -### Renk - -Agent'ın kullanıcı arayüzündeki görsel görünümünü `color` seçeneğiyle özelleştirin. Bu, agent'ın arayüzde nasıl göründüğünü etkiler. - -Geçerli bir onaltılık renk (ör. `#FF5733`) veya tema rengini kullanın: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`. - -```json title="opencode.json" -{ - "agent": { - "creative": { - "color": "#ff6b6b" - }, - "code-reviewer": { - "color": "accent" - } - } -} -``` - ---- - -### Top P - -`top_p` seçeneğiyle yanıt çeşitliliğini kontrol edin. Rastgeleliği kontrol etmek için sıcaklığa alternatif. - -```json title="opencode.json" -{ - "agent": { - "brainstorm": { - "top_p": 0.9 - } - } -} -``` - -Değerler 0,0 ile 1,0 arasında değişir. Düşük değerler daha odaklıdır, yüksek değerler ise daha çeşitlidir. - ---- - -### Ek - -Agent yapılandırmanızdaki diğer seçenekler, model seçenekleri olarak **doğrudan sağlayıcıya** iletilecektir. Bu, sağlayıcıya özgü özelliklerin ve parametrelerin kullanılmasını sağlar. - -Örneğin OpenAI'nin akıl yürütme modelleriyle akıl yürütme çabasını kontrol edebilirsiniz: - -```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" - } - } -} -``` - -Bu ek seçenekler modele ve sağlayıcıya özeldir. Kullanılabilir parametreler için sağlayıcınızın belgelerine bakın. - -:::tip -Mevcut modellerin listesini görmek için `opencode models` komutunu çalıştırın. -::: - ---- - -## Agent Oluşturma - -Aşağıdaki komutu kullanarak yeni agent'lar oluşturabilirsiniz: - -```bash -opencode agent create -``` - -Bu etkileşimli komut şunları sağlayacaktır: - -1. Agent'ı nereye kaydedeceğinizi sorar; küresel veya projeye özel. -2. Agent'ın ne yapması gerektiğinin açıklamasını ister. -3. Uygun bir sistem prompt'u ve tanımlayıcı oluşturur. -4. Agent'ın hangi araçlara erişebileceğini seçmenize izin verir. -5. Son olarak agent yapılandırmasıyla bir Markdown dosyası oluşturur. - ---- - -## Kullanım Senaryoları - -Farklı agent'lara yönelik bazı yaygın kullanım senaryoları aşağıda verilmiştir. - -- **Build agent**: Tüm araçların etkinleştirildiği tam geliştirme çalışması -- **Plan agent**: Değişiklik yapmadan analiz ve planlama -- **Review agent**: Salt okunur erişim ve belgeleme araçlarıyla kod incelemesi -- **Debug agent**: Bash ve okuma araçları etkinken araştırmaya odaklanmıştır -- **Docs agent**: Dosya işlemleriyle ancak sistem komutları olmadan belge yazma - ---- - -## Örnekler - -Yararlı bulabileceğiniz bazı örnek agent'ları burada bulabilirsiniz. - -:::tip -Paylaşmak istediğiniz bir agent'ınız var mı? [Submit a PR](https://github.com/anomalyco/opencode). -::: - ---- - -### Dokümantasyon 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 -``` - ---- - -### Güvenlik denetçisi - -```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 -``` diff --git a/packages/web/src/content/docs/tr/cli.mdx b/packages/web/src/content/docs/tr/cli.mdx deleted file mode 100644 index 4f28122bd9..0000000000 --- a/packages/web/src/content/docs/tr/cli.mdx +++ /dev/null @@ -1,617 +0,0 @@ ---- -title: CLI -description: opencode CLI seçenekleri ve komutları. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -opencode CLI herhangi bir argüman olmadan çalıştırıldığında varsayılan olarak [TUI](/docs/tui)'yi başlatır. - -```bash -opencode -``` - -Ancak bu sayfada belgelendiği gibi komutları da kabul eder. Bu, opencode ile programlı olarak etkileşim kurmanıza olanak tanır. - -```bash -opencode run "Explain how closures work in JavaScript" -``` - ---- - -### tui - -opencode terminal kullanıcı arayüzünü başlatır. - -```bash -opencode [project] -``` - -#### Bayraklar - -| Bayrak | Kısa | Açıklama | -| ---------------------------------------- | ---- | --------------------------------------------------------------------------- | -| {"--continue"} | `-c` | Son oturuma devam et | -| {"--session"} | `-s` | Devam edecek oturum kimliği | -| {"--fork"} | | Devam ederken oturumu fork'lar (`--continue` veya `--session` ile kullanın) | -| {"--prompt"} | | Kullanılacak prompt | -| {"--model"} | `-m` | provider/model biçiminde kullanılacak model | -| {"--agent"} | | Kullanılacak agent | -| {"--port"} | | Dinlenecek port | -| {"--hostname"} | | Dinlenecek host adı | - ---- - -## Komutlar - -opencode CLI ayrıca aşağıdaki komutlara da sahiptir. - ---- - -### agent - -opencode için agent'ları yönetin. - -```bash -opencode agent [command] -``` - ---- - -### attach - -`serve` veya `web` komutlarıyla başlatılan, halihazırda çalışan bir opencode arka uç sunucusuna bir terminal ekleyin. - -```bash -opencode attach [url] -``` - -Bu, TUI öğesinin uzak bir opencode arka ucuyla kullanılmasına olanak tanır. Örneğin: - -```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 -``` - -#### Bayraklar - -| Bayrak | Kısa | Tanım | -| ---------------------------------------- | ---- | --------------------------------------------------------------------------------------------- | -| {"--dir"} | | TUI'yi başlatmak için çalışma dizini | -| {"--continue"} | `-c` | Son oturuma devam et | -| {"--session"} | `-s` | Devam edecek oturum açma bilgileri | -| {"--fork"} | | Devam ederken oturumu çatalla (`--continue` veya `--session` ile kullanın) | -| {"--password"} | `-p` | Temel kimlik doğrulama parolası (varsayılan: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Temel kimlik doğrulama kullanıcı adı (varsayılan: `OPENCODE_SERVER_USERNAME` veya `opencode`) | - ---- - -#### create - -Özel yapılandırmaya sahip yeni bir agent oluşturun. - -```bash -opencode agent create -``` - -Bu komut, özel sistem istemi ve araç yapılandırmasıyla yeni bir agent oluşturma konusunda size yol gösterecektir. - ---- - -#### list - -Mevcut tüm agent'ları listeleyin. - -```bash -opencode agent list -``` - ---- - -### auth - -Sağlayıcılar için kimlik bilgilerini ve oturum açmayı yönetme komutu. - -```bash -opencode auth [command] -``` - ---- - -#### login - -opencode, [Models.dev](https://models.dev) adresindeki sağlayıcı listesi tarafından desteklenmektedir, dolayısıyla kullanmak istediğiniz herhangi bir sağlayıcı için API anahtarlarını ayarlamak üzere `opencode auth login` kullanabilirsiniz. Bu `~/.local/share/opencode/auth.json`'de saklanıyor. - -```bash -opencode auth login -``` - -opencode başlatıldığında sağlayıcıları kimlik bilgileri dosyasından yükler. Ayrıca ortam değişkenlerindeki veya projenizdeki `.env` dosyasındaki anahtarları da kullanır. - ---- - -#### list - -Kimlik bilgileri dosyasında depolanan tüm kimliği doğrulanmış sağlayıcıları listeler. - -```bash -opencode auth list -``` - -Veya kısa versiyonu. - -```bash -opencode auth ls -``` - ---- - -#### logout - -Bir sağlayıcıyı kimlik bilgileri dosyasından temizleyerek oturumunuzu kapatır. - -```bash -opencode auth logout -``` - ---- - -### github - -Depo otomasyonu için GitHub aracısını yönetin. - -```bash -opencode github [command] -``` - ---- - -#### install - -GitHub aracısını deponuza yükleyin. - -```bash -opencode github install -``` - -Bu komut gerekli GitHub Actions workflow'unu kurar ve yapılandırma adımlarında size rehberlik eder. [Daha fazla bilgi](/docs/github). - ---- - -#### run - -GitHub aracısını çalıştırın. Bu genellikle GitHub Eylemlerinde kullanılır. - -```bash -opencode github run -``` - -##### Bayraklar - -| Bayrak | Açıklama | -| ------------------------------------- | ------------------------------------------- | -| {"--event"} | Aracıyı çalıştırmak için GitHub sahte olayı | -| {"--token"} | GitHub personal access token | - ---- - -### mcp - -Model Bağlam Protokolü sunucularını yönetin. - -```bash -opencode mcp [command] -``` - ---- - -#### add - -Yapılandırmanıza bir MCP sunucusu ekleyin. - -```bash -opencode mcp add -``` - -Bu komut, yerel veya uzak bir MCP sunucusu ekleme konusunda size yol gösterecektir. - ---- - -#### list - -Yapılandırılmış tüm MCP sunucularını ve bağlantı durumlarını listeleyin. - -```bash -opencode mcp list -``` - -Veya kısa versiyonunu kullanın. - -```bash -opencode mcp ls -``` - ---- - -#### auth - -OAuth'un etkin olduğu bir MCP sunucusuyla kimlik doğrulaması yapın. - -```bash -opencode mcp auth [name] -``` - -Sunucu adı belirtmezseniz mevcut OAuth özellikli sunucular arasından seçim yapmanız istenir. - -Ayrıca OAuth özellikli sunucuları ve bunların kimlik doğrulama durumlarını da listeleyebilirsiniz. - -```bash -opencode mcp auth list -``` - -Veya kısa versiyonunu kullanın. - -```bash -opencode mcp auth ls -``` - ---- - -#### logout - -MCP sunucusu için OAuth kimlik bilgilerini kaldırın. - -```bash -opencode mcp logout [name] -``` - ---- - -#### debug - -MCP sunucusu için OAuth bağlantı sorunlarının hatalarını ayıklayın. - -```bash -opencode mcp debug -``` - ---- - -### models - -Yapılandırılmış sağlayıcıların tüm mevcut modellerini listeleyin. - -```bash -opencode models [provider] -``` - -Bu komut, yapılandırdığınız sağlayıcılardaki modelleri `provider/model` formatında listeler. - -Bu, [config dosyanızda](/docs/config/) kullanmanız gereken tam model adını bulmak için kullanışlıdır. - -Modelleri bu sağlayıcıya göre filtrelemek için isteğe bağlı olarak bir sağlayıcı kimliğini iletebilirsiniz. - -```bash -opencode models anthropic -``` - -#### Bayraklar - -| Bayrak | Tanım | -| --------------------------------------- | --------------------------------------------------------------------------- | -| {"--refresh"} | Modeller.dev'den model önbelleğini yenileyin | -| {"--verbose"} | Daha ayrıntılı model çıktısı kullanın (maliyetler gibi meta veriler içerir) | - -Önbelleğe alınan model listesini güncellemek için `--refresh` bayrağını kullanın. Bu, bir sağlayıcıya yeni modeller eklendiğinde ve bunları opencode'da görmek istediğinizde kullanışlıdır. - -```bash -opencode models --refresh -``` - ---- - -### run - -Doğrudan bir istem ileterek opencode'u etkileşimli olmayan modda çalıştırın. - -```bash -opencode run [message..] -``` - -Bu, komut dosyası oluşturma, otomasyon veya TUI'un tamamını başlatmadan hızlı bir yanıt istediğinizde kullanışlıdır. Örneğin. - -```bash "opencode run" -opencode run Explain the use of context in Go -``` - -Ayrıca, her çalıştırmada MCP sunucusunun soğuk önyükleme sürelerini önlemek için çalışan bir `opencode serve` örneğine de ekleyebilirsiniz: - -```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" -``` - -#### Bayraklar - -| Bayrak | Kısa | Açıklama | -| ---------------------------------------- | ---- | --------------------------------------------------------------------------------------------- | -| {"--command"} | | Çalıştırılacak komut, args için mesajı kullanın | -| {"--continue"} | `-c` | Son oturuma devam et | -| {"--session"} | `-s` | Devam edecek oturum kimliği | -| {"--fork"} | | Devam ederken oturumu fork'lar (`--continue` veya `--session` ile kullanın) | -| {"--share"} | | Oturumu paylaşın | -| {"--model"} | `-m` | provider/model biçiminde kullanılacak model | -| {"--agent"} | | Kullanılacak temsilci | -| {"--file"} | `-f` | Mesaja eklenecek dosya(lar) | -| {"--format"} | | Biçim: varsayılan (biçimlendirilmiş) veya json (ham JSON olayları) | -| {"--title"} | | Oturumun başlığı (değer sağlanmazsa kısaltılmış bilgi istemi kullanılır) | -| {"--attach"} | | Çalışan bir opencode sunucusuna ekleyin (ör. http://localhost:4096) | -| {"--password"} | `-p` | Temel kimlik doğrulama parolası (varsayılan: `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | Temel kimlik doğrulama kullanıcı adı (varsayılan: `OPENCODE_SERVER_USERNAME` veya `opencode`) | -| {"--dir"} | | Çalıştırılacak dizin veya bağlanırken uzak sunucudaki yol | -| {"--variant"} | | Model varyantı (sağlayıcıya özgü muhakeme düzeyi) | -| {"--thinking"} | | Düşünme bloklarını göster | -| {"--port"} | | Yerel sunucunun bağlantı noktası (varsayılan olarak rastgele bağlantı noktasıdır) | - ---- - -### serve - -API erişimi için headless bir opencode sunucusu başlatır. Tam HTTP arayüzü için [server docs](/docs/server) sayfasına bakın. - -```bash -opencode serve -``` - -Bu, TUI arayüzü olmadan opencode işlevselliğine API erişimi sağlayan bir HTTP sunucusunu başlatır. HTTP temel kimlik doğrulamasını etkinleştirmek için `OPENCODE_SERVER_PASSWORD` öğesini ayarlayın (kullanıcı adı varsayılan olarak `opencode` şeklindedir). - -#### Bayraklar - -| Bayrak | Tanım | -| ---------------------------------------- | ------------------------------------------ | -| {"--port"} | Dinlenecek bağlantı noktası | -| {"--hostname"} | Dinlenecek ana bilgisayar adı | -| {"--mdns"} | mDNS bulmayı etkinleştir | -| {"--cors"} | CORS'a izin verecek ek tarayıcı kaynakları | - ---- - -### session - -opencode oturumlarını yönetin. - -```bash -opencode session [command] -``` - ---- - -#### list - -Tüm opencode oturumlarını listeleyin. - -```bash -opencode session list -``` - -##### Bayraklar - -| Bayrak | Kısa | Tanım | -| ----------------------------------------- | ---- | -------------------------------------- | -| {"--max-count"} | `-n` | En son N oturumla sınırla | -| {"--format"} | | Çıkış formatı: tablo veya json (tablo) | - ---- - -### stats - -opencode oturumlarınız için belirteç kullanımı ve maliyet istatistiklerini gösterin. - -```bash -opencode stats -``` - -#### Bayraklar - -| Bayrak | Açıklama | -| --------------------------------------- | ----------------------------------------------------------------------------------------------------------- | -| {"--days"} | Son N güne ait istatistikleri göster (tüm zamanlar) | -| {"--tools"} | Gösterilecek araç sayısı (tümü) | -| {"--models"} | Model kullanım dökümünü göster (varsayılan olarak gizlidir). En üstteki N'yi göstermek için bir sayı iletin | -| {"--project"} | Projeye göre filtrele (tüm projeler, boş değer: mevcut proje) | - ---- - -### export - -Oturum verilerini JSON olarak dışa aktarın. - -```bash -opencode export [sessionID] -``` - -Bir oturum kimliği sağlamazsanız mevcut oturumlar arasından seçim yapmanız istenir. - ---- - -### import - -Bir JSON dosyasından veya opencode paylaşımından URL oturum verilerini içe aktarın. - -```bash -opencode import -``` - -Yerel bir dosyadan veya opencode paylaşımından (URL) içe aktarabilirsiniz. - -```bash -opencode import session.json -opencode import https://opncd.ai/s/abc123 -``` - ---- - -### web - -Web arayüzüyle başsız bir opencode sunucusu başlatın. - -```bash -opencode web -``` - -Bu, bir HTTP sunucusunu başlatır ve bir web arayüzü aracılığıyla opencode'a erişmek için bir web tarayıcısı açar. HTTP temel kimlik doğrulamasını etkinleştirmek için `OPENCODE_SERVER_PASSWORD` öğesini ayarlayın (kullanıcı adı varsayılan olarak `opencode` şeklindedir). - -#### Bayraklar - -| Bayrak | Tanım | -| ---------------------------------------- | ------------------------------------------ | -| {"--port"} | Dinlenecek bağlantı noktası | -| {"--hostname"} | Dinlenecek ana bilgisayar adı | -| {"--mdns"} | mDNS bulmayı etkinleştir | -| {"--cors"} | CORS'a izin verecek ek tarayıcı kaynakları | - ---- - -### acp - -Bir ACP (Ajan İstemci Protokolü) sunucusu başlatın. - -```bash -opencode acp -``` - -Bu komut, nd-JSON kullanarak stdin/stdout aracılığıyla iletişim kuran bir ACP sunucusunu başlatır. - -#### Bayraklar - -| Bayrak | Açıklama | -| ---------------------------------------- | ------------------- | -| {"--cwd"} | Çalışma dizini | -| {"--port"} | Dinlenecek port | -| {"--hostname"} | Dinlenecek host adı | - ---- - -### uninstall - -opencode'u kaldırın ve ilgili tüm dosyaları kaldırın. - -```bash -opencode uninstall -``` - -#### Bayraklar - -| Bayrak | Kısa | Tanım | -| ------------------------------------------- | ---- | ----------------------------------------------- | -| {"--keep-config"} | `-c` | Yapılandırma dosyalarını sakla | -| {"--keep-data"} | `-d` | Oturum verilerini ve anlık görüntüleri saklayın | -| {"--dry-run"} | | Nelerin kaldırılmadan kaldırılacağı göster | -| {"--force"} | `-f` | Onay istemlerini atla | - ---- - -### upgrade - -opencode'u en son sürüme veya belirli bir sürüme günceller. - -```bash -opencode upgrade [target] -``` - -En son sürüme yükseltmek için. - -```bash -opencode upgrade -``` - -Belirli bir sürüme yükseltmek için: - -```bash -opencode upgrade v0.1.48 -``` - -#### Bayraklar - -| Bayrak | Kısa | Açıklama | -| -------------------------------------- | ---- | ------------------------------------------------------ | -| {"--method"} | `-m` | Kullanılan kurulum yöntemi: curl, npm, pnpm, bun, brew | - ---- - -## Global bayraklar - -opencode CLI aşağıdaki global bayrakları destekler. - -| Bayrak | Kısa | Tanım | -| ------------------------------------------ | ---- | ---------------------------------------- | -| {"--help"} | `-h` | Yardımı görüntüle | -| {"--version"} | `-v` | Sürüm numarasını yazdır | -| {"--print-logs"} | | Günlükleri stderr'e yazdır | -| {"--log-level"} | | Günlük düzeyi (DEBUG, INFO, WARN, ERROR) | - ---- - -## Ortam değişkenleri - -opencode ortam değişkenleri kullanılarak yapılandırılabilir. - -| Değişken | Tip | Açıklama | -| ------------------------------------- | ------- | --------------------------------------------------------------------------- | -| `OPENCODE_AUTO_SHARE` | boolean | Oturumları otomatik olarak paylaş | -| `OPENCODE_GIT_BASH_PATH` | string | Windows'ta yürütülebilir Git Bash'in Yolu | -| `OPENCODE_CONFIG` | string | Yapılandırma dosyasının yolu | -| `OPENCODE_TUI_CONFIG` | string | TUI yapılandırma dosyasının yolu | -| `OPENCODE_CONFIG_DIR` | string | Yapılandırma dizinine giden yol | -| `OPENCODE_CONFIG_CONTENT` | string | Satır içi JSON config içeriği | -| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | Otomatik güncelleme kontrollerini devre dışı bırak | -| `OPENCODE_DISABLE_PRUNE` | boolean | Eski verilerin temizlenmesini devre dışı bırak | -| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | Otomatik terminal başlığı güncellemelerini devre dışı bırakın | -| `OPENCODE_PERMISSION` | string | Satır içi JSON izin config'i | -| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | Varsayılan eklentileri devre dışı bırakın | -| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | Otomatik LSP sunucu indirmelerini devre dışı bırakın | -| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | Deneysel modelleri etkinleştir | -| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | Otomatik context sıkıştırmayı devre dışı bırak | -| `OPENCODE_DISABLE_CLAUDE_CODE` | boolean | `.claude`'den okumayı devre dışı bırak (istem + beceriler) | -| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | `~/.claude/CLAUDE.md` dosyasını okumayı devre dışı bırak | -| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | `.claude/skills` yüklemesini devre dışı bırak | -| `OPENCODE_DISABLE_MODELS_FETCH` | boolean | Uzak kaynaklardan model getirmeyi devre dışı bırakın | -| `OPENCODE_FAKE_VCS` | string | Test amaçlı sahte VCS sağlayıcısı | -| `OPENCODE_CLIENT` | string | Client kimliği (varsayılan: `cli`) | -| `OPENCODE_ENABLE_EXA` | boolean | Exa web arama araçlarını etkinleştir | -| `OPENCODE_SERVER_PASSWORD` | string | `serve`/`web` için temel kimlik doğrulamayı etkinleştirin | -| `OPENCODE_SERVER_USERNAME` | string | Temel kimlik doğrulama kullanıcı adını geçersiz kıl (varsayılan `opencode`) | -| `OPENCODE_MODELS_URL` | string | Model yapılandırmasını almak için özel URL | - ---- - -### Deneysel - -Bu ortam değişkenleri değişebilecek veya kaldırılabilecek deneysel özellikleri etkinleştirir. - -| Değişken | Tip | Tanım | -| ----------------------------------------------- | ------- | ------------------------------------------------------- | -| `OPENCODE_EXPERIMENTAL` | boolean | Şemsiye bayrağa bağlı deneysel özellikleri etkinleştir | -| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | Simge bulmayı etkinleştir | -| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | TUI'da seçim yapıldığında kopyalamayı devre dışı bırak | -| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | MS cinsinden bash komutları için varsayılan zaman aşımı | -| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | LLM yanıtları için maksimum çıktı belirteçleri | -| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | Tüm dizin için dosya izleyiciyi etkinleştir | -| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | Oxfmt biçimlendiriciyi etkinleştir | -| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | Deneysel LSP aracını etkinleştir | -| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | Dosya izleyiciyi devre dışı bırak | -| `OPENCODE_EXPERIMENTAL_EXA` | boolean | Deneysel Exa özelliklerini etkinleştirin | -| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolean | python dosyaları için TY LSP'yi etkinleştir | -| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | Plan modunu etkinleştir | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | boolean | Arka plan alt ajan görevlerini etkinleştir | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | boolean | Deneysel olay sistemini etkinleştir | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | boolean | Yerel LLM istek yolunu etkinleştir | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | boolean | Paralel web araması yürütmesini etkinleştir | -| `OPENCODE_EXPERIMENTAL_SCOUT` | boolean | Scout alt ajanını etkinleştir | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | boolean | Çalışma alanı desteğini etkinleştir | diff --git a/packages/web/src/content/docs/tr/commands.mdx b/packages/web/src/content/docs/tr/commands.mdx deleted file mode 100644 index a37e98f4ec..0000000000 --- a/packages/web/src/content/docs/tr/commands.mdx +++ /dev/null @@ -1,323 +0,0 @@ ---- -title: Komutlar -description: Tekrarlanan görevler için özel komutlar oluşturulur. ---- - -Özel komutlar, söz konusu komut TUI'da yürütüldüğünde çalıştırmak istediğiniz istemi belirtmenize olanak tanır. - -```bash frame="none" -/my-command -``` - -Özel komutlar, `/init`, `/undo`, `/redo`, `/share`, `/help` gibi komutlara ek olarak sunulur. [Daha fazla bilgi](/docs/tui#commands). - ---- - -## Komut dosyaları oluşturma - -Özel komutları tanımlamak için `commands/` dizininde işaretleme dosyaları oluşturun. - -`.opencode/commands/test.md` oluştur: - -```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. -``` - -Ön madde komut özelliklerini tanımlar. İçerik şablon haline gelir. - -`/` ve ardından komut adını yazarak komutu kullanın. - -```bash frame="none" -"/test" -``` - ---- - -## Yapılandırma - -opencode işlemleri aracılığıyla veya `commands/` dizininde işaretleme dosyalarının oluşturulması özel komutlar ile yapılabilir. - ---- - -### JSON - -opencode [config](/docs/config)'deki `command` seçeneğini kullanın: - -```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" - } - } -} -``` - -Artık bu komutu TUI'da çalıştırabilirsiniz: - -```bash frame="none" -/test -``` - ---- - -### Markdown - -Markdown dosyalarını kullanarak komutları da tanımlayabilirsiniz. Bunları şuraya yerleştirin: - -- Küresel: `~/.config/opencode/commands/` -- Proje başına: `.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 dosyasının adı komut adı olur. Örneğin, `test.md` şunu sağlar: -sen koşuyorsun: - -```bash frame="none" -/test -``` - ---- - -## İstem yapılandırması - -Özel komut istemleri birçok özel yer tutucuyu ve sözdizimini destekler. - ---- - -### Argümanlar - -`$ARGUMENTS` yer tutucusunu kullanarak komutlara argümanları iletin. - -```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. -``` - -Komutu bağımsız değişkenlerle çalıştırın: - -```bash frame="none" -/component Button -``` - -Ve `$ARGUMENTS`, `Button` ile değiştirilecektir. - -Konumsal parametreleri kullanarak bağımsız değişkenlere de erişebilirsiniz: - -- `$1` - İlk argüman -- `$2` - İkinci argüman -- `$3` - Üçüncü argüman -- Ve benzeri... - -Örneğin: - -```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 -``` - -Komutu çalıştırın: - -```bash frame="none" -/create-file config.json src "{ \"key\": \"value\" }" -``` - -Bu şunun yerini alır: - -- `$1` ile `config.json` -- `$2` ile `src` -- `$3` ile `{ "key": "value" }` - ---- - -### Shell output - -İsteminize [bash command](/docs/tui#bash-commands) çıktısını enjekte etmek için \__!`command`_ kullanın. - -Örneğin, test kapsamını analiz eden özel bir komut oluşturmak için: - -```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. -``` - -Komutlar projenizin kök dizininde çalışır ve çıktıları istemin bir parçası olur. - ---- - -### Dosya referansları - -Komutunuza `@` ve ardından dosya adını kullanarak dosyaları ekleyin. - -```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. -``` - -Dosya içeriği otomatik olarak istemde yer alır. - ---- - -## Seçenekler - -Yapılandırma seçeneklerine ayrıntılı olarak bakalım. - ---- - -### Şablon - -`template` seçeneği, komut yürütüldüğünde LLM'ye gönderilecek olan istemi tanımlar. - -```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." - } - } -} -``` - -Bu **gerekli** bir yapılandırma seçeneğidir. - ---- - -### Açıklama - -Komutun ne yaptığına ilişkin kısa bir açıklama sağlamak için `description` seçeneğini kullanın. - -```json title="opencode.json" -{ - "command": { - "test": { - "description": "Run tests with coverage" - } - } -} -``` - -Bu, komutu yazdığınızda TUI içindeki açıklama olarak gösterilir. - ---- - -### Ajan - -İsteğe bağlı olarak bu komutu hangi [agent](/docs/agents)'nin yürütmesi gerektiğini belirtmek için `agent` yapılandırmasını kullanın. -Bu bir [subagent](/docs/agents/#subagents) ise, komut varsayılan olarak bir alt aracı çağrısını tetikleyecektir. -Bu davranışı devre dışı bırakmak için `subtask` öğesini `false` olarak ayarlayın. - -```json title="opencode.json" -{ - "command": { - "review": { - "agent": "plan" - } - } -} -``` - -Bu **isteğe bağlı** bir yapılandırma seçeneğidir. Belirtilmemişse, varsayılan olarak mevcut temsilciniz kullanılır. - ---- - -### Subtask - -Komutu bir [subagent](/docs/agents/#subagents) çağrısını tetiklemeye zorlamak için `subtask` boolean'ını kullanın. -Bu, komutun birincil bağlamınızı kirletmemesini ve aracıyı bir alt aracı olarak davranmaya **zorlamasını** istiyorsanız kullanışlıdır. -`mode`, [agent](/docs/agents) yapılandırmasında `primary` olarak ayarlanmış olsa bile. - -```json title="opencode.json" -{ - "command": { - "analyze": { - "subtask": true - } - } -} -``` - -Bu **isteğe bağlı** bir yapılandırma seçeneğidir. - ---- - -### Modeli - -Bu parçanın varsayılan kodu geçersiz için `model` kontrolünü kullanın. - -```json title="opencode.json" -{ - "command": { - "analyze": { - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -Bu **isteğe bağlı** bir yapılandırma seçeneğidir. - ---- - -## Yerleşik - -opencode, `/init`, `/undo`, `/redo`, `/share`, `/help` gibi çeşitli yerleşik komutlar içerir; [learn more](/docs/tui#commands). - -:::note -Özel komutlar yerleşik komutları geçersiz kılabilir. -::: - -Aynı adda özel bir komut tanımlarsanız yerleşik komutu geçersiz kılar. diff --git a/packages/web/src/content/docs/tr/config.mdx b/packages/web/src/content/docs/tr/config.mdx deleted file mode 100644 index a30b2ca312..0000000000 --- a/packages/web/src/content/docs/tr/config.mdx +++ /dev/null @@ -1,687 +0,0 @@ ---- -title: Yapılandırma -description: opencode JSON yapılandırması kullanır. ---- - -opencode'u JSON yapılandırma dosyası kullanarak yapılandırabilirsiniz. - ---- - -## Format - -opencode hem **JSON** hem de **JSONC** (JSON Yorumlarla birlikte) formatlarını destekler. - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - // Theme configuration - "theme": "opencode", - "model": "anthropic/claude-sonnet-4-5", - "autoupdate": true, -} -``` - ---- - -## Konumlar - -Yapılandırmanızı birkaç farklı konuma yerleştirebilirsiniz ve bunların -farklı öncelik sırası vardır. - -:::note -Yapılandırma dosyaları **birleştirilir**, değiştirilmez. -::: - -Yapılandırma dosyaları değiştirilmez, birleştirilir. Aşağıdaki yapılandırma konumlarındaki ayarlar birleştirilir. Daha sonraki yapılandırmalar, yalnızca çakışan anahtarlar için önceki yapılandırmaları geçersiz kılar. Tüm yapılandırmalardaki çakışmayan ayarlar korunur. - -Örneğin, genel ayarınız `theme: "opencode"` ve `autoupdate: true`'yi ayarlıyorsa ve proje ayarlarınız `model: "anthropic/claude-sonnet-4-5"`'yi ayarlıyorsa, nihai yapılandırma üç ayarı da içerecektir. - ---- - -### Öncelik sırası - -Yapılandırma kaynakları bu sırayla yüklenir (sonraki kaynaklar öncekileri geçersiz kılar): - -1. **Uzak yapılandırma** (`.well-known/opencode`'dan) - kurumsal varsayılanlar -2. **Genel yapılandırma** (`~/.config/opencode/opencode.json`) - kullanıcı tercihleri -3. **Özel yapılandırma** (`OPENCODE_CONFIG` env var) - özel geçersiz kılmalar -4. **Proje yapılandırması** (projedeki `opencode.json`) - projeye özgü ayarlar -5. **`.opencode` dizinleri** - agent'lar, komutlar, eklentiler -6. **Satır içi yapılandırma** (`OPENCODE_CONFIG_CONTENT` env var) - çalışma zamanı geçersiz kılmaları - -Bu, proje yapılandırmalarının genel varsayılanları geçersiz kılabileceği ve genel yapılandırmaların uzak organizasyonel varsayılanları geçersiz kılabileceği anlamına gelir. - -:::note -`.opencode` ve `~/.config/opencode` dizinleri alt dizinler için **çoğul adlar** kullanır: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` ve `themes/`. Tekil adlar (örneğin, `agent/`) da geriye dönük uyumluluk açısından desteklenir. -::: - ---- - -### Uzak - -Kuruluşlar, `.well-known/opencode` uç noktası aracılığıyla varsayılan yapılandırmayı sağlayabilir. Bu, onu destekleyen bir sağlayıcıyla kimlik doğrulaması yaptığınızda otomatik olarak alınır. - -Uzak yapılandırma ilk olarak yüklenir ve temel katman görevi görür. Diğer tüm yapılandırma kaynakları (genel, proje) bu varsayılanları geçersiz kılabilir. - -Örneğin, kuruluşunuz varsayılan olarak devre dışı bırakılan MCP sunucuları sağlıyorsa: - -```json title="Remote config from .well-known/opencode" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": false - } - } -} -``` - -Yerel yapılandırmanızda belirli sunucuları etkinleştirebilirsiniz: - -```json title="opencode.json" -{ - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - ---- - -### Global - -Global opencode yapılandırmanızı `~/.config/opencode/opencode.json` içine yerleştirin. Temalar, sağlayıcılar veya tuş atamaları gibi kullanıcı çapındaki tercihler için genel yapılandırmayı kullanın. - -Genel yapılandırma, uzak kurumsal varsayılanları geçersiz kılar. - ---- - -### Proje başına - -Proje kökünüze `opencode.json` ekleyin. Proje yapılandırması, standart yapılandırma dosyaları arasında en yüksek önceliğe sahiptir; hem genel hem de uzak yapılandırmaları geçersiz kılar. - -:::tip -Projeye özel yapılandırmayı projenizin köküne yerleştirin. -::: - -opencode başlatıldığında geçerli dizinde bir yapılandırma dosyası arar veya en yakın Git dizinine gider. - -Bunun Git'te kontrol edilmesi de güvenlidir ve global olanla aynı şemayı kullanır. - ---- - -### Özel yol - -`OPENCODE_CONFIG` ortam değişkenini kullanarak özel bir yapılandırma dosyası yolu belirtin. - -```bash -export OPENCODE_CONFIG=/path/to/my/custom-config.json -opencode run "Hello world" -``` - -Özel yapılandırma genel ve proje yapılandırmaları arasında öncelik sırasına göre yüklenir. - ---- - -### Özel dizin - -`OPENCODE_CONFIG_DIR` kullanarak özel bir yapılandırma dizini belirtin -ortam değişkeni. Bu dizin agent'lar, komutlar için aranacaktır. -modlar ve eklentiler tıpkı standart `.opencode` dizini gibi olmalıdır ve -aynı yapıyı takip edin. - -```bash -export OPENCODE_CONFIG_DIR=/path/to/my/config-directory -opencode run "Hello world" -``` - -Özel dizin, genel yapılandırma ve `.opencode` dizinlerinden sonra yüklenir, böylece bunların ayarlarını **geçersiz kılabilir**. - ---- - -## Şema - -Yapılandırma dosyası [**`opencode.ai/config.json`**](https://opencode.ai/config.json)'da tanımlanan bir şemaya sahiptir. - -Editörünüz şemaya göre doğrulama ve otomatik tamamlama yapabilmelidir. - ---- - -### TUI - -TUI'ye özgü ayarları `tui` seçeneği aracılığıyla yapılandırabilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "tui": { - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": true - }, - "diff_style": "auto" - } -} -``` - -Mevcut seçenekler: - -- `scroll_acceleration.enabled` - MacOS tarzı kaydırma hızlandırmayı etkinleştirin. **`scroll_speed`'ye göre önceliklidir.** -- `scroll_speed` - Özel kaydırma hızı çarpanı (varsayılan: `3`, minimum: `1`). `scroll_acceleration.enabled` `true` ise dikkate alınmaz. -- `diff_style` - Fark oluşturmayı kontrol edin. `"auto"` terminal genişliğine uyum sağlar, `"stacked"` her zaman tek sütunu gösterir. - -[TUI kullanımı hakkında daha fazla bilgi](/docs/tui). - ---- - -### Sunucu - -`opencode serve` ve `opencode web` komutları için sunucu ayarlarını `server` seçeneği aracılığıyla yapılandırabilirsiniz. - -```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"] - } -} -``` - -Mevcut seçenekler: - -- `port` - Dinlenecek port. -- `hostname` - Dinlenecek ana bilgisayar adı. `mdns` etkinleştirildiğinde ve hiçbir ana bilgisayar adı ayarlanmadığında, varsayılan değer `0.0.0.0` olur. -- `mdns` - mDNS hizmet bulmayı etkinleştirin. Bu, ağdaki diğer cihazların opencode sunucunuzu keşfetmesine olanak tanır. -- `mdnsDomain` - mDNS hizmeti için özel alan adı. Varsayılan olarak `opencode.local` şeklindedir. Aynı ağda birden fazla örneği çalıştırmak için kullanışlıdır. -- `cors` - Tarayıcı tabanlı bir istemciden HTTP sunucusunu kullanırken CORS'ye izin verecek ek kaynaklar. Değerler tam kaynaklar olmalıdır (şema + ana bilgisayar + isteğe bağlı bağlantı noktası), örneğin `https://app.example.com`. - -[Sunucu hakkında daha fazla bilgi](/docs/server). - ---- - -### Araçlar - -Bir LLM'nin kullanabileceği araçları `tools` seçeneği aracılığıyla yönetebilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "tools": { - "write": false, - "bash": false - } -} -``` - -[Araçlar hakkında daha fazla bilgi](/docs/tools). - ---- - -### Modeller - -opencode yapılandırmanızda kullanmak istediğiniz sağlayıcıları ve modelleri `provider`, `model` ve `small_model` seçenekleri aracılığıyla yapılandırabilirsiniz. - -```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` seçeneği, başlık oluşturma gibi hafif görevler için ayrı bir model yapılandırır. Varsayılan olarak opencode, sağlayıcınızda mevcutsa daha ucuz bir model kullanmaya çalışır, aksi takdirde ana modelinize geri döner. - -Sağlayıcı seçenekleri `timeout` ve `setCacheKey` içerebilir: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "timeout": 600000, - "setCacheKey": true - } - } - } -} -``` - -- `timeout` - Milisaniye cinsinden istek zaman aşımı (varsayılan: 300000). Devre dışı bırakmak için `false` olarak ayarlayın. -- `setCacheKey` - Belirlenen sağlayıcı için her zaman bir önbellek anahtarının ayarlandığından emin olun. - -Ayrıca [local models](/docs/models#local) ayarlayabilirsiniz. [Daha fazla bilgi](/docs/models). - ---- - -#### Sağlayıcıya Özel Seçenekler - -Bazı sağlayıcılar genel `timeout` ve `apiKey` ayarlarının ötesinde ek yapılandırma seçeneklerini destekler. - -##### Amazon Bedrock - -Amazon Bedrock, AWS'a özgü yapılandırmayı destekler: - -```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` - Bedrock için AWS bölgesi (varsayılanı `AWS_REGION` env var veya `us-east-1`'dir) -- `profile` - `~/.aws/credentials`'den AWS adlı profil (varsayılanı `AWS_PROFILE` env var'dır) -- `endpoint` - VPC uç noktaları için özel uç nokta URL. Bu, AWS'e özgü terminolojiyi kullanan genel `baseURL` seçeneğinin takma adıdır. Her ikisi de belirtilirse `endpoint` öncelikli olur. - -:::note -Taşıyıcı belirteçleri (`AWS_BEARER_TOKEN_BEDROCK` veya `/connect`) profil tabanlı kimlik doğrulamaya göre önceliklidir. Ayrıntılar için [authentication precedence](/docs/providers#authentication-precedence)'ye bakın. -::: - -[Amazon Bedrock yapılandırması hakkında daha fazla bilgi](/docs/providers#amazon-bedrock). - ---- - -### Temalar - -opencode yapılandırmanızda kullanmak istediğiniz temayı `theme` seçeneği aracılığıyla yapılandırabilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "theme": "" -} -``` - -[Daha fazla bilgi](/docs/themes). - ---- - -### Agent'lar - -`agent` seçeneği aracılığıyla özel görevlere yönelik özel agent'ları yapılandırabilirsiniz. - -```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, - "bash": true, - }, - }, - }, -} -``` - -Agent'ları `~/.config/opencode/agents/` veya `.opencode/agents/` içindeki Markdown dosyalarıyla da tanımlayabilirsiniz. [Daha fazla bilgi](/docs/agents). - ---- - -### Varsayılan agent - -`default_agent` seçeneğini kullanarak varsayılan agent'ı ayarlayabilirsiniz. Bu, hiçbiri açıkça belirtilmediğinde hangi agent'ın kullanılacağını belirler. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "default_agent": "plan" -} -``` - -Varsayılan agent, birincil agent olmalıdır (alt agent değil). Bu, `"build"` veya `"plan"` gibi yerleşik bir agent ya da tanımladığınız bir [özel agent](/docs/agents) olabilir. Belirtilen agent mevcut değilse veya bir alt agent ise, opencode bir uyarıyla birlikte `"build"`'ye geri döner. - -Bu ayar tüm arayüzler için geçerlidir: TUI, CLI (`opencode run`), masaüstü uygulaması ve GitHub Action. - ---- - -### Paylaşma - -[share](/docs/share) özelliğini `share` seçeneği aracılığıyla yapılandırabilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - -Bu şunları gerektirir: - -- `"manual"` - Komutlar aracılığıyla manuel paylaşıma izin ver (varsayılan) -- `"auto"` - Yeni konuşmaları otomatik olarak paylaş -- `"disabled"` - Paylaşımı tamamen devre dışı bırak - -Varsayılan olarak paylaşım, `/share` komutunu kullanarak konuşmaları açıkça paylaşmanız gereken manuel moda ayarlanmıştır. - ---- - -### Komutlar - -`command` seçeneği aracılığıyla tekrarlanan görevler için özel komutlar yapılandırabilirsiniz. - -```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", - }, - }, -} -``` - -Komutları `~/.config/opencode/commands/` veya `.opencode/commands/` içindeki Markdown dosyalarıyla da tanımlayabilirsiniz. [Daha fazla bilgi](/docs/commands). - ---- - -### Tuş atamaları - -Tuş atamalarınızı `keybinds` seçeneği aracılığıyla özelleştirebilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "keybinds": {} -} -``` - -[Daha fazla bilgi](/docs/keybinds). - ---- - -### Otomatik Güncelleme - -opencode başlatıldığında yeni güncellemeleri otomatik olarak indirecektir. Bunu `autoupdate` seçeneğiyle devre dışı bırakabilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "autoupdate": false -} -``` - -Güncelleme istemiyor ancak yeni bir sürüm mevcut olduğunda bilgilendirilmek istiyorsanız `autoupdate` öğesini `"notify"` olarak ayarlayın. -Bunun yalnızca Homebrew gibi bir paket yöneticisi kullanılarak yüklenmemişse işe yaradığına dikkat edin. - ---- - -### Biçimlendiriciler - -Kod formatlayıcılarını `formatter` seçeneği aracılığıyla yapılandırabilirsiniz. - -```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"] - } - } -} -``` - -[Formatter'lar hakkında daha fazla bilgi](/docs/formatters). - ---- - -### İzinler - -Varsayılan olarak, opencode açık bir onay gerektirmeden **tüm işlemlere izin verir**. `permission` seçeneğini kullanarak bunu değiştirebilirsiniz. - -Örneğin, `edit` ve `bash` araçlarının kullanıcı onayı gerektirdiğinden emin olmak için: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "ask", - "bash": "ask" - } -} -``` - -[İzinler hakkında daha fazla bilgi](/docs/permissions). - ---- - -### Sıkıştırma - -Bağlam sıkıştırma davranışını `compaction` seçeneği aracılığıyla kontrol edebilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "compaction": { - "auto": true, - "prune": false, - "reserved": 10000 - } -} -``` - -- `auto` - Bağlam dolduğunda oturumu otomatik olarak sıkıştırır (varsayılan: `true`). -- `prune` - Belirteçleri kaydetmek için eski araç çıktılarını kaldırın (varsayılan: `false`). -- `reserved` - Sıkıştırma için belirteç tamponu. Sıkıştırma sırasında taşmayı önlemek için yeterli pencere bırakır. - ---- - -### İzleyici - -Dosya izleyicinin yok sayma kalıplarını `watcher` seçeneği aracılığıyla yapılandırabilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "watcher": { - "ignore": ["node_modules/**", "dist/**", ".git/**"] - } -} -``` - -Desenler glob sözdizimini takip eder. Gürültülü dizinleri dosya izlemenin dışında bırakmak için bunu kullanın. - ---- - -### MCP sunucuları - -Kullanmak istediğiniz MCP sunucularını `mcp` seçeneği aracılığıyla yapılandırabilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": {} -} -``` - -[Daha fazla bilgi](/docs/mcp-servers). - ---- - -### Eklentiler - -[Eklentiler](/docs/plugins) opencode'u özel araçlar, kancalar ve entegrasyonlarla genişletin. - -Eklenti dosyalarını `.opencode/plugins/` veya `~/.config/opencode/plugins/` içine yerleştirin. Ayrıca eklentileri `plugin` seçeneği aracılığıyla npm'den de yükleyebilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "@my-org/custom-plugin"] -} -``` - -[Daha fazla bilgi](/docs/plugins). - ---- - -### Talimatlar - -Kullandığınız modele ilişkin talimatları `instructions` seçeneği aracılığıyla yapılandırabilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -Bu, talimat dosyalarına giden bir dizi yolu ve glob desenini alır. [Kurallar hakkında daha fazla bilgiyi buradan edinin](/docs/rules). - ---- - -### Devre dışı bırakılan sağlayıcılar - -`disabled_providers` seçeneği aracılığıyla otomatik olarak yüklenen sağlayıcıları devre dışı bırakabilirsiniz. Bu, belirli sağlayıcıların kimlik bilgileri mevcut olsa bile yüklenmesini engellemek istediğinizde kullanışlıdır. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "disabled_providers": ["openai", "gemini"] -} -``` - -:::note -`disabled_providers`, `enabled_providers`'ye göre önceliklidir. -::: - -`disabled_providers` seçeneği bir dizi sağlayıcı kimliğini kabul eder. Bir sağlayıcı devre dışı bırakıldığında: - -- Ortam değişkenleri ayarlanmış olsa bile yüklenmez. -- API anahtarları `/connect` komutu aracılığıyla yapılandırılsa bile yüklenmeyecektir. -- Sağlayıcının modelleri, model seçim listesinde görünmez. - ---- - -### Etkin sağlayıcılar - -`enabled_providers` seçeneğini kullanarak sağlayıcıların izin verilenler listesini belirtebilirsiniz. Ayarlandığında yalnızca belirtilen sağlayıcılar etkinleştirilecek ve diğerleri göz ardı edilecektir. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "enabled_providers": ["anthropic", "openai"] -} -``` - -Bu, opencode'u tek tek devre dışı bırakmak yerine yalnızca belirli sağlayıcıları kullanacak şekilde kısıtlamak istediğinizde kullanışlıdır. - -:::note -`disabled_providers`, `enabled_providers`'ye göre önceliklidir. -::: - -Bir sağlayıcı hem `enabled_providers` hem de `disabled_providers`'de görünüyorsa, geriye dönük uyumluluk için `disabled_providers` önceliğe sahiptir. - ---- - -### Deneysel - -`experimental` anahtarı aktif olarak geliştirilmekte olan seçenekleri içerir. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "experimental": {} -} -``` - -:::caution -Deneysel seçenekler kararlı değildir. Bildirim yapılmaksızın değişebilir veya kaldırılabilirler. -::: - ---- - -## Değişkenler - -Ortam değişkenlerine ve dosya içeriklerine referans vermek için yapılandırma dosyalarınızda değişken değiştirmeyi kullanabilirsiniz. - ---- - -### Ortam değişkenleri - -Ortam değişkenlerini değiştirmek için `{env:VARIABLE_NAME}` kullanın: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "model": "{env:OPENCODE_MODEL}", - "provider": { - "anthropic": { - "models": {}, - "options": { - "apiKey": "{env:ANTHROPIC_API_KEY}" - } - } - } -} -``` - -Ortam değişkeni ayarlanmamışsa boş bir dizeyle değiştirilecektir. - ---- - -### Dosyalar - -Bir dosyanın biçimini değiştirmek için `{file:path/to/file}` kullanın: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["./custom-instructions.md"], - "provider": { - "openai": { - "options": { - "apiKey": "{file:~/.secrets/openai-key}" - } - } - } -} -``` - -Dosya yolları şunlar olabilir: - -- Yapılandırma dosyası dizinine göre -- Veya `/` veya `~` ile başlayan mutlak yollar - -Bunlar aşağıdakiler için faydalıdır: - -- API anahtarları gibi hassas verileri ayrı dosyalarda tutmak. -- Yapılandırmanızı karmaşıklaştırmadan büyük talimat dosyaları içerir. -- Birden fazla yapılandırma dosyasında ortak yapılandırma parçacıklarının paylaşılması. diff --git a/packages/web/src/content/docs/tr/custom-tools.mdx b/packages/web/src/content/docs/tr/custom-tools.mdx deleted file mode 100644 index 87ff66d1d6..0000000000 --- a/packages/web/src/content/docs/tr/custom-tools.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: Özel Araçlar -description: LLM'un opencode'da çağırabileceği araçları birleştirebilir. ---- - -Özel araçlar, LLM'un konuşmalar sırasında arayabileceği, oluşturduğunuz işlevlerdir. opencode'un [built-in tools](/docs/tools) ile birlikte `read`, `write` ve `bash` gibi çalışırlar. - ---- - -## Araç oluşturma - -Araçlar **TypeScript** veya **JavaScript** dosyaları olarak tanımlanır. Ancak araç tanımı **herhangi bir dilde** yazılmış komut dosyalarını çağırabilir; TypeScript veya JavaScript yalnızca araç tanımının kendisi için kullanılır. - ---- - -### Konum - -Bunlar tanımlanabilir: - -- Yerel olarak bunları projenizin `.opencode/tools/` dizinine yerleştirerek. -- Veya küresel olarak bunları `~/.config/opencode/tools/` içine yerleştirerek. - ---- - -### Yapı - -Araç oluşturmanın en kolay yolu, tür güvenliği ve doğrulama sağlayan `tool()` yardımcısını kullanmaktır. - -```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}` - }, -}) -``` - -**dosya adı**, **araç adı** olur. Yukarıdakiler bir `database` aracı oluşturur. - ---- - -#### Dosya başına birden fazla araç - -Ayrıca tek bir dosyadan birden fazla aracı dışa aktarabilirsiniz. Her dışa aktarma, **`_`** adıyla **ayrı bir araç** haline gelir: - -```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 - }, -}) -``` - -Bu iki araç oluşturur: `math_add` ve `math_multiply`. - ---- - -#### Yerleşik araçlarla ad çakışmaları - -Özel araçlar, araç adına göre anahtarlanır. Özel bir araç yerleşik bir araçla aynı adı kullanıyorsa, özel araç önceliklidir. - -Örneğin, bu dosya yerleşik `bash` aracının yerini alır: - -```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 -Kasıtlı olarak yerleşik bir aracı değiştirmek istemiyorsanız benzersiz adları tercih edin. Yerleşik bir aracı devre dışı bırakmak ancak geçersiz kılmak istemiyorsanız [izinleri](/docs/permissions) kullanın. -::: - ---- - -### Argümanlar - -Bağımsız değişken türlerini tanımlamak için yalnızca [Zod](https://zod.dev) olan `tool.schema` öğesini kullanabilirsiniz. - -```ts "tool.schema" -args: { - query: tool.schema.string().describe("SQL query to execute") -} -``` - -Ayrıca [Zod](https://zod.dev) öğesini doğrudan içe aktarabilir ve düz bir nesne döndürebilirsiniz: - -```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" - }, -} -``` - ---- - -### Bağlam - -Araçlar geçerli oturumla ilgili bağlamı alır: - -```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}` - }, -}) -``` - -Oturum çalışma dizisi için `context.directory` kullanın. -Git çalışma ağacı kökü için `context.worktree` kullanın. - ---- - -## Örnekler - -### Python ile araç yazma - -Araçlarınızı dilediğiniz dilde yazabilirsiniz. İşte Python kullanarak iki sayıyı toplayan bir örnek. - -Öncelikle aracı bir Python betiği olarak oluşturun: - -```python title=".opencode/tools/add.py" -import sys - -a = int(sys.argv[1]) -b = int(sys.argv[2]) -print(a + b) -``` - -Ardından onu çağıran araç tanımını oluşturun: - -```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() - }, -}) -``` - -Burada Python betiğini çalıştırmak için [`Bun.$`](https://bun.com/docs/runtime/shell) yardımcı programını kullanıyoruz. diff --git a/packages/web/src/content/docs/tr/ecosystem.mdx b/packages/web/src/content/docs/tr/ecosystem.mdx deleted file mode 100644 index ca8bc409ca..0000000000 --- a/packages/web/src/content/docs/tr/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Ekosistem -description: OpenCode ile geliştirilen projeler ve entegrasyonlar. ---- - -OpenCode üzerine inşa edilmiş topluluk projeleri koleksiyonu. - -:::note -OpenCode ile ilgili projenizi bu listeye eklemek ister misiniz? Bir PR gönderin. -::: - -Ayrıca ekosistemi ve topluluğu bir araya getiren [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) ve [opencode.cafe](https://opencode.cafe) adreslerine de göz atabilirsiniz. - ---- - -## Eklentiler - -| İsim | Açıklama | -| -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| [opencode-daytona](https://github.com/daytonaio/daytona/tree/main/libs/opencode-plugin) | OpenCode oturumlarını, git senkronizasyonu ve canlı önizlemelerle izole Daytona sanal alanlarında otomatik olarak çalıştırın | -| [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) | İstek gruplaması için Helicone oturum başlıklarını otomatik olarak ekleyin | -| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject) | Arama araçlarıyla TypeScript/Svelte türlerini dosya okumalarına otomatik olarak enjekte edin | -| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | API kredisi yerine ChatGPT Plus/Pro aboneliğinizi kullanın | -| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | API faturalandırması yerine mevcut Gemini planınızı kullanın | -| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) | API faturalandırması yerine Antigravity'nin ücretsiz modellerini kullanın | -| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Sığ klonlar ve otomatik atanan portlarla çok dallı devcontainer izolasyonu | -| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Google Arama desteği ve daha sağlam API işleme özelliğiyle Google Antigravity OAuth Eklentisi | -| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Eski araç çıktılarını budayarak token kullanımını optimize edin | -| [opencode-vibeguard](https://github.com/inkdust2021/opencode-vibeguard) | LLM çağrılarından önce sırları/kişisel verileri VibeGuard tarzı yer tutucularla gizleyin; yerel olarak geri yükleyin | -| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | Desteklenen sağlayıcılar için Google kaynaklı stil ile yerel web araması desteği ekleyin | -| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Yapay zeka aracılarının bir PTY'de arka plan işlemlerini çalıştırmasına ve onlara etkileşimli girdi göndermesine olanak tanır | -| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | Etkileşimli olmayan kabuk komutları için talimatlar - TTY bağımlı işlemlerden kaynaklanan takılmaları önler | -| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Wakatime ile OpenCode kullanımını takip edin | -| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | LLM'ler tarafından üretilen markdown tablolarını temizleyin | -| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | Fast Apply düzenleme, WarpGrep kod tabanı araması ve Morph ile bağlam sıkıştırma | -| [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Arka plan aracıları, hazır LSP/AST/MCP araçları, seçilmiş aracılar, Claude Code uyumlu | -| [opencode-notificator](https://github.com/panta82/opencode-notificator) | OpenCode oturumları için masaüstü bildirimleri ve sesli uyarılar | -| [opencode-notifier](https://github.com/mohak34/opencode-notifier) | İzin, tamamlanma ve hata olayları için masaüstü bildirimleri ve sesli uyarılar | -| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | OpenCode bağlamına dayalı yapay zeka destekli otomatik Zellij oturum isimlendirmesi | -| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | OpenCode aracılarının, beceri keşfi ve enjeksiyonu ile istemleri talep üzerine tembel yüklemesine (lazy load) izin verin | -| [opencode-supermemory](https://github.com/supermemoryai/opencode-supermemory) | Supermemory kullanarak oturumlar arası kalıcı hafıza | -| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Görsel not alma ve özel/çevrimdışı paylaşım ile etkileşimli plan incelemesi | -| [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | opencode /commands komutlarını, ayrıntılı akış kontrolü ile güçlü bir orkestrasyon sistemine genişletin | -| [opencode-scheduler](https://github.com/different-ai/opencode-scheduler) | Launchd (Mac) veya systemd (Linux) kullanarak cron sözdizimi ile tekrarlayan işler planlayın | -| [micode](https://github.com/vtemian/micode) | Oturum sürekliliği ile Yapılandırılmış Beyin Fırtınası → Planlama → Uygulama iş akışı | -| [octto](https://github.com/vtemian/octto) | Çok sorulu formlarla yapay zeka beyin fırtınası için etkileşimli tarayıcı arayüzü | -| [opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents) | Asenkron delegasyon ve bağlam kalıcılığına sahip Claude Code tarzı arka plan aracıları | -| [opencode-notify](https://github.com/kdcokenny/opencode-notify) | OpenCode için yerel işletim sistemi bildirimleri – görevlerin ne zaman tamamlandığını bilin | -| [opencode-workspace](https://github.com/kdcokenny/opencode-workspace) | Paketlenmiş çoklu aracı orkestrasyon donanımı – 16 bileşen, tek kurulum | -| [opencode-worktree](https://github.com/kdcokenny/opencode-worktree) | OpenCode için sıfır sürtünmeli git çalışma ağaçları (worktrees) | -| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | Sentry AI Monitoring ile yapay zeka aracılarınızı izleyin ve hatalarını ayıklayın | - ---- - -## Projeler - -| İsim | Açıklama | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- | -| [kimaki](https://github.com/remorses/kimaki) | SDK üzerine inşa edilmiş, OpenCode oturumlarını kontrol eden Discord botu | -| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | API üzerine inşa edilmiş, editör farkındalıklı istemler için Neovim eklentisi | -| [portal](https://github.com/hosenur/portal) | Tailscale/VPN üzerinden OpenCode için mobil öncelikli web arayüzü | -| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | OpenCode eklentileri oluşturmak için şablon | -| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | opencode için Neovim ön yüzü - terminal tabanlı bir yapay zeka kodlama aracısı | -| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | @opencode-ai/sdk aracılığıyla OpenCode kullanmak için Vercel AI SDK sağlayıcısı | -| [OpenChamber](https://github.com/btriapitsyn/openchamber) | OpenCode için Web / Masaüstü Uygulaması ve VS Code Uzantısı | -| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | OpenCode'u Obsidian arayüzüne gömen Obsidian eklentisi | -| [OpenWork](https://github.com/different-ai/openwork) | OpenCode tarafından desteklenen, Claude Cowork'e açık kaynaklı bir alternatif | -| [ocx](https://github.com/kdcokenny/ocx) | Taşınabilir, izole profillere sahip OpenCode eklenti yöneticisi | -| [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | OpenCode için Masaüstü, Web, Mobil ve Uzak İstemci Uygulaması | - ---- - -## Aracılar - -| İsim | Açıklama | -| ----------------------------------------------------------------- | --------------------------------------------------------------------------- | -| [Agentic](https://github.com/Cluster444/agentic) | Yapılandırılmış geliştirme için modüler yapay zeka aracıları ve komutları | -| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | Gelişmiş iş akışları için yapılandırmalar, istemler, aracılar ve eklentiler | diff --git a/packages/web/src/content/docs/tr/enterprise.mdx b/packages/web/src/content/docs/tr/enterprise.mdx deleted file mode 100644 index af2a0360bb..0000000000 --- a/packages/web/src/content/docs/tr/enterprise.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: Kurumsal -description: opencode'u kuruluşunuzda güvenli bir şekilde kullanma. ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -opencode Enterprise, kodlarının ve verilerinin altyapılarından asla ayrılmamasını sağlamak isteyen kuruluşlar içindir. Bunu, SSO ve dahili AI ağ geçidinizle entegre olan merkezi bir yapılandırma kullanarak yapabilir. - -:::note -opencode kodunuzu veya içerik verilerinizi saklamaz. -::: - -opencode Enterprise'ı kullanmaya başlamak için: - -1. Ekibinizle dahili olarak bir deneme yapın. -2. Fiyatlandırma ve uygulama seçeneklerini görüşmek için **bize ulaşın**. - ---- - -## Deneme - -opencode açık kaynaktır ve herhangi bir kodunuzu veya içerik verilerinizi saklamaz; böylece geliştiricileriniz [hemen başlayıp](/docs/) bir deneme gerçekleştirebilir. - ---- - -### Veri işleme - -**opencode, kodunuzu veya içerik verilerinizi saklamaz.** Tüm işlemler yerel olarak veya AI sağlayıcınıza doğrudan API çağrıları yoluyla gerçekleştirilir. - -Bu, güvendiğiniz bir sağlayıcıyı veya dahili bir sağlayıcıyı kullandığınız sürece -AI ağ geçidi, opencode'u güvenli bir şekilde kullanabilirsiniz. - -saklama alanının tek izolasyonuna bağlı `/share` özelliğidir. - ---- - -#### Konuşmaları paylaşma - -Bir kullanıcı `/share` özelliğini etkinleştirirse, görüşme ve onunla ilişkili veriler, bu paylaşım sayfalarını opencode.ai'de barındırmak için kullandığımız hizmete gönderilir. - -Veriler şu anda CDN uç ağımız üzerinden sunuluyor ve kullanıcılarınızın yakınındaki uçta önbelleğe alınıyor. - -Deneme süreniz için bunu devre dışı bırakmanızı öneririz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -[Paylaşım hakkında daha fazla bilgi](/docs/share). - ---- - -### Kod sahipliği - -**opencode tarafından üretilen tüm kodlara sahipsiniz.** Herhangi bir lisans kısıtlaması veya mülkiyet iddiası yoktur. - ---- - -## Fiyatlandırma - -opencode Enterprise için koltuk başına model kullanıyoruz. Kendi LLM ağ geçidiniz varsa, kullanılan token'lar için ücret talep etmiyoruz. Fiyatlandırma ve uygulama seçenekleri hakkında daha fazla ayrıntı için **bize ulaşın**. - ---- - -## Dağıtım - -Deneme sürenizi tamamladıktan ve opencode'u şu adreste kullanmaya hazır olduğunuzda: -kuruluşunuz hakkında görüşmek üzere **bizimle iletişime geçebilirsiniz** -fiyatlandırma ve uygulama seçenekleri. - ---- - -### Merkezi Yapılandırma - -opencode'u tüm organizasyonunuz için tek bir merkezi yapılandırma kullanacak şekilde ayarlayabiliriz. - -Bu merkezi yapılandırma, SSO sağlayıcınızla entegre olabilir ve tüm kullanıcıların yalnızca dahili AI ağ geçidinize erişmesini sağlar. - ---- - -### SSO entegrasyonu - -Merkezi yapılandırma aracılığıyla opencode, kimlik doğrulama için kuruluşunuzun SSO sağlayıcısıyla entegre olabilir. - -Bu, opencode'un mevcut kimlik yönetimi sisteminiz aracılığıyla dahili AI ağ geçidiniz için kimlik bilgileri almasına olanak tanır. - ---- - -### Dahili AI ağ geçidi - -Merkezi yapılandırmayla opencode yalnızca dahili AI ağ geçidinizi kullanacak şekilde de yapılandırılabilir. - -Ayrıca tüm isteklerin kuruluşunuzun onaylı altyapısından geçmesini sağlayarak diğer tüm AI sağlayıcılarını devre dışı bırakabilirsiniz. - ---- - -### Kendi kendine barındırma - -Verilerinizin asla silinmediğinden emin olmak için paylaşım sayfalarını devre dışı bırakmanızı öneririz. -Kuruluşunuzda, bunları altyapınızda kendiniz barındırmanıza da yardımcı olabiliriz. - -Bu şu anda yol haritamızda yer alıyor. İlgileniyorsanız **bize bildirin**. - ---- - -## SSS - -

-opencode Enterprise nedir? - -opencode Enterprise, kodlarının ve verilerinin altyapılarından asla ayrılmamasını sağlamak isteyen kuruluşlar içindir. Bunu, SSO ve dahili AI ağ geçidinizle entegre olan merkezi bir yapılandırma kullanarak yapabilir. - -
- -
-opencode Enterprise'a nasıl başlarım? - -Ekibinizle dahili bir denemeyle başlayın. opencode varsayılan olarak kodunuzu veya içerik verilerinizi saklamaz, bu da başlamayı kolaylaştırır. - -Daha sonra fiyatlandırma ve uygulama seçeneklerini görüşmek için **bizimle iletişime geçin**. - -
- -
-Kurumsal fiyatlandırma nasıl çalışır? - -Koltuk başına kurumsal fiyatlandırma sunuyoruz. Kendi LLM ağ geçidiniz varsa, kullanılan token'lar için ücret talep etmiyoruz. Daha fazla ayrıntı için kuruluşunuzun ihtiyaçlarına göre özel bir fiyat teklifi almak üzere **bize ulaşın**. - -
- -
-Verilerim opencode Enterprise ile güvende mi? - -Evet. opencode kodunuzu veya içerik verilerinizi saklamaz. Tüm işlemler yerel olarak veya AI sağlayıcınıza doğrudan API çağrıları yoluyla gerçekleşir. Merkezi yapılandırma ve SSO entegrasyonuyla verileriniz kuruluşunuzun altyapısında güvende kalır. - -
- -
-Kendi özel NPM kayıt defterimizi kullanabilir miyiz? - -opencode, Bun'un yerel `.npmrc` dosya desteği aracılığıyla özel npm kayıtlarını destekler. Kuruluşunuz JFrog Artifactory, Nexus veya benzeri gibi özel bir kayıt defteri kullanıyorsa, opencode'u çalıştırmadan önce geliştiricilerin kimlik doğrulamasının yapıldığından emin olun. - -Özel kayıt defterinizle kimlik doğrulamayı ayarlamak için: - -```bash -npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/ -``` - -Bu, kimlik doğrulama ayrıntılarını içeren `~/.npmrc` öğesini oluşturur. opencode otomatik olarak -bunu alır. - -:::caution -opencode'u çalıştırmadan önce özel kayıt defterinde oturum açmalısınız. -::: - -Alternatif olarak, bir `.npmrc` dosyasını manuel olarak yapılandırabilirsiniz: - -```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} -``` - -Paketlerin kurumsal kayıt defterinizden yüklenebildiğinden emin olmak için geliştiricilerin opencode'u çalıştırmadan önce özel kayıt defterinde oturum açmaları gerekir. - -
diff --git a/packages/web/src/content/docs/tr/formatters.mdx b/packages/web/src/content/docs/tr/formatters.mdx deleted file mode 100644 index 34311baa7a..0000000000 --- a/packages/web/src/content/docs/tr/formatters.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: Biçimlendiriciler -description: opencode dile özgü biçimlendiriciler kullanır. ---- - -opencode, dosyaları dile özgü formatlayıcılar kullanılarak yazıldıktan veya düzenlendikten sonra otomatik olarak formatlar. Bu, oluşturulan kodun projenizin kod stillerine uymasını sağlar. - ---- - -## Yerleşik - -opencode, popüler diller ve çerçeveler için çeşitli yerleşik biçimlendiricilerle birlikte gelir. Aşağıda ihtiyaç duyduğu biçimlendiricilerin, desteklenen dosya uzantılarının ve komutların veya yapılandırma seçeneklerinin bir listesi bulunmaktadır. - -| Biçimlendirici | Uzantılar | Gereksinimler | -| ---------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | -| gofmt | .go | `gofmt` komutu mevcut | -| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | `mix` komutu mevcut | -| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml ve [daha fazla](https://prettier.io/docs/en/index.html) | `package.json` içinde `prettier` bağımlılığı | -| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml ve [daha fazla](https://biomejs.dev/) | `biome.json(c)` yapılandırma dosyası | -| zig | .zig, .zon | `zig` komutu mevcut | -| clang-format | .c, .cpp, .h, .hpp, .ino ve [daha fazla](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` yapılandırma dosyası | -| ktlint | .kt, .kts | `ktlint` komutu mevcut | -| ruff | .py, .pyi | `ruff` komutu yapılandırmayla kullanılabilir | -| rustfmt | .rs | `rustfmt` komutu mevcut | -| cargofmt | .rs | `cargo fmt` komutu mevcut | -| uv | .py, .pyi | `uv` komutu mevcut | -| rubocop | .rb, .rake, .gemspec, .ru | `rubocop` komutu mevcut | -| standardrb | .rb, .rake, .gemspec, .ru | `standardrb` komutu mevcut | -| htmlbeautifier | .erb, .html.erb | `htmlbeautifier` komutu mevcut | -| air | .R | `air` komutu mevcut | -| dart | .dart | `dart` komutu mevcut | -| dfmt | .d | `dfmt` komutu mevcut | -| ocamlformat | .ml, .mli | `ocamlformat` komutu mevcut ve `.ocamlformat` yapılandırma dosyası | -| terraform | .tf, .tfvars | `terraform` komutu mevcut | -| gleam | .gleam | `gleam` komutu mevcut | -| nixfmt | .nix | `nixfmt` komutu mevcut | -| shfmt | .sh, .bash | `shfmt` komutu mevcut | -| pint | .php | `composer.json` içinde `laravel/pint` bağımlılığı | -| oxfmt (Deneysel) | .js, .jsx, .ts, .tsx | `package.json` içinde `oxfmt` bağımlılığı ve [experimental env variable flag](/docs/cli/#experimental) | -| ormolu | .hs | `ormolu` komutu mevcut | - -Yani eğer projenizin `package.json` dosyasında `prettier` varsa, opencode bunu otomatik olarak kullanacaktır. - ---- - -## Nasıl çalışır? - -opencode bir dosyayı yazdığında veya düzenlediğinde: - -1. Dosya uzantısını tüm etkin formatlayıcılara göre kontrol eder. -2. Dosyada uygun biçimlendirici komutunu çalıştırır. -3. Biçimlendirme değişikliklerini otomatik olarak uygular. - -Bu işlem arka planda gerçekleşir ve kod stillerinizin herhangi bir manuel adım olmadan korunmasını sağlar. - ---- - -## Yapılandırma - -Biçimlendiricileri opencode yapılandırmanızdaki `formatter` bölümü aracılığıyla özelleştirebilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "formatter": {} -} -``` - -Her formatlayıcı yapılandırması aşağıdakileri destekler: - -| Özellik | Tip | Açıklama | -| ------------- | -------- | ---------------------------------------------------------------------- | -| `disabled` | boolean | Biçimlendiriciyi devre dışı bırakmak için bunu `true` olarak ayarlayın | -| `command` | string[] | Biçimlendirme için çalıştırılacak komut | -| `environment` | object | Biçimlendiriciyi çalıştırırken ayarlanacak ortam değişkenleri | -| `extensions` | string[] | Bu formatlayıcının işlemesi gereken dosya uzantıları | - -Bazı örneklere bakalım. - ---- - -### Biçimlendiricileri devre dışı bırakma - -**tüm** biçimlendiricileri genel olarak devre dışı bırakmak için `formatter` değerini `false` olarak ayarlayın: - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": false -} -``` - -**Belirli** bir biçimlendiriciyi devre dışı bırakmak için `disabled` değerini `true` olarak ayarlayın: - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "formatter": { - "prettier": { - "disabled": true - } - } -} -``` - ---- - -### Özel biçimlendiriciler - -Komutu, ortam değişkenlerini ve dosya uzantılarını belirterek yerleşik biçimlendiricileri geçersiz kılabilir veya yenilerini ekleyebilirsiniz: - -```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"] - } - } -} -``` - -Komuttaki **`$FILE` yer tutucusu**, biçimlendirilen dosyanın yolu ile değiştirilecektir. diff --git a/packages/web/src/content/docs/tr/github.mdx b/packages/web/src/content/docs/tr/github.mdx deleted file mode 100644 index 8a5ea203fb..0000000000 --- a/packages/web/src/content/docs/tr/github.mdx +++ /dev/null @@ -1,321 +0,0 @@ ---- -title: GitHub -description: GitHub sorunlarında ve çekme isteklerinde opencode'u kullanın. ---- - -opencode, GitHub iş akışınızla bütünleşir. Yorumunuzda `/opencode` veya `/oc`'den bahsedin; opencode, GitHub Actions çalıştırıcınızdaki görevleri yürütecektir. - ---- - -## Özellikler - -- **Sorunları önceliklendirin**: opencode'dan bir sorunu araştırıp size açıklamasını isteyin. -- **Düzelt ve uygula**: opencode'dan bir sorunu düzeltmesini veya bir özelliği uygulamasını isteyin. Ve yeni bir şubede çalışacak ve tüm değişiklikleri içeren bir PR gönderecek. -- **Güvenli**: opencode, GitHub'ınızın çalıştırıcılarının içinde çalışır. - ---- - -## Kurulum - -GitHub deposundaki bir projede aşağıdaki komutu çalıştırın: - -```bash -opencode github install -``` - -Bu size GitHub uygulamasını yükleme, iş akışını oluşturma ve gizli dizileri ayarlama adımlarında yol gösterecektir. - ---- - -### Manuel Kurulum - -Veya manuel olarak ayarlayabilirsiniz. - -1. **GitHub uygulamasını yükleyin** - - [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent)'a gidin. Hedef depoya kurulu olduğundan emin olun. - -2. **İş akışını ekleyin** - - Aşağıdaki iş akışı dosyasını deponuzdaki `.github/workflows/opencode.yml`'a ekleyin. `model`'de uygun `env` ve gerekli API anahtarlarını ayarladığınızdan emin olun. - - ```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 anahtarlarını gizli olarak saklayın** - - Kuruluşunuzda veya projenizde **ayarlarda**, soldaki **Gizli bilgiler ve değişkenler**'i genişletin ve **Eylemler**'i seçin. Ve gerekli API anahtarlarını ekleyin. - ---- - -## Yapılandırma - -- `model`: opencode ile kullanılacak model. `provider/model` biçimini alır. Bu **gerekli**. -- `agent`: Kullanılacak aracı. Birincil ajan olmalı. Yapılandırmadan `default_agent`'ye veya bulunamazsa `"build"`'ye geri döner. -- `share`: opencode hesabının paylaşılıp paylaşılmayacağı. Genel depolar için varsayılan olarak **true** olur. -- `prompt`: Varsayılan çalışma geçersiz olduğundan dolayı özel istem. opencode'un işleme biçimini kişiselleştirmek için bunu kullanın. -- `token`: Yorum oluşturma, değişiklik yapma ve çekme isteklerini açma gibi işlemleri gerçekleştirmek için isteğe bağlı GitHub erişim belirteci. Varsayılan olarak opencode, opencode GitHub Uygulamasındaki kurulum erişim belirtecini kullanır, bu nedenle taahhütler, yorumlar ve çekme istekleri uygulamadan geliyormuş gibi görünür. - - Alternatif olarak, opencode GitHub'u yüklemeden GitHub Eylem çalıştırıcısının [built-in `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) akışını kullanabilirsiniz. İşinizde gerekli izinlere sahip olduğunuzdan emin olun: - - ```yaml - permissions: - id-token: write - contents: write - pull-requests: write - issues: write - ``` - - Tercih edilirse [personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) de kullanabilirsiniz. - ---- - -## Desteklenen Olaylar - -opencode aşağıdaki GitHub olayları tarafından tetiklenebilir: - -| Olay Tipi | Tetikleyen | Detaylar | -| ----------------------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| `issue_comment` | Bir soruna veya halkla ilişkilere yorum yapın | Yorumunuzda `/opencode` veya `/oc`'den bahsedin. opencode bağlamı okur ve şubeler oluşturabilir, PR'leri açabilir veya yanıt verebilir. | -| `pull_request_review_comment` | PR'deki belirli kod satırlarına yorum yapın | Kodu incelerken `/opencode` veya `/oc`'den bahsedin. opencode dosya yolunu, satır numaralarını ve fark içeriğini alır. | -| `issues` | Sayı açıldı veya düzenlendi | Sorunlar oluşturulduğunda veya değiştirildiğinde opencode'u otomatik olarak tetikleyin. `prompt` girişi gerektirir. | -| `pull_request` | PR açıldı veya güncellendi | PR'ler açıldığında, senkronize edildiğinde veya yeniden açıldığında opencode'u otomatik olarak tetikleyin. Otomatik incelemeler için kullanışlıdır. | -| `schedule` | Cron tabanlı program | opencode'u bir programa göre çalıştırın. `prompt` girişi gerektirir. Çıktı, günlüklere ve PR'lere gider (yorum yapılacak bir sorun yoktur). | -| `workflow_dispatch` | GitHub kullanıcı arayüzünden manuel tetikleme | Eylemler sekmesi aracılığıyla opencode'u isteğe bağlı olarak tetikleyin. `prompt` girişi gerektirir. Çıktı günlüklere ve PR'lere gider. | - -### Zamanlama Örneği - -Otomatik görevleri gerçekleştirmek için opencode'u bir zamanlamaya göre çalıştırın: - -```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. -``` - -Zamanlanmış etkinlikler için, talimatların alınabileceği bir yorum bulunmadığından `prompt` girişi **gereklidir**. Zamanlanmış iş akışları, izin kontrolü yapılacak bir kullanıcı bağlamı olmadan çalışır; bu nedenle, opencode'un şubeler veya PR'ler oluşturmasını bekliyorsanız iş akışının `contents: write` ve `pull-requests: write` vermesi gerekir. - ---- - -### Çekme İsteği Örneği - -PR'leri açıldığında veya güncellendiğinde otomatik olarak inceleyin: - -```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` olaylar için, `prompt` sağlanmazsa, opencode varsayılan olarak çekme isteklerini inceler. - ---- - -### Sorun Önceliklendirme Örneği - -Yeni sorunları otomatik olarak önceliklendirin. Bu örnek, spam'i azaltmak için 30 günden eski hesapları filtreler: - -```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` olayları için, talimatların çıkarılacağı bir yorum olmadığından `prompt` girişi **gereklidir**. - ---- - -## Özel istemler - -opencode'un davranışını iş akışınız için özelleştirmek için varsayılan istemi geçersiz kılın. - -```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 -``` - -Bu, projenizle ilgili spesifik inceleme kriterlerini, kodlama standartlarını veya odak alanlarını uygulamak için kullanışlıdır. - ---- - -## Örnekler - -GitHub'da opencode'u nasıl kullanabileceğinize dair bazı örnekleri burada bulabilirsiniz. - -- **Bir sorunu açıklama** - - Bu yorumu GitHub sayısına ekleyin. - - ``` - /opencode explain this issue - ``` - - opencode, tüm yorumlar da dahil olmak üzere ileti dizisinin tamamını okuyacak ve net bir açıklama ile yanıt verecektir. - -- **Bir sorunu düzeltme** - - In a GitHub issue, say: - - ``` - /opencode fix this - ``` - - Ve opencode yeni bir şube oluşturacak, değişiklikleri uygulayacak ve değişiklikleri içeren bir PR açacak. - -- **PR'leri inceleyin ve değişiklik yapın** - - GitHub PR'a aşağıdaki yorumu bırakın. - - ``` - Delete the attachment from S3 when the note is removed /oc - ``` - - opencode istenen değişikliği uygulayacak ve aynı PR'ye uygulayacaktır. - -- **Belirli kod satırlarını inceleme** - - PR'nin "Dosyalar" sekmesindeki kod satırlarına doğrudan yorum bırakın. opencode, kesin yanıtlar sağlamak için dosyayı, satır numaralarını ve fark içeriğini otomatik olarak algılar. - - ``` - [Comment on specific lines in Files tab] - /oc add error handling here - ``` - - Belirli satırlara yorum yaparken opencode şunları alır: - - İncelenmekte olan dosyanın tamamı - - Belirli kod satırları - - Çevreleyen fark bağlamı - - Satır numarası bilgisi - - Bu, dosya yollarını veya satır numaralarını manuel olarak belirtmeye gerek kalmadan daha hedefli isteklere olanak tanır. diff --git a/packages/web/src/content/docs/tr/gitlab.mdx b/packages/web/src/content/docs/tr/gitlab.mdx deleted file mode 100644 index 23f15c6826..0000000000 --- a/packages/web/src/content/docs/tr/gitlab.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: GitLab -description: GitLab sorunlarında ve birleştirme isteklerinde opencode'u kullanın. ---- - -opencode, GitLab CI/CD işlem hattınız veya GitLab Duo aracılığıyla GitLab iş akışınızla bütünleşir. - -Her iki durumda da opencode, GitLab çalıştırıcılarınızda çalışacaktır. - ---- - -## GitLab CI - -opencode normal bir GitLab işlem hattında çalışır. Bunu bir [CI component](https://docs.gitlab.com/ee/ci/components/) olarak bir işlem hattına oluşturabilirsiniz. - -Burada opencode için topluluk tarafından oluşturulan bir CI/CD bileşeni kullanıyoruz — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode). - ---- - -### Özellikler - -- **İş başına özel işlemleri kullanın**: opencode parçalarının kullanıma veya devre dışı bırakmak için opencode'u özel bir yapılandırma dizini ile yapılandırın; örneğin `./config/#custom-directory`. -- **Minimum kurulum**: CI bileşeni opencode'u arka planda kurar; yalnızca opencode yapılandırmasını ve ilk istemi oluşturmanız gerekir. -- **Esnek**: CI bileşeni, davranışını özelleştirmek için çeşitli girişleri destekler - ---- - -### Kurulum - -1. opencode kimlik doğrulamanızı JSON **Ayarlar** > **CI/CD** > **Değişkenler** altında Dosya türü CI ortam değişkenleri olarak saklayın. Bunları "Maskeli ve gizli" olarak işaretlediğinizden emin olun. -2. Aşağıdakileri `.gitlab-ci.yml` dosyanıza ekleyin. - - ```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" - ``` - -Daha fazla girdi ve bu bileşene yönelik kullanım durumları için [check out the docs](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode). - ---- - -## GitLab Duo - -opencode, GitLab iş akışınızla bütünleşir. -Bir yorumda `@opencode`'dan bahsedin; opencode, GitLab CI işlem hattınızdaki görevleri yürütecektir. - ---- - -### Özellikler - -- **Sorunları önceliklendirin**: opencode'dan bir sorunu araştırıp size açıklamasını isteyin. -- **Düzelt ve uygula**: opencode'dan bir sorunu düzeltmesini veya bir özelliği uygulamasını isteyin. - Yeni bir dal oluşturacak ve değişikliklerle birlikte bir birleştirme isteği oluşturacaktır. -- **Güvenli**: opencode, GitLab çalıştırıcılarınızda çalışır. - ---- - -### Yapılandırma - -opencode, GitLab CI/CD işlem hattınızda çalışır; bunu ayarlamak için ihtiyacınız olacaklar: - -:::tip -Güncel talimatlar için [**GitLab docs**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/)'a göz atın. -::: - -1. GitLab ortamınızı yapılandırın -2. CI/CD'yi kurma -3. Bir AI model sağlayıcısı API anahtarını gösterir -4. Hizmet hesabı oluşturun -5. CI/CD değişkenlerini yapılandırma -6. Bir akış yapılandırma dosyası oluşturun; işte bir örnek: - -
- - Akış yapılandırması - - ```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. - - - 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. - - " - - 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 - ``` - -
- -Ayrıntılı talimatlar için [GitLab CLI agents docs](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/)'a başvurabilirsiniz. - ---- - -### Örnekler - -GitLab'da opencode'u nasıl kullanabileceğinize dair bazı örnekleri burada bulabilirsiniz. - -:::tip -`@opencode`'dan farklı bir tetikleyici ifade kullanacak şekilde yapılandırabilirsiniz. -::: - -- **Bir sorunu açıklama** - - Bu yorumu bir GitLab sayısına ekleyin. - - ``` - @opencode explain this issue - ``` - - opencode konuyu okuyacak ve net bir açıklama ile yanıt verecektir. - -- **Bir sorunu düzeltme** - - In a GitLab issue, say: - - ``` - @opencode fix this - ``` - - opencode yeni bir dal oluşturacak, değişiklikleri uygulayacak ve değişiklikleri içeren bir birleştirme isteği açacaktır. - -- **Birleştirme isteklerini inceleme** - - GitLab birleştirme isteğine aşağıdaki yorumu bırakın. - - ``` - @opencode review this merge request - ``` - - opencode, birleştirme isteğini inceleyecek ve geri bildirim sağlayacaktır. diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx deleted file mode 100644 index 84ac4df65a..0000000000 --- a/packages/web/src/content/docs/tr/go.mdx +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: Go -description: Açık kodlama modelleri için düşük maliyetli abonelik. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Go, popüler açık kodlama modellerine güvenilir erişim sağlayan düşük maliyetli bir aboneliktir — **ilk ayınız için 5$**, sonrasında **aylık 10$**. - -Go, OpenCode'daki diğer sağlayıcılar gibi çalışır. OpenCode Go'ya abone olur ve API anahtarınızı alırsınız. Bu **tamamen isteğe bağlıdır** ve OpenCode'u kullanmak için bunu kullanmanıza gerek yoktur. - -Dünya çapında istikrarlı erişim için ABD, AB ve Singapur'da barındırılan modellerle temel olarak uluslararası kullanıcılar için tasarlanmıştır. - ---- - -## Arka Plan - -Açık modeller gerçekten çok iyi hale geldi. Artık kodlama görevleri için özel mülk modellere yakın bir performansa ulaşıyorlar. Ve birçok sağlayıcı onlara rekabetçi bir şekilde hizmet verebildiği için genellikle çok daha ucuzdurlar. - -Ancak, bu modellere güvenilir, düşük gecikmeli erişim sağlamak zor olabilir. Sağlayıcılar kalite ve erişilebilirlik açısından farklılık gösterir. - -:::tip -OpenCode ile iyi çalışan seçili bir model ve sağlayıcı grubunu test ettik. -::: - -Bunu çözmek için birkaç şey yaptık: - -1. Seçili bir grup açık modeli test ettik ve bu modelleri en iyi nasıl çalıştırabileceğimizi öğrenmek için ekipleriyle görüştük. -2. Ardından, bunların doğru şekilde sunulduğundan emin olmak için birkaç sağlayıcıyla birlikte çalıştık. -3. Son olarak, model/sağlayıcı kombinasyonunu kıyasladık (benchmark) ve gönül rahatlığıyla önerebileceğimiz bir liste oluşturduk. - -OpenCode Go, bu modellere **ilk ayınız için 5$**, ardından **aylık 10$** karşılığında erişmenizi sağlar. - ---- - -## Nasıl çalışır? - -OpenCode Go, OpenCode'daki diğer sağlayıcılar gibi çalışır. - -1. **OpenCode Zen**'e giriş yapın, Go'ya abone olun ve API anahtarınızı kopyalayın. -2. TUI'de `/connect` komutunu çalıştırın, `OpenCode Go`yu seçin ve API anahtarınızı yapıştırın. -3. Go üzerinden kullanabileceğiniz modellerin listesini görmek için TUI'de `/models` komutunu çalıştırın. - -:::note -Her çalışma alanından yalnızca bir üye OpenCode Go'ya abone olabilir. -::: - -Mevcut model listesi şunları içerir: - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -Test edip yenilerini ekledikçe model listesi değişebilir. - ---- - -## Kullanım limitleri - -OpenCode Go aşağıdaki limitleri içerir: - -- **5 saatlik limit** — 12$ kullanım -- **Haftalık limit** — 30$ kullanım -- **Aylık limit** — 60$ kullanım - -Limitler dolar değeri üzerinden belirlenmiştir. Bu, gerçek istek sayınızın kullandığınız modele bağlı olduğu anlamına gelir. DeepSeek V4 Flash gibi daha ucuz modeller daha fazla isteğe izin verirken, GLM-5.2 gibi yüksek maliyetli modeller daha azına izin verir. - -Aşağıdaki tablo, tipik Go kullanım modellerine dayalı tahmini bir istek sayısı sunmaktadır: - -| Model | 5 saatte bir istek | haftalık istek | aylık istek | -| ----------------- | ------------------ | -------------- | ----------- | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -Tahminler, gözlemlenen ortalama istek modellerine dayanır: - -- GLM-5.2/5.1 — İstek başına 700 girdi, 52.000 önbelleğe alınmış, 150 çıktı token'ı -- Kimi K2.7 Code/K2.6 — İstek başına 870 girdi, 55.000 önbelleğe alınmış, 200 çıktı token'ı -- DeepSeek V4 Pro — İstek başına 750 girdi, 82.000 önbelleğe alınmış, 290 çıktı token'ı -- DeepSeek V4 Flash — İstek başına 790 girdi, 68.000 önbelleğe alınmış, 280 çıktı token'ı -- MiniMax M3 — İstek başına 510 girdi, 56.000 önbelleğe alınmış, 190 çıktı token'ı -- MiniMax M2.7 — İstek başına 300 girdi, 55.000 önbelleğe alınmış, 125 çıktı token'ı -- Qwen3.7 Max — İstek başına 420 girdi, 66.000 önbelleğe alınmış, 200 çıktı token'ı -- Qwen3.7 Plus — İstek başına 500 girdi, 57.000 önbelleğe alınmış, 190 çıktı token'ı -- Qwen3.6 Plus — İstek başına 500 girdi, 57.000 önbelleğe alınmış, 190 çıktı token'ı -- MiMo-V2.5 — İstek başına 830 girdi, 71.500 önbelleğe alınmış, 295 çıktı token'ı -- MiMo-V2.5-Pro — İstek başına 790 girdi, 86.000 önbelleğe alınmış, 305 çıktı token'ı - -Tahminler ayrıca 1M token başına aşağıdaki fiyatlara da dayanır: - -| Model | Input | Output | Cached Read | Cached Write | -| ---------------------------- | ----- | ------ | ----------- | ------------ | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -Mevcut kullanımınızı **konsoldan** takip edebilirsiniz. - -:::tip -Kullanım sınırına ulaşırsanız, ücretsiz modelleri kullanmaya devam edebilirsiniz. -::: - -Erken kullanımlardan ve geri bildirimlerden edindiğimiz deneyimlere bağlı olarak kullanım limitleri değişebilir. - ---- - -### Limit dışı kullanım - -Eğer Zen bakiyenizde kredileriniz varsa, konsoldan **Bakiye kullan (Use balance)** seçeneğini etkinleştirebilirsiniz. Bu özellik etkinleştirildiğinde, kullanım limitlerinize ulaştıktan sonra Go, istekleri engellemek yerine Zen bakiyenizi kullanmaya devam edecektir. - ---- - -## Uç Noktalar - -Go modellerine aşağıdaki API uç noktaları aracılığıyla da erişebilirsiniz. - -| Model | Model ID | Uç Nokta | AI SDK Paketi | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -OpenCode yapılandırmanızdaki [model id](/docs/config/#models) formatı `opencode-go/` şeklindedir. Örneğin, Kimi K2.7 Code için yapılandırmanızda `opencode-go/kimi-k2.7-code` kullanmalısınız. - ---- - -### Modeller - -Mevcut modellerin tam listesini ve metadata'larını şuradan alabilirsiniz: - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## Gizlilik - -Plan, öncelikle uluslararası kullanıcılar için tasarlanmıştır; dünya genelinde istikrarlı erişim sağlamak için modeller US, EU ve Singapore'da barındırılır. Sağlayıcılarımız sıfır veri saklama politikası uygular ve verilerinizi model eğitimi için kullanmaz. - ---- - -## Hedefler - -OpenCode Go'yu şu amaçlarla oluşturduk: - -1. Düşük maliyetli bir abonelik ile yapay zeka destekli kodlamayı daha fazla kişi için **erişilebilir** kılmak. -2. En iyi açık kodlama modellerine **güvenilir** erişim sağlamak. -3. Kodlama aracısı (agent) kullanımı için **test edilmiş ve kıyaslanmış** modelleri bir araya getirmek. -4. OpenCode ile diğer sağlayıcıları da kullanmanıza olanak tanıyarak **kilitlenme (vendor lock-in) olmamasını** sağlamak. diff --git a/packages/web/src/content/docs/tr/ide.mdx b/packages/web/src/content/docs/tr/ide.mdx deleted file mode 100644 index 334b0cf7c6..0000000000 --- a/packages/web/src/content/docs/tr/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: IDE -description: VS Code, Cursor ve diğer IDE'ler için opencode uzantısı ---- - -opencode, VS Code, Cursor veya bir terminali destekleyen herhangi bir IDE ile entegre olur. Başlamak için terminalde `opencode` komutunu çalıştırmanız yeterli. - ---- - -## Kullanım - -- **Hızlı Başlatma**: opencode'u bölünmüş terminal görünümünde açmak veya zaten çalışıyorsa mevcut bir terminal oturumuna odaklanmak için `Cmd+Esc` (Mac) veya `Ctrl+Esc` (Windows/Linux) kullanın. -- **Yeni Oturum**: Zaten açık olsa bile yeni bir opencode terminal oturumu başlatmak için `Cmd+Shift+Esc` (Mac) veya `Ctrl+Shift+Esc` (Windows/Linux) kullanın. Ayrıca kullanıcı arayüzündeki opencode düğmesini de tıklayabilirsiniz. -- **Bağlam Farkındalığı**: Geçerli seçiminizi veya sekmenizi opencode ile otomatik olarak paylaşın. -- **Dosya Referansı Kısayolları**: Dosya referansları eklemek için `Cmd+Option+K` (Mac) veya `Alt+Ctrl+K` (Linux/Windows) kullanın. Örneğin, `@File#L37-42`. - ---- - -## Kurulum - -opencode'u VS Code'a ve Cursor, Windsurf, VSCodium gibi popüler çatallara yüklemek için: - -1. VS Code'u Aç -2. Entegre terminali açın -3. `opencode` komutunu çalıştırın - uzantı otomatik olarak yüklenir - -TUI içinden `/editor` veya `/export` komutlarını çalıştırdığınızda kendi IDE'nizi kullanmak istiyorsanız `export EDITOR="code --wait"` ayarlayın. [Daha fazla bilgi](/docs/tui/#editor-setup). - ---- - -### Manuel Kurulum - -Extension Marketplace'te **opencode**'u arayın ve **Yükle**'ye tıklayın. - ---- - -### Sorun giderme - -Uzantı otomatik olarak yüklenemezse: - -- Entegre terminalde `opencode` çalıştırdığınızdan emin olun. -- IDE cihazınız için CLI'nin kurulu olduğunu doğrulayın: - - VS Code için: `code` komutu - - Cursor için: `cursor` komutu - - Windsurf için: `windsurf` komutu - - VSCodium için: `codium` komutu - - Değilse `Cmd+Shift+P` (Mac) veya `Ctrl+Shift+P` (Windows/Linux) çalıştırın ve "Shell Command: Install 'code' command in PATH" komutunu seçin (veya IDE'nizdeki eşdeğerini kullanın). -- VS Code'un uzantı yükleme iznine sahip olduğundan emin olun diff --git a/packages/web/src/content/docs/tr/index.mdx b/packages/web/src/content/docs/tr/index.mdx deleted file mode 100644 index 696eddc3a1..0000000000 --- a/packages/web/src/content/docs/tr/index.mdx +++ /dev/null @@ -1,347 +0,0 @@ ---- -title: Giriş -description: OpenCode kullanmaya başlayın. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" -import config from "../../../../config.mjs" -export const console = config.console - -[**OpenCode**](/) açık kaynaklı bir AI kodlama ajanıdır. Terminal tabanlı bir arayüz, masaüstü uygulaması veya IDE uzantısı olarak mevcuttur. - -![opencode TUI with the opencode theme](../../../assets/lander/screenshot.png) - -Başlayalım. - ---- - -#### Ön koşullar - -OpenCode'u terminalinizde kullanmak için ihtiyacınız olacak: - -1. Şu gibi modern bir terminal emülatörü: - - [WezTerm](https://wezterm.org), cross-platform (tüm platformlarda) - - [Alacritty](https://alacritty.org), cross-platform (tüm platformlarda) - - [Ghostty](https://ghostty.org), Linux ve macOS - - [Kitty](https://sw.kovidgoyal.net/kitty/), Linux ve macOS - -2. Kullanmak istediğiniz LLM sağlayıcılarının API anahtarları. - ---- - -## Kurulum - -OpenCode'u kurmanın en kolay yolu kurulum betiğidir. - -```bash -curl -fsSL https://opencode.ai/install | bash -``` - -Ayrıca aşağıdaki komutlarla da yükleyebilirsiniz: - -- **Node.js'yi kullanma** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **Homebrew'u macOS ve Linux'ta kullanma** - - ```bash - brew install anomalyco/tap/opencode - ``` - - > En güncel sürümler için OpenCode tap'ini kullanmanızı öneririz. Resmi `brew install opencode` formülü Homebrew ekibi tarafından korunur ve daha sık güncellenir. - -- **Paru'yu Arch Linux'ta kullanma** - - ```bash - sudo pacman -S opencode # Arch Linux (Stable) - paru -S opencode-bin # Arch Linux (Latest from AUR) - ``` - -#### Windows - -:::tip[Önerilen: WSL kullanın] -Windows'ta en iyi deneyim için [Windows Subsystem for Linux (WSL)](/docs/windows-wsl) kullanılmasını öneririz. Daha iyi performans ve OpenCode'un özellikleriyle tam uyumluluğu sağlar. -::: - -- **Chocolatey Kullanımı** - - ```bash - choco install opencode - ``` - -- **Scoop Kullanımı** - - ```bash - scoop install opencode - ``` - -- **NPM kullanarak** - - ```bash - npm install -g opencode-ai - ``` - -- **Mise Kullanımı** - - ```bash - mise use -g github:anomalyco/opencode - ``` - -- **Docker'ı kullanma** - - ```bash - docker run -it --rm ghcr.io/anomalyco/opencode - ``` - -OpenCode'un Bun kullanılarak Windows'a yüklenmesine yönelik destek şu anda devam etmektedir. - -İkili dosyayı [Releases](https://github.com/anomalyco/opencode/releases)'dan da alabilirsiniz. - ---- - -## Yapılandırma - -OpenCode ile herhangi bir LLM sağlayıcısının API anahtarlarını yapılandırarak kullanabilirsiniz. - -LLM sağlayıcılarını kullanmaya yeni başlıyorsanız, [OpenCode Zen](/docs/zen) kullanmanızı öneririz. -OpenCode ekibi tarafından test edilmiş ve doğrulanmış modellerin seçilmiş bir listesidir. - -1. TUI'de `/connect` komutunu çalıştırın, OpenCode'u seçin ve [opencode.ai/auth](https://opencode.ai/auth)'ye gidin. - - ```txt - /connect - ``` - -2. Oturum açın, fatura ayrıntılarınızı ekleyin ve API anahtarınızı kopyalayın. - -3. API anahtarınızı yapıştırın. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -Alternatif olarak diğer sağlayıcılardan birini seçebilirsiniz. [Daha fazla bilgi](/docs/providers#directory). - ---- - -## Başlatma - -Artık bir sağlayıcı yapılandırdığınıza göre, üzerinde çalışmak istediğiniz bir projeye gidebilirsiniz. - -```bash -cd /path/to/project -``` - -Ve OpenCode'u çalıştırın. - -```bash -opencode -``` - -Daha sonra aşağıdaki komutu çalıştırarak proje için OpenCode'u başlatın. - -```bash frame="none" -/init -``` - -Bu, OpenCode'un projenizi analiz etmesini ve bir `AGENTS.md` proje kökünde dosyası oluşturmasını sağlayacaktır. - -:::tip -Projenizin `AGENTS.md` dosyasını Git'e göndermelisiniz. -::: - -Bu, OpenCode'un proje yapısını ve kullanılan kodlama kalıplarını anlamasına yardımcı olur. - ---- - -## Kullanım - -Artık projeniz üzerinde çalışmak için OpenCode'u kullanmaya hazırsınız. Dilediğiniz soruyu sorabilirsiniz. - -AI kodlama ajanını kullanmaya yeniyseniz aşağıdaki örnekler yardımcı olabilir. - ---- - -### Soru Sorma - -OpenCode'dan kod tabanını size açıklamasını isteyebilirsiniz. - -:::tip -Projedeki dosyaları bulanık aramak için `@` tuşunu kullanın. -::: - -```txt frame="none" "@packages/functions/src/api/index.ts" -How is authentication handled in @packages/functions/src/api/index.ts -``` - -Kod tabanının üzerinde çalışmadığınız bir kısmı varsa bu yararlı olur. - ---- - -### Özellik Ekleme - -OpenCode'dan projenize yeni özellikler eklemesini isteyebilirsiniz. Yine de öncelikle ondan bir plan oluşturmasını istemenizi öneririz. - -1. **Bir plan oluşturun** - - OpenCode, değişiklik yapma özelliğini kapatan bir \_Plan modu\_\na sahiptir. - Bu modda, özelliğin nasıl uygulanacağını önerir. - - **Tab** tuşunu kullanarak buna geçin. Bunun için sağ alt köşede bir gösterge göreceksiniz. - - ```bash frame="none" title="Plan moduna geç" - - ``` - - Şimdi ne yapmasını istediğimizi anlatalım. - - ```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'un isteğinizi anlaması için yeterli ayrıntı verin. - Ekibinizdeki junior bir geliştiriciyle konuşur gibi yazmak genelde iyi sonuç verir. - - :::tip - OpenCode'a ne istediğinizi anlamasına yardımcı olacak bol miktarda bağlam ve örnek verin. - ::: - -2. **Planı yineleyin** - - Size bir plan sunduğunda ona geri bildirimde bulunabilir veya daha fazla ayrıntı ekleyebilirsiniz. - - ```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 - İsteme eklemek için görüntüleri terminale sürükleyip bırakın. - ::: - - OpenCode verdiğiniz görselleri tarayıp prompt'a ekleyebilir. - Bunu bir görseli terminale sürükleyip bırakarak yapabilirsiniz. - -3. **Özelliği oluşturun** - - Planı yeterli bulduğunuzda **Tab** tuşuna tekrar basarak \_Build modu\_\na dönün. - - ```bash frame="none" - - ``` - - Ardından değişiklikleri yapmasını isteyin. - - ```bash frame="none" - Sounds good! Go ahead and make the changes. - ``` - ---- - -### Değişiklik Yapma - -Daha basit değişikliklerde, önce planı incelemeden OpenCode'dan doğrudan değişiklik yapmasını isteyebilirsiniz. - -```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'un doğru değişiklikleri yapması için yeterli ayrıntı verdiğinizden emin olun. - ---- - -### Değişiklikleri Geri Alma - -Diyelim ki OpenCode'dan bazı değişiklikler yapmasını istediniz. - -```txt frame="none" "@packages/functions/src/api/index.ts" -Can you refactor the function in @packages/functions/src/api/index.ts? -``` - -Ama istediğinin bu olmadığını anlıyorsun. `/undo` komutunu kullanarak değişiklikleri **geri alabilirsiniz**. - -```bash frame="none" -/undo -``` - -OpenCode değişiklikleri geri alır ve orijinal mesajınızı tekrar gösterir. - -```txt frame="none" "@packages/functions/src/api/index.ts" -Can you refactor the function in @packages/functions/src/api/index.ts? -``` - -Buradan komut isteminde ince ayar yapabilir ve OpenCode'dan tekrar denemesini isteyebilirsiniz. - -:::tip -Birden çok değişikliği geri almak için `/undo` komutunu birden çok kez çalıştırabilirsiniz. -::: - -Veya `/redo` komutunu kullanarak değişiklikleri **yeniden yapabilirsiniz**. - -```bash frame="none" -/redo -``` - ---- - -## Paylaşma - -OpenCode ile yaptığınız görüşmeleri [ekibinizle paylaşabilirsiniz](/docs/share). - -```bash frame="none" -/share -``` - -Bu, mevcut konuşmaya bir bağlantı oluşturacak ve bunu panonuza kopyalayacaktır. - -:::note -Konuşmalar varsayılan olarak paylaşılmaz. -::: - -İşte OpenCode ile bir [örnek konuşma](https://opencode.ai/s/4XP1fce5). - ---- - -## Özelleştirme - -İşte bu kadar! Artık OpenCode'u kullanma konusunda profesyonelsiniz. - -Kendinize göre uyarlamak için [tema seçebilir](/docs/themes), [tuş atamalarını özelleştirebilir](/docs/keybinds), [kod biçimlendirici ayarlayabilir](/docs/formatters), [özel komutlar oluşturabilir](/docs/commands) veya [OpenCode config](/docs/config) ile oynayabilirsiniz. diff --git a/packages/web/src/content/docs/tr/keybinds.mdx b/packages/web/src/content/docs/tr/keybinds.mdx deleted file mode 100644 index bbf8c3bfa9..0000000000 --- a/packages/web/src/content/docs/tr/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Tuş atamaları -description: Tuş bağlantılarınızı özelleştirin. ---- - -opencode, `tui.json` aracılığıyla özelleştirebileceğiniz bir tuş bağlantıları listesine sahiptir. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "h", - "display_thinking": "none" - } -} -``` - ---- - -## Leader tuşu - -opencode çoğu tuş ataması için `leader` anahtarını kullanır. Bu, terminalinizdeki çakışmaları önler. - -Varsayılan olarak `ctrl+x` lider tuştur ve çoğu eylem önce lider tuşa, ardından kısayola basmanızı gerektirir. Örneğin, yeni bir oturum başlatmak için önce `ctrl+x` tuşuna, ardından `n` tuşuna basarsınız. - -Tuş atamalarınız için lider anahtar kullanmanıza gerek yoktur ancak bunu yapmanızı öneririz. - ---- - -## Tuş atamasını devre dışı bırak - -Anahtarı yapılandırmanıza "none" değeriyle ekleyerek bir tuş atamasını devre dışı bırakabilirsiniz. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "session_compact": "none" - } -} -``` - ---- - -## Masaüstü istemi kısayolları - -opencode masaüstü uygulaması bilgi istemi girişi, metni düzenlemek için yaygın Readline/Emacs tarzı kısayolları destekler. Bunlar yerleşiktir ve şu anda `opencode.json` aracılığıyla yapılandırılamaz. - -| Shortcut | Action | -| -------- | --------------------------------------------------- | -| `ctrl+a` | Geçerli satırın başına git | -| `ctrl+e` | Geçerli satırın sonuna git | -| `ctrl+b` | İmleci bir karakter geri taşı | -| `ctrl+f` | İmleci bir karakter ileri taşı | -| `alt+b` | İmleci bir kelime geri taşı | -| `alt+f` | İmleci bir kelime ileri taşı | -| `ctrl+d` | İmleç altındaki karakteri sil | -| `ctrl+k` | Satırın sonuna kadar sil | -| `ctrl+u` | Satırın başına kadar sil | -| `ctrl+w` | Önceki kelimeyi sil | -| `alt+d` | Sonraki kelimeyi sil | -| `ctrl+t` | Karakterlerin yerini değiştir | -| `ctrl+g` | Açılır pencereleri iptal et / çalışan yanıtı durdur | - ---- - -## Shift+Enter - -Bazı terminaller varsayılan olarak Enter ile değiştirici tuşlar göndermez. Terminalinizi, kaçış dizisi olarak `Shift+Enter` gönderecek şekilde yapılandırmanız gerekebilir. - -### Windows Terminali - -`settings.json` dosyasını şurada açın: - -``` -%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json -``` - -Bunu kök düzeyindeki `actions` dizisine ekleyin: - -```json -"actions": [ - { - "command": { - "action": "sendInput", - "input": "\u001b[13;2u" - }, - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Bunu kök düzeyindeki `keybindings` dizisine ekleyin: - -```json -"keybindings": [ - { - "keys": "shift+enter", - "id": "User.sendInput.ShiftEnterCustom" - } -] -``` - -Dosyayı kaydedin ve Windows Terminalini yeniden başlatın veya yeni bir sekme açın. diff --git a/packages/web/src/content/docs/tr/lsp.mdx b/packages/web/src/content/docs/tr/lsp.mdx deleted file mode 100644 index 78af6cc5f1..0000000000 --- a/packages/web/src/content/docs/tr/lsp.mdx +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: LSP Sunucuları -description: OpenCode, LSP sunucularınızla bütünleşir. ---- - -OpenCode, tanılamayı agent için geri bildirim olarak kullanmak üzere Language Server Protocol (LSP) sunucularıyla bütünleşebilir. - ---- - -## Yerleşik - -OpenCode, popüler diller için çeşitli yerleşik LSP sunucularıyla birlikte gelir: - -| LSP Sunucu | Uzantılar | Gereksinimler | -| ------------------ | ------------------------------------------------------------------- | --------------------------------------------------------------------- | -| astro | .astro | Astro projeleri için otomatik kurulumlar | -| bash | .sh, .bash, .zsh, .ksh | `bash-language-server`'ı otomatik olarak yükler | -| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | C/C++ projeleri için otomatik kurulumlar | -| csharp | .cs | `.NET SDK` kurulu | -| clojure-lsp | .clj, .cljs, .cljc, .edn | `clojure-lsp` komutu mevcut | -| dart | .dart | `dart` komutu mevcut | -| deno | .ts, .tsx, .js, .jsx, .mjs | `deno` komutu mevcut (deno.json/deno.jsonc otomatik olarak algılanır) | -| elixir-ls | .ex, .exs | `elixir` komutu mevcut | -| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | Projede `eslint` bağımlılığı | -| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` kurulu | -| gleam | .gleam | `gleam` komutu mevcut | -| gopls | .go | `go` komutu mevcut | -| hls | .hs, .lhs | `haskell-language-server-wrapper` komutu mevcut | -| jdtls | .java | `Java SDK (version 21+)` kurulu | -| julials | .jl | `julia` ve `LanguageServer.jl` kurulu | -| kotlin-ls | .kt, .kts | Kotlin projeleri için otomatik kurulumlar | -| lua-ls | .lua | Lua projeleri için otomatik kurulumlar | -| nixd | .nix | `nixd` komutu mevcut | -| ocaml-lsp | .ml, .mli | `ocamllsp` komutu mevcut | -| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | Projede `oxlint` bağımlılığı | -| php intelephense | .php | PHP projeleri için otomatik yüklemeler | -| prisma | .prisma | `prisma` komutu mevcut | -| pyright | .py, .pyi | `pyright` bağımlılığı kurulu | -| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | `ruby` ve `gem` komutları mevcut | -| rust | .rs | `rust-analyzer` komutu mevcut | -| sourcekit-lsp | .swift, .objc, .objcpp | `swift` kurulu (macOS'ta `xcode`) | -| svelte | .svelte | Svelte projeleri için otomatik kurulumlar | -| terraform | .tf, .tfvars | GitHub sürümlerinden otomatik yüklemeler | -| tinymist | .typ, .typc | GitHub sürümlerinden otomatik yüklemeler | -| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | Projede `typescript` bağımlılığı | -| vue | .vue | Vue projeleri için otomatik yüklemeler | -| yaml-ls | .yaml, .yml | Red Hat yaml-language-server'ı otomatik olarak yükler | -| zls | .zig, .zon | `zig` komutu mevcut | - -LSP varsayılan olarak devre dışıdır. Etkinleştirildiğinde, yukarıdaki dosya uzantılarından biri tespit edilir ve gereksinimler karşılanırsa sunucular başlatılır. - -:::note -`OPENCODE_DISABLE_LSP_DOWNLOAD` ortam değişkenini `true` olarak ayarlayarak otomatik LSP sunucu indirmelerini devre dışı bırakabilirsiniz. -::: - ---- - -## Nasıl Çalışır? - -LSP etkinleştirildiğinde ve opencode bir dosyayı açtığında: - -1. Dosya uzantısını tüm etkin LSP sunucularına göre kontrol eder. -2. Henüz çalışmıyorsa uygun LSP sunucusunu başlatır. - ---- - -## En İyi Uygulamalar - -LSP, dil sunucularından tanılama sağlayarak agent'ın sorunları bulup düzeltmesine yardımcı olabilir. Bu bazı projelerde yararlıdır, ancak her zaman net bir kazanç değildir. - -Dil sunucuları senkronizasyonu kaybedebilir, önemli miktarda bellek kullanabilir, sürüme veya projeye göre değişebilir ve agent iş akışlarını yavaşlatabilir. Birçok projede agent'ın lint, typecheck veya diğer tanılama CLI araçlarını doğrudan çalıştırması daha iyidir; böylece hatalar bu ödünleşimler olmadan agent döngüsüne geri beslenir. Agent'ın ne çalıştıracağını bilmesi için bu komutları `AGENTS.md` veya skills gibi talimat dosyalarında belgeleyin. Projeniz ek dil sunucusu geri bildiriminden yararlanıyorsa LSP'yi etkinleştirin. - ---- - -## Yapılandırma - -LSP sunucularını, opencode yapılandırmanızdaki `lsp` bölümü aracılığıyla etkinleştirebilir ve özelleştirebilirsiniz. - -Tüm yerleşik LSP sunucularını etkinleştirmek için `lsp` değerini `true` olarak ayarlayın. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -Yerleşik sunucuları etkin tutarken geçersiz kılmaları veya özel sunucuları yapılandırmak için bir nesne kullanın. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": {} -} -``` - -Her LSP sunucusu aşağıdakileri destekler: - -| Özellik | Tip | Açıklama | -| ---------------- | -------- | -------------------------------------------------------------------- | -| `disabled` | boolean | LSP sunucusunu devre dışı bırakmak için bunu `true` olarak ayarlayın | -| `command` | string[] | LSP sunucusunu başlatma komutu | -| `extensions` | string[] | Bu LSP sunucusunun işlemesi gereken dosya uzantıları | -| `env` | object | Sunucuyu başlatırken ayarlanacak ortam değişkenleri | -| `initialization` | object | LSP sunucusuna gönderilecek başlatma seçenekleri | - -Bazı örneklere bakalım. - ---- - -### Ortam değişkenleri - -LSP sunucusunu başlatırken ortam değişkenlerini ayarlamak için `env` özelliğini kullanın: - -```json title="opencode.json" {5-7} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "rust": { - "env": { - "RUST_LOG": "debug" - } - } - } -} -``` - ---- - -### Başlatma seçenekleri - -Başlatma seçeneklerini LSP sunucusuna iletmek için `initialization` özelliğini kullanın. Bunlar LSP `initialize` isteği sırasında gönderilen sunucuya özel ayarlardır: - -```json title="opencode.json" {5-9} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "initialization": { - "preferences": { - "importModuleSpecifierPreference": "relative" - } - } - } - } -} -``` - -:::note -Başlatma seçenekleri LSP sunucusuna göre değişir. Mevcut seçenekler için LSP sunucunuzun belgelerine bakın. -::: - ---- - -### LSP sunucularını devre dışı bırakma - -`lsp` atlanırsa tüm LSP sunucuları devre dışı kalır. Başka bir yapılandırma etkinleştirdikten sonra tüm LSP sunucularını devre dışı bırakmak için `lsp` değerini `false` olarak ayarlayın: - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": false -} -``` - -**Belirli** bir LSP sunucusunu devre dışı bırakmak için `disabled`'yi `true` olarak ayarlayın: - -```json title="opencode.json" {5} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "typescript": { - "disabled": true - } - } -} -``` - ---- - -### Özel LSP sunucuları - -Komutu ve dosya uzantılarını belirterek özel LSP sunucuları ekleyebilirsiniz: - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "custom-lsp": { - "command": ["custom-lsp-server", "--stdio"], - "extensions": [".custom"] - } - } -} -``` - ---- - -## Ek Bilgiler - -### PHP Intelephense - -PHP Intelephense, bir lisans anahtarı aracılığıyla premium özellikler sunar. Anahtarı (yalnızca) şu adresteki bir metin dosyasına yerleştirerek bir lisans anahtarı sağlayabilirsiniz: - -- macOS/Linux'ta: `$HOME/intelephense/license.txt` -- Windows'ta: `%USERPROFILE%/intelephense/license.txt` - -Dosya, ek içerik olmadan yalnızca lisans anahtarını içermelidir. diff --git a/packages/web/src/content/docs/tr/mcp-servers.mdx b/packages/web/src/content/docs/tr/mcp-servers.mdx deleted file mode 100644 index 0f60c5633c..0000000000 --- a/packages/web/src/content/docs/tr/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -title: MCP sunucuları -description: Yerel ve uzak MCP araçlarını ekleyin. ---- - -_Model Bağlam Protokolü_ veya MCP kullanarak opencode'a harici araçlar ekleyebilirsiniz. opencode hem yerel hem de uzak sunucuları destekler. - -MCP araçları eklendikten sonra yerleşik araçların yanı sıra LLM tarafından otomatik olarak kullanılabilir. - ---- - -#### Uyarılar - -Bir MCP sunucusu kullandığınızda bağlama eklenir. Çok fazla aletiniz varsa, bu hızla artabilir. Bu nedenle hangi MCP sunucularını kullandığınıza dikkat etmenizi öneririz. - -:::tip -MCP sunucuları içeriğinize katkıda bulunur, bu nedenle hangilerini etkinleştirdiğinize dikkat etmek istersiniz. -::: - -GitHub MCP sunucusu gibi belirli MCP sunucuları çok sayıda belirteç ekleme eğilimindedir ve bağlam sınırını kolayca aşabilir. - ---- - -## Etkinleştirme - -MCP sunucularını [opencode Config](https://opencode.ai/docs/config/)'nizde `mcp` altında tanımlayabilirsiniz. Her MCP'ü benzersiz bir adla ekleyin. LLM isteminde bulunurken bu MCP adına başvurabilirsiniz. - -```jsonc title="opencode.jsonc" {6} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "name-of-mcp-server": { - // ... - "enabled": true, - }, - "name-of-other-mcp-server": { - // ... - }, - }, -} -``` - -Ayrıca `enabled` öğesini `false` olarak ayarlayarak bir sunucuyu devre dışı bırakabilirsiniz. Bir sunucuyu yapılandırmanızdan kaldırmadan geçici olarak devre dışı bırakmak istiyorsanız bu kullanışlıdır. - ---- - -### Uzak varsayılanları geçersiz kılma - -Kuruluşlar, `.well-known/opencode` uç noktaları aracılığıyla varsayılan MCP sunucularını sağlayabilir. Bu sunucular varsayılan olarak devre dışı bırakılarak kullanıcıların ihtiyaç duydukları sunucuları seçmelerine olanak tanınabilir. - -Kuruluşunuzun uzak yapılandırmasından belirli bir sunucuyu etkinleştirmek için onu `enabled: true` ile yerel yapılandırmanıza ekleyin: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "jira": { - "type": "remote", - "url": "https://jira.example.com/mcp", - "enabled": true - } - } -} -``` - -Yerel yapılandırma değerleriniz uzak varsayılanları geçersiz kılar. Daha fazla ayrıntı için [config precedence](/docs/config#precedence-order)'a bakın. - ---- - -## Yerel - -`type` kullanarak yerel MCP sunucularını MCP nesnesi içindeki `"local"`'ye ekleyin. - -```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", - }, - }, - }, -} -``` - -Komut, yerel MCP sunucusunun nasıl başlatıldığıdır. Ayrıca ortam değişkenlerinin bir listesini de iletebilirsiniz. - -Örneğin, [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP test sunucusunu şu şekilde görebilirsiniz. - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "mcp_everything": { - "type": "local", - "command": ["npx", "-y", "@modelcontextprotocol/server-everything"], - }, - }, -} -``` - -Ve bunu kullanmak için istemlerime `use the mcp_everything tool` kullanıyorum. - -```txt "mcp_everything" -use the mcp_everything tool to add the number 3 and 4 -``` - ---- - -#### Seçenekler - -Yerel bir MCP sunucusunu yapılandırmak için tüm seçenekler burada verilmiştir. - -| Seçenek | Tür | Gerekli | Açıklama | -| ------------- | ------- | ------- | ---------------------------------------------------------------------------------------------- | -| `type` | Dize | Y | MCP sunucu bağlantısı türü, `"local"` olmalıdır. | -| `command` | Dizi | Y | MCP sunucusunu çalıştırmak için komut ve argümanlar. | -| `environment` | Nesne | | Sunucuyu çalıştırırken ayarlanacak ortam değişkenleri. | -| `enabled` | Boolean | | Başlangıçta MCP sunucusunu etkinleştirin veya devre dışı bırakın. | -| `timeout` | Sayı | | MCP sunucusundan araçları getirirken ms cinsinden zaman aşımı. Varsayılan 5000'dir (5 saniye). | - ---- - -## Uzak - -`type`'yi `"remote"` olarak ayarlayarak uzak MCP sunucularını ekleyin. - -```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` uzak MCP sunucusunun URL'sidir ve `headers` seçeneğiyle bir başlık listesi iletebilirsiniz. - ---- - -#### Seçenekler - -| Seçenek | Tür | Gerekli | Açıklama | -| --------- | ------- | ------- | ---------------------------------------------------------------------------------------------- | -| `type` | Dize | Y | MCP sunucu bağlantısı türü, `"remote"` olmalıdır. | -| `url` | Dize | Y | Uzak MCP sunucusunun URL. | -| `enabled` | Boolean | | Başlangıçta MCP sunucusunu etkinleştirin veya devre dışı bırakın. | -| `headers` | Nesne | | İstekle birlikte gönderilecek başlıklar. | -| `oauth` | Object | | OAuth authentication configuration. See [OAuth](#oauth) section below. | -| `timeout` | Sayı | | MCP sunucusundan araçları getirirken ms cinsinden zaman aşımı. Varsayılan 5000'dir (5 saniye). | - ---- - -## OAuth - -opencode, uzak MCP sunucuları için OAuth kimlik doğrulamasını otomatik olarak yönetir. Bir sunucu kimlik doğrulaması gerektirdiğinde opencode şunları yapar: - -1. 401 yanıtını tespit edin ve OAuth akışını başlatın -2. Sunucu tarafından destekleniyorsa **Dinamik İstemci Kaydı (RFC 7591)** kullanın -3. Gelecekteki istekler için belirteçleri güvenli bir şekilde saklayın - ---- - -### Otomatik - -OAuth'un etkin olduğu çoğu MCP sunucusu için özel bir yapılandırmaya gerek yoktur. Uzak sunucuyu yapılandırmanız yeterli: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "my-oauth-server": { - "type": "remote", - "url": "https://mcp.example.com/mcp" - } - } -} -``` - -Sunucu kimlik doğrulama gerektiriyorsa opencode, onu ilk kez kullanmaya çalıştığınızda kimlik doğrulamanızı isteyecektir. Değilse, `opencode mcp auth ` ile [manually trigger the flow](#authenticating) yapabilirsiniz. - ---- - -### Ön kayıtlı - -MCP sunucu sağlayıcısından istemci kimlik bilgileriniz varsa, bunları yapılandırabilirsiniz: - -```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" - } - } - } -} -``` - ---- - -### Kimlik doğrulama - -Kimlik doğrulamayı manuel olarak tetikleyebilir veya kimlik bilgilerini yönetebilirsiniz. - -Belirli bir MCP sunucusuyla kimlik doğrulaması yapın: - -```bash -opencode mcp auth my-oauth-server -``` - -Tüm MCP sunucularını ve kimlik doğrulama durumlarını listeleyin: - -```bash -opencode mcp list -``` - -Remove stored credentials: - -```bash -opencode mcp logout my-oauth-server -``` - -`mcp auth` komutu tarayıcınızı yetkilendirme için açacaktır. Yetkilendirmenizin ardından opencode, belirteçleri `~/.local/share/opencode/mcp-auth.json`'de güvenli bir şekilde saklar. - ---- - -#### OAuth'u devre dışı bırakma - -Bir sunucu için otomatik OAuth'u devre dışı bırakmak istiyorsanız (örneğin, bunun yerine API anahtarlarını kullanan sunucular için), `oauth`'yi `false` olarak ayarlayın: - -```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 Seçenekleri - -| Seçenek | Tür | Açıklama | -| -------------- | --------------- | -------------------------------------------------------------------------------- | -| `oauth` | Object \| false | OAuth config object, or `false` to disable OAuth auto-detection. | -| `clientId` | Dize | OAuth istemci kimliği. Sağlanmadığı takdirde dinamik müşteri kaydı denenecektir. | -| `clientSecret` | Dize | Yetkilendirme sunucusu gerektiriyorsa OAuth istemci sırrı. | -| `scope` | String | OAuth scopes to request during authorization. | - -#### Hata Ayıklama - -Uzak bir MCP sunucusunun kimlik doğrulaması başarısız olursa aşağıdakileri kullanarak sorunları teşhis edebilirsiniz: - -```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 -``` - -`mcp debug` komutu mevcut kimlik doğrulama durumunu gösterir, HTTP bağlantısını test eder ve OAuth bulma akışını dener. - ---- - -## Yönetim - -MCP'leriniz yerleşik araçların yanı sıra opencode'da araç olarak mevcuttur. Böylece bunları diğer araçlar gibi opencode yapılandırması aracılığıyla yönetebilirsiniz. - ---- - -### Global - -Bu, bunları global olarak etkinleştirebileceğiniz veya devre dışı bırakabileceğiniz anlamına gelir. - -```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 - } -} -``` - -Eşleşen tüm MCP'leri devre dışı bırakmak için bir glob modeli de kullanabiliriz. - -```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 - } -} -``` - -Burada tüm MCP'leri devre dışı bırakmak için `my-mcp*` glob modelini kullanıyoruz. - ---- - -### Agent başına - -Çok sayıda MCP sunucunuz varsa, bunları yalnızca aracı başına etkinleştirmek ve genel olarak devre dışı bırakmak isteyebilirsiniz. Bunu yapmak için: - -1. Global olarak bir araç olarak devre dışı bırakın. -2. [agent config](/docs/agents#tools)'nizde, MCP sunucusunu bir araç olarak etkinleştirin. - -```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 desenleri - -Glob modeli, basit normal ifade globbing modellerini kullanır: - -- `*` herhangi bir karakterin sıfır veya daha fazlasıyla eşleşir (örneğin, `"my-mcp*"` `my-mcp_search`, `my-mcp_list` vb. ile eşleşir) -- `?` matches exactly one character -- All other characters match literally - -:::note -MCP sunucu araçları önek olarak sunucu adıyla kayıtlıdır, dolayısıyla bir sunucuya ilişkin tüm araçları devre dışı bırakmak için aşağıdakileri kullanmanız yeterlidir: - -``` -"mymcpservername_*": false -``` - -::: - ---- - -## Örnekler - -Aşağıda bazı yaygın MCP sunucularının örnekleri verilmiştir. Diğer sunucuları belgelemek istiyorsanız PR gönderebilirsiniz. - ---- - -### Sentry - -Sentry projelerinizle ve sorunlarınızla etkileşimde bulunmak için [Sentry MCP server](https://mcp.sentry.dev) ekleyin. - -```json title="opencode.json" {4-8} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "sentry": { - "type": "remote", - "url": "https://mcp.sentry.dev/mcp", - "oauth": {} - } - } -} -``` - -Yapılandırmayı ekledikten sonra Sentry ile kimlik doğrulaması yapın: - -```bash -opencode mcp auth sentry -``` - -Bu, OAuth akışını tamamlamak ve opencode'u Sentry hesabınıza bağlamak için bir tarayıcı penceresi açacaktır. - -Kimlik doğrulaması yapıldıktan sonra sorunları, projeleri ve hata verilerini sorgulamak için istemlerinizde Sentry araçlarını kullanabilirsiniz. - -```txt "use sentry" -Show me the latest unresolved issues in my project. use sentry -``` - ---- - -### Context7 - -Dokumanlar arasında arama yapmak için [Context7 MCP server](https://github.com/upstash/context7) ekleyin. - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "context7": { - "type": "remote", - "url": "https://mcp.context7.com/mcp" - } - } -} -``` - -Ücretsiz bir hesaba kaydolduysanız API anahtarınızı kullanarak daha yüksek ücret limitleri elde edebilirsiniz. - -```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}" - } - } - } -} -``` - -Burada `CONTEXT7_API_KEY` ortam değişkeninin ayarlandığını varsayıyoruz. - -Context7 MCP sunucunu kullanmak için isteklerinize `use context7` ekleyin. - -```txt "use context7" -Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7 -``` - -Alternatif olarak [AGENTS.md](/docs/rules/)'a buna benzer bir şey ekleyebilirsiniz. - -```md title="AGENTS.md" -When you need to search docs, use `context7` tools. -``` - ---- - -### Grep by Vercel - -GitHub'daki kod parçacıkları arasında arama yapmak için [Grep by Vercel](https://grep.app) MCP sunucusunu ekleyin. - -```json title="opencode.json" {4-7} -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "gh_grep": { - "type": "remote", - "url": "https://mcp.grep.app" - } - } -} -``` - -MCP sunucumuzu `gh_grep` olarak adlandırdığımız için, aracının onu kullanmasını sağlamak için istemlerinize `use the gh_grep tool` ekleyebilirsiniz. - -```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 -``` - -Alternatif olarak [AGENTS.md](/docs/rules/)'a buna benzer bir şey ekleyebilirsiniz. - -```md title="AGENTS.md" -If you are unsure how to do something, use `gh_grep` to search code examples from GitHub. -``` diff --git a/packages/web/src/content/docs/tr/models.mdx b/packages/web/src/content/docs/tr/models.mdx deleted file mode 100644 index 45df6e3fff..0000000000 --- a/packages/web/src/content/docs/tr/models.mdx +++ /dev/null @@ -1,223 +0,0 @@ ---- -title: Modeller -description: LLM sağlayıcılarını ve model seçimlerini yapılandırın. ---- - -opencode, **75+ LLM sağlayıcısını** desteklemek için [AI SDK](https://ai-sdk.dev/) ve [Models.dev](https://models.dev) kullanır ve yerel modellerin çalıştırılmasını destekler. - ---- - -## Sağlayıcılar - -Çoğu popüler sağlayıcı varsayılan olarak önceden yüklenmiştir. Bir sağlayıcının kimlik bilgilerini `/connect` komutu aracılığıyla eklediyseniz, bunlar opencode'u başlattığınızda kullanılabilir olacaktır. - -[Sağlayıcılar](/docs/providers) hakkında daha fazla bilgi edinin. - ---- - -## Model seçimi - -Sağlayıcınızı yapılandırdıktan sonra aşağıdaki komutu yazarak istediğiniz modeli seçebilirsiniz: - -```bash frame="none" -/models -``` - ---- - -## Önerilen modeller - -Piyasada pek çok model var ve her hafta yeni modeller çıkıyor. - -:::tip -Önerdiğimiz modellerden birini kullanmayı düşünün. -::: - -Ancak, hem kod oluşturmada hem de araç çağırmada iyi olan yalnızca birkaçı var. - -Burada, opencode ile belirli bir sıraya göre iyi çalışan birkaç model yer almaktadır. (Bu kapsamlı bir liste değildir ve mutlaka güncel olması da gerekmez): - -- GPT 5.2 -- GPT 5.1 Codex -- Claude Opus 4.5 -- Claude Sonnet 4.5 -- Minimax M2.1 -- Gemini 3 Pro - ---- - -## Varsayılan ayarlama - -Bunlardan birini varsayılan model olarak ayarlamak için `model` anahtarınızı telefonunuzudan ayarlayabilirsiniz. -opencode yapılandırması - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "model": "lmstudio/google/gemma-3n-e4b" -} -``` - -Burada tam kimlik `provider_id/model_id`'dir. Örneğin, [OpenCode Zen](/docs/zen) kullanıyorsanız, GPT 5.1 Codex için `opencode/gpt-5.1-codex` kullanırsınız. - -Bir [custom provider](/docs/providers#custom) yapılandırılmışsa, `provider_id`, performansınızın `provider` bölümünden gelen anahtardır ve `model_id`, `provider.models`'den gelen anahtardır. - ---- - -## Model yapılandırma - -Bir modelin seçeneklerini genel olarak yapılandırma aracılığıyla yapılandırabilirsiniz. - -```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, - }, - }, - }, - }, - }, - }, -} -``` - -Burada iki yerleşik model için genel ayarları yapılandırıyoruz: `gpt-5` sağlayıcısı aracılığıyla erişildiğinde `openai` ve `claude-sonnet-4-20250514` sağlayıcısı aracılığıyla erişildiğinde `anthropic`. -Yerleşik sağlayıcı ve model adları [Models.dev](https://models.dev) adresinde bulunabilir. - -Bu seçenekleri kullandığınız tüm aracılar için de yapılandırabilirsiniz. Aracı yapılandırması burada tüm genel seçenekleri geçersiz kılar. [Daha fazla bilgi](/docs/agents/#additional). - -Ayrıca yerleşik çeşitleri genişleten özel varyantlar da tanımlayabilirsiniz. Varyantlar, yinelenen girişler oluşturmadan aynı model için farklı ayarları yapılandırmanıza olanak tanır: - -```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", - }, - }, - }, - }, - }, - }, -} -``` - ---- - -## Varyantlar - -Birçok model, farklı konfigürasyonlara sahip birden fazla kapasiteye sahip. opencode, popüler sağlayıcılar için sunulan değişkenlerle birlikte gelir. - -### Yerleşik çeşitler - -opencode birçok sağlayıcı için varsayılan değişkenlerle birlikte gelir: - -**Antropik**: - -- `high` - Yüksek düşünme bütçesi (varsayılan) -- `max` - Maksimum düşünme bütçesi - -**OpenAI**: - -Modele göre değişir ancak kabaca: - -- `none` - Gerekçe yok -- `minimal` - Minimum akıl yürütme çabası -- `low` - Düşük muhakeme çabası -- `medium` - Orta düzey muhakeme çabası -- `high` - Yüksek akıl yürütme çabası -- `xhigh` - Ekstra yüksek muhakeme çabası - -**Google**: - -- `low` - Daha düşük effort/token bütçesi -- `high` - Daha yüksek effort/token bütçesi - -:::tip -Bu liste kapsamlı değildir. Diğer birçok sağlayıcının da yerleşik varsayılanları vardır. -::: - -### Özel çeşitler - -Mevcut varyantları geçersiz kılabilir veya kendinizinkini ekleyebilirsiniz: - -```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, - }, - }, - }, - }, - }, - }, -} -``` - -### Döngü çeşitleri - -Çeşitler arasında hızlı geçiş yapmak için `variant_cycle` tuş atamasını kullanın. [Daha fazla bilgi](/docs/keybinds). - ---- - -## Modelleri yükleme - -opencode başlatıldığında modelleri aşağıdaki öncelik sırasına göre kontrol eder: - -1. `--model` veya `-m` komut satırı bayrağı. Biçim, yapılandırma dosyasındakiyle aynıdır: `provider_id/model_id`. - -2. opencode yapılandırmasındaki model listesi. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-20250514" - } - ``` - - Buradaki format `provider/model`'dır. - -3. En son kullanılan model. - -4. Dahili öncelik kullanan ilk model. diff --git a/packages/web/src/content/docs/tr/network.mdx b/packages/web/src/content/docs/tr/network.mdx deleted file mode 100644 index b1ea7bc79f..0000000000 --- a/packages/web/src/content/docs/tr/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Ağ -description: Proxy'leri ve özel sertifikaları yapılandırın. ---- - -opencode, kurumsal ağ ortamları için standart proxy ortam değişkenlerini ve özel sertifikaları destekler. - ---- - -## Vekil Sunucu - -opencode respects standard proxy environment variables. - -```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 yerel bir HTTP sunucusuyla iletişim kurar. Yönlendirme döngülerini önlemek için bu bağlantının proxy'sini atlamanız gerekir. -::: - -[CLI flags](/docs/cli#run) kullanarak sunucunun bağlantı noktasını ve ana bilgisayar adını yapılandırabilirsiniz. - ---- - -### Kimlik doğrulama - -Proxy'niz temel kimlik doğrulama gerektiriyorsa, kimlik bilgilerini URL dosyasına ekleyin. - -```bash -export HTTPS_PROXY=http://username:password@proxy.example.com:8080 -``` - -:::caution -Şifreleri sabit kodlamaktan kaçının. Ortam değişkenlerini veya güvenli kimlik bilgileri deposunu kullanın. -::: - -NTLM veya Kerberos gibi gelişmiş kimlik doğrulaması gerektiren proxy'ler için, kimlik doğrulama yönteminizi destekleyen bir LLM Ağ Geçidi kullanmayı düşünün. - ---- - -## Özel sertifikalar - -Kuruluşunuz HTTPS bağlantıları için özel CA'lar kullanıyorsa, opencode'u bunlara güvenecek şekilde yapılandırın. - -```bash -export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem -``` - -Bu hem proxy bağlantıları hem de doğrudan API erişimi için işe yarar. diff --git a/packages/web/src/content/docs/tr/permissions.mdx b/packages/web/src/content/docs/tr/permissions.mdx deleted file mode 100644 index 67dded2209..0000000000 --- a/packages/web/src/content/docs/tr/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -title: İzinler -description: Hangi işlemlerin çalıştırılması için onay sürecini kontrol edin. ---- - -opencode, belirli bir eylemin otomatik olarak mı çalıştırılacağına, size sorulacağına veya engelleneceğine karar vermek için `permission` yapılandırmasını kullanır. - -`v1.1.1` itibarıyla eski `tools` boolean yapılandırması kullanımdan kaldırıldı ve `permission` ile birleştirildi. Eski `tools` yapılandırması geriye dönük uyumluluk açısından hâlâ desteklenmektedir. - ---- - -## Eylemler - -Her izin kuralı şunlardan birine çözümlenir: - -- `"allow"` — onay olmadan çalıştır -- `"ask"` — onay istemi -- `"deny"` — eylemi engelle - ---- - -## Yapılandırma - -İzinleri genel olarak (`*` ile) ayarlayabilir ve belirli araçları geçersiz kılabilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "*": "ask", - "bash": "allow", - "edit": "deny" - } -} -``` - -Ayrıca tüm izinleri aynı anda ayarlayabilirsiniz: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": "allow" -} -``` - ---- - -## Ayrıntılı Kurallar (Nesne Sözdizimi) - -Çoğu izin için, araç girişine bağlı olarak farklı eylemleri uygulamak için bir nesneyi kullanabilirsiniz. - -```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" - } - } -} -``` - -Kurallar, **son eşleşen kuralın kazanması** ile kalıp eşleşmesine göre değerlendirilir. Yaygın bir model, tümünü yakala `"*"` kuralını ilk sıraya koymak ve daha spesifik kuralları ondan sonra koymaktır. - -### Joker Karakterler - -İzin kalıpları basit joker karakter eşleştirmesini kullanır: - -- `*` herhangi bir karakterin sıfır veya daha fazlasıyla eşleşir -- `?` tam olarak bir karakterle eşleşir -- Diğer tüm karakterler birebir eşleşir - -### Ana Dizin Genişletme - -Ana dizininize referans vermek için bir modelin başlangıcında `~` veya `$HOME` kullanabilirsiniz. Bu özellikle [`external_directory`](#external-directories) kuralları için kullanışlıdır. - -- `~/projects/*` -> `/Users/username/projects/*` -- `$HOME/projects/*` -> `/Users/username/projects/*` -- `~` -> `/Users/username` - -### Harici Dizinler - -opencode'un başlatıldığı çalışma dizini dışındaki yollara dokunan araç çağrılarına izin vermek için `external_directory` kullanın. Bu, girdi olarak bir yolu alan tüm araçlar için geçerlidir (örneğin `read`, `edit`, `glob`, `grep` ve birçok `bash` komutu). - -Ana sayfa genişletmesi (`~/...` gibi) yalnızca bir kalıbın nasıl yazıldığını etkiler. Geçerli çalışma alanının harici bir yolunu oluşturmaz, dolayısıyla çalışma dizini dışındaki yollara yine de `external_directory` aracılığıyla izin verilmesi gerekir. - -Örneğin bu, `~/projects/personal/` altındaki her şeye erişime izin verir: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - } - } -} -``` - -Burada izin verilen herhangi bir dizin, geçerli çalışma alanıyla aynı varsayılanları devralır. [`read` defaults to `allow`](#defaults)'dan bu yana, geçersiz kılınmadığı sürece `external_directory` altındaki girişler için okumalara da izin verilir. Bir aracın bu yollarda kısıtlanması gerektiğinde (okumaları tutarken düzenlemeleri engellemek gibi) açık kurallar ekleyin: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - }, - "edit": { - "~/projects/personal/**": "deny" - } - } -} -``` - -Listeyi güvenilir yollara odaklı tutun ve diğer araçlar için gereken ekstra izin verme veya reddetme kurallarını katmanlayın (örneğin `bash`). - ---- - -## Mevcut İzinler - -opencode izinleri araç adına ve birkaç güvenlik önlemine göre anahtarlanır: - -- `read` — bir dosyayı okumak (dosya yoluyla eşleşir) -- `edit` — tüm dosya değişiklikleri (`edit`, `write`, `patch`'i kapsar) -- `glob` — dosya genellemesi (glob düzeniyle eşleşir) -- `grep` — içerik arama (regex modeliyle eşleşir) -- `bash` — kabuk komutlarını çalıştırma (`git status --porcelain` gibi ayrıştırılmış komutlarla eşleşir) -- `task` — alt agent'ların başlatılması (alt agent türüyle eşleşir) -- `skill` — bir skill yükleniyor (skill adıyla eşleşir) -- `lsp` — LSP sorgularını çalıştırıyor (şu anda ayrıntılı değil) -- `webfetch` — URL getiriliyor (URL ile eşleşiyor) -- `websearch` — web arama (sorguyla eşleşir) -- `external_directory` — bir araç proje çalışma dizini dışındaki yollara dokunduğunda tetiklenir -- `doom_loop` — aynı araç çağrısı aynı girdiyle 3 kez tekrarlandığında tetiklenir - ---- - -## Varsayılanlar - -Hiçbir şey belirtmezseniz opencode izin verilen varsayılanlardan başlar: - -- Çoğu izin varsayılan olarak `"allow"` şeklindedir. -- `doom_loop` ve `external_directory` varsayılan olarak `"ask"`'dir. -- `read`, `"allow"`'dır, ancak `.env` dosyaları varsayılan olarak reddedilir: - -```json title="opencode.json" -{ - "permission": { - "read": { - "*": "allow", - "*.env": "deny", - "*.env.*": "deny", - "*.env.example": "allow" - } - } -} -``` - ---- - -## “Sor” Ne Yapar? - -opencode onay istediğinde kullanıcı arayüzü üç sonuç sunar: - -- `once` — yalnızca bu isteği onayla -- `always` — önerilen kalıplarla eşleşen gelecekteki istekleri onaylayın (geçerli opencode oturumunun geri kalanı için) -- `reject` — isteği reddet - -`always`'ın onaylayacağı kalıp seti araç tarafından sağlanır (örneğin, bash onayları genellikle `git status*` gibi güvenli bir komut önekini beyaz listeye alır). - ---- - -## Agent'lar - -Agent bazında izinleri geçersiz kılabilirsiniz. Agent izinleri global yapılandırmayla birleştirilir ve agent kuralları önceliklidir. [Daha fazla bilgi](/docs/agents#permissions). - -:::note -Daha ayrıntılı desen eşleştirme örnekleri için yukarıdaki [Ayrıntılı kurallar (nesne söz dizimi)](#granular-rules-object-syntax) bölümüne bakın. -::: - -```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" - } - } - } - } -} -``` - -Agent izinlerini Markdown'da da yapılandırabilirsiniz: - -```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 -Bağımsız değişken içeren komutlar için kalıp eşleştirmeyi kullanın. `"grep *"`, `grep pattern file.txt`'ye izin verir, ancak `"grep"` tek başına onu engeller. `git status` gibi komutlar varsayılan davranış için çalışır ancak argümanlar aktarıldığında açık izin (`"git status *"` gibi) gerektirir. -::: diff --git a/packages/web/src/content/docs/tr/plugins.mdx b/packages/web/src/content/docs/tr/plugins.mdx deleted file mode 100644 index 4926f5f70e..0000000000 --- a/packages/web/src/content/docs/tr/plugins.mdx +++ /dev/null @@ -1,388 +0,0 @@ ---- -title: Eklentiler -description: OpenCode'u genişletmek için kendi eklentilerinizi yazın. ---- - -Eklentiler, çeşitli olaylara bağlanarak ve davranışı özelleştirerek OpenCode'u genişletmenize olanak tanır. Yeni özellikler eklemek, harici hizmetlerle entegrasyon sağlamak veya OpenCode'un varsayılan davranışını değiştirmek için eklentiler oluşturabilirsiniz. - -Örnekler için topluluk tarafından oluşturulan [eklentilere](/docs/ecosystem#plugins) göz atın. - ---- - -## Eklenti kullanımı - -Eklentileri yüklemenin iki yolu vardır. - ---- - -### Yerel dosyalardan - -JavaScript veya TypeScript dosyalarını eklenti dizinine yerleştirin. - -- `.opencode/plugins/` - Proje düzeyinde eklentiler -- `~/.config/opencode/plugins/` - Genel eklentiler - -Bu dizinlerdeki dosyalar başlangıçta otomatik olarak yüklenir. - ---- - -### npm'den - -Yapılandırma dosyanızda npm paketlerini belirtin. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"] -} -``` - -Hem normal hem de kapsamlı npm paketleri desteklenir. - -[Ekosistem](/docs/ecosystem#plugins)'deki mevcut eklentilere göz atın. - ---- - -### Eklentiler nasıl kurulur? - -**npm eklentileri** başlangıçta Bun kullanılarak otomatik olarak yüklenir. Paketler ve bağımlılıkları `~/.cache/opencode/node_modules/`'da önbelleğe alınır. - -**Yerel eklentiler** doğrudan eklenti dizininden yüklenir. Harici paketleri kullanmak için, sisteminizin dizininde bir `package.json` oluşturmanız (bkz. [Bağımlılıklar](#dependencies)) veya eklentiyi npm ve [yapılandırmanıza eklemeniz](/docs/config#plugins) gerekir. - ---- - -### Yükleme sırası - -Eklentiler tüm kaynaklardan yüklenir ve tüm kancalar sırayla çalışır. Yükleme sırası şöyledir: - -1. Global config (`~/.config/opencode/opencode.json`) -2. Project config (`opencode.json`) -3. Global eklenti dizini (`~/.config/opencode/plugins/`) -4. Proje eklenti dizini (`.opencode/plugins/`) - -Aynı ad ve sürüme sahip yinelenen npm paketleri bir kez yüklenir. Ancak benzer adlara sahip bir yerel eklenti ve bir npm eklentisinin her ikisi de ayrı ayrı yüklenir. - ---- - -## Eklenti oluşturma - -Eklenti, bir veya daha fazla eklenti işlevini dışa aktaran bir **JavaScript/TypeScript modülüdür**. Her işlev bir bağlam nesnesi alır ve bir kanca nesnesi döndürür. - ---- - -### Bağımlılıklar - -Yerel eklentiler ve özel araçlar harici npm paketlerini kullanabilir. İhtiyacınız olan bağımlılıkları içeren config dizininize bir `package.json` ekleyin. - -```json title=".opencode/package.json" -{ - "dependencies": { - "shescape": "^2.1.0" - } -} -``` - -OpenCode bunları yüklemek için başlangıçta `bun install` komutunu çalıştırır. Eklentileriniz ve araçlarınız daha sonra bunları içe aktarabilir. - -```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) - } - }, - } -} -``` - ---- - -### Temel yapı - -```js title=".opencode/plugins/example.js" -export const MyPlugin = async ({ project, client, $, directory, worktree }) => { - console.log("Plugin initialized!") - - return { - // Hook implementations go here - } -} -``` - -Eklenti işlevi şunları alır: - -- `project`: Mevcut proje bilgisi. -- `directory`: Güncel çalışma dizini. -- `worktree`: Git çalışma ağacı yolu. -- `client`: Yapay zeka ile etkileşim kurmak için bir OpenCode SDK istemcisi. -- `$`: Bun'un komutları yürütmek için kullandığı [shell API](https://bun.com/docs/runtime/shell). - ---- - -### TypeScript desteği - -TypeScript eklentileri için türleri eklenti paketinden içe aktarabilirsiniz: - -```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 - } -} -``` - ---- - -### Olaylar - -Eklentiler aşağıdaki Örnekler bölümünde görüldüğü gibi etkinliklere abone olabilirler. Burada mevcut farklı etkinliklerin bir listesi bulunmaktadır. - -#### Komut Olayları - -- `command.executed` - -#### Dosya Olayları - -- `file.edited` -- `file.watcher.updated` - -#### Kurulum Olayları - -- `installation.updated` - -#### LSP Olayları - -- `lsp.client.diagnostics` -- `lsp.updated` - -#### Mesaj Olayları - -- `message.part.removed` -- `message.part.updated` -- `message.removed` -- `message.updated` - -#### İzin Olayları - -- `permission.asked` -- `permission.replied` - -#### Sunucu Olayları - -- `server.connected` - -#### Oturum Olayları - -- `session.created` -- `session.compacted` -- `session.deleted` -- `session.diff` -- `session.error` -- `session.idle` -- `session.status` -- `session.updated` - -#### Yapılacaklar Olayları - -- `todo.updated` - -#### Kabuk Olayları - -- `shell.env` - -#### Araç Olayları - -- `tool.execute.after` -- `tool.execute.before` - -#### TUI Olayları - -- `tui.prompt.append` -- `tui.command.execute` -- `tui.toast.show` - ---- - -## Örnekler - -OpenCode'u genişletmek için kullanabileceğiniz bazı eklenti örneklerini burada bulabilirsiniz. - ---- - -### Bildirim Gönderme - -Belirli olaylar meydana geldiğinde bildirim gönderin: - -```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"'` - } - }, - } -} -``` - -macOS'ta AppleScript'i çalıştırmak için `osascript` kullanıyoruz. Burada bildirim göndermek için kullanıyoruz. - -:::note -OpenCode masaüstü uygulamasını kullanıyorsanız yanıt hazır olduğunda veya oturum hataları oluştuğunda otomatik olarak sistem bildirimleri gönderebilir. -::: - ---- - -### .env Koruması - -OpenCode'un `.env` dosyalarını okumasını önleyin: - -```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") - } - }, - } -} -``` - ---- - -### Ortam değişkenlerini enjekte etme - -Ortam değişkenlerini tüm kabuk yürütmeye (AI araçları ve kullanıcı terminalleri) enjekte edin: - -```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 - }, - } -} -``` - ---- - -### Özel araçlar - -Eklentiler ayrıca OpenCode'a özel araçlar da ekleyebilir: - -```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` yardımcısı, OpenCode'un çağırabileceği özel bir araç oluşturur. Bir Zod şeması işlevini alır ve aşağıdakileri içeren bir araç tanımı döndürür: - -- `description`: Araç ne yapar? -- `args`: Aracın argümanları için Zod şeması -- `execute`: Araç çağrıldığında çalışan fonksiyon - -Özel araçlarınız, yerleşik araçların yanı sıra OpenCode'a da hazır olacaktır. - -:::note -Eğer bir eklenti aracı yerleşik bir araçla aynı adı kullanırsa, eklenti aracı öncelik kazanır. -::: - ---- - -### Günlüğe kaydetme - -Yapılandırılmış günlük kaydı için `console.log` yerine `client.app.log()` kullanın: - -```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" }, - }, - }) -} -``` - -Seviyeler: `debug`, `info`, `warn`, `error`. Ayrıntılar için [SDK belgelerine](https://opencode.ai/docs/sdk) bakın. - ---- - -### Sıkıştırma kancaları - -Bir oturum sıkıştırıldığında içerilen bağlamı özelleştirin: - -```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` kancası, LLM bir devam özeti oluşturmadan önce tetiklenir. Varsayılan sıkıştırma isteminin kaçıracağı etki alanına özgü bağlamı enjekte etmek için bunu kullanın. - -Ayrıca `output.prompt` ayarını yaparak sıkıştırma istemini tamamen değiştirebilirsiniz: - -```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` ayarlandığında, varsayılan sıkıştırma isteminin tamamen yerini alır. Bu durumda `output.context` dizisi dikkate alınmaz. diff --git a/packages/web/src/content/docs/tr/providers.mdx b/packages/web/src/content/docs/tr/providers.mdx deleted file mode 100644 index 8c6ef23fee..0000000000 --- a/packages/web/src/content/docs/tr/providers.mdx +++ /dev/null @@ -1,1988 +0,0 @@ ---- -title: Sağlayıcılar -description: opencode'da herhangi bir LLM sağlayıcısını kullanma. ---- - -import config from "../../../../config.mjs" -export const console = config.console - -opencode, **75'ten fazla LLM sağlayıcısını** desteklemek için [AI SDK](https://ai-sdk.dev/) ve [Models.dev](https://models.dev) kullanır ve yerel modellerin çalıştırılmasını destekler. - -Bir sağlayıcı eklemek için şunları yapmanız gerekir: - -1. `/connect` komutunu kullanarak sağlayıcı için API anahtarlarını ekleyin. -2. Sağlayıcıyı opencode yapılandırmanızda yapılandırın. - ---- - -### Kimlik Bilgileri - -Bir sağlayıcının API anahtarlarını `/connect` komutuyla eklediğinizde, bunlar saklanır -`~/.local/share/opencode/auth.json` içinde. - ---- - -### Yapılandırma - -Sağlayıcıları opencode'unuzdaki `provider` bölümü aracılığıyla özelleştirebilirsiniz. -config. - ---- - -#### Temel URL - -`baseURL` seçeneğini ayarlayarak URL tabanını herhangi bir sağlayıcı için özelleştirebilirsiniz. Bu, proxy hizmetlerini veya özel uç noktaları kullanırken kullanışlıdır. - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen, opencode ekibi tarafından sağlanan modellerin bir listesidir. -opencode ile iyi çalıştığı test edilip doğrulandı. [Daha fazla bilgi](/docs/zen). - -:::tip -Yeniyseniz OpenCode Zen ile başlamanızı öneririz. -::: - -1. TUI'de `/connect` komutunu çalıştırın, opencode'u seçin ve [opencode.ai/auth](https://opencode.ai/auth)'ye gidin. - - ```txt - /connect - ``` - -2. Oturum açın, fatura ayrıntılarınızı ekleyin ve API anahtarınızı kopyalayın. - -3. API anahtarınızı yapıştırın. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Önerdiğimiz modellerin listesini görmek için TUI'de `/models` komutunu çalıştırın. - - ```txt - /models - ``` - -opencode'daki diğer sağlayıcılar gibi çalışır ve kullanımı tamamen isteğe bağlıdır. - ---- - -## OpenCode Go - -OpenCode Go, opencode ile iyi çalıştığı test edilmiş ve doğrulanmış, opencode ekibi tarafından sağlanan popüler açık kodlama modellerine güvenilir erişim sağlayan düşük maliyetli bir abonelik planıdır. - -1. TUI'de `/connect` komutunu çalıştırın, `OpenCode Go`'yu seçin ve [opencode.ai/auth](https://opencode.ai/zen) adresine gidin. - - ```txt - /connect - ``` - -2. Oturum açın, fatura ayrıntılarınızı ekleyin ve API anahtarınızı kopyalayın. - -3. API anahtarınızı yapıştırın. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Önerdiğimiz modellerin listesini görmek için TUI'de `/models` komutunu çalıştırın. - - ```txt - /models - ``` - -opencode'daki diğer sağlayıcılar gibi çalışır ve kullanımı tamamen isteğe bağlıdır. - ---- - -## Dizin - -Sağlayıcılardan bazılarına ayrıntılı olarak bakalım. Bir sağlayıcı eklemek istiyorsanız -liste, bir PR açmaktan çekinmeyin. - -:::note -Burada bir sağlayıcı göremiyor musunuz? Bir PR gönderin. -::: - ---- - -### 302.AI - -1. [302.AI console](https://302.ai/) adresine gidin, bir hesap oluşturun ve bir API anahtarı oluşturun. - -2. `/connect` komutunu çalıştırın ve **302.AI**'yi arayın. - - ```txt - /connect - ``` - -3. 302.AI API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -Amazon Bedrock'u opencode ile kullanmak için: - -1. Amazon Bedrock konsolundaki **Model kataloğuna** gidin ve istekte bulunun - Dilediğiniz modellere ulaşabilirsiniz. - - :::tip - Amazon Bedrock'ta istediğiniz modele erişiminizin olması gerekiyor. - ::: - -2. **Kimlik doğrulamayı yapılandırın**: Aşağıdaki yöntemlerden birini kullanın: - - #### Ortam Değişkenleri (Hızlı Başlangıç) - - opencode'u çalıştırırken bu ortam değişkenlerinden birini ayarlayın: - - ```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - Veya bunları bash profilinize ekleyin: - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - #### Yapılandırma Dosyası (Önerilen) - - Projeye özel veya kalıcı yapılandırma için `opencode.json` kullanın: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **Mevcut seçenekler:** - - `region` - AWS region (e.g., `us-east-1`, `eu-west-1`) - - `profile` - `~/.aws/credentials`'den AWS adlı profil - - `endpoint` - VPC uç noktaları için özel uç nokta URL (genel `baseURL` seçeneğinin takma adı) - - :::tip - Yapılandırma dosyası seçenekleri ortam değişkenlerine göre önceliklidir. - ::: - -#### Gelişmiş: VPC Uç Noktaları - -Bedrock için VPC uç noktaları kullanıyorsanız: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } -} -``` - -:::note -`endpoint` seçeneği, AWS'ye özgü terminolojiyi kullanan genel `baseURL` seçeneğinin takma adıdır. Hem `endpoint` hem de `baseURL` belirtilirse, `endpoint` öncelikli olur. -::: - -#### Kimlik Doğrulama Yöntemleri - -- **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**: Bir IAM kullanıcısı oluşturun ve AWS Konsolunda erişim anahtarları oluşturun -- **`AWS_PROFILE`**: `~/.aws/credentials`'den adlandırılmış profilleri kullanın. İlk önce `aws configure --profile my-profile` veya `aws sso login` ile yapılandırın -- **`AWS_BEARER_TOKEN_BEDROCK`**: Amazon Bedrock konsolundan uzun vadeli API anahtarları oluşturun -- **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**: EKS IRSA (IAM Hizmet Hesapları için Roller) veya OIDC federasyonuna sahip diğer Kubernetes ortamları için. Bu ortam değişkenleri, hizmet hesabı ek açıklamaları kullanılırken Kubernetes tarafından otomatik olarak eklenir. - -#### Kimlik Doğrulama Önceliği - -Amazon Bedrock aşağıdaki kimlik doğrulama önceliğini kullanır: - -1. **Taşıyıcı Belirteç** - `AWS_BEARER_TOKEN_BEDROCK` ortam değişkeni veya `/connect` komutundan belirteç -2. **AWS Credential Chain** - Profil, erişim anahtarları, paylaşılan kimlik bilgileri, IAM rolleri, Web Identity Tokens (EKS IRSA), örnek meta verileri - -:::note -Bir taşıyıcı belirteç ayarlandığında (`/connect` veya `AWS_BEARER_TOKEN_BEDROCK` yoluyla), yapılandırılmış profiller dahil olmak üzere tüm AWS kimlik bilgisi yöntemlerine göre öncelik kazanır. -::: - -3. İstediğiniz modeli seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - -:::note -Özel çıkarım profilleri için anahtardaki modeli ve sağlayıcı adını kullanın ve `id` özelliğini arn olarak ayarlayın. Bu, doğru önbelleğe almayı sağlar: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - -::: - ---- - -### Anthropic - -1. Kaydolduktan sonra `/connect` komutunu çalıştırın ve Anthropic'i seçin. - - ```txt - /connect - ``` - -2. Burada **Claude Pro/Max** seçeneğini seçebilirsiniz; tarayıcınız açılacaktır. - ve sizden kimlik doğrulamanızı isteyeceğiz. - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. Artık `/models` komutunu kullandığınızda tüm Antropik modeller mevcut olmalıdır. - - ```txt - /models - ``` - -:::info -Claude Pro/Max aboneliğinizi opencode'da kullanmak [Anthropic](https://anthropic.com) tarafından resmi olarak desteklenmemektedir. -::: - -##### API anahtarlarını kullanma - -Pro/Max aboneliğiniz yoksa **API Anahtarı Oluştur** seçeneğini de seçebilirsiniz. Ayrıca tarayıcınızı açacak ve Anthropic'te oturum açmanızı isteyecek ve terminalinize yapıştırabileceğiniz bir kod verecektir. - -Veya zaten bir API anahtarınız varsa **API Anahtarını Manuel Olarak Girin** seçeneğini seçip terminalinize yapıştırabilirsiniz. - ---- - -### Atomic Chat - -opencode'u, yerel LLM'leri OpenAI uyumlu bir API sunucusunun arkasında çalıştıran bir masaüstü uygulaması olan [Atomic Chat](https://atomic.chat) aracılığıyla yerel modelleri kullanacak şekilde yapılandırabilirsiniz (varsayılan uç nokta `http://127.0.0.1:1337/v1`). - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -Bu örnekte: - -- `atomic-chat` özel sağlayıcı kimliğidir. İstediğiniz herhangi bir dize olabilir. -- `npm` bu sağlayıcı için kullanılacak paketi belirtir. Burada, herhangi bir OpenAI uyumlu API için `@ai-sdk/openai-compatible` kullanılır. -- `name` sağlayıcının arayüzde görüntülenen adıdır. -- `options.baseURL` yerel sunucunun uç noktasıdır. Host ve portu Atomic Chat kurulumunuzla eşleşecek şekilde değiştirin. -- `models` model kimliklerini görüntüleme adlarına eşleyen bir haritadır. Her ID, `GET /v1/models` tarafından döndürülen `id` ile eşleşmelidir — Atomic Chat'te yüklü kimlikleri listelemek için `curl http://127.0.0.1:1337/v1/models` çalıştırın. - -:::tip -Araç çağrıları iyi çalışmıyorsa, tool calling desteği güçlü olan yüklü bir model seçin (örneğin, bir Qwen-Coder veya DeepSeek-Coder varyantı). -::: - ---- - -### Azure OpenAI - -:::note -"Üzgünüm ama bu isteğe yardımcı olamıyorum" hatalarıyla karşılaşırsanız Azure kaynağınızda içerik filtresini **DefaultV2** yerine **Default** olarak değiştirmeyi deneyin. -::: - -1. [Azure portal](https://portal.azure.com/)'a gidin ve bir **Azure OpenAI** kaynağı oluşturun. İhtiyacınız olacak: - - **Kaynak adı**: Bu, API bitiş noktanızın (`https://RESOURCE_NAME.openai.azure.com/`) parçası olur - - **API anahtarı**: Kaynağınızdan `KEY 1` veya `KEY 2` - -2. [Azure AI Foundry](https://ai.azure.com/)'a gidin ve bir model dağıtın. - - :::note - opencode'un düzgün çalışması için dağıtım adının model adıyla eşleşmesi gerekir. - ::: - -3. `/connect` komutunu çalıştırın ve **Azure**'u arayın. - - ```txt - /connect - ``` - -4. API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Kaynak adınızı ortam değişkeni olarak ayarlayın: - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - - Veya bash profilinize ekleyin: - - ```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX - ``` - -6. Dağıtılan modelinizi seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. [Azure portal](https://portal.azure.com/)'a gidin ve bir **Azure OpenAI** kaynağı oluşturun. İhtiyacınız olacak: - - **Kaynak adı**: Bu, API bitiş noktanızın (`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) parçası olur - - **API anahtarı**: Kaynağınızdan `KEY 1` veya `KEY 2` - -2. [Azure AI Foundry](https://ai.azure.com/)'a gidin ve bir model dağıtın. - - :::note - opencode'un düzgün çalışması için dağıtım adının model adıyla eşleşmesi gerekir. - ::: - -3. `/connect` komutunu çalıştırın ve **Azure Cognitive Services**'i arayın. - - ```txt - /connect - ``` - -4. API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. Kaynak adınızı ortam değişkeni olarak ayarlayın: - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - - Veya bash profilinize ekleyin: - - ```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX - ``` - -6. Dağıtılan modelinizi seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Baseten - -1. [Baseten](https://app.baseten.co/) adresine gidin, bir hesap oluşturun ve bir API anahtarı oluşturun. - -2. `/connect` komutunu çalıştırın ve **Baseten**'i arayın. - - ```txt - /connect - ``` - -3. Baseten API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Cerebras - -1. [Cerebras console](https://inference.cerebras.ai/) adresine gidin, bir hesap oluşturun ve bir API anahtarı oluşturun. - -2. `/connect` komutunu çalıştırın ve **Cerebras**'ı arayın. - - ```txt - /connect - ``` - -3. Cerebras API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _Qwen 3 Coder 480B_ gibi bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -Cloudflare AI Gateway, OpenAI, Anthropic, Workers AI ve daha fazlasındaki modellere birleşik bir uç nokta aracılığıyla erişmenizi sağlar. [Unified Billing](https://developers.cloudflare.com/ai-gateway/features/unified-billing/) ile her sağlayıcı için ayrı API anahtarlarına ihtiyacınız yoktur. - -1. [Cloudflare dashboard](https://dash.cloudflare.com/)'a gidin, **AI** > **AI Ağ Geçidi**'ne gidin ve yeni bir ağ geçidi oluşturun. - -2. Hesap Kimliğinizi ve Ağ Geçidi Kimliğinizi ortam değişkenleri olarak ayarlayın. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. `/connect` komutunu çalıştırın ve **Cloudflare AI Gateway**'i arayın. - - ```txt - /connect - ``` - -4. Cloudflare API tokenınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - - Veya bunu bir ortam değişkeni olarak ayarlayın. - - ```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token - ``` - -5. Bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - - Opencode yapılandırmanız aracılığıyla da modeller ekleyebilirsiniz. - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } - } - ``` - ---- - -### Cortecs - -1. [Cortecs console](https://cortecs.ai/) adresine gidin, bir hesap oluşturun ve bir API anahtarı oluşturun. - -2. `/connect` komutunu çalıştırın ve **Cortecs**'i arayın. - - ```txt - /connect - ``` - -3. Cortecs API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _Kimi K2 Instruct_ gibi bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. [DeepSeek console](https://platform.deepseek.com/)'a gidin, bir hesap oluşturun ve **Yeni API anahtarı oluştur**'a tıklayın. - -2. `/connect` komutunu çalıştırın ve **DeepSeek**'i arayın. - - ```txt - /connect - ``` - -3. DeepSeek API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _DeepSeek V4 Pro_ gibi bir DeepSeek modeli seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. [Deep Infra dashboard](https://deepinfra.com/dash) adresine gidin, bir hesap oluşturun ve bir API anahtarı oluşturun. - -2. `/connect` komutunu çalıştırın ve **Deep Infra**'yı arayın. - - ```txt - /connect - ``` - -3. Deep Infra API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### FrogBot - -1. [FrogBot dashboard](https://app.frogbot.ai/signup) adresine gidin, bir hesap oluşturun ve bir API anahtarı oluşturun. - -2. `/connect` komutunu çalıştırın ve **FrogBot**'i arayın. - - ```txt - /connect - ``` - -3. FrogBot API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. [Fireworks AI console](https://app.fireworks.ai/)'a gidin, bir hesap oluşturun ve **API Anahtarı Oluştur**'a tıklayın. - -2. `/connect` komutunu çalıştırın ve **Fireworks AI**'yi arayın. - - ```txt - /connect - ``` - -3. Fireworks AI API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _Kimi K2 Instruct_ gibi bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo, GitLab'ın Anthropic proxy'si aracılığıyla yerel araç çağırma yetenekleriyle yapay zeka destekli aracılı sohbet sağlar. - -1. `/connect` komutunu çalıştırın ve GitLab'ı seçin. - - ```txt - /connect - ``` - -2. Kimlik doğrulama yönteminizi seçin: - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### OAuth Kullanımı (Önerilen) - - **OAuth**'u seçtiğinizde tarayıcınız yetkilendirme için açılacaktır. - - #### Kişisel Erişim Simgesini Kullanma - 1. Go to [GitLab User Settings > Access Tokens](https://gitlab.com/-/user_settings/personal_access_tokens) - 2. Click **Add new token** - 3. Name: `OpenCode`, Scopes: `api` - 4. Belirteci kopyalayın (`glpat-` ile başlar) - 5. Terminale girin - -3. Mevcut modelleri görmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - - Üç Claude tabanlı model mevcuttur: - - **duo-chat-haiku-4-5** (Varsayılan) - Hızlı görevler için hızlı yanıtlar - - **duo-chat-sonnet-4-5** - Çoğu iş akışı için dengeli performans - - **duo-chat-opus-4-5** - Karmaşık analizler için en yeteneklisi - -:::note -İstemiyorsanız 'GITLAB_TOKEN' ortam değişkenini de belirtebilirsiniz. -to store token in opencode auth storage. -::: - -##### Kendi Kendine Barındırılan GitLab - -:::note[uyumluluk notu] -opencode, oturum başlığını oluşturmak gibi bazı AI görevleri için küçük bir model kullanır. -Varsayılan olarak Zen tarafından barındırılan gpt-5-nano'yu kullanacak şekilde yapılandırılmıştır. opencode'u kilitlemek için -yalnızca kendi GitLab tarafından barındırılan örneğinizi kullanmak için aşağıdakileri ekleyin: -`opencode.json` dosyası. Ayrıca oturum paylaşımını devre dışı bırakmanız da önerilir. - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -Şirket içinde barındırılan GitLab örnekleri için: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -Örneğiniz özel bir AI Ağ Geçidi çalıştırıyorsa: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -Veya bash profilinize ekleyin: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -GitLab yöneticiniz aşağıdakileri etkinleştirmelidir: - -1. Kullanıcı, grup veya örnek için [Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) -2. Feature flags (via Rails console): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### Kendi Kendine Barındırılan örnekler için OAuth - -Oauth'un kendi kendine barındırılan örneğiniz için çalışmasını sağlamak amacıyla -yeni bir uygulama (Ayarlar → Uygulamalar) ile -geri arama URL `http://127.0.0.1:8080/callback` ve aşağıdaki kapsamlar: - -- api (Sizin adınıza API'a erişin) -- read_user (Kişisel bilgilerinizi okuyun) -- read_repository (Depoya salt okunur erişime izin verir) - -Then expose application ID as environment variable: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -Daha fazla belge [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth) ana sayfasında. - -##### Yapılandırma - -`opencode.json` üzerinden özelleştirin: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### GitLab API Araçları (İsteğe bağlı, ancak şiddetle önerilir) - -GitLab araçlarına (birleştirme istekleri, sorunlar, işlem hatları, CI/CD vb.) erişmek için: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -Bu eklenti, MR incelemeleri, sorun izleme, işlem hattı izleme ve daha fazlasını içeren kapsamlı GitLab veri havuzu yönetimi yetenekleri sağlar. - ---- - -### GitHub Copilot - -GitHub Copilot aboneliğinizi opencode'la kullanmak için: - -:::note -Bazı modelleri kullanmak için [Pro+ aboneliği](https://github.com/features/copilot/plans) gerekebilir. - -Bazı modellerin [GitHub Copilot settings](https://docs.github.com/en/copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use)'da manuel olarak etkinleştirilmesi gerekir. -::: - -1. `/connect` komutunu çalıştırın ve GitHub Copilot'u arayın. - - ```txt - /connect - ``` - -2. [github.com/login/device](https://github.com/login/device)'a gidin ve kodu girin. - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - └ Waiting for authorization... - ``` - -3. Şimdi istediğiniz modeli seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -Google Vertex AI'yi opencode ile kullanmak için: - -1. Google Cloud Console'daki **Model Bahçesi**'ne gidin ve şunları kontrol edin: - Bölgenizde mevcut modeller. - - :::note - Vertex AI API etkinleştirilmiş bir Google Cloud projenizin olması gerekir. - ::: - -2. Gerekli ortam değişkenlerini ayarlayın: - - `GOOGLE_CLOUD_PROJECT`: Google Cloud proje kimliğiniz - - `VERTEX_LOCATION` (isteğe bağlı): Vertex AI bölgesi (varsayılanı `global`'dir) - - Kimlik Doğrulama (birini seçin): - - `GOOGLE_APPLICATION_CREDENTIALS`: Hizmet hesabınızın yolu JSON anahtar dosyası - - gcloud kullanarak kimlik doğrulaması yapın CLI: `gcloud auth application-default login` - - Bunları opencode çalıştırılırken ayarlayın. - - ```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode - ``` - - Veya bunları bash profilinize ekleyin. - - ```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global - ``` - -:::tip -`global` bölgesi, hiçbir ekstra maliyet olmaksızın kullanılabilirliği artırır ve hataları azaltır. Veri yerleşimi gereksinimleri için bölgesel uç noktaları (ör. `us-central1`) kullanın. [Daha fazla bilgi](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. İstediğiniz modeli seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Groq - -1. [Groq console](https://console.groq.com/)'a gidin, **API Anahtarı Oluştur**'a tıklayın ve anahtarı kopyalayın. - -2. `/connect` komutunu çalıştırın ve Groq'u arayın. - - ```txt - /connect - ``` - -3. Sağlayıcının API anahtarını girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. İstediğinizi seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Hugging Face - -[Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers) 17'den fazla sağlayıcı tarafından desteklenen açık modellere erişim sağlar. - -1. Çıkarım Sağlayıcılara çağrı yapma iznine sahip bir belirteç oluşturmak için [Hugging Face settings](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained) adresine gidin. - -2. `/connect` komutunu çalıştırın ve **Hugging Face**'i arayın. - - ```txt - /connect - ``` - -3. Hugging Face tokenınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _Kimi-K2-Instruct_ veya _GLM-4.6_ gibi bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai), AI uygulamalarınız için günlük kaydı, izleme ve analiz sağlayan bir LLM gözlemlenebilirlik platformudur. Helicone AI Gateway, taleplerinizi modele göre otomatik olarak uygun sağlayıcıya yönlendirir. - -1. [Helicone](https://helicone.ai) adresine gidin, bir hesap oluşturun ve kontrol panelinizden bir API anahtarı oluşturun. - -2. `/connect` komutunu çalıştırın ve **Helicone**'yu arayın. - - ```txt - /connect - ``` - -3. Helicone API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - -Daha fazla sağlayıcı ve önbelleğe alma ve hız sınırlama gibi gelişmiş özellikler için [Helicone documentation](https://docs.helicone.ai)'yi kontrol edin. - -#### İsteğe Bağlı Yapılandırmalar - -Helicone'un opencode aracılığıyla otomatik olarak yapılandırılmayan bir özelliği veya modelini görmeniz durumunda bunu her zaman kendiniz yapılandırabilirsiniz. - -İşte [Helicone's Model Directory](https://helicone.ai/models), eklemek istediğiniz modellerin kimliklerini almak için buna ihtiyacınız olacak. - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### Özel Başlıklar - -Helicone, önbelleğe alma, kullanıcı izleme ve oturum yönetimi gibi özellikler için özel başlıkları destekler. `options.headers` kullanarak bunları sağlayıcınızın yapılandırmasına ekleyin: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### Oturum izleme - -Helicone'un [Sessions](https://docs.helicone.ai/features/sessions) özelliği, ilgili LLM isteklerini birlikte gruplandırmanıza olanak tanır. Her opencode görüşmesini Helicone'da bir oturum olarak otomatik olarak kaydetmek için [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) eklentisini kullanın. - -```bash -npm install -g opencode-helicone-session -``` - -Yapılandırmanıza ekleyin. - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -Eklenti isteklerinize `Helicone-Session-Id` ve `Helicone-Session-Name` başlıklarını enjekte eder. Helicone'un Oturumlar sayfasında her opencode görüşmesinin ayrı bir oturum olarak listelendiğini göreceksiniz. - -##### Yaygın Helicone başlıkları - -| Başlık | Açıklama | -| -------------------------- | ------------------------------------------------------------- | -| `Helicone-Cache-Enabled` | Enable response caching (`true`/`false`) | -| `Helicone-User-Id` | Track metrics by user | -| `Helicone-Property-[Name]` | Add custom properties (e.g., `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | İstekleri bilgi istemi sürümleriyle ilişkilendirin | - -Mevcut tüm başlıklar için [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory)'a bakın. - ---- - -### llama.cpp - -opencode'u yerel modelleri kullanacak şekilde [llama.cpp's](https://github.com/ggml-org/llama.cpp) llama-server yardımcı programını kullanarak yapılandırabilirsiniz. - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -Bu örnekte: - -- `llama.cpp` özel sağlayıcı kimliğidir. Bu istediğiniz herhangi bir dize olabilir. -- `npm` bu sağlayıcı için kullanılacak paketi belirtir. Burada `@ai-sdk/openai-compatible`, herhangi bir OpenAI uyumlu API için kullanılır. -- `name` sağlayıcının kullanıcı arayüzündeki görünen adıdır. -- `options.baseURL` yerel sunucunun uç noktasıdır. -- `models` model kimliklerinin konfigürasyonlarına ait bir haritasıdır. Model adı, model seçim listesinde görüntülenecektir. - ---- - -### IO.NET - -IO.NET, çeşitli kullanım durumları için optimize edilmiş 17 model sunar: - -1. [IO.NET console](https://ai.io.net/) adresine gidin, bir hesap oluşturun ve bir API anahtarı oluşturun. - -2. `/connect` komutunu çalıştırın ve **IO.NET** öğesini arayın. - - ```txt - /connect - ``` - -3. IO.NET API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### LM Studio - -LM Studio aracılığıyla opencode'u yerel modelleri kullanacak şekilde yapılandırabilirsiniz. - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -Bu örnekte: - -- `lmstudio` özel sağlayıcı kimliğidir. Bu istediğiniz herhangi bir dize olabilir. -- `npm` bu sağlayıcı için kullanılacak paketi belirtir. Burada `@ai-sdk/openai-compatible`, herhangi bir OpenAI uyumlu API için kullanılır. -- `name` sağlayıcının kullanıcı arayüzündeki görünen adıdır. -- `options.baseURL` yerel sunucunun uç noktasıdır. -- `models` model kimliklerinin konfigürasyonlarına ait bir haritasıdır. Model adı, model seçim listesinde görüntülenecektir. - ---- - -### Moonshot AI - -Moonshot AI'dan Kimi K2'yi kullanmak için: - -1. [Moonshot AI console](https://platform.moonshot.ai/console)'a gidin, bir hesap oluşturun ve **API anahtarı oluştur**'a tıklayın. - -2. `/connect` komutunu çalıştırın ve **Moonshot AI**'yi arayın. - - ```txt - /connect - ``` - -3. Moonshot API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _Kimi K2_ seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### MiniMax - -1. [MiniMax API Console](https://platform.minimax.io/login) adresine gidin, bir hesap oluşturun ve bir API anahtarı oluşturun. - -2. `/connect` komutunu çalıştırın ve **MiniMax**'ı arayın. - - ```txt - /connect - ``` - -3. MiniMax API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _M2.1_ gibi bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. [Nebius Token Factory console](https://tokenfactory.nebius.com/)'a gidin, bir hesap oluşturun ve **Anahtar Ekle**'ye tıklayın. - -2. `/connect` komutunu çalıştırın ve **Nebius Token Factory**'yi arayın. - - ```txt - /connect - ``` - -3. Nebius Token Factory API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _Kimi K2 Instruct_ gibi bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Ollama - -Ollama aracılığıyla opencode'u yerel modelleri kullanacak şekilde yapılandırabilirsiniz. - -:::tip -Ollama kendisini opencode için otomatik olarak yapılandırabilir. Ayrıntılar için [Ollama integration docs](https://docs.ollama.com/integrations/opencode)'a bakın. -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -Bu örnekte: - -- `ollama` özel sağlayıcı kimliğidir. Bu istediğiniz herhangi bir dize olabilir. -- `npm` bu sağlayıcı için kullanılacak paketi belirtir. Burada `@ai-sdk/openai-compatible`, herhangi bir OpenAI uyumlu API için kullanılır. -- `name` sağlayıcının kullanıcı arayüzündeki görünen adıdır. -- `options.baseURL` yerel sunucunun uç noktasıdır. -- `models` model kimliklerinin konfigürasyonlarına ait bir haritasıdır. Model adı, model seçim listesinde görüntülenecektir. - -:::tip -Araç çağrıları çalışmıyorsa Ollama'da `num_ctx` değerini artırmayı deneyin. 16k - 32k civarında başlayın. -::: - ---- - -### Ollama Cloud - -Ollama Cloud'u opencode ile kullanmak için: - -1. [https://ollama.com/](https://ollama.com/) adresine gidin ve oturum açın veya bir hesap oluşturun. - -2. **Ayarlar** > **Anahtarlar**'a gidin ve yeni bir API anahtarı oluşturmak için **API Anahtarı Ekle**'yi tıklayın. - -3. opencode'da kullanmak için API anahtarını kopyalayın. - -4. `/connect` komutunu çalıştırın ve **Ollama Cloud**'u arayın. - - ```txt - /connect - ``` - -5. Ollama Cloud API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **Önemli**: opencode'da bulut modellerini kullanmadan önce model bilgilerini yerel olarak almanız gerekir: - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. Ollama Cloud modelinizi seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### OpenAI - -[ChatGPT Plus or Pro](https://chatgpt.com/pricing)'a kaydolmanızı öneririz. - -1. Kaydolduktan sonra `/connect` komutunu çalıştırın ve OpenAI'yi seçin. - - ```txt - /connect - ``` - -2. Burada **ChatGPT Plus/Pro** seçeneğini seçebilirsiniz, tarayıcınız açılacaktır. - ve sizden kimlik doğrulamanızı isteyeceğiz. - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. Artık `/models` komutunu kullandığınızda tüm OpenAI modelleri mevcut olmalıdır. - - ```txt - /models - ``` - -##### API anahtarlarını kullanma - -Zaten bir API anahtarınız varsa, **API Anahtarını Manuel Olarak Girin** seçeneğini seçip terminalinize yapıştırabilirsiniz. - ---- - -### OpenCode Zen - -OpenCode Zen, opencode ekibinin test edip doğruladığı modellerin bir listesidir. [Daha fazla bilgi](/docs/zen). - -1. **OpenCode Zen**'de oturum açın ve **API Anahtarı Oluştur**'u tıklayın. - -2. `/connect` komutunu çalıştırın ve **OpenCode Zen**'i arayın. - - ```txt - /connect - ``` - -3. opencode API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _Qwen 3 Coder 480B_ gibi bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. [OpenRouter dashboard](https://openrouter.ai/settings/keys)'a gidin, **API Anahtarı Oluştur**'a tıklayın ve anahtarı kopyalayın. - -2. `/connect` komutunu çalıştırın ve OpenRouter'ı arayın. - - ```txt - /connect - ``` - -3. Sağlayıcının API anahtarını girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Birçok OpenRouter modeli varsayılan olarak önceden yüklenmiştir; istediğiniz modeli seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - - opencode yapılandırmanız aracılığıyla ek modeller de ekleyebilirsiniz. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. Bunları ayrıca opencode yapılandırmanız aracılığıyla da özelleştirebilirsiniz. Burada bir sağlayıcı belirtmeye ilişkin bir örnek verilmiştir - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI Core, birleşik bir platform aracılığıyla OpenAI, Anthropic, Google, Amazon, Meta, Mistral ve AI21'den 40'tan fazla modele erişim sağlar. - -1. [SAP BTP Cockpit](https://account.hana.ondemand.com/) sunucunuza gidin, SAP AI Core hizmet örneğinize gidin ve bir hizmet anahtarı oluşturun. - - :::tip - Hizmet anahtarı, `clientid`, `clientsecret`, `url` ve `serviceurls.AI_API_URL` içeren bir JSON nesnesidir. AI Core örneğinizi BTP Kokpitinde **Hizmetler** > **Örnekler ve Abonelikler** altında bulabilirsiniz. - ::: - -2. `/connect` komutunu çalıştırın ve **SAP AI Core** arayın. - - ```txt - /connect - ``` - -3. Servis anahtarınızı JSON girin. - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - Veya `AICORE_SERVICE_KEY` ortam değişkenini ayarlayın: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - Veya bash profilinize ekleyin: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. İsteğe bağlı olarak dağıtım kimliğini ve kaynak grubunu ayarlayın: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - Bu ayarlar isteğe bağlıdır ve SAP AI Core kurulumunuza göre yapılandırılmalıdır. - ::: - -5. 40'tan fazla mevcut model arasından seçim yapmak için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### STACKIT - -STACKIT AI Model Serving, Llama, Mistral ve Qwen gibi LLM'lere odaklanarak, Avrupa altyapısında maksimum veri egemenliğine sahip AI modelleri için tam olarak yönetilen bağımsız barındırma ortamı sağlar. - -1. [STACKIT Portal](https://portal.stackit.cloud) adresine gidin, **AI Model Serving**'e gidin ve projeniz için bir yetkilendirme belirteci oluşturun. - - :::tip - Yetkilendirme belirteçleri oluşturmadan önce bir STACKIT müşteri hesabına, kullanıcı hesabına ve projesine ihtiyacınız vardır. - ::: - -2. `/connect` komutunu çalıştırın ve **STACKIT**'i arayın. - - ```txt - /connect - ``` - -3. STACKIT AI Model Serving yetkilendirme belirtecinizi girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _Qwen3-VL 235B_ veya _Llama 3.3 70B_ gibi mevcut modellerden seçim yapmak için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. [OVHcloud panel](https://ovh.com/manager)'a gidin. `Public Cloud` bölümüne gidin, `AI & Machine Learning` > `AI Endpoints` ve `API Keys` sekmesinde **Yeni bir API anahtarı oluştur**'u tıklayın. - -2. `/connect` komutunu çalıştırın ve **OVHcloud AI Endpoints**'i arayın. - - ```txt - /connect - ``` - -3. OVHcloud AI Uç Noktaları API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _gpt-oss-120b_ gibi bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Scaleway - -[Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/)'yi Opencode ile kullanmak için: - -1. Yeni bir API anahtarı oluşturmak için [Scaleway Console IAM settings](https://console.scaleway.com/iam/api-keys)'a gidin. - -2. `/connect` komutunu çalıştırın ve **Scaleway**'i arayın. - - ```txt - /connect - ``` - -3. Scaleway API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _devstral-2-123b-instruct-2512_ veya _gpt-oss-120b_ gibi bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Together AI - -1. [Together AI console](https://api.together.ai)'a gidin, bir hesap oluşturun ve **Anahtar Ekle**'ye tıklayın. - -2. `/connect` komutunu çalıştırın ve **Together AI**'yi arayın. - - ```txt - /connect - ``` - -3. Together AI API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _Kimi K2 Instruct_ gibi bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Venice AI - -1. [Venice AI console](https://venice.ai) adresine gidin, bir hesap oluşturun ve bir API anahtarı oluşturun. - -2. `/connect` komutunu çalıştırın ve **Venice AI**'yi arayın. - - ```txt - /connect - ``` - -3. Venice AI API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _Llama 3.3 70B_ gibi bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -Vercel AI Gateway, OpenAI, Anthropic, Google, xAI ve daha fazlasındaki modellere birleşik bir uç nokta aracılığıyla erişmenizi sağlar. Modeller herhangi bir fark olmadan liste fiyatıyla sunulmaktadır. - -1. [Vercel dashboard](https://vercel.com/)'a gidin, **AI Ağ Geçidi** sekmesine gidin ve yeni bir API anahtarı oluşturmak için **API anahtarlarına** tıklayın. - -2. `/connect` komutunu çalıştırın ve **Vercel AI Gateway**'i arayın. - - ```txt - /connect - ``` - -3. Vercel AI Gateway API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - -Modelleri opencode yapılandırmanız aracılığıyla da özelleştirebilirsiniz. Sağlayıcı yönlendirme sırasını belirtmeye ilişkin bir örneği burada bulabilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -Bazı yararlı yönlendirme seçenekleri: - -| Seçenek | Açıklama | -| ------------------- | --------------------------------------------------------------------- | -| `order` | Denenecek sağlayıcı sırası | -| `only` | Belirli sağlayıcılarla sınırla | -| `zeroDataRetention` | Yalnızca sıfır veri saklama politikasına sahip sağlayıcıları kullanın | - ---- - -### xAI - -1. [xAI console](https://console.x.ai/) adresine gidin, bir hesap oluşturun ve bir API anahtarı oluşturun. - -2. `/connect` komutunu çalıştırın ve **xAI**'yi arayın. - - ```txt - /connect - ``` - -3. xAI API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _Grok Beta_ gibi bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### Z.AI - -1. [Z.AI API console](https://z.ai/manage-apikey/apikey-list)'a gidin, bir hesap oluşturun ve **Yeni bir API anahtarı oluştur**'a tıklayın. - -2. `/connect` komutunu çalıştırın ve **Z.AI**'yi arayın. - - ```txt - /connect - ``` - - **GLM Kodlama Planı**'na aboneyseniz **Z.AI Kodlama Planı**'nı seçin. - -3. Z.AI API anahtarınızı girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. _GLM-4.7_ gibi bir model seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - ---- - -### ZenMux - -1. [ZenMux dashboard](https://zenmux.ai/settings/keys)'a gidin, **API Anahtarı Oluştur**'a tıklayın ve anahtarı kopyalayın. - -2. `/connect` komutunu çalıştırın ve ZenMux'u arayın. - - ```txt - /connect - ``` - -3. Sağlayıcının API anahtarını girin. - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. Çoğu ZenMux modeli varsayılan olarak önceden yüklenmiştir; istediğinizi seçmek için `/models` komutunu çalıştırın. - - ```txt - /models - ``` - - opencode yapılandırmanız aracılığıyla ek modeller de ekleyebilirsiniz. - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## Özel sağlayıcı - -`/connect` komutunda listelenmeyen herhangi bir **OpenAI uyumlu** sağlayıcıyı eklemek için: - -:::tip -OpenAI uyumlu herhangi bir sağlayıcıyı opencode ile kullanabilirsiniz. Çoğu modern yapay zeka sağlayıcısı OpenAI uyumlu API'ler sunar. -::: - -1. `/connect` komutunu çalıştırın ve **Diğer** seçeneğine ilerleyin. - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. Sağlayıcı için benzersiz bir kimlik girin. - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - Unutulmaz bir kimlik seçin, bunu yapılandırma dosyanızda kullanacaksınız. - ::: - -3. Sağlayıcı için API anahtarınızı girin. - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. Proje dizininizde `opencode.json` dosyanızı oluşturun veya güncelleyin: - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - - Yapılandırma seçenekleri şunlardır: - - **npm**: Kullanılacak AI SDK paketi, OpenAI uyumlu sağlayıcılar için `@ai-sdk/openai-compatible` - - **name**: UI'daki görünen ad. - - **modeller**: Mevcut modeller. - - **options.baseURL**: API endpoint URL. - - **options.apiKey**: Kimlik doğrulama kullanılmıyorsa isteğe bağlı olarak API anahtarını ayarlayın. - - **options.headers**: İsteğe bağlı olarak özel başlıklar ayarlayın. - - Aşağıdaki örnekte gelişmiş seçenekler hakkında daha fazla bilgi bulabilirsiniz. - -5. `/models` komutunu çalıştırın; özel sağlayıcınız ve modelleriniz seçim listesinde görünecektir. - ---- - -##### Örnek - -Burada `apiKey`, `headers` ve model `limit` seçeneklerini ayarlayan bir örnek verilmiştir. - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -Yapılandırma ayrıntıları: - -- **apiKey**: `env` değişken söz dizimini kullanarak ayarlayın, [daha fazla bilgi](/docs/config#env-vars). -- **headers**: Her istekle birlikte gönderilen özel başlıklar. -- **limit.context**: Modelin kabul ettiği maksimum giriş tokenları. -- **limit.output**: Modelin üretebileceği maksimum token sayısı. - -`limit` alanları opencode'un ne kadar bağlamınız kaldığını anlamasını sağlar. Standart sağlayıcılar bunları models.dev'den otomatik olarak alır. - ---- - -## Sorun Giderme - -Sağlayıcıyı yapılandırma konusunda sorun yaşıyorsanız aşağıdakileri kontrol edin: - -1. **Kimlik doğrulama kurulumunu kontrol edin**: Kimlik bilgilerinin geçerli olup olmadığını görmek için `opencode auth list` komutunu çalıştırın. - sağlayıcı için yapılandırmanıza eklenir. - - Bu, kimlik doğrulaması için ortam değişkenlerine güvenen Amazon Bedrock gibi sağlayıcılar için geçerli değildir. - -2. Özel sağlayıcılar için opencode yapılandırmasını kontrol edin ve: - - `/connect` komutunda kullanılan sağlayıcı kimliğinin, opencode yapılandırmanızdaki kimlikle eşleştiğinden emin olun. - - Sağlayıcı için doğru npm paketi kullanılıyor. Örneğin Cerebras için `@ai-sdk/cerebras` kullanın. Diğer tüm OpenAI uyumlu sağlayıcılar için `@ai-sdk/openai-compatible` kullanın. - - `options.baseURL` alanında doğru API bitiş noktasının kullanıldığını kontrol edin. diff --git a/packages/web/src/content/docs/tr/rules.mdx b/packages/web/src/content/docs/tr/rules.mdx deleted file mode 100644 index 90ae91c9e2..0000000000 --- a/packages/web/src/content/docs/tr/rules.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: Kurallar -description: opencode için özel talimatları ayarlayın. ---- - -Bir `AGENTS.md` dosyası oluşturarak opencode için özel talimatlar verebilirsiniz. Bu, Cursor rules yaklaşımına benzer. Özel projeniz için davranışını özelleştirmek amacıyla LLM'in içeriğine dahil edilecek talimatları içerir. - ---- - -## Başlat - -Yeni bir `AGENTS.md` dosyası oluşturmak için `/init` komutunu opencode'da çalıştırabilirsiniz. - -:::tip -Projenizin `AGENTS.md` dosyasını Git'e göndermelisiniz. -::: - -Bu, projenin neyle ilgili olduğunu anlamak için projenizi ve tüm içeriğini tarayacak ve onunla bir `AGENTS.md` dosyası oluşturacaktır. Bu, opencode'un projede daha iyi gezinmesine yardımcı olur. - -Mevcut bir `AGENTS.md` dosyanız varsa, bu dosyaya eklemeye çalışacaktır. - ---- - -## Örnek - -Bu dosyayı manuel olarak da oluşturabilirsiniz. İşte bir `AGENTS.md` dosyasına koyabileceğiniz bazı şeylere bir örnek. - -```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` -``` - -Buraya projeye özel talimatlar ekliyoruz ve bu, ekibiniz arasında paylaşılacaktır. - ---- - -## Türler - -opencode ayrıca `AGENTS.md` dosyasının birden fazla konumdan okunmasını da destekler. Ve bu farklı amaçlara hizmet ediyor. - -### Proje - -Projeye özel kurallar için proje kökünüze bir `AGENTS.md` yerleştirin. Bunlar yalnızca bu dizinde veya alt dizinlerinde çalışırken geçerlidir. - -### Global - -Ayrıca `~/.config/opencode/AGENTS.md` dosyasında genel kurallara sahip olabilirsiniz. Bu, tüm opencode oturumlarına uygulanır. - -Bu Git'e kaydedilmediği veya ekibinizle paylaşılmadığı için, LLM'ın uyması gereken kişisel kuralları belirtmek için bunu kullanmanızı öneririz. - -### Claude Code uyumluluğu - -opencode, Claude Code'dan geçiş yapan kullanıcılar için yedek olarak Claude Code'un dosya kurallarını destekler: - -- **Proje kuralları**: Proje dizininizdeki `CLAUDE.md` (`AGENTS.md` yoksa kullanılır) -- **Global kurallar**: `~/.claude/CLAUDE.md` (`~/.config/opencode/AGENTS.md` yoksa kullanılır) -- **Beceriler**: `~/.claude/skills/` — ayrıntılar için [Agent Skills](/docs/skills/)'e bakın - -Claude Code uyumluluğunu kapatmak için aşağıdaki ortam değişkenlerinden birini ayarlayın: - -```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 -``` - ---- - -## Öncelik - -Opencode başlatıldığında kural dosyalarını şu sırayla arar: - -1. **Yerel dosyalar** geçerli dizinden yukarıya doğru giderek (`AGENTS.md`, `CLAUDE.md`) -2. **Global dosya** `~/.config/opencode/AGENTS.md` adresinde -3. `~/.claude/CLAUDE.md` adresindeki **Claude Kod dosyası** (devre dışı bırakılmadığı sürece) - -Her kategoride ilk eşleşen dosya kazanır. Örneğin, hem `AGENTS.md` hem de `CLAUDE.md` varsa yalnızca `AGENTS.md` kullanılır. Benzer şekilde, `~/.config/opencode/AGENTS.md`, `~/.claude/CLAUDE.md`'ye göre önceliklidir. - ---- - -## Özel talimatlar - -Özel talimat dosyalarını `opencode.json` veya global `~/.config/opencode/opencode.json`'de belirtebilirsiniz. Bu, sizin ve ekibinizin, mevcut kuralları AGENTS.md'ye kopyalamak yerine yeniden kullanmasına olanak tanır. - -Örnek: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"] -} -``` - -Web'den talimatlar yüklemek için uzak URL'leri de kullanabilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"] -} -``` - -Uzaktan talimatlar 5 saniyelik bir zaman aşımı ile getirilir. - -Tüm talimat dosyaları `AGENTS.md` dosyalarınızla birleştirilir. - ---- - -## Harici Dosyalara Referans Verme - -Opencode, `AGENTS.md`'daki dosya referanslarını otomatik olarak ayrıştırmasa da, benzer işlevleri iki şekilde elde edebilirsiniz: - -### opencode.json'u kullanma - -Önerilen yaklaşım, `instructions`'deki `opencode.json` alanını kullanmaktır: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"] -} -``` - -### AGENTS.md içinde manuel talimatlar - -`AGENTS.md`'nizde açık talimatlar sağlayarak opencode'u harici dosyaları okumayı öğretebilirsiniz. İşte pratik bir örnek: - -```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. -``` - -Bu yaklaşım şunları yapmanızı sağlar: - -- Modüler, yeniden kullanılabilir kural dosyaları oluşturun -- Sembolik bağlantılar veya git alt modülleri aracılığıyla kuralları projeler arasında paylaşın -- AGENTS.md dosyasını kısa tutarken ayrıntılı kılavuzlara referans verin -- opencode'un dosyaları yalnızca belirli bir görev için gerektiğinde yüklediğinden emin olun - -:::tip -Monorepo'lar veya ortak standartlara sahip projeler için, `opencode.json`'yi glob desenleriyle (`packages/*/AGENTS.md` gibi) kullanmak, manuel talimatlara göre daha sürdürülebilirdir. -::: diff --git a/packages/web/src/content/docs/tr/sdk.mdx b/packages/web/src/content/docs/tr/sdk.mdx deleted file mode 100644 index 44c910b1cb..0000000000 --- a/packages/web/src/content/docs/tr/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: SDK -description: opencode sunucusu için type-safe JS istemcisi. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -opencode JS/TS SDK, sunucu ile etkileşmek için type-safe bir istemci sağlar. -opencode'u programatik olarak kontrol etmek ve entegrasyonlar oluşturmak için kullanabilirsiniz. - -[Sunucu](/docs/server) sayfasında nasıl çalıştığını görebilir, örnekler için topluluğun oluşturduğu [projeler](/docs/ecosystem#projects) bölümüne bakabilirsiniz. - ---- - -## Kurulum - -SDK'yı npm'den yükleyin: - -```bash -npm install @opencode-ai/sdk -``` - ---- - -## İstemci Oluşturma - -Bir opencode örneği oluşturun: - -```javascript -import { createOpencode } from "@opencode-ai/sdk" - -const { client } = await createOpencode() -``` - -Bu, hem bir sunucu hem de bir istemci başlatır - -#### Seçenekler - -| Seçenek | Tip | Açıklama | Varsayılan | -| ---------- | ------------- | --------------------------------------------- | ----------- | -| `hostname` | `string` | Sunucu ana bilgisayar adı | `127.0.0.1` | -| `port` | `number` | Sunucu bağlantı noktası | `4096` | -| `signal` | `AbortSignal` | İptal için durdurma sinyali | `undefined` | -| `timeout` | `number` | Sunucu başlatma için ms cinsinden zaman aşımı | `5000` | -| `config` | `Config` | Yapılandırma nesnesi | `{}` | - ---- - -## Yapılandırma - -Davranışı özelleştirmek için bir yapılandırma nesnesi iletebilirsiniz. Örnek yine de `opencode.json` dosyanızı alır, ancak yapılandırmayı satır içi olarak geçersiz kılabilir veya ekleyebilirsiniz: - -```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() -``` - -## Yalnızca istemci - -Halihazırda çalışan bir opencode örneğiniz varsa, ona bağlanmak için bir istemci örneği oluşturabilirsiniz: - -```javascript -import { createOpencodeClient } from "@opencode-ai/sdk" - -const client = createOpencodeClient({ - baseUrl: "http://localhost:4096", -}) -``` - -#### Seçenekler - -| Seçenek | Tip | Açıklama | Varsayılan | -| --------------- | ---------- | --------------------------------- | ----------------------- | -| `baseUrl` | `string` | Sunucunun URL'si | `http://localhost:4096` | -| `fetch` | `function` | Özel fetch uygulaması | `globalThis.fetch` | -| `parseAs` | `string` | Yanıt ayrıştırma yöntemi | `auto` | -| `responseStyle` | `string` | Dönüş stili: `data` veya `fields` | `fields` | -| `throwOnError` | `boolean` | Dönüş yerine hata fırlat | `false` | - ---- - -## Türler - -SDK, tüm API türleri için TypeScript tanımlarını içerir. Bunları doğrudan içe aktarın: - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -Tüm tipler, sunucunun OpenAPI spesifikasyonundan oluşturulur ve tipler dosyasında mevcuttur. - ---- - -## Hatalar - -SDK, yakalayabileceğiniz ve işleyebileceğiniz hatalar fırlatabilir: - -```typescript -try { - await client.session.get({ path: { id: "invalid-id" } }) -} catch (error) { - console.error("Failed to get session:", (error as Error).message) -} -``` - ---- - -## Yapılandırılmış Çıktı - -Bir JSON şeması ile `format` belirterek modelden yapılandırılmış JSON çıktısı isteyebilirsiniz. Model, şemanızla eşleşen doğrulanmış JSON'u döndürmek için bir `StructuredOutput` aracı kullanacaktır. - -### Temel Kullanım - -```typescript -const result = await client.session.prompt({ - path: { id: sessionId }, - body: { - parts: [{ type: "text", text: "Anthropic'i araştırın ve şirket bilgileri sağlayın" }], - format: { - type: "json_schema", - schema: { - type: "object", - properties: { - company: { type: "string", description: "Şirket adı" }, - founded: { type: "number", description: "Kuruluş yılı" }, - products: { - type: "array", - items: { type: "string" }, - description: "Ana ürünler", - }, - }, - required: ["company", "founded"], - }, - }, - }, -}) - -// Yapılandırılmış çıktıya erişin -console.log(result.data.info.structured_output) -// { company: "Anthropic", founded: 2021, products: ["Claude", "Claude API"] } -``` - -### Çıktı Format Türleri - -| Tür | Açıklama | -| ------------- | ------------------------------------------------------------- | -| `text` | Varsayılan. Standart metin yanıtı (yapılandırılmış çıktı yok) | -| `json_schema` | Sağlanan şema ile eşleşen doğrulanmış JSON döndürür | - -### JSON Şema Formatı - -`type: 'json_schema'` kullanırken şunları sağlayın: - -| Alan | Tür | Açıklama | -| ------------ | --------------- | ------------------------------------------------------------- | -| `type` | `'json_schema'` | Gerekli. JSON şema modunu belirtir | -| `schema` | `object` | Gerekli. Çıktı yapısını tanımlayan JSON Şema nesnesi | -| `retryCount` | `number` | İsteğe bağlı. Doğrulama yeniden deneme sayısı (varsayılan: 2) | - -### Hata Yönetimi - -Model, tüm yeniden denemelerden sonra geçerli bir yapılandırılmış çıktı üretemezse, yanıt bir `StructuredOutputError` içerecektir: - -```typescript -if (result.data.info.error?.name === "StructuredOutputError") { - console.error("Yapılandırılmış çıktı üretilemedi:", result.data.info.error.message) - console.error("Denemeler:", result.data.info.error.retries) -} -``` - -### En İyi Uygulamalar - -1. **Açık açıklamalar sağlayın**: Modelin hangi verileri çıkaracağını anlamasına yardımcı olmak için şema özelliklerinde -2. **`required` kullanın**: Hangi alanların mevcut olması gerektiğini belirtmek için -3. **Şemaları odaklı tutun**: Karmaşık iç içe geçmiş şemaların model tarafından doğru doldurulması daha zor olabilir -4. **Uygun `retryCount` ayarlayın**: Karmaşık şemalar için artırın, basit olanlar için azaltın - ---- - -## API'ler - -SDK, tüm sunucu API'lerini type-safe bir istemci aracılığıyla sunar. - ---- - -### Global - -| Yöntem | Açıklama | Yanıt | -| ----------------- | --------------------------------------- | ------------------------------------ | -| `global.health()` | Sunucu sağlığını ve sürümünü kontrol et | `{ healthy: true, version: string }` | - ---- - -#### Örnekler - -```javascript -const health = await client.global.health() -console.log(health.data.version) -``` - ---- - -### App - -| Yöntem | Açıklama | Yanıt | -| -------------- | ----------------------------- | ------------------------------------------- | -| `app.log()` | Bir günlük girdisi yaz | `boolean` | -| `app.agents()` | Tüm mevcut agent'ları listele | Agent[] | - ---- - -#### Örnekler - -```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 - -| Yöntem | Açıklama | Yanıt | -| ------------------- | --------------------- | --------------------------------------------- | -| `project.list()` | Tüm projeleri listele | Project[] | -| `project.current()` | Mevcut projeyi al | Project | - ---- - -#### Örnekler - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### Path - -| Yöntem | Açıklama | Yanıt | -| ------------ | -------------- | ---------------------------------------- | -| `path.get()` | Mevcut yolu al | Path | - ---- - -#### Örnekler - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### Config - -| Yöntem | Açıklama | Yanıt | -| -------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | Yapılandırma bilgisini al | Config | -| `config.providers()` | Sağlayıcıları ve varsayılan modelleri listele | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### Örnekler - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### Oturumlar - -| Yöntem | Açıklama | Notlar | -| ---------------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `session.list()` | Oturumları listele | Session[] döndürür | -| `session.get({ path })` | Oturum al | Session döndürür | -| `session.children({ path })` | Alt oturumları listele | Session[] döndürür | -| `session.create({ body })` | Oturum oluştur | Session döndürür | -| `session.delete({ path })` | Oturum sil | `boolean` döndürür | -| `session.update({ path, body })` | Oturum özelliklerini güncelle | Session döndürür | -| `session.init({ path, body })` | Uygulamayı analiz et ve `AGENTS.md` oluştur | `boolean` döndürür | -| `session.abort({ path })` | Çalışan bir oturumu iptal et | `boolean` döndürür | -| `session.share({ path })` | Oturum paylaş | Session döndürür | -| `session.unshare({ path })` | Oturum paylaşımını kaldır | Session döndürür | -| `session.summarize({ path, body })` | Oturumu özetle | `boolean` döndürür | -| `session.messages({ path })` | Oturumdaki mesajları listele | `{ info: `Message`, parts: `Part[]`}[]` döndürür | -| `session.message({ path })` | Mesaj ayrıntılarını al | `{ info: `Message`, parts: `Part[]`}` döndürür | -| `session.prompt({ path, body })` | İstem mesajı gönder | `body.noReply: true` UserMessage (yalnızca bağlam) döndürür. Varsayılan olarak AI yanıtıyla AssistantMessage döndürür. [yapılandırılmış çıktı](#yapılandırılmış-çıktı) için `body.outputFormat` destekler | -| `session.command({ path, body })` | Oturuma komut gönder | `{ info: `AssistantMessage`, parts: `Part[]`}` döndürür | -| `session.shell({ path, body })` | Bir kabuk komutu çalıştır | AssistantMessage döndürür | -| `session.revert({ path, body })` | Bir mesajı geri al | Session döndürür | -| `session.unrevert({ path })` | Geri alınan mesajları geri yükle | Session döndürür | -| `postSessionByIdPermissionsByPermissionId({ path, body })` | Bir izin isteğine yanıt ver | `boolean` döndürür | - ---- - -#### Örnekler - -```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." }], - }, -}) -``` - ---- - -### Dosyalar - -| Yöntem | Açıklama | Yanıt | -| ------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------- | -| `find.text({ query })` | Dosyalarda metin ara | `path`, `lines`, `line_number`, `absolute_offset`, `submatches` içeren eşleşme nesneleri dizisi | -| `find.files({ query })` | Dosya ve dizinleri isme göre bul | `string[]` (yollar) | -| `find.symbols({ query })` | Çalışma alanı sembollerini bul | Symbol[] | -| `file.read({ query })` | Bir dosyayı oku | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | İzlenen dosyalar için durumu al | File[] | - -`find.files` birkaç isteğe bağlı sorgu alanını destekler: - -- `type`: `"file"` veya `"directory"` -- `directory`: arama için proje kökünü geçersiz kılma -- `limit`: maksimum sonuç (1-200) - ---- - -#### Örnekler - -```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 - -| Yöntem | Açıklama | Yanıt | -| ------------------------------ | --------------------------- | --------- | -| `tui.appendPrompt({ body })` | İsteme metin ekle | `boolean` | -| `tui.openHelp()` | Yardım iletişim kutusunu aç | `boolean` | -| `tui.openSessions()` | Oturum seçiciyi aç | `boolean` | -| `tui.openThemes()` | Tema seçiciyi aç | `boolean` | -| `tui.openModels()` | Model seçiciyi aç | `boolean` | -| `tui.submitPrompt()` | Mevcut istemi gönder | `boolean` | -| `tui.clearPrompt()` | İstemi temizle | `boolean` | -| `tui.executeCommand({ body })` | Bir komut çalıştır | `boolean` | -| `tui.showToast({ body })` | Toast bildirimi göster | `boolean` | - ---- - -#### Örnekler - -```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 - -| Yöntem | Açıklama | Yanıt | -| ------------------- | ------------------------- | --------- | -| `auth.set({ ... })` | Kimlik bilgilerini ayarla | `boolean` | - ---- - -#### Örnekler - -```javascript -await client.auth.set({ - path: { id: "anthropic" }, - body: { type: "api", key: "your-api-key" }, -}) -``` - ---- - -### Olaylar - -| Yöntem | Açıklama | Yanıt | -| ------------------- | --------------------------------------- | --------------------------------------- | -| `event.subscribe()` | Sunucu tarafından gönderilen olay akışı | Sunucu tarafından gönderilen olay akışı | - ---- - -#### Örnekler - -```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) -} -``` diff --git a/packages/web/src/content/docs/tr/server.mdx b/packages/web/src/content/docs/tr/server.mdx deleted file mode 100644 index e9af6afd05..0000000000 --- a/packages/web/src/content/docs/tr/server.mdx +++ /dev/null @@ -1,285 +0,0 @@ ---- -title: Sunucu -description: opencode sunucusuyla HTTP uzerinden etkilesin. ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -`opencode serve` komutu, opencode istemcisinin kullanabileceği bir OpenAPI endpoint'i açan headless bir HTTP sunucusu çalıştırır. - ---- - -### Kullanım - -```bash -opencode serve [--port ] [--hostname ] [--cors ] -``` - -#### Seçenekler - -| Bayrak | Açıklama | Varsayılan | -| --------------- | ---------------------------------------------- | ---------------- | -| `--port` | Dinlenecek bağlantı noktası | `4096` | -| `--hostname` | Dinlenecek ana bilgisayar adı | `127.0.0.1` | -| `--mdns` | mDNS keşfini etkinleştir | `false` | -| `--mdns-domain` | mDNS hizmeti için özel alan adı | `opencode.local` | -| `--cors` | İzin verilecek ek tarayıcı kaynakları (origin) | `[]` | - -`--cors` birden fazla kez geçilebilir: - -```bash -opencode serve --cors http://localhost:5173 --cors https://app.example.com -``` - ---- - -### Kimlik Doğrulama - -Sunucuyu HTTP temel kimlik doğrulama (basic auth) ile korumak için `OPENCODE_SERVER_PASSWORD` ayarlayın. Kullanıcı adı varsayılan olarak `opencode` değeridir; değiştirmek isterseniz `OPENCODE_SERVER_USERNAME` ayarlayabilirsiniz. Bu ayar hem `opencode serve` hem de `opencode web` için geçerlidir. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve -``` - ---- - -### Nasıl çalışır - -`opencode` çalıştırdığınızda hem TUI hem de sunucu başlar. TUI, sunucuyla konuşan istemci tarafıdır. -Sunucu bir OpenAPI 3.1 spesifikasyon uç noktası açar. Bu uç nokta [SDK](/docs/sdk) üretiminde de kullanılır. - -:::tip -opencode ile programatik etkileşim için opencode sunucusunu kullanın. -::: - -Bu mimari, opencode'un birden fazla istemciyi desteklemesini ve programatik kullanımları mümkün kılmasını sağlar. - -`opencode serve` ile bağımsız bir sunucu başlatabilirsiniz. opencode TUI açıksa, `opencode serve` yeni bir sunucu başlatır. - ---- - -#### Mevcut sunucuya bağlanın - -TUI başlarken rastgele bir port ve hostname atanır. Bunun yerine `--hostname` ve `--port` [bayraklarını](/docs/cli) verebilirsiniz. - -[`/tui`](#tui) uç noktası sunucu üzerinden TUI'yi sürmek için kullanılabilir. Örneğin bir istemi önceden doldurabilir veya çalıştırabilirsiniz. Bu kurulum opencode [IDE](/docs/ide) eklentileri tarafından kullanılır. - ---- - -## Spesifikasyon - -Sunucu, şu adreste görülebilen bir OpenAPI 3.1 spesifikasyonu yayınlar: - -``` -http://:/doc -``` - -Örneğin `http://localhost:4096/doc`. İstemci oluşturmak, istek/yanit tiplerini incelemek veya Swagger gezgininde açmak için bu spec'i kullanın. - ---- - -## API'ler - -opencode sunucusu aşağıdaki API'leri sunar. - ---- - -### Global - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | ---------------- | ------------------------------- | ------------------------------------ | -| `GET` | `/global/health` | Sunucu sağlığını ve sürümünü al | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | Küresel olayları al (SSE akışı) | Olay akışı | - ---- - -### Proje - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | ------------------ | --------------------- | --------------------------------------------- | -| `GET` | `/project` | Tüm projeleri listele | Project[] | -| `GET` | `/project/current` | Mevcut projeyi al | Project | - ---- - -### Yol & VCS - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | ------- | ---------------------------------- | ------------------------------------------- | -| `GET` | `/path` | Mevcut yolu al | Path | -| `GET` | `/vcs` | Mevcut proje için VCS bilgisini al | VcsInfo | - ---- - -### Örnek (Instance) - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | ------------------- | ------------------------------ | --------- | -| `POST` | `/instance/dispose` | Mevcut örneği (instance) kapat | `boolean` | - ---- - -### Config - -| Yöntem | Yol | Açıklama | Yanıt | -| ------- | ------------------- | --------------------------------------------- | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | Yapılandırma bilgisini al | Config | -| `PATCH` | `/config` | Yapılandırmayı güncelle | Config | -| `GET` | `/config/providers` | Sağlayıcıları ve varsayılan modelleri listele | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -### Sağlayıcı (Provider) - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | -------------------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | Tüm sağlayıcıları listele | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | Sağlayıcı kimlik doğrulama yöntemlerini al | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | OAuth kullanarak bir sağlayıcıyı yetkilendir | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | Bir sağlayıcı için OAuth geri çağrısını işle | `boolean` | - ---- - -### Oturumlar (Sessions) - -| Yöntem | Yol | Açıklama | Notlar | -| -------- | ---------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------ | -| `GET` | `/session` | Tüm oturumları listele | Session[] döndürür | -| `POST` | `/session` | Yeni bir oturum oluştur | gövde: `{ parentID?, title? }`, Session döndürür | -| `GET` | `/session/status` | Tüm oturumlar için durumu al | `{ [sessionID: string]: `SessionStatus` }` döndürür | -| `GET` | `/session/:id` | Oturum ayrıntılarını al | Session döndürür | -| `DELETE` | `/session/:id` | Bir oturumu ve tüm verilerini sil | `boolean` döndürür | -| `PATCH` | `/session/:id` | Oturum özelliklerini güncelle | gövde: `{ title? }`, Session döndürür | -| `GET` | `/session/:id/children` | Bir oturumun alt oturumlarını al | Session[] döndürür | -| `GET` | `/session/:id/todo` | Bir oturum için yapılacaklar listesini al | Todo[] döndürür | -| `POST` | `/session/:id/init` | Uygulamayı analiz et ve `AGENTS.md` oluştur | gövde: `{ messageID, providerID, modelID }`, `boolean` döndürür | -| `POST` | `/session/:id/fork` | Mevcut bir oturumu bir mesajda çatalla | gövde: `{ messageID? }`, Session döndürür | -| `POST` | `/session/:id/abort` | Çalışan bir oturumu iptal et | `boolean` döndürür | -| `POST` | `/session/:id/share` | Bir oturumu paylaş | Session döndürür | -| `DELETE` | `/session/:id/share` | Bir oturumun paylaşımını kaldır | Session döndürür | -| `GET` | `/session/:id/diff` | Bu oturum için farkı (diff) al | sorgu: `messageID?`, FileDiff[] döndürür | -| `POST` | `/session/:id/summarize` | Oturumu özetle | gövde: `{ providerID, modelID }`, `boolean` döndürür | -| `POST` | `/session/:id/revert` | Bir mesajı geri al | gövde: `{ messageID, partID? }`, `boolean` döndürür | -| `POST` | `/session/:id/unrevert` | Geri alınan tüm mesajları geri yükle | `boolean` döndürür | -| `POST` | `/session/:id/permissions/:permissionID` | Bir izin isteğine yanıt ver | gövde: `{ response, remember? }`, `boolean` döndürür | - ---- - -### Mesajlar - -| Yöntem | Yol | Açıklama | Notlar | -| ------ | --------------------------------- | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `GET` | `/session/:id/message` | Bir oturumdaki mesajları listele | sorgu: `limit?`, `{ info: `Message`, parts: `Part[]`}[]` döndürür | -| `POST` | `/session/:id/message` | Bir mesaj gönder ve yanıt bekle | gövde: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, `{ info: `Message`, parts: `Part[]`}` döndürür | -| `GET` | `/session/:id/message/:messageID` | Mesaj ayrıntılarını al | `{ info: `Message`, parts: `Part[]`}` döndürür | -| `POST` | `/session/:id/prompt_async` | Eşzamansız bir mesaj gönder (bekleme yok) | gövde: `/session/:id/message` ile aynı, `204 No Content` döndürür | -| `POST` | `/session/:id/command` | Bir eğik çizgi (slash) komutu çalıştır | gövde: `{ messageID?, agent?, model?, command, arguments }`, `{ info: `Message`, parts: `Part[]`}` döndürür | -| `POST` | `/session/:id/shell` | Bir kabuk komutu çalıştır | gövde: `{ agent, model?, command }`, `{ info: `Message`, parts: `Part[]`}` döndürür | - ---- - -### Komutlar - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | ---------- | --------------------- | --------------------------------------------- | -| `GET` | `/command` | Tüm komutları listele | Command[] | - ---- - -### Dosyalar - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | ------------------------ | -------------------------------- | ----------------------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | Dosyalarda metin ara | `path`, `lines`, `line_number`, `absolute_offset`, `submatches` içeren eşleşme nesneleri dizisi | -| `GET` | `/find/file?query=` | Dosya ve dizinleri isme göre bul | `string[]` (yollar) | -| `GET` | `/find/symbol?query=` | Çalışma alanı sembollerini bul | Symbol[] | -| `GET` | `/file?path=` | Dosya ve dizinleri listele | FileNode[] | -| `GET` | `/file/content?path=

` | Bir dosyayı oku | FileContent | -| `GET` | `/file/status` | İzlenen dosyalar için durumu al | File[] | - -#### `/find/file` sorgu parametreleri - -- `query` (gerekli) - arama metni (bulanık eşleşme) -- `type` (isteğe bağlı) - sonuçları `"file"` veya `"directory"` ile sınırlama -- `directory` (isteğe bağlı) - arama için proje kökünü geçersiz kılma -- `limit` (isteğe bağlı) - en fazla sonuç (1-200) -- `dirs` (isteğe bağlı) - eski bayrak (`"false"` sadece dosyaları döndürür) - ---- - -### Araçlar (Deneysel) - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | ------------------------------------------- | ------------------------------------------------ | -------------------------------------------- | -| `GET` | `/experimental/tool/ids` | Tüm araç kimliklerini listele | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | Bir model için araçları JSON şemalarıyla listele | ToolList | - ---- - -### LSP, Biçimlendiriciler & MCP - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | ------------ | -------------------------------- | -------------------------------------------------------- | -| `GET` | `/lsp` | LSP sunucu durumunu al | LSPStatus[] | -| `GET` | `/formatter` | Biçimlendirici durumunu al | FormatterStatus[] | -| `GET` | `/mcp` | MCP sunucu durumunu al | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | Dinamik olarak MCP sunucusu ekle | gövde: `{ name, config }`, MCP durum nesnesi döndürür | - ---- - -### Agent'lar - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | -------- | ----------------------------- | ------------------------------------------- | -| `GET` | `/agent` | Tüm mevcut agent'ları listele | Agent[] | - ---- - -### Günlük (Logging) - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | ------ | ---------------------------------------------------------------- | --------- | -| `POST` | `/log` | Günlük girdisi yaz. Gövde: `{ service, level, message, extra? }` | `boolean` | - ---- - -### TUI - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | ----------------------- | ------------------------------------------------------- | ---------------------- | -| `POST` | `/tui/append-prompt` | İsteme metin ekle | `boolean` | -| `POST` | `/tui/open-help` | Yardım iletişim kutusunu aç | `boolean` | -| `POST` | `/tui/open-sessions` | Oturum seçiciyi aç | `boolean` | -| `POST` | `/tui/open-themes` | Tema seçiciyi aç | `boolean` | -| `POST` | `/tui/open-models` | Model seçiciyi aç | `boolean` | -| `POST` | `/tui/submit-prompt` | Mevcut istemi gönder | `boolean` | -| `POST` | `/tui/clear-prompt` | İstemi temizle | `boolean` | -| `POST` | `/tui/execute-command` | Bir komut çalıştır (`{ command }`) | `boolean` | -| `POST` | `/tui/show-toast` | Toast bildirimi göster (`{ title?, message, variant }`) | `boolean` | -| `GET` | `/tui/control/next` | Bir sonraki kontrol isteğini bekle | Kontrol isteği nesnesi | -| `POST` | `/tui/control/response` | Bir kontrol isteğine yanıt ver (`{ body }`) | `boolean` | - ---- - -### Kimlik Doğrulama (Auth) - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | ----------- | ----------------------------------------------------------------- | --------- | -| `PUT` | `/auth/:id` | Kimlik bilgilerini ayarla. Gövde sağlayıcı şemasıyla eşleşmelidir | `boolean` | - ---- - -### Olaylar (Events) - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | -------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------- | -| `GET` | `/event` | Sunucu tarafından gönderilen olay akışı (SSE). İlk olay `server.connected`, ardından veriyolu olayları | Sunucu tarafından gönderilen olay akışı | - ---- - -### Dokümanlar (Docs) - -| Yöntem | Yol | Açıklama | Yanıt | -| ------ | ------ | -------------------------- | -------------------------------- | -| `GET` | `/doc` | OpenAPI 3.1 spesifikasyonu | OpenAPI spec içeren HTML sayfası | diff --git a/packages/web/src/content/docs/tr/share.mdx b/packages/web/src/content/docs/tr/share.mdx deleted file mode 100644 index a0544eb02a..0000000000 --- a/packages/web/src/content/docs/tr/share.mdx +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Paylasim -description: opencode konusmalarini genel baglantilarla paylasin. ---- - -opencode'un paylasim ozelligi, konusmalariniz icin genel baglantilar olusturmanizi saglar. Boylece ekip arkadaslarinizla birlikte calisabilir veya diger kisilerden yardim alabilirsiniz. - -:::note -Paylasilan konusmalar, baglantiya sahip herkes tarafindan gorulebilir. -::: - ---- - -## Nasil calisir - -Bir konusmayi paylastiginizda opencode: - -1. Oturumunuz icin benzersiz bir genel URL olusturur -2. Konusma gecmisinizi sunucularimiza senkronize eder -3. Konusmayi paylasim baglantisiyla erisilebilir hale getirir - `opncd.ai/s/` - ---- - -## Paylasim - -opencode, konusmalarin nasil paylasilacagini kontrol eden uc farkli paylasim modu sunar: - ---- - -### Manuel (varsayilan) - -Varsayilan olarak opencode manuel paylasim modunu kullanir. Oturumlar otomatik paylasilmaz, ancak `/share` komutuyla manuel olarak paylasabilirsiniz: - -``` -/share -``` - -Bu komut benzersiz bir URL uretir ve panoya kopyalar. - -Manuel modu acikca ayarlamak icin [config dosyaniza](/docs/config) sunu ekleyin: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - ---- - -### Otomatik paylasim - -Tum yeni konusmalar icin otomatik paylasimi acmak isterseniz, [config dosyanizda](/docs/config) `share` degerini `"auto"` yapin: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "auto" -} -``` - -Otomatik paylasim acikken her yeni konusma otomatik olarak paylasilir ve bir baglanti olusturulur. - ---- - -### Devre disi - -Paylasimi tamamen kapatmak icin [config dosyanizda](/docs/config) `share` degerini `"disabled"` yapin: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -Bunu belirli bir projede tum ekip icin zorunlu kilmak icin proje icindeki `opencode.json` dosyasina ekleyip Git'e commit edin. - ---- - -## Paylasimi kaldirma - -Bir konusmanin paylasimini durdurmak ve genel erisimi kaldirmak icin: - -``` -/unshare -``` - -Bu komut paylasim baglantisini kaldirir ve konusmaya ait verileri siler. - ---- - -## Gizlilik - -Bir konusmayi paylasirken akilda tutulmasi gereken bazi noktalar vardir. - ---- - -### Veri saklama - -Paylasilan konusmalar, siz acikca paylasimi kaldirana kadar erisilebilir kalir. Buna sunlar dahildir: - -- Tum konusma gecmisi -- Tum mesajlar ve yanitlar -- Oturum metaverisi - ---- - -### Oneriler - -- Hassas bilgi icermeyen konusmalari paylasin. -- Paylasmadan once konusma icerigini gozden gecirin. -- Is birligi bittiginde paylasimi kaldirin. -- Tescilli kod veya gizli veri iceren konusmalari paylasmayin. -- Hassas projelerde paylasimi tamamen kapatin. - ---- - -## Kurumsal kullanim - -Kurumsal kurulumlarda paylasim ozelligi su sekillerde yapilandirilabilir: - -- Guvenlik uyumu icin tamamen **devre disi** birakilabilir -- Sadece SSO ile dogrulanan kullanicilarla **sinirlandirilabilir** -- Kendi altyapinizda **self-hosted** olarak calistirilabilir - -Kurulusunuzda opencode kullanimi icin [daha fazla bilgi alin](/docs/enterprise). diff --git a/packages/web/src/content/docs/tr/skills.mdx b/packages/web/src/content/docs/tr/skills.mdx deleted file mode 100644 index 7077ed129f..0000000000 --- a/packages/web/src/content/docs/tr/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: "Ajan becerileri" -description: "SKILL.md ile tekrar kullanilabilir davranis tanimlayin" ---- - -Ajan becerileri, opencode'un deponuzdan veya ev dizininizden tekrar kullanilabilir talimatlari kesfetmesini saglar. -Beceriler, yerel `skill` araci uzerinden ihtiyac aninda yuklenir; ajanlar mevcut becerileri gorur ve gerektiginde tam icerigi yukler. - ---- - -## Dosyalari yerlestirin - -Her beceri adi icin bir klasor olusturun ve icine bir `SKILL.md` koyun. -opencode su konumlari tarar: - -- Proje konfigurasyonu: `.opencode/skills//SKILL.md` -- Genel konfigurasyon: `~/.config/opencode/skills//SKILL.md` -- Proje Claude uyumlu: `.claude/skills//SKILL.md` -- Genel Claude uyumlu: `~/.claude/skills//SKILL.md` -- Proje agent uyumlu: `.agents/skills//SKILL.md` -- Genel agent uyumlu: `~/.agents/skills//SKILL.md` - ---- - -## Kesfi anlayin - -Proje yerel yollarinda opencode, mevcut calisma dizininizden baslayip git worktree kokune kadar yukari cikar. -Bu sirada `skills/*/SKILL.md` altindaki eslesen `.opencode/` dosyalarini ve `.claude/skills/*/SKILL.md` ya da `.agents/skills/*/SKILL.md` dosyalarini yukler. - -Genel tanimlar da `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` ve `~/.agents/skills/*/SKILL.md` yollarindan yuklenir. - ---- - -## Frontmatter yazin - -Her `SKILL.md`, YAML frontmatter ile baslamalidir. -Sadece su alanlar taninir: - -- `name` (zorunlu) -- `description` (zorunlu) -- `license` (istege bagli) -- `compatibility` (istege bagli) -- `metadata` (istege bagli, string-to-string map) - -Bilinmeyen frontmatter alanlari yok sayilir. - ---- - -## Adlari dogrulayin - -`name` su kurallari saglamalidir: - -- 1-64 karakter olmali -- Kucuk harf alfanumerik ve tekli tire ayirici kullanmali -- `-` ile baslamamali veya bitmemeli -- Ardisik `--` icermemeli -- `SKILL.md` dosyasini barindiran klasor adi ile ayni olmali - -Esdeger regex: - -```text -^[a-z0-9]+(-[a-z0-9]+)*$ -``` - ---- - -## Uzunluk kurallarina uyun - -`description` 1-1024 karakter arasinda olmali. -Ajanin dogru secim yapmasi icin yeterince acik yazin. - ---- - -## Ornek kullanin - -`.opencode/skills/git-release/SKILL.md` dosyasini soyle olusturun: - -```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. -``` - ---- - -## Arac aciklamasini taniyin - -opencode, `skill` araci aciklamasinda mevcut becerileri listeler. -Her kayitta beceri adi ve aciklamasi yer alir: - -```xml - - - git-release - Create consistent releases and changelogs - - -``` - -Ajan, araci cagirarak beceri yukler: - -``` -skill({ name: "git-release" }) -``` - ---- - -## Izinleri yapilandirin - -`opencode.json` icinde pattern tabanli izinlerle ajanlarin hangi becerilere erisecegini kontrol edin: - -```json -{ - "permission": { - "skill": { - "*": "allow", - "pr-review": "allow", - "internal-*": "deny", - "experimental-*": "ask" - } - } -} -``` - -| Permission | Behavior | -| ---------- | ------------------------------------------ | -| `allow` | Beceri hemen yuklenir | -| `deny` | Beceri ajandan gizlenir, erisim reddedilir | -| `ask` | Yukleme oncesi kullanicidan onay istenir | - -Pattern'lar wildcard destekler: `internal-*`, `internal-docs`, `internal-tools` vb. adlarla eslesir. - ---- - -## Ajan bazinda gecersiz kilin - -Belirli ajanlara genel varsayimlardan farkli izinler verebilirsiniz. - -**Ozel ajanlar icin** (agent frontmatter icinde): - -```yaml ---- -permission: - skill: - "documents-*": "allow" ---- -``` - -**Yerlesik ajanlar icin** (`opencode.json` icinde): - -```json -{ - "agent": { - "plan": { - "permission": { - "skill": { - "internal-*": "allow" - } - } - } - } -} -``` - ---- - -## Skill aracini kapatin - -Beceri kullanmamasi gereken ajanlar icin skill aracini tamamen kapatabilirsiniz: - -**Ozel ajanlar icin**: - -```yaml ---- -tools: - skill: false ---- -``` - -**Yerlesik ajanlar icin**: - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -Devre disi oldugunda `` bolumu tamamen kaldirilir. - ---- - -## Yukleme sorunlarini giderin - -Bir beceri listede gorunmuyorsa: - -1. `SKILL.md` adinin tamamen buyuk harfle yazildigini dogrulayin -2. Frontmatter icinde `name` ve `description` oldugunu kontrol edin -3. Tum konumlarda beceri adlarinin benzersiz oldugundan emin olun -4. Izinleri kontrol edin - `deny` olan beceriler ajanlardan gizlenir diff --git a/packages/web/src/content/docs/tr/themes.mdx b/packages/web/src/content/docs/tr/themes.mdx deleted file mode 100644 index 1511e2b921..0000000000 --- a/packages/web/src/content/docs/tr/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -title: Temalar -description: Yerleşik bir tema seçin veya kendiniz oluşturun. ---- - -opencode ile birden fazla yerleşik tema arasından seçim yapabilir, terminal temanıza uyum sağlayan bir tema kullanabilir veya kendi özel temanızı tanımlayabilirsiniz. - -Varsayılan olarak opencode kendi `opencode` temasını kullanır. - ---- - -## Terminal gereksinimleri - -Temaların tüm renk paletiyle doğru görünmesi için terminalinizin **truecolor** (24-bit renk) desteklemesi gerekir. Çoğu modern terminal bunu varsayılan olarak destekler, ancak gerekirse etkinleştirmeniz gerekebilir: - -- **Desteği kontrol edin**: `echo $COLORTERM` çalıştırın - çıktı `truecolor` veya `24bit` olmalıdır -- **Truecolor etkinleştirin**: kabuk profilinizde `COLORTERM=truecolor` ortam değişkenini ayarlayın -- **Terminal uyumluluğu**: terminal emülatörünüzün 24-bit rengi desteklediğinden emin olun (iTerm2, Alacritty, Kitty, Windows Terminal ve GNOME Terminal'in yeni sürümleri gibi modern terminaller genelde destekler) - -Truecolor desteği yoksa temalar daha düşük renk doğruluğu ile görünebilir veya en yakın 256 renk yaklaşımına düşebilir. - ---- - -## Yerleşik temalar - -opencode birden fazla yerleşik temayla gelir. - -| Ad | Açıklama | -| ---------------------- | ----------------------------------------------------------------------------- | -| `system` | Terminalinizin arka plan rengine uyum sağlar | -| `tokyonight` | [tokyonight](https://github.com/folke/tokyonight.nvim) temasını temel alır | -| `everforest` | [Everforest](https://github.com/sainnhe/everforest) temasını temel alır | -| `ayu` | [Ayu](https://github.com/ayu-theme) koyu temasını temel alır | -| `catppuccin` | [Catppuccin](https://github.com/catppuccin) temasını temel alır | -| `catppuccin-macchiato` | [Catppuccin](https://github.com/catppuccin) temasını temel alır | -| `gruvbox` | [Gruvbox](https://github.com/morhetz/gruvbox) temasını temel alır | -| `kanagawa` | [Kanagawa](https://github.com/rebelot/kanagawa.nvim) temasını temel alır | -| `nord` | [Nord](https://github.com/nordtheme/nord) temasını temel alır | -| `matrix` | Hacker tarzı yeşil üzerine siyah tema | -| `one-dark` | [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) Dark temasını temel alır | - -Ve daha fazlası; sürekli yeni temalar ekliyoruz. - ---- - -## Sistem teması - -`system` teması, terminalinizin renk düzenine otomatik uyum sağlamak için tasarlanmıştır. Sabit renk kullanan klasik temalardan farklı olarak _system_ teması: - -- **Gri ölçeği üretir**: En iyi kontrast için terminal arka planına göre özel gri tonları oluşturur -- **ANSI renkleri kullanır**: 0-15 arası standart ANSI renklerini syntax highlighting ve UI öğelerinde kullanır, böylece terminal paletinize uyar -- **Terminal varsayılanlarını korur**: Metin ve arka plan renklerinde `none` kullanarak terminalin yerel görünümünü korur - -Sistem teması şu kullanıcılar için idealdir: - -- opencode'un terminal görünümüyle birebir uyumlu olmasını isteyenler -- Özel terminal renk şemaları kullananlar -- Tüm terminal uygulamalarında tutarlı bir görünüm tercih edenler - ---- - -## Tema kullanımı - -`/theme` komutuyla tema seçicisini açıp tema seçebilirsiniz. İsterseniz `tui.json` içinde de belirtebilirsiniz. - -```json title="tui.json" {3} -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - ---- - -## Özel temalar - -opencode, kullanıcıların kolayca tema oluşturup özelleştirebilmesi için esnek bir JSON tabanlı tema sistemi sunar. - ---- - -### Hiyerarşi - -Temalar birden fazla dizinden şu sırayla yüklenir; daha sonra gelen dizin öncekini ezer: - -1. **Yerleşik temalar** - Binary içine gömülüdür -2. **Kullanıcı yapılandırma dizini** - `~/.config/opencode/themes/*.json` veya `$XDG_CONFIG_HOME/opencode/themes/*.json` -3. **Proje kök dizini** - `/.opencode/themes/*.json` -4. **Geçerli çalışma dizini** - `./.opencode/themes/*.json` - -Birden fazla dizinde aynı adlı tema varsa, önceliği daha yüksek dizindeki tema kullanılır. - ---- - -### Tema oluşturma - -Özel tema oluşturmak için tema dizinlerinden birinde bir JSON dosyası oluşturun. - -Kullanıcı geneli temalar için: - -```bash no-frame -mkdir -p ~/.config/opencode/themes -vim ~/.config/opencode/themes/my-theme.json -``` - -Proje özel temalar için: - -```bash no-frame -mkdir -p .opencode/themes -vim .opencode/themes/my-theme.json -``` - ---- - -### JSON formatı - -Temalar aşağıdaki özellikleri destekleyen esnek bir JSON formatı kullanır: - -- **Hex renkler**: `"#ffffff"` -- **ANSI renkler**: `3` (0-255) -- **Renk referansları**: `"primary"` veya özel tanımlar -- **Koyu/açık varyantlar**: `{"dark": "#000", "light": "#fff"}` -- **Renk yok**: `"none"` - Terminal varsayılan rengi veya şeffaflık kullanılır - ---- - -### Renk tanımları - -`defs` bölümü isteğe bağlıdır ve tema içinde tekrar kullanılabilir renkler tanımlamanızı sağlar. - ---- - -### Terminal varsayılanları - -Özel `"none"` değeri, terminalin varsayılan rengini miras almak için herhangi bir renkte kullanılabilir. Bu, terminalinizin renk şemasıyla doğal şekilde bütünleşen temalar oluştururken özellikle faydalıdır: - -- `"text": "none"` - Terminalin varsayılan ön plan rengini kullanır -- `"background": "none"` - Terminalin varsayılan arka plan rengini kullanır - ---- - -### Örnek - -Aşağıda özel bir tema örneği var: - -```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" - } - } -} -``` diff --git a/packages/web/src/content/docs/tr/tools.mdx b/packages/web/src/content/docs/tr/tools.mdx deleted file mode 100644 index 29c1e0054c..0000000000 --- a/packages/web/src/content/docs/tr/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -title: Araçlar -description: LLM'in kullanabileceği araçları yönetin. ---- - -Araçlar, LLM'in kod tabanınızda eylem gerçekleştirmesini sağlar. opencode yerleşik bir araç setiyle gelir, ancak bunu [özel araçlarla](/docs/custom-tools) veya [MCP sunucularıyla](/docs/mcp-servers) genişletebilirsiniz. - -Varsayılan olarak tüm araçlar **etkindir** ve çalışmak için izin istemez. Araç davranışını [izinler](/docs/permissions) üzerinden kontrol edebilirsiniz. - ---- - -## Yapılandırma - -Araç davranışını kontrol etmek için `permission` alanını kullanın. Her araç için izin verebilir, reddedebilir veya onay isteyebilirsiniz. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "deny", - "bash": "ask", - "webfetch": "allow" - } -} -``` - -Birden fazla aracı aynı anda kontrol etmek için joker karakterler de kullanabilirsiniz. Örneğin, bir MCP sunucusundan gelen tüm araçlar için onay istemek: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "mymcp_*": "ask" - } -} -``` - -İzin yapılandırması için [daha fazla bilgi alın](/docs/permissions). - ---- - -## Yerleşik - -opencode içinde bulunan tüm yerleşik araçlar aşağıdadır. - ---- - -### bash - -Proje ortamınızda kabuk komutları çalıştırır. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "bash": "allow" - } -} -``` - -Bu araç LLM'in `npm install`, `git status` gibi terminal komutlarını veya diğer kabuk komutlarını çalıştırmasını sağlar. - ---- - -### edit - -Birebir metin değiştirme ile mevcut dosyaları düzenler. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Bu araç dosyalarda kesin metin eşleşmelerini değiştirerek hassas düzenleme yapar. LLM'in kodu değiştirmek için kullandığı temel yöntemdir. - ---- - -### write - -Yeni dosyalar oluşturur veya mevcut dosyaları üzerine yazar. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -LLM'in yeni dosya oluşturmasına izin vermek için bunu kullanın. Dosya zaten varsa üzerine yazar. - -:::note -`write` aracı `edit` izniyle kontrol edilir; bu izin tüm dosya değişikliklerini kapsar (`edit`, `write`, `patch`). -::: - ---- - -### read - -Kod tabanınızdan dosya içeriği okur. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "read": "allow" - } -} -``` - -Bu araç dosyaları okur ve içeriklerini döndürür. Büyük dosyalar için belirli satır aralıklarını okuma desteği vardır. - ---- - -### grep - -Düzenli ifadelerle dosya içeriğinde arama yapar. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "grep": "allow" - } -} -``` - -Kod tabanında hızlı içerik araması sunar. Tam regex sözdizimini ve dosya desen filtrelerini destekler. - ---- - -### glob - -Desen eşleştirme ile dosya bulur. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "glob": "allow" - } -} -``` - -`**/*.js` veya `src/**/*.ts` gibi glob desenleriyle dosya arar. Eşleşen dosya yollarını değişim zamanına göre sıralar. - ---- - -### lsp (deneysel) - -Tanım, referans, hover bilgisi ve çağrılar hiyerarşisi gibi kod zekası özellikleri için yapılandırdığınız LSP sunucularıyla etkileşir. - -:::note -Bu araç yalnızca `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (veya `OPENCODE_EXPERIMENTAL=true`) olduğunda kullanılabilir. -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "lsp": "allow" - } -} -``` - -Desteklenen işlemler: `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls`, `outgoingCalls`. - -Projeniz için kullanılabilir LSP sunucularını ayarlamak için [LSP Sunucuları](/docs/lsp) sayfasına bakın. - ---- - -### patch - -Dosyalara patch uygular. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -Bu araç patch dosyalarını kod tabanınıza uygular. Farklı kaynaklardan gelen diff ve patch'leri uygulamak için kullanışlıdır. - -:::note -`patch` aracı `edit` izniyle kontrol edilir; bu izin tüm dosya değişikliklerini kapsar (`edit`, `write`, `patch`). -::: - ---- - -### skill - -Bir [skill](/docs/skills) (`SKILL.md` dosyası) yükler ve içeriğini konuşmaya döndürür. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "skill": "allow" - } -} -``` - ---- - -### todowrite - -Kodlama oturumlarında yapılacaklar listesini yönetir. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "todowrite": "allow" - } -} -``` - -Karmaşık işlemlerde ilerlemeyi takip etmek için görev listeleri oluşturur ve günceller. LLM bunu çok adımlı görevleri düzenlemek için kullanır. - -:::note -Bu araç alt agent'lar için varsayılan olarak devre dışıdır, ama manuel etkinleştirebilirsiniz. [Daha fazla bilgi](/docs/agents/#permissions) -::: - ---- - -### webfetch - -Web içeriği getirir. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "webfetch": "allow" - } -} -``` - -LLM'in web sayfalarını getirip okumasını sağlar. Dokümantasyon aramak veya çevrimiçi kaynakları incelemek için kullanışlıdır. - ---- - -### websearch - -Web'de bilgi arar. - -:::note -Bu araç yalnızca opencode provider kullanılırken veya `OPENCODE_ENABLE_EXA` ortam değişkeni doğru değerlerden birine ayarlandığında (örneğin `true` ya da `1`) kullanılabilir. - -opencode başlatırken etkinleştirmek için: - -```bash -OPENCODE_ENABLE_EXA=1 opencode -``` - -::: - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "websearch": "allow" - } -} -``` - -Exa AI ile web araması yaparak ilgili bilgileri bulur. Eğitim verisi kesim tarihinin ötesindeki konuları araştırmak, güncel olayları bulmak veya genel araştırma yapmak için kullanışlıdır. - -API anahtarı gerekmez - araç Exa AI'nin barındırılan MCP hizmetine doğrudan kimlik doğrulaması olmadan bağlanır. - -:::tip -Bilgi keşfetmeniz gerekiyorsa `websearch`, belirli bir URL'den içerik çekmeniz gerekiyorsa `webfetch` kullanın. -::: - ---- - -### question - -Çalışma sırasında kullanıcıya soru sorar. - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "question": "allow" - } -} -``` - -Bu araç LLM'in görev sırasında kullanıcıya soru sormasını sağlar. Şunlar için kullanışlıdır: - -- Kullanıcı tercihleri veya gereksinimleri toplamak -- Belirsiz talimatları netleştirmek -- Uygulama seçeneklerinde karar almak -- Hangi yöne gidileceğine dair seçenek sunmak - -Her soru bir başlık, soru metni ve seçenek listesi içerir. Kullanıcılar seçeneklerden birini seçebilir veya özel yanıt yazabilir. Birden fazla soru varsa tüm yanıtları göndermeden önce sorular arasında gezebilirler. - ---- - -## Özel araçlar - -Özel araçlar, LLM'in çağırabileceği kendi fonksiyonlarınızı tanımlamanızı sağlar. Bunlar config dosyanızda tanımlanır ve keyfi kod çalıştırabilir. - -Özel araç oluşturma için [daha fazla bilgi alın](/docs/custom-tools). - ---- - -## MCP sunucuları - -MCP (Model Context Protocol) sunucuları, harici araçları ve servisleri entegre etmenizi sağlar. Buna veritabanı erişimi, API entegrasyonları ve üçüncü taraf servisler dahildir. - -MCP sunucularını yapılandırma için [daha fazla bilgi alın](/docs/mcp-servers). - ---- - -## Dahili detaylar - -Dahilde `grep` ve `glob` gibi araçlar [ripgrep](https://github.com/BurntSushi/ripgrep) kullanır. Varsayılan olarak ripgrep `.gitignore` desenlerine uyar; yani `.gitignore` içindeki dosya ve dizinler arama ve listeleme sonucuna dahil edilmez. - ---- - -### Yoksayma desenleri - -Normalde yok sayılan dosyaları dahil etmek için proje kökünde bir `.ignore` dosyası oluşturun. Bu dosya belirli yolları açıkça izinli yapabilir. - -```text title=".ignore" -!node_modules/ -!dist/ -!build/ -``` - -Örneğin bu `.ignore` dosyası, `node_modules/` içinde olsalar bile ripgrep'in `dist/`, `build/` ve `.gitignore` dizinlerinde arama yapmasına izin verir. diff --git a/packages/web/src/content/docs/tr/troubleshooting.mdx b/packages/web/src/content/docs/tr/troubleshooting.mdx deleted file mode 100644 index 24ef067ffa..0000000000 --- a/packages/web/src/content/docs/tr/troubleshooting.mdx +++ /dev/null @@ -1,299 +0,0 @@ ---- -title: Sorun giderme -description: Yaygin sorunlar ve cozum adimlari. ---- - -opencode ile ilgili bir sorunu ayiklamak icin once loglari ve diskte tuttugu yerel verileri kontrol edin. - ---- - -## Loglar - -Log dosyalari su konuma yazilir: - -- **macOS/Linux**: `~/.local/share/opencode/log/` -- **Windows**: `WIN+R` tuslayip `%USERPROFILE%\.local\share\opencode\log` yapistirin - -Log dosyalari zaman damgasiyla adlandirilir (ornegin `2025-01-09T123456.log`) ve en yeni 10 log dosyasi tutulur. - -Daha ayrintili ayiklama bilgisi icin `--log-level` komut satiri secenegini kullanabilirsiniz. Ornek: `opencode --log-level DEBUG`. - ---- - -## Depolama - -opencode, oturum verilerini ve diger uygulama verilerini diskte su konumda saklar: - -- **macOS/Linux**: `~/.local/share/opencode/` -- **Windows**: `WIN+R` tuslayip `%USERPROFILE%\.local\share\opencode` yapistirin - -Bu dizin sunlari icerir: - -- `auth.json` - API anahtarlari, OAuth tokenlari gibi kimlik dogrulama verileri -- `log/` - Uygulama loglari -- `project/` - Oturum ve mesaj verileri gibi projeye ozel veriler - - Proje bir Git deposundaysa `.//storage/` altinda saklanir - - Git deposu degilse `./global/storage/` altinda saklanir - ---- - -## Masaüstü uygulaması - -opencode Desktop arka planda yerel bir opencode sunucusu (`opencode-cli` sidecar) calistirir. Sorunlarin cogu bozuk bir plugin, hasarli cache veya hatali sunucu ayarindan kaynaklanir. - -### Hızlı kontroller - -- Uygulamayi tamamen kapatip yeniden acin -- Uygulama hata ekrani gosteriyorsa **Restart**'a tiklayip hata detaylarini kopyalayin -- Yalnizca macOS: `opencode` menusu -> **Reload Webview** (arayuz bos/donukse yardimci olur) - ---- - -### Eklentileri devre dışı bırakın - -Desktop uygulamasi acilista cokuyorsa, takiliyorsa veya garip davranislar gosteriyorsa once pluginleri devre disi birakin. - -#### Global config'i kontrol edin - -Global config dosyanizi acin ve `plugin` anahtarini arayin. - -- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (veya `~/.config/opencode/opencode.json`) -- **macOS/Linux** (eski kurulumlar): `~/.local/share/opencode/opencode.jsonc` -- **Windows**: `WIN+R` tuslayip `%USERPROFILE%\.config\opencode\opencode.jsonc` yapistirin - -Plugin tanimliysa anahtari kaldirarak veya bos bir diziye cekerek gecici olarak devre disi birakin: - -```jsonc -{ - "$schema": "https://opencode.ai/config.json", - "plugin": [], -} -``` - -#### Eklenti dizinlerini kontrol edin - -opencode diskten yerel plugin de yukleyebilir. Bu dizinleri gecici olarak tasiyin (veya klasoru yeniden adlandirin) ve uygulamayi yeniden baslatin: - -- **Global plugins** - - **macOS/Linux**: `~/.config/opencode/plugins/` - - **Windows**: `WIN+R` tuslayip `%USERPROFILE%\.config\opencode\plugins` yapistirin -- **Project plugins** (sadece proje bazli config kullaniyorsaniz) - - `/.opencode/plugins/` - -Uygulama duzelirse soruna neden olan plugini bulmak icin pluginleri tek tek yeniden etkinlestirin. - ---- - -### Cache'i temizleyin - -Pluginleri kapatmak ise yaramazsa (veya plugin kurulumu takili kaldiysa), opencode'un cache'i yeniden olusturmasi icin cache'i temizleyin. - -1. opencode Desktop'u tamamen kapatin -2. Cache dizinini silin: - -- **macOS**: Finder -> `Cmd+Shift+G` -> `~/.cache/opencode` -- **Linux**: `~/.cache/opencode` dizinini silin (veya `rm -rf ~/.cache/opencode` calistirin) -- **Windows**: `WIN+R` tuslayip `%USERPROFILE%\.cache\opencode` yapistirin - -3. opencode Desktop'u yeniden baslatin - ---- - -### Sunucu bağlantı sorunlarını düzeltin - -opencode Desktop ya kendi yerel sunucusunu baslatir (varsayilan) ya da sizin tanimladiginiz bir sunucu URL'sine baglanir. - -**"Connection Failed"** penceresi goruyorsaniz (veya uygulama acilis ekranini gecemiyorsa), ozel bir sunucu URL'si olup olmadigini kontrol edin. - -#### Desktop varsayilan sunucu URL'sini temizleyin - -Ana ekranda sunucu adina (durum noktali) tiklayarak Server secicisini acin. **Default server** bolumunde **Clear**'a tiklayin. - -#### Config'ten `server.port` / `server.hostname` kaldirin - -`opencode.json(c)` dosyanizda `server` bolumu varsa gecici olarak kaldirin ve desktop uygulamasini yeniden baslatin. - -#### Ortam degiskenlerini kontrol edin - -Ortamda `OPENCODE_PORT` ayarliysa desktop uygulamasi yerel sunucu icin o portu kullanmaya calisir. - -- `OPENCODE_PORT` degerini kaldirin (veya bos bir port secin) ve yeniden baslatin - ---- - -### Linux: Wayland / X11 sorunları - -Linux'ta bazi Wayland kurulumlari bos pencere veya compositor hatalarina yol acabilir. - -- Wayland kullaniyorsaniz ve uygulama bos/acilmiyorsa `OC_ALLOW_WAYLAND=1` ile baslatin -- Bu daha kotu olursa kaldirip X11 oturumunda baslatmayi deneyin - ---- - -### Windows: WebView2 Çalışma Zamanı - -Windows'ta opencode Desktop, Microsoft Edge **WebView2 Runtime** gerektirir. Uygulama bos pencereyle aciliyorsa veya hic baslamiyorsa WebView2'yi kurup/guncelleyip tekrar deneyin. - ---- - -### Windows: Genel performans sorunları - -Windows'ta yavaslik, dosya erisim sorunlari veya terminal problemleri yasiyorsaniz [WSL (Windows Subsystem for Linux)](/docs/windows-wsl) kullanmayi deneyin. WSL, opencode ozellikleriyle daha sorunsuz calisan bir Linux ortami saglar. - ---- - -### Bildirimler görünmüyor - -opencode Desktop sistem bildirimlerini yalnizca su durumlarda gosterir: - -- Isletim sistemi ayarlarinizda opencode icin bildirimler etkinse -- Uygulama penceresi odakta degilse - ---- - -### Desktop depolamasını sıfırlayın (son çare) - -Uygulama acilmiyorsa ve ayarlari arayuz icinden temizleyemiyorsaniz, desktop uygulamasinin kayitli durumunu sifirlayin. - -1. opencode Desktop'u kapatin -2. Su dosyalari bulun ve silin (opencode Desktop uygulama veri dizininde yer alirlar): - -- `opencode.settings.dat` (desktop varsayilan sunucu URL'si) -- `opencode.global.dat` ve `opencode.workspace.*.dat` (son sunucular/projeler gibi UI durumu) - -Dizini hizlica bulmak icin: - -- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (ardindan yukaridaki dosya adlarini aratin) -- **Linux**: `~/.local/share` altinda bu dosya adlarini aratin -- **Windows**: `WIN+R` -> `%APPDATA%` (ardindan bu dosya adlarini aratin) - ---- - -## Yardım alın - -opencode ile ilgili bir sorun yasiyorsaniz: - -1. **GitHub'da issue acin** - - Hata bildirmek veya ozellik talep etmek icin en iyi yol GitHub depomuzdur: - - [**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues) - - Yeni issue acmadan once sorununuzun daha once raporlanip raporlanmadigini kontrol edin. - -2. **Discord'a katilin** - - Gercek zamanli yardim ve topluluk sohbeti icin Discord sunucumuza katilin: - - [**opencode.ai/discord**](https://opencode.ai/discord) - ---- - -## Yaygın sorunlar - -Asagida yaygin sorunlar ve cozumleri yer aliyor. - ---- - -### opencode başlamıyor - -1. Hata mesaji icin loglari kontrol edin -2. Terminalde cikti gormek icin `--print-logs` ile calistirin -3. `opencode upgrade` ile en guncel surumu kullandiginizdan emin olun - ---- - -### Kimlik doğrulama sorunları - -1. TUI'da `/connect` komutuyla yeniden kimlik dogrulamasi yapin -2. API anahtarlarinizin gecerli oldugunu kontrol edin -3. Aginizin provider API baglantilarina izin verdiginden emin olun - ---- - -### Model kullanılamıyor - -1. Provider ile kimlik dogrulamasi yaptiginizi kontrol edin -2. Config'teki model adinin dogru oldugunu dogrulayin -3. Bazi modeller ozel erisim veya abonelik gerektirebilir - -`ProviderModelNotFoundError` aliyorsaniz buyuk olasilikla bir yerde model referansi yanlistir. -Model referansi su formatta olmalidir: `/` - -Ornekler: - -- `openai/gpt-4.1` -- `openrouter/google/gemini-2.5-flash` -- `opencode/kimi-k2` - -Erisiminiz olan modelleri gormek icin `opencode models` calistirin. - ---- - -### ProviderInitError - -`ProviderInitError` aliyorsaniz buyuk olasilikla config'iniz gecersiz veya bozulmustur. - -Cozum adimlari: - -1. Once [providers rehberini](/docs/providers) izleyerek provider kurulumunun dogru oldugunu dogrulayin -2. Sorun surerse kayitli konfigurasyonu temizlemeyi deneyin: - - ```bash - rm -rf ~/.local/share/opencode - ``` - - Windows'ta `WIN+R` tuslayip su konumu silin: `%USERPROFILE%\.local\share\opencode` - -3. TUI'da `/connect` komutuyla provider kimlik dogrulamasini tekrar yapin - ---- - -### AI_APICallError ve provider paket sorunlari - -API cagrisi hatalari aliyorsaniz bunun nedeni guncel olmayan provider paketleri olabilir. opencode, provider paketlerini (OpenAI, Anthropic, Google vb.) gerektikce dinamik yukler ve yerelde onbellekler. - -Provider paket sorunlarini gidermek icin: - -1. Provider paket cache'ini temizleyin: - - ```bash - rm -rf ~/.cache/opencode - ``` - - Windows'ta `WIN+R` tuslayip su konumu silin: `%USERPROFILE%\.cache\opencode` - -2. En guncel provider paketlerini yeniden kurmak icin opencode'u yeniden baslatin - -Bu, opencode'un en yeni provider paket surumlerini indirmesini zorlar ve model parametresi/API degisikliklerinden kaynakli uyumsuzluklari cogu zaman cozer. - ---- - -### Linux'ta kopyala/yapıştır çalışmıyor - -Linux kullanicilarinin kopyala/yapistir ozelliginin calismasi icin asagidaki pano araclarindan en az birini kurmasi gerekir: - -**X11 sistemleri icin:** - -```bash -apt install -y xclip -# or -apt install -y xsel -``` - -**Wayland sistemleri icin:** - -```bash -apt install -y wl-clipboard -``` - -**Headless ortamlar icin:** - -```bash -apt install -y xvfb -# and run: -Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & -export DISPLAY=:99.0 -``` - -opencode, Wayland kullandiginizi algilarsa `wl-clipboard` tercihi yapar. Aksi halde sirayla `xclip` ve `xsel` araclarini arar. diff --git a/packages/web/src/content/docs/tr/tui.mdx b/packages/web/src/content/docs/tr/tui.mdx deleted file mode 100644 index 91611a2de1..0000000000 --- a/packages/web/src/content/docs/tr/tui.mdx +++ /dev/null @@ -1,427 +0,0 @@ ---- -title: TUI -description: OpenCode terminal kullanıcı arayüzünü kullanma. ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode, projelerinizde LLM ile çalışmak için etkileşimli bir terminal arayüzü (TUI) sunar. - -OpenCode'u çalıştırdığınızda mevcut dizin için TUI başlar. - -```bash -opencode -``` - -İsterseniz belirli bir çalışma dizini için de başlatabilirsiniz. - -```bash -opencode /path/to/project -``` - -TUI içine girdiğinizde, bir mesajla istem gönderebilirsiniz. - -```text -Give me a quick summary of the codebase. -``` - ---- - -## Dosya referansları - -Mesajlarınızda `@` kullanarak dosyalara referans verebilirsiniz. Bu, mevcut çalışma dizininde bulanık dosya araması yapar. - -:::tip -Mesajlarınızda dosyalara referans vermek için `@` kullanabilirsiniz. -::: - -```text "@packages/functions/src/api/index.ts" -How is auth handled in @packages/functions/src/api/index.ts? -``` - -Dosya içeriği otomatik olarak konuşmaya eklenir. - ---- - -## Bash komutları - -Bir mesajı `!` ile başlatarak shell komutu çalıştırın. - -```bash frame="none" -!ls -la -``` - -Komut çıktısı bir araç sonucu olarak konuşmaya eklenir. - ---- - -## Komutlar - -OpenCode TUI kullanırken `/` ve ardından komut adını yazarak hızlı eylemler çalıştırabilirsiniz. Örneğin: - -```bash frame="none" -/help -``` - -Komutların çoğu, lider tuşu `ctrl+x` olan bir kısayola da sahiptir. [Daha fazla bilgi](/docs/keybinds). - -İşte mevcut slash komutlarının tümü: - ---- - -### connect - -OpenCode'a bir sağlayıcı ekler. Mevcut sağlayıcıları seçip API anahtarları eklemenizi sağlar. - -```bash frame="none" -/connect -``` - ---- - -### compact - -Mevcut oturumu sıkıştırır. _Takma ad_: `/summarize` - -```bash frame="none" -/compact -``` - -**Kısayol:** `ctrl+x c` - ---- - -### details - -Araç çalıştırma detaylarını göster/gizle yapar. - -```bash frame="none" -/details -``` - -**Kısayol:** `ctrl+x d` - ---- - -### editor - -Mesaj yazmak için harici editör açar. `EDITOR` ortam değişkeninde ayarlı editörü kullanır. [Daha fazla bilgi](#editor-setup). - -```bash frame="none" -/editor -``` - -**Kısayol:** `ctrl+x e` - ---- - -### exit - -OpenCode'dan çıkar. _Takma adlar_: `/quit`, `/q` - -```bash frame="none" -/exit -``` - -**Kısayol:** `ctrl+x q` - ---- - -### export - -Mevcut konuşmayı Markdown olarak dışa aktarır ve varsayılan editörünüzde açar. `EDITOR` ortam değişkeninde ayarlı editörü kullanır. [Daha fazla bilgi](#editor-setup). - -```bash frame="none" -/export -``` - -**Kısayol:** `ctrl+x x` - ---- - -### help - -Yardım penceresini gösterir. - -```bash frame="none" -/help -``` - -**Kısayol:** `ctrl+x h` - ---- - -### init - -`AGENTS.md` dosyasını oluşturur veya günceller. [Daha fazla bilgi](/docs/rules). - -```bash frame="none" -/init -``` - -**Kısayol:** `ctrl+x i` - ---- - -### models - -Kullanılabilir modelleri listeler. - -```bash frame="none" -/models -``` - -**Kısayol:** `ctrl+x m` - ---- - -### new - -Yeni bir oturum başlatır. _Takma ad_: `/clear` - -```bash frame="none" -/new -``` - -**Kısayol:** `ctrl+x n` - ---- - -### redo - -Geri alınan bir mesajı tekrar uygular. Yalnızca `/undo` kullanıldıktan sonra kullanılabilir. - -:::tip -Herhangi bir dosya değişikliği de geri yüklenir. -::: - -Dahili olarak bu işlem dosya değişikliklerini yönetmek için Git kullanır. Bu nedenle projenizin **bir Git deposu olması gerekir**. - -```bash frame="none" -/redo -``` - -**Kısayol:** `ctrl+x r` - ---- - -### sessions - -Oturumları listeler ve aralarında geçiş yapar. _Takma adlar_: `/resume`, `/continue` - -```bash frame="none" -/sessions -``` - -**Kısayol:** `ctrl+x l` - ---- - -### share - -Mevcut oturumu paylaşır. [Daha fazla bilgi](/docs/share). - -```bash frame="none" -/share -``` - -**Kısayol:** `ctrl+x s` - ---- - -### themes - -Kullanılabilir temaları listeler. - -```bash frame="none" -/themes -``` - -**Kısayol:** `ctrl+x t` - ---- - -### thinking - -Konuşmadaki thinking/reasoning bloklarının görünürlüğünü değiştirir. Etkin olduğunda, genişletilmiş düşünmeyi destekleyen modellerin akıl yürütme sürecini görebilirsiniz. - -:::note -Bu komut sadece thinking bloklarının **gösterilip gösterilmeyeceğini** kontrol eder - modelin akıl yürütme yeteneklerini etkinleştirmez veya devre dışı bırakmaz. Gerçek akıl yürütme yeteneklerini değiştirmek için `ctrl+t` kullanarak model varyantları arasında geçiş yapın. -::: - -```bash frame="none" -/thinking -``` - ---- - -### undo - -Konuşmadaki son mesajı geri alır. En son kullanıcı mesajını, sonraki tüm yanıtları ve dosya değişikliklerini kaldırır. - -:::tip -Yapılan tüm dosya değişiklikleri de geri alınır. -::: - -Dahili olarak bu işlem dosya değişikliklerini yönetmek için Git kullanır. Bu nedenle projenizin **bir Git deposu olması gerekir**. - -```bash frame="none" -/undo -``` - -**Kısayol:** `ctrl+x u` - ---- - -### unshare - -Mevcut oturumun paylaşımını kaldırır. [Daha fazla bilgi](/docs/share#un-sharing). - -```bash frame="none" -/unshare -``` - ---- - -## Editör kurulumu - -Hem `/editor` hem de `/export` komutları, `EDITOR` ortam değişkeninde belirtilen editörü kullanır. - - - - ```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" - ``` - - Kalıcı yapmak için bunu kabuk profilinize ekleyin; - `~/.bashrc`, `~/.zshrc` vb. - - - - - ```bash - set EDITOR=notepad - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - set EDITOR=code --wait - ``` - - Kalıcı yapmak için **System Properties** > **Environment - Variables** yolunu kullanın. - - - - - ```powershell - $env:EDITOR = "notepad" - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - $env:EDITOR = "code --wait" - ``` - - Kalıcı yapmak için bunu PowerShell profilinize ekleyin. - - - - -Popüler editör seçenekleri şunları içerir: - -- `code` - Visual Studio Code -- `cursor` - Cursor -- `windsurf` - Windsurf -- `nvim` - Neovim editörü -- `vim` - Vim editörü -- `nano` - Nano editörü -- `notepad` - Windows Notepad -- `subl` - Sublime Text - -:::note -VS Code gibi bazı editörlerin `--wait` bayrağı ile başlatılması gerekir. -::: - -Bazı editörler bloklama modunda çalışmak için komut satırı argümanlarına ihtiyaç duyar. `--wait` bayrağı, editör süreci kapanana kadar işlemin bloklanmasını sağlar. - ---- - -## Yapılandırma - -TUI davranışını `tui.json` (veya `tui.jsonc`) aracılığıyla özelleştirebilirsiniz. - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -Bu, sunucu/çalışma zamanı davranışını yapılandıran `opencode.json` dosyasından ayrıdır. - -`keybinds` yerleşik varsayılanlarla birleştirilir; bu yüzden yalnızca değiştirmek istediğiniz kısayolları yapılandırmanız yeterlidir. - -### Seçenekler - -- `theme` - UI temanızı ayarlar. [Daha fazla bilgi](/docs/themes). -- `keybinds` - Klavye kısayollarını özelleştirir. [Daha fazla bilgi](/docs/keybinds). -- `leader_timeout` - OpenCode'un leader key sonrasında ne kadar bekleyeceğini kontrol eder. Varsayılan değer `2000`. -- `scroll_acceleration.enabled` - Pürüzsüz, doğal kaydırma için macOS tarzı kaydırma ivmesini etkinleştirin. Etkinleştirildiğinde, kaydırma hızı hızlı kaydırma hareketleriyle artar ve daha yavaş hareketler için hassas kalır. **Bu ayar `scroll_speed` ayarından önceliklidir ve etkinleştirildiğinde onu geçersiz kılar.** -- `scroll_speed` - Kaydırma komutlarını kullanırken TUI'nin ne kadar hızlı kaydırılacağını kontrol eder (minimum: `0.001`, ondalık değerleri destekler). Varsayılan değer `3`'tür. **Not: `scroll_acceleration.enabled` `true` olarak ayarlanmışsa bu yok sayılır.** -- `diff_style` - Fark (diff) oluşturmayı kontrol eder. `"auto"` terminal genişliğine uyum sağlar, `"stacked"` her zaman tek sütunlu bir düzen gösterir. -- `mouse` - TUI içinde fare yakalamayı etkinleştirir veya devre dışı bırakır (varsayılan: `true`). Devre dışı bırakıldığında terminalin yerel fareyle seçme ve kaydırma davranışı korunur. -- `attention` - TUI masaüstü bildirimlerini ve seslerini yapılandırır. Varsayılan olarak devre dışıdır. - -Özel bir TUI yapılandırma yolu yüklemek için `OPENCODE_TUI_CONFIG` kullanın. - -### Attention - -Attention, OpenCode bir yanıt beklediğinde, izin onayı gerektiğinde, oturum hatası oluştuğunda veya oturum tamamlandığında TUI'nin sizi ses ve masaüstü bildirimiyle uyarmasını sağlar. `attention.enabled` ile etkinleştirin; yerleşik olaylar gerçekleştiğinde ses çalar. Masaüstü bildirimleri yalnızca terminal penceresi odakta değilken gönderilir ve subagent olayları için kullanılmaz. - -- `enabled` - Attention için tüm bildirimleri ve sesleri etkinleştirir. Varsayılan değer `false`. -- `notifications` - Attention etkin olduğunda TUI'nin terminal üzerinden masaüstü bildirimi göndermesine izin verir. Varsayılan değer `true`. -- `sound` - Attention etkin olduğunda uyarı seslerinin çalmasına izin verir. Varsayılan değer `true`. -- `volume` - Uyarı sesleri için varsayılan ses düzeyi, `0` ile `1` arasındadır. Varsayılan değer `0.4`. -- `sound_pack` - Kullanılacak sound pack ID. Varsayılan değer `opencode.default`. -- `sounds` - `default`, `question`, `permission`, `error`, `done` veya `subagent_done` için özel ses dosyaları ayarlar. Yollar mutlak, `file://` URL'leri veya `tui.json` dosyasına göre göreli olabilir. - ---- - -## Özelleştirme - -Komut paletini (`ctrl+x h` veya `/help`) kullanarak TUI görünümünün çeşitli yönlerini özelleştirebilirsiniz. Bu ayarlar yeniden başlatmalar arasında korunur. - ---- - -#### Kullanıcı adı görünümü - -Sohbet mesajlarında kullanıcı adınızın görünüp görünmeyeceğini değiştirin. Buna şuradan erişin: - -- Komut paleti: "username" veya "hide username" araması yapın -- Ayar otomatik olarak kalıcı hale gelir ve TUI oturumları arasında hatırlanır diff --git a/packages/web/src/content/docs/tr/web.mdx b/packages/web/src/content/docs/tr/web.mdx deleted file mode 100644 index 4b9ae78eab..0000000000 --- a/packages/web/src/content/docs/tr/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Web -description: Tarayıcınızda opencode'u kullanma. ---- - -opencode, tarayıcınızda bir web uygulaması olarak çalışabilir ve bir terminale ihtiyaç duymadan aynı güçlü AI kodlama deneyimini sağlayabilir. - -![opencode Web - Yeni Oturum](../../../assets/web/web-homepage-new-session.png) - -## Başlarken - -Aşağıdakileri çalıştırarak web arayüzünü başlatın: - -```bash -opencode web -``` - -Bu, `127.0.0.1` üzerinde rastgele kullanılabilir bir bağlantı noktasına sahip yerel bir sunucuyu başlatır ve opencode'u varsayılan tarayıcınızda otomatik olarak açar. - -:::caution -`OPENCODE_SERVER_PASSWORD` ayarlanmadıysa sunucunun güvenliği kaldırılacaktır. Bu, yerel kullanım için iyidir ancak ağ erişimi için ayarlanmalıdır. -::: - -:::tip[Windows Kullanıcıları] -En iyi deneyim için PowerShell yerine `opencode web`'yi [WSL](/docs/windows-wsl)'den çalıştırın. Bu, uygun dosya sistemi erişimini ve terminal entegrasyonunu sağlar. -::: - ---- - -## Yapılandırma - -Web sunucusunu komut satırı bayraklarıyla veya [config dosyanızda](/docs/config) yapılandırabilirsiniz. - -### Port - -opencode varsayılan olarak kullanılabilir bir bağlantı noktasını seçer. Bir bağlantı noktası belirtebilirsiniz: - -```bash -opencode web --port 4096 -``` - -### Ana makine adı - -Varsayılan olarak sunucu `127.0.0.1` (yalnızca localhost) öğesine bağlanır. opencode'u ağınızda erişilebilir kılmak için: - -```bash -opencode web --hostname 0.0.0.0 -``` - -`0.0.0.0` kullanıldığında, opencode hem yerel hem de ağ adreslerini gösterecektir: - -``` - Local access: http://localhost:4096 - Network access: http://192.168.1.100:4096 -``` - -### mDNS Keşfi - -Sunucunuzun yerel ağda bulunabilir olmasını sağlamak için mDNS'yi etkinleştirin: - -```bash -opencode web --mdns -``` - -Bu, ana bilgisayar adını otomatik olarak `0.0.0.0` olarak ayarlar ve sunucuyu `opencode.local` olarak tanıtır. - -Aynı ağ üzerinde birden fazla örneği çalıştıracak şekilde mDNS alan adını özelleştirebilirsiniz: - -```bash -opencode web --mdns --mdns-domain myproject.local -``` - -### CORS - -CORS'a yönelik ek alan adlarına izin vermek için (özel ön uçlar için kullanışlıdır): - -```bash -opencode web --cors https://example.com -``` - -### Kimlik Doğrulaması - -Erişimi korumak için `OPENCODE_SERVER_PASSWORD` ortam değişkenini kullanarak bir parola ayarlayın: - -```bash -OPENCODE_SERVER_PASSWORD=secret opencode web -``` - -Kullanıcı adı varsayılan olarak `opencode` şeklindedir ancak `OPENCODE_SERVER_USERNAME` ile değiştirilebilir. - ---- - -## Web Arayüzünü Kullanma - -Web arayüzü başlatıldığında opencode oturumlarınıza erişim sağlar. - -### Oturum - -Oturumlarınızı ana sayfadan görüntüleyin ve yönetin. Aktif oturumları görebilir ve yenilerini başlatabilirsiniz. - -![opencode Web - Etkin Oturum](../../../assets/web/web-homepage-active-session.png) - -### Sunucu Durumu - -Bağlı sunucuları ve durumlarını görüntülemek için "Sunucuları Gör" seçeneğini tıklayın. - -![opencode Web - Sunuculara bakın](../../../assets/web/web-homepage-see-servers.png) - ---- - -## Terminal Takma - -Çalışan bir web sunucusuna bir terminal TUI'si ekleyebilirsiniz: - -```bash -# Start the web server -opencode web --port 4096 - -# In another terminal, attach the TUI -opencode attach http://localhost:4096 -``` - -Bu, aynı oturumları ve durumu paylaşarak hem web arayüzünü hem de terminali aynı anda kullanmanıza olanak tanır. - ---- - -## Yapılandırma Dosyası - -Sunucu ayarlarını `opencode.json` yapılandırma dosyanızda da yapılandırabilirsiniz: - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -Komut satırı bayrakları yapılandırma dosyası ayarlarından önceliklidir. diff --git a/packages/web/src/content/docs/tr/windows-wsl.mdx b/packages/web/src/content/docs/tr/windows-wsl.mdx deleted file mode 100644 index 7d0471682f..0000000000 --- a/packages/web/src/content/docs/tr/windows-wsl.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Windows (WSL) -description: En iyi deneyim icin opencode'u WSL'de calistirin. ---- - -import { Steps } from "@astrojs/starlight/components" - -opencode Windows'ta dogrudan calisabilir, ancak en iyi deneyim icin [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) kullanmanizi oneriyoruz. WSL, opencode ozellikleriyle sorunsuz calisan bir Linux ortami saglar. - -:::tip[Neden WSL?] -WSL, daha iyi dosya sistemi performansi, tam terminal destegi ve opencode'un dayandigi gelistirme araclariyla uyumluluk sunar. -::: - ---- - -## Kurulum - - - -1. **WSL'i yukleyin** - - Henuz yuklemediyseniz resmi Microsoft rehberini kullanarak [WSL kurulumunu](https://learn.microsoft.com/en-us/windows/wsl/install) yapin. - -2. **opencode'u WSL icine yukleyin** - - WSL hazir olduktan sonra WSL terminalini acin ve opencode'u [kurulum yontemlerinden](/docs/) biriyle yukleyin. - - ```bash - curl -fsSL https://opencode.ai/install | bash - ``` - -3. **opencode'u WSL icinden kullanin** - - Proje dizininize gidin (`/mnt/c/`, `/mnt/d/` vb. ile Windows dosyalarina erisebilirsiniz) ve opencode'u calistirin. - - ```bash - cd /mnt/c/Users/YourName/project - opencode - ``` - - - ---- - -## Masaüstü uygulaması + WSL sunucusu - -opencode Desktop kullanmak isteyip sunucuyu WSL'de calistirmak istiyorsaniz: - -1. **Sunucuyu WSL'de baslatin** ve dis baglantilara izin vermek icin `--hostname 0.0.0.0` kullanin: - - ```bash - opencode serve --hostname 0.0.0.0 --port 4096 - ``` - -2. **Desktop uygulamasini** `http://localhost:4096` adresine baglayin - -:::note -Kurulumunuzda `localhost` calismiyorsa bunun yerine WSL IP adresini kullanin (WSL icinde: `hostname -I`) ve `http://:4096` adresine baglanin. -::: - -:::caution -`--hostname 0.0.0.0` kullaniyorsaniz sunucuyu guvene almak icin `OPENCODE_SERVER_PASSWORD` ayarlayin. - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0 -``` - -::: - ---- - -## Web istemcisi + WSL - -Windows'ta en iyi web deneyimi icin: - -1. **`opencode web` komutunu PowerShell yerine WSL terminalinde calistirin**: - - ```bash - opencode web --hostname 0.0.0.0 - ``` - -2. **Windows tarayicinizdan** `http://localhost:` adresini acin (opencode URL'yi yazdirir) - -`opencode web` komutunu WSL'den calistirmak, dosya sistemi erisimi ve terminal entegrasyonunu daha tutarli hale getirirken tarayicidan erisimi korur. - ---- - -## Windows dosyalarına erişin - -WSL, tum Windows dosyalariniza `/mnt/` dizini uzerinden erisebilir: - -- `C:` surucusu -> `/mnt/c/` -- `D:` surucusu -> `/mnt/d/` -- Ve digerleri... - -Ornek: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -En sorunsuz deneyim icin deponuzu WSL dosya sistemine (ornegin `~/code/` altina) klonlayip opencode'u orada calistirmayi dusunun. -::: - ---- - -## İpuçları - -- Windows suruculerinde duran projelerde opencode'u WSL icinde calistirin - dosya erisimi daha sorunsuz olur -- Butunlesik bir gelistirme akisi icin opencode ile birlikte VS Code [WSL eklentisini](https://code.visualstudio.com/docs/remote/wsl) kullanin -- opencode konfigurasyonunuz ve oturumlariniz WSL ortaminda `~/.local/share/opencode/` konumunda saklanir diff --git a/packages/web/src/content/docs/tr/zen.mdx b/packages/web/src/content/docs/tr/zen.mdx deleted file mode 100644 index 8655d23412..0000000000 --- a/packages/web/src/content/docs/tr/zen.mdx +++ /dev/null @@ -1,301 +0,0 @@ ---- -title: Zen -description: opencode tarafından sağlanan seçilmiş modeller listesi. ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen, OpenCode ekibi tarafından test edilip doğrulanmış modellerin bir listesidir. - -Zen, OpenCode'daki diğer sağlayıcılar gibi çalışır. OpenCode Zen'de oturum açıp API anahtarınızı alırsınız. Bu **tamamen isteğe bağlıdır** ve OpenCode kullanmak için buna ihtiyacınız yoktur. - ---- - -## Arka plan - -Piyasada çok sayıda model var, ancak bunların yalnızca birkaçı kodlama ajanı olarak iyi çalışıyor. Ayrıca çoğu sağlayıcı çok farklı şekilde yapılandırılıyor; bu yüzden performans ve kalite de ciddi ölçüde değişiyor. - -:::tip -OpenCode ile iyi çalışan seçili bir model ve sağlayıcı grubunu test ettik. -::: - -Bu yüzden, OpenRouter gibi bir şey üzerinden model kullanıyorsanız istediğiniz modelin en iyi sürümünü alıp almadığınızdan asla emin olamazsınız. - -Bunu düzeltmek için birkaç şey yaptık: - -1. Seçili bir model grubunu test ettik ve bunları en iyi şekilde nasıl çalıştıracaklarımız konusunda ekipleriyle görüştük. -2. Ardından, bunların doğru şekilde sunulduğundan emin olmak için birkaç sağlayıcıyla birlikte çalıştık. -3. Son olarak, model/sağlayıcı kombinasyonlarını benchmark edip gönül rahatlığıyla önerebileceğimiz bir liste çıkardık. - -OpenCode Zen, bu modellere erişmenizi sağlayan bir AI ağ geçididir. - ---- - -## Nasıl çalışır - -OpenCode Zen, OpenCode'daki diğer sağlayıcılar gibi çalışır. - -1. **OpenCode Zen**'de oturum açın, faturalandırma bilgilerinizi ekleyin ve API anahtarınızı kopyalayın. -2. TUI'de `/connect` komutunu çalıştırın, OpenCode Zen'i seçin ve API anahtarınızı yapıştırın. -3. Önerdiğimiz modellerin listesini görmek için TUI'de `/models` komutunu çalıştırın. - -İstek başına ücretlendirilirsiniz ve hesabınıza kredi ekleyebilirsiniz. - ---- - -## Uç noktalar - -Modellerimize aşağıdaki API uç noktaları aracılığıyla da erişebilirsiniz. - -| 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -OpenCode yapılandırmanızdaki [model id](/docs/config/#models) `opencode/` biçimini kullanır. Örneğin, GPT 5.5 için yapılandırmanızda `opencode/gpt-5.5` kullanırsınız. - ---- - -### Modeller - -Mevcut modellerin tam listesini ve metadata'larını şuradan alabilirsiniz: - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## Fiyatlandırma - -Kullandıkça öde modelini destekliyoruz. Aşağıda **1M token başına** fiyatlar yer alıyor. - -| Model | Input | Output | Cached Read | Cached Write | -| --------------------------------- | ------ | ------- | ----------- | ------------ | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -Kullanım geçmişinizde _Claude Haiku 3.5_ görebilirsiniz. Bu, oturum başlıklarınızı oluşturmak için kullanılan [düşük maliyetli bir modeldir](/docs/config/#models). - -:::note -Kredi kartı ücretleri maliyet üzerinden yansıtılır (%4.4 + işlem başına $0.30); bunun dışında ekstra bir ücret almıyoruz. -::: - -Ücretsiz modeller: - -- DeepSeek V4 Flash Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. -- MiMo-V2.5 Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. -- North Mini Code Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. -- Nemotron 3 Ultra Free, sınırlı bir süre için OpenCode'da ücretsizdir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. -- Big Pickle, sınırlı bir süre için OpenCode'da ücretsiz olan gizli bir modeldir. Ekip bu süreyi geri bildirim toplamak ve modeli iyileştirmek için kullanıyor. - -Sorularınız varsa bizimle iletişime geçin. - ---- - -### Otomatik yükleme - -Bakiyeniz $5'in altına düşerse, Zen otomatik olarak $20 yükler. - -Otomatik yükleme tutarını değiştirebilirsiniz. Otomatik yüklemeyi tamamen devre dışı da bırakabilirsiniz. - ---- - -### Aylık limitler - -Ayrıca tüm çalışma alanı için ve ekibinizdeki her üye için aylık kullanım limiti belirleyebilirsiniz. - -Örneğin, aylık kullanım limitini $20 olarak ayarladığınızı düşünelim; Zen bir ay içinde $20'den fazla kullanmaz. Ancak otomatik yükleme açıksa, bakiyeniz $5'in altına düşerse Zen sizden $20'den fazla ücret çekebilir. - ---- - -### Kullanımdan kaldırılan modeller - -| Model | Kullanımdan kaldırılma tarihi | -| ------------------ | ----------------------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## Gizlilik - -Tüm modellerimiz US'de barındırılıyor. Sağlayıcılarımız zero-retention politikası uygular ve aşağıdaki istisnalar dışında verilerinizi model eğitimi için kullanmaz: - -- Big Pickle: Ücretsiz döneminde toplanan veriler modeli iyileştirmek için kullanılabilir. -- DeepSeek V4 Flash Free: Ücretsiz döneminde toplanan veriler modeli iyileştirmek için kullanılabilir. -- MiMo-V2.5 Free: Ücretsiz döneminde toplanan veriler modeli iyileştirmek için kullanılabilir. -- North Mini Code Free: Ücretsiz kullanım süresi boyunca toplanan veriler saklanabilir ve modeli geliştirmek için kullanılabilir. Kişisel veya gizli veriler göndermeyin. [Kullanım Koşullarımıza](https://cohere.com/terms-of-use) ve [Gizlilik Politikamıza](https://cohere.com/privacy) bakın. -- Nemotron 3 Ultra Free (ücretsiz NVIDIA uç noktaları): Yalnızca deneme amaçlıdır — kişisel veya gizli veri göndermeyin. Kullanımınız güvenlik amacıyla ve NVIDIA ürünlerini ve hizmetlerini geliştirmek için kaydedilir. Geliştirme amacıyla kaydedilen oturum verileri kimliğinizle veya herhangi bir kalıcı tanımlayıcıyla ilişkilendirilmez. Veri işleme uygulamalarımız hakkında daha fazla bilgi için [Gizlilik Politikamıza](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) bakın. Bu uç noktayla etkileşime geçerek, bu tür bilgileri toplamamıza, kaydetmemize ve kullanmamıza ve [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf) koşullarına onay vermiş olursunuz. -- OpenAI APIs: İstekler [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) uyarınca 30 gün boyunca saklanır. -- Anthropic APIs: İstekler [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage) uyarınca 30 gün boyunca saklanır. - ---- - -## Ekipler için - -Zen ekipler için de harika çalışır. Ekip arkadaşlarınızı davet edebilir, roller atayabilir, ekibinizin kullandığı modelleri düzenleyebilir ve daha fazlasını yapabilirsiniz. - -:::note -Çalışma alanları şu anda beta'nın bir parçası olarak ekipler için ücretsizdir. -::: - -Çalışma alanınızı yönetmek şu anda beta'nın bir parçası olarak ekipler için ücretsizdir. Fiyatlandırma hakkında daha fazla ayrıntıyı yakında paylaşacağız. - ---- - -### Roller - -Ekip arkadaşlarınızı çalışma alanınıza davet edip rol atayabilirsiniz: - -- **Admin**: Modelleri, üyeleri, API anahtarlarını ve faturalandırmayı yönetir -- **Member**: Yalnızca kendi API anahtarlarını yönetir - -Admin'ler ayrıca maliyetleri kontrol altında tutmak için her üye için aylık harcama limiti belirleyebilir. - ---- - -### Model erişimi - -Admin'ler çalışma alanı için belirli modelleri etkinleştirebilir veya devre dışı bırakabilir. Devre dışı bırakılmış bir modele yapılan istekler hata döndürür. - -Bu, veri toplayan bir modelin kullanımını kapatmak istediğiniz durumlarda kullanışlıdır. - ---- - -### Kendi anahtarınızı getirin - -Zen'deki diğer modellere erişmeye devam ederken kendi OpenAI veya Anthropic API anahtarlarınızı kullanabilirsiniz. - -Kendi anahtarlarınızı kullandığınızda token'lar Zen tarafından değil, doğrudan sağlayıcı tarafından faturalandırılır. - -Örneğin, kuruluşunuzun OpenAI veya Anthropic için zaten bir anahtarı olabilir ve Zen'in sağladığı anahtar yerine onu kullanmak isteyebilirsiniz. - ---- - -## Hedefler - -OpenCode Zen'i şunlar için oluşturduk: - -1. Kodlama ajanları için en iyi modelleri/sağlayıcıları **kıyaslamak**. -2. **En yüksek kaliteli** seçeneklere erişmek ve performansı düşürmemek ya da daha ucuz sağlayıcılara yönlendirmemek. -3. Maliyetine satış yaparak tüm **fiyat düşüşlerini** yansıtmak; yani tek ek ücretimiz işlem ücretlerimizi karşılamak içindir. -4. Başka herhangi bir kodlama ajanıyla kullanmanıza izin vererek **kilitlenme olmamasını** sağlamak. Ayrıca OpenCode ile her zaman başka herhangi bir sağlayıcıyı da kullanabilmenizi sağlamak. diff --git a/packages/web/src/content/docs/zh-cn/acp.mdx b/packages/web/src/content/docs/zh-cn/acp.mdx deleted file mode 100644 index b07520c5e7..0000000000 --- a/packages/web/src/content/docs/zh-cn/acp.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: ACP 支持 -description: 在任何兼容 ACP 的编辑器中使用 OpenCode。 ---- - -OpenCode 支持 [Agent Client Protocol](https://agentclientprotocol.com)(ACP),允许你直接在兼容的编辑器和 IDE 中使用它。 - -:::tip -有关支持 ACP 的编辑器和工具列表,请查看 [ACP 进展报告](https://zed.dev/blog/acp-progress-report#available-now)。 -::: - -ACP 是一个开放协议,用于标准化代码编辑器与 AI 编码代理之间的通信。 - ---- - -## 配置 - -要通过 ACP 使用 OpenCode,请在编辑器中配置运行 `opencode acp` 命令。 - -该命令会将 OpenCode 作为兼容 ACP 的子进程启动,通过 stdio 上的 JSON-RPC 与编辑器进行通信。 - -以下是支持 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` 操作。 - -你也可以通过编辑 `keymap.json` 来绑定键盘快捷键: - -```json title="keymap.json" -[ - { - "bindings": { - "cmd-alt-o": [ - "agent::NewExternalAgentThread", - { - "agent": { - "custom": { - "name": "OpenCode", - "command": { - "command": "opencode", - "args": ["acp"] - } - } - } - } - ] - } - } -] -``` - ---- - -### JetBrains IDEs - -根据[文档](https://www.jetbrains.com/help/ai-assistant/acp.html),将以下内容添加到你的 [JetBrains IDE](https://www.jetbrains.com/) 的 acp.json 中: - -```json title="acp.json" -{ - "agent_servers": { - "OpenCode": { - "command": "/absolute/path/bin/opencode", - "args": ["acp"] - } - } -} -``` - -打开方式:在 AI Chat 代理选择器中选择新的 'OpenCode' 代理。 - ---- - -### 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 - -要在 [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim) 中将 OpenCode 用作 ACP 代理,请将以下内容添加到你的 Neovim 配置中: - -```lua -require("codecompanion").setup({ - interactions = { - chat = { - adapter = { - name = "opencode", - model = "claude-sonnet-4", - }, - }, - }, -}) -``` - -此配置将 CodeCompanion 设置为使用 OpenCode 作为聊天的 ACP 代理。 - -如果需要传递环境变量(如 `OPENCODE_API_KEY`),请参阅 CodeCompanion.nvim 文档中的[配置适配器:环境变量](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key)了解详细信息。 - -## 支持 - -OpenCode 通过 ACP 使用时与在终端中使用的效果完全一致。所有功能均受支持: - -:::note -部分内置斜杠命令(如 `/undo` 和 `/redo`)目前暂不支持。 -::: - -- 内置工具(文件操作、终端命令等) -- 自定义工具和斜杠命令 -- 在 OpenCode 配置中配置的 MCP 服务器 -- 来自 `AGENTS.md` 的项目级规则 -- 自定义格式化工具和代码检查工具 -- 代理和权限系统 diff --git a/packages/web/src/content/docs/zh-cn/agents.mdx b/packages/web/src/content/docs/zh-cn/agents.mdx deleted file mode 100644 index 6f821ff7f8..0000000000 --- a/packages/web/src/content/docs/zh-cn/agents.mdx +++ /dev/null @@ -1,754 +0,0 @@ ---- -title: 代理 -description: 配置和使用专门的代理。 ---- - -代理是专门的 AI 助手,可以针对特定任务和工作流程进行配置。它们允许您创建具有自定义提示词、模型和工具访问权限的专用工具。 - -:::tip -使用 Plan 代理来分析代码和审查建议,而不会进行任何代码更改。 -::: - -您可以在会话期间切换代理,或使用 `@` 提及来调用它们。 - ---- - -## 类型 - -OpenCode 中有两种类型的代理:主代理和子代理。 - ---- - -### 主代理 - -主代理是您直接交互的主要助手。您可以使用 **Tab** 键或配置的 `switch_agent` 快捷键来循环切换它们。这些代理处理您的主要对话。工具访问通过权限进行配置——例如,Build 启用了所有工具,而 Plan 则受到限制。 - -:::tip -您可以在会话期间使用 **Tab** 键在主代理之间切换。 -::: - -OpenCode 内置了两个主代理:**Build** 和 **Plan**。我们将在下面介绍它们。 - ---- - -### 子代理 - -子代理是主代理可以调用来执行特定任务的专业助手。您也可以通过在消息中 **@ 提及**它们来手动调用。 - -OpenCode 内置了三个子代理:**General**、**Explore** 和 **Scout**。我们将在下面介绍它们。 - ---- - -## 内置代理 - -OpenCode 内置了两个主代理和三个子代理。 - ---- - -### 使用 Build - -_模式_:`primary` - -Build 是启用了所有工具的**默认**主代理。这是用于需要完全访问文件操作和系统命令的开发工作的标准代理。 - ---- - -### 使用 Plan - -_模式_:`primary` - -一个专为规划和分析设计的受限代理。我们使用权限系统来为您提供更多控制权,并防止意外更改。 -默认情况下,以下所有项均设置为 `ask`: - -- `file edits`:所有写入、补丁和编辑 -- `bash`:所有 bash 命令 - -当您希望 LLM 分析代码、建议更改或创建计划,而不对代码库进行任何实际修改时,此代理非常有用。 - ---- - -### 使用 General - -_模式_:`subagent` - -一个用于研究复杂问题和执行多步骤任务的通用代理。拥有完整的工具访问权限(todo 除外),因此可以在需要时修改文件。可用于并行运行多个工作单元。 - ---- - -### 使用 Explore - -_模式_:`subagent` - -一个用于探索代码库的快速只读代理。无法修改文件。当您需要按模式快速查找文件、搜索代码中的关键字或回答有关代码库的问题时,请使用此代理。 - ---- - -### 使用 Scout - -_模式_:`subagent` - -一个用于外部文档和依赖研究的只读代理。当您需要将某个依赖仓库克隆到 OpenCode 的托管缓存中、检查库的源代码,或在不修改工作区的情况下将本地代码与 upstream 实现进行交叉对照时,请使用此代理。 - ---- - -### 使用 Compaction - -_模式_:`primary` - -隐藏的系统代理,将长上下文压缩为较小的摘要。它会在需要时自动运行,且无法在 UI 中选择。 - ---- - -### 使用 Title - -_模式_:`primary` - -隐藏的系统代理,用于生成简短的会话标题。它会自动运行,且无法在 UI 中选择。 - ---- - -### 使用 Summary - -_模式_:`primary` - -隐藏的系统代理,用于创建会话摘要。它会自动运行,且无法在 UI 中选择。 - ---- - -## 用法 - -1. 对于主代理,在会话期间使用 **Tab** 键循环切换。您也可以使用配置的 `switch_agent` 快捷键。 - -2. 子代理可以通过以下方式调用: - - 由主代理根据其描述**自动**调用以执行专门任务。 - - 通过在消息中 **@ 提及**子代理来手动调用。例如: - - ```txt frame="none" - @general help me search for this function - ``` - -3. **会话间导航**:当子代理创建自己的子会话时,您可以使用以下方式在父会话和所有子会话之间导航: - - **\+Right**(或配置的 `session_child_cycle` 快捷键)向前循环:父会话 → 子会话1 → 子会话2 → ... → 父会话 - - **\+Left**(或配置的 `session_child_cycle_reverse` 快捷键)向后循环:父会话 ← 子会话1 ← 子会话2 ← ... ← 父会话 - - 这使您可以在主对话和专门的子代理工作之间无缝切换。 - ---- - -## 配置 - -您可以自定义内置代理或通过配置创建自己的代理。代理可以通过两种方式进行配置: - ---- - -### 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" - } - } -} -``` - -这是一个**必需的**配置选项。 - ---- - -### 温度 - -使用 `temperature` 配置控制 LLM 响应的随机性和创造力。 - -较低的值使响应更加集中和确定,而较高的值则增加创造力和多样性。 - -```json title="opencode.json" -{ - "agent": { - "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" -{ - "agent": { - "analyze": { - "temperature": 0.1, - "prompt": "{file:./prompts/analysis.txt}" - }, - "build": { - "temperature": 0.3 - }, - "brainstorm": { - "temperature": 0.7, - "prompt": "{file:./prompts/creative.txt}" - } - } -} -``` - -如果未指定温度,OpenCode 将使用模型特定的默认值;大多数模型通常为 0,Qwen 模型为 0.55。 - ---- - -### 最大步数 - -控制代理在被强制以纯文本响应之前可以执行的最大代理迭代次数。这允许希望控制成本的用户对代理操作设置限制。 - -如果未设置此选项,代理将持续迭代,直到模型选择停止或用户中断会话。 - -```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` 配置为代理覆盖模型。适用于针对不同任务使用不同的优化模型。例如,用更快的模型进行规划,用更强大的模型进行实现。 - -:::tip -如果您不指定模型,主代理将使用[全局配置的模型](/docs/config#models),而子代理将使用调用它的主代理所使用的模型。 -::: - -```json title="opencode.json" -{ - "agent": { - "plan": { - "model": "anthropic/claude-haiku-4-20250514" - } - } -} -``` - -OpenCode 配置中的模型 ID 使用 `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 -代理级配置会覆盖全局配置。 -::: - -您还可以使用通配符同时控制多个工具。例如,要禁用 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` 的代理。 -::: - ---- - -### 任务权限 - -使用 `permission.task` 控制代理可以通过 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 -用户始终可以通过 `@` 自动补全菜单直接调用任何子代理,即使代理的任务权限会拒绝它。 -::: - ---- - -### 颜色 - -使用 `color` 选项自定义代理在 UI 中的视觉外观。这会影响代理在界面中的显示方式。 - -使用有效的十六进制颜色(例如 `#FF5733`)或主题颜色:`primary`、`secondary`、`accent`、`success`、`warning`、`error`、`info`。 - -```json title="opencode.json" -{ - "agent": { - "creative": { - "color": "#ff6b6b" - }, - "code-reviewer": { - "color": "accent" - } - } -} -``` - ---- - -### Top P - -使用 `top_p` 选项控制响应多样性。这是控制随机性的温度替代方案。 - -```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. 询问代理的保存位置——全局或项目级。 -2. 描述代理应该做什么。 -3. 生成合适的系统提示词和标识符。 -4. 让您选择代理可以访问哪些工具。 -5. 最后,创建一个包含代理配置的 Markdown 文件。 - ---- - -## 使用场景 - -以下是不同代理的一些常见使用场景。 - -- **Build 代理**:启用所有工具的完整开发工作 -- **Plan 代理**:分析和规划,不进行任何更改 -- **Review 代理**:具有只读访问权限和文档工具的代码审查 -- **Debug 代理**:专注于问题排查,启用 bash 和读取工具 -- **Docs 代理**:文档编写,具有文件操作但不使用系统命令 - ---- - -## 示例 - -以下是一些您可能会觉得有用的示例代理。 - -:::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 -``` diff --git a/packages/web/src/content/docs/zh-cn/cli.mdx b/packages/web/src/content/docs/zh-cn/cli.mdx deleted file mode 100644 index 46f090bb72..0000000000 --- a/packages/web/src/content/docs/zh-cn/cli.mdx +++ /dev/null @@ -1,617 +0,0 @@ ---- -title: CLI -description: OpenCode CLI 选项和命令。 ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode CLI 在不带任何参数运行时,默认启动 [TUI](/docs/tui)。 - -```bash -opencode -``` - -但它也接受本页面中记录的命令,使您可以通过编程方式与 OpenCode 进行交互。 - -```bash -opencode run "Explain how closures work in JavaScript" -``` - ---- - -### tui - -启动 OpenCode 终端用户界面。 - -```bash -opencode [project] -``` - -#### 标志 - -| 标志 | 简写 | 描述 | -| ---------------------------------------- | ---- | --------------------------------------------------------- | -| {"--continue"} | `-c` | 继续上一个会话 | -| {"--session"} | `-s` | 要继续的会话 ID | -| {"--fork"} | | 继续时分叉会话(与 `--continue` 或 `--session` 配合使用) | -| {"--prompt"} | | 要使用的提示词 | -| {"--model"} | `-m` | 要使用的模型,格式为 provider/model | -| {"--agent"} | | 要使用的代理 | -| {"--port"} | | 监听端口 | -| {"--hostname"} | | 监听主机名 | - ---- - -## 命令 - -OpenCode CLI 还提供以下命令。 - ---- - -### agent - -管理 OpenCode 的代理。 - -```bash -opencode agent [command] -``` - ---- - -### attach - -将终端连接到已通过 `serve` 或 `web` 命令启动的 OpenCode 后端服务器。 - -```bash -opencode attach [url] -``` - -这允许将 TUI 与远程 OpenCode 后端配合使用。例如: - -```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 -``` - -#### 标志 - -| 标志 | 简写 | 描述 | -| ---------------------------------------- | ---- | ------------------------------------------------------------------- | -| {"--dir"} | | 启动 TUI 的工作目录 | -| {"--continue"} | `-c` | 继续上一个会话 | -| {"--session"} | `-s` | 要继续的会话 ID | -| {"--fork"} | | 继续时派生会话(与 `--continue` 或 `--session` 一起使用) | -| {"--password"} | `-p` | 基本认证密码(默认使用 `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | 基本认证用户名(默认使用 `OPENCODE_SERVER_USERNAME` 或 `opencode`) | - ---- - -#### 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 - -对支持 OAuth 的 MCP 服务器进行认证。 - -```bash -opencode mcp auth [name] -``` - -如果您不提供服务器名称,系统将提示您从可用的支持 OAuth 的服务器中进行选择。 - -您还可以列出支持 OAuth 的服务器及其认证状态。 - -```bash -opencode mcp auth list -``` - -或使用简写版本。 - -```bash -opencode mcp auth ls -``` - ---- - -#### logout - -移除 MCP 服务器的 OAuth 凭据。 - -```bash -opencode mcp logout [name] -``` - ---- - -#### debug - -调试 MCP 服务器的 OAuth 连接问题。 - -```bash -opencode mcp debug -``` - ---- - -### models - -列出已配置提供商的所有可用模型。 - -```bash -opencode models [provider] -``` - -此命令以 `provider/model` 的格式显示所有已配置提供商中可用的模型。 - -这对于确定在[配置文件](/docs/config/)中使用的确切模型名称非常有用。 - -您可以选择传入提供商 ID 来按提供商筛选模型。 - -```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 -# 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" -``` - -#### 标志 - -| 标志 | 简写 | 描述 | -| ---------------------------------------- | ---- | ------------------------------------------------------------------- | -| {"--command"} | | 要运行的命令,使用 message 作为参数 | -| {"--continue"} | `-c` | 继续上一个会话 | -| {"--session"} | `-s` | 要继续的会话 ID | -| {"--fork"} | | 继续时分叉会话(与 `--continue` 或 `--session` 配合使用) | -| {"--share"} | | 分享会话 | -| {"--model"} | `-m` | 要使用的模型,格式为 provider/model | -| {"--agent"} | | 要使用的代理 | -| {"--file"} | `-f` | 附加到消息的文件 | -| {"--format"} | | 格式:default(格式化输出)或 json(原始 JSON 事件) | -| {"--title"} | | 会话标题(未提供值时使用截断的提示词) | -| {"--attach"} | | 连接到正在运行的 opencode 服务器(例如 http://localhost:4096) | -| {"--password"} | `-p` | 基本认证密码(默认使用 `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | 基本认证用户名(默认使用 `OPENCODE_SERVER_USERNAME` 或 `opencode`) | -| {"--dir"} | | 运行目录,或附加时远程服务器上的路径 | -| {"--variant"} | | 模型变体(特定于提供商的推理级别) | -| {"--thinking"} | | 显示思考块 | -| {"--port"} | | 本地服务器端口(默认为随机端口) | - ---- - -### serve - -启动无界面的 OpenCode 服务器以提供 API 访问。查看[服务器文档](/docs/server)了解完整的 HTTP 接口。 - -```bash -opencode serve -``` - -此命令启动一个 HTTP 服务器,提供对 OpenCode 功能的 API 访问,无需 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 会话的 Token 用量和费用统计信息。 - -```bash -opencode stats -``` - -#### 标志 - -| 标志 | 描述 | -| --------------------------------------- | ------------------------------------------------------ | -| {"--days"} | 显示最近 N 天的统计信息(默认为所有时间) | -| {"--tools"} | 显示的工具数量(默认为全部) | -| {"--models"} | 显示模型用量明细(默认隐藏)。传入数字可显示前 N 个 | -| {"--project"} | 按项目筛选(默认为所有项目,传入空字符串表示当前项目) | - ---- - -### export - -将会话数据导出为 JSON。 - -```bash -opencode export [sessionID] -``` - -如果您不提供会话 ID,系统将提示您从可用的会话中进行选择。 - ---- - -### import - -从 JSON 文件或 OpenCode 分享链接导入会话数据。 - -```bash -opencode import -``` - -您可以从本地文件或 OpenCode 分享链接导入。 - -```bash -opencode import session.json -opencode import https://opncd.ai/s/abc123 -``` - ---- - -### web - -启动带有 Web 界面的无界面 OpenCode 服务器。 - -```bash -opencode web -``` - -此命令启动一个 HTTP 服务器并打开浏览器,通过 Web 界面访问 OpenCode。设置 `OPENCODE_SERVER_PASSWORD` 可启用 HTTP 基本认证(用户名默认为 `opencode`)。 - -#### 标志 - -| 标志 | 描述 | -| ---------------------------------------- | -------------------------- | -| {"--port"} | 监听端口 | -| {"--hostname"} | 监听主机名 | -| {"--mdns"} | 启用 mDNS 发现 | -| {"--cors"} | 允许 CORS 的额外浏览器来源 | - ---- - -### acp - -启动 ACP(Agent Client Protocol)服务器。 - -```bash -opencode acp -``` - -此命令启动一个通过 stdin/stdout 使用 nd-JSON 进行通信的 ACP 服务器。 - -#### 标志 - -| 标志 | 描述 | -| ---------------------------------------- | ---------- | -| {"--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 CLI 接受以下全局标志。 - -| 标志 | 简写 | 描述 | -| ------------------------------------------ | ---- | ------------------------------------ | -| {"--help"} | `-h` | 显示帮助信息 | -| {"--version"} | `-v` | 打印版本号 | -| {"--print-logs"} | | 将日志输出到 stderr | -| {"--log-level"} | | 日志级别(DEBUG、INFO、WARN、ERROR) | - ---- - -## 环境变量 - -OpenCode 可以通过环境变量进行配置。 - -| 变量 | 类型 | 描述 | -| ------------------------------------- | ------- | --------------------------------------- | -| `OPENCODE_AUTO_SHARE` | boolean | 自动分享会话 | -| `OPENCODE_GIT_BASH_PATH` | string | Windows 上 Git Bash 可执行文件的路径 | -| `OPENCODE_CONFIG` | string | 配置文件路径 | -| `OPENCODE_TUI_CONFIG` | string | TUI 配置文件路径 | -| `OPENCODE_CONFIG_DIR` | string | 配置目录路径 | -| `OPENCODE_CONFIG_CONTENT` | string | 内联 JSON 配置内容 | -| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | 禁用自动更新检查 | -| `OPENCODE_DISABLE_PRUNE` | boolean | 禁用旧数据清理 | -| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | 禁用自动终端标题更新 | -| `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 | 自定义模型配置获取 URL | - ---- - -### 实验性功能 - -这些环境变量用于启用可能会更改或移除的实验性功能。 - -| 变量 | 类型 | 描述 | -| ----------------------------------------------- | ------- | ------------------------------- | -| `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 响应的最大输出 Token 数 | -| `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 | 为 python 文件启用 TY LSP | -| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | 启用计划模式 | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | boolean | 启用后台子代理任务 | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | boolean | 启用实验性事件系统 | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | boolean | 启用原生 LLM 请求路径 | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | boolean | 启用并行 Web 搜索执行 | -| `OPENCODE_EXPERIMENTAL_SCOUT` | boolean | 启用 Scout 子代理 | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | boolean | 启用工作区支持 | diff --git a/packages/web/src/content/docs/zh-cn/commands.mdx b/packages/web/src/content/docs/zh-cn/commands.mdx deleted file mode 100644 index 751a9ff27b..0000000000 --- a/packages/web/src/content/docs/zh-cn/commands.mdx +++ /dev/null @@ -1,322 +0,0 @@ ---- -title: 命令 -description: 为重复任务创建自定义命令。 ---- - -自定义命令允许你指定一个提示词,当在 TUI 中执行该命令时会运行这个提示词。 - -```bash frame="none" -/my-command -``` - -自定义命令是 `/init`、`/undo`、`/redo`、`/share`、`/help` 等内置命令之外的补充。[了解更多](/docs/tui#commands)。 - ---- - -## 创建命令文件 - -在 `commands/` 目录中创建 markdown 文件来定义自定义命令。 - -创建 `.opencode/commands/test.md`: - -```md title=".opencode/commands/test.md" ---- -description: Run tests with coverage -agent: build -model: anthropic/claude-3-5-sonnet-20241022 ---- - -Run the full test suite with coverage report and show any failures. -Focus on the failing tests and suggest fixes. -``` - -frontmatter 定义命令属性,内容则成为模板。 - -通过输入 `/` 后跟命令名称来使用该命令。 - -```bash frame="none" -"/test" -``` - ---- - -## 配置 - -你可以通过 OpenCode 配置或在 `commands/` 目录中创建 markdown 文件来添加自定义命令。 - ---- - -### JSON - -在 OpenCode [配置](/docs/config)中使用 `command` 选项: - -```json title="opencode.jsonc" {4-12} -{ - "$schema": "https://opencode.ai/config.json", - "command": { - // This becomes the name of the command - "test": { - // This is the prompt that will be sent to the LLM - "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.", - // This is shown as the description in the TUI - "description": "Run tests with coverage", - "agent": "build", - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -现在你可以在 TUI 中运行这个命令: - -```bash frame="none" -/test -``` - ---- - -### Markdown - -你还可以使用 markdown 文件定义命令。将它们放在: - -- 全局:`~/.config/opencode/commands/` -- 项目级:`.opencode/commands/` - -```markdown title="~/.config/opencode/commands/test.md" ---- -description: Run tests with coverage -agent: build -model: anthropic/claude-3-5-sonnet-20241022 ---- - -Run the full test suite with coverage report and show any failures. -Focus on the failing tests and suggest fixes. -``` - -markdown 文件名即为命令名。例如,`test.md` 允许你运行: - -```bash frame="none" -/test -``` - ---- - -## 提示词配置 - -自定义命令的提示词支持多种特殊占位符和语法。 - ---- - -### 参数 - -使用 `$ARGUMENTS` 占位符向命令传递参数。 - -```md title=".opencode/commands/component.md" ---- -description: Create a new component ---- - -Create a new React component named $ARGUMENTS with TypeScript support. -Include proper typing and basic structure. -``` - -带参数运行命令: - -```bash frame="none" -/component Button -``` - -`$ARGUMENTS` 将被替换为 `Button`。 - -你还可以使用位置参数访问各个参数: - -- `$1` - 第一个参数 -- `$2` - 第二个参数 -- `$3` - 第三个参数 -- 以此类推... - -例如: - -```md title=".opencode/commands/create-file.md" ---- -description: Create a new file with content ---- - -Create a file named $1 in the directory $2 -with the following content: $3 -``` - -运行命令: - -```bash frame="none" -/create-file config.json src "{ \"key\": \"value\" }" -``` - -替换结果为: - -- `$1` 替换为 `config.json` -- `$2` 替换为 `src` -- `$3` 替换为 `{ "key": "value" }` - ---- - -### Shell 输出 - -使用 _!`command`_ 将 [bash 命令](/docs/tui#bash-commands)输出注入到提示词中。 - -例如,创建一个分析测试覆盖率的自定义命令: - -```md title=".opencode/commands/analyze-coverage.md" ---- -description: Analyze test coverage ---- - -Here are the current test results: -!`npm test` - -Based on these results, suggest improvements to increase coverage. -``` - -或者查看最近的更改: - -```md title=".opencode/commands/review-changes.md" ---- -description: Review recent changes ---- - -Recent git commits: -!`git log --oneline -10` - -Review these changes and suggest any improvements. -``` - -命令在项目的根目录中运行,其输出会成为提示词的一部分。 - ---- - -### 文件引用 - -使用 `@` 后跟文件名在命令中引用文件。 - -```md title=".opencode/commands/review-component.md" ---- -description: Review component ---- - -Review the component in @src/components/Button.tsx. -Check for performance issues and suggest improvements. -``` - -文件内容会自动包含在提示词中。 - ---- - -## 选项 - -让我们详细了解各配置选项。 - ---- - -### Template - -`template` 选项定义执行命令时发送给 LLM 的提示词。 - -```json title="opencode.json" -{ - "command": { - "test": { - "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes." - } - } -} -``` - -这是一个**必需的**配置选项。 - ---- - -### Description - -使用 `description` 选项提供命令功能的简要描述。 - -```json title="opencode.json" -{ - "command": { - "test": { - "description": "Run tests with coverage" - } - } -} -``` - -当你输入命令时,这将在 TUI 中显示为描述。 - ---- - -### Agent - -使用 `agent` 配置可选地指定由哪个[代理](/docs/agents)执行此命令。 -如果这是一个[子代理](/docs/agents/#subagents),该命令默认会触发子代理调用。 -要禁用此行为,请将 `subtask` 设置为 `false`。 - -```json title="opencode.json" -{ - "command": { - "review": { - "agent": "plan" - } - } -} -``` - -这是一个**可选的**配置选项。如果未指定,默认使用你当前的代理。 - ---- - -### Subtask - -使用 `subtask` 布尔值强制命令触发[子代理](/docs/agents/#subagents)调用。 -如果你希望命令不污染主要上下文,这会很有用,它会**强制**代理作为子代理运行, -即使[代理](/docs/agents)配置中的 `mode` 设置为 `primary`。 - -```json title="opencode.json" -{ - "command": { - "analyze": { - "subtask": true - } - } -} -``` - -这是一个**可选的**配置选项。 - ---- - -### Model - -使用 `model` 配置覆盖此命令的默认模型。 - -```json title="opencode.json" -{ - "command": { - "analyze": { - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -这是一个**可选的**配置选项。 - ---- - -## 内置命令 - -opencode 包含多个内置命令,如 `/init`、`/undo`、`/redo`、`/share`、`/help`;[了解更多](/docs/tui#commands)。 - -:::note -自定义命令可以覆盖内置命令。 -::: - -如果你定义了同名的自定义命令,它将覆盖内置命令。 diff --git a/packages/web/src/content/docs/zh-cn/config.mdx b/packages/web/src/content/docs/zh-cn/config.mdx deleted file mode 100644 index ffae7966f3..0000000000 --- a/packages/web/src/content/docs/zh-cn/config.mdx +++ /dev/null @@ -1,683 +0,0 @@ ---- -title: 配置 -description: 使用 OpenCode JSON 配置。 ---- - -您可以使用 JSON 配置文件来配置 OpenCode。 - ---- - -## 格式 - -OpenCode 支持 **JSON** 和 **JSONC**(带注释的 JSON)格式。 - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-5", - "autoupdate": true, - "server": { - "port": 4096, - }, -} -``` - ---- - -## 位置 - -您可以将配置放置在不同的位置,它们具有不同的优先级顺序。 - -:::note -配置文件是**合并在一起**的,而不是替换。 -::: - -配置文件是合并在一起的,而不是被替换。来自以下配置位置的设置会被合并。后面的配置仅在键冲突时覆盖前面的配置。所有配置中的非冲突设置都会被保留。 - -例如,如果您的全局配置设置了 `autoupdate: true`,而您的项目配置设置了 `model: "anthropic/claude-sonnet-4-5"`,则最终配置将包含这两个设置。 - ---- - -### 优先级顺序 - -配置源按以下顺序加载(后面的源覆盖前面的源): - -1. **远程配置**(来自 `.well-known/opencode`)- 组织默认值 -2. **全局配置**(`~/.config/opencode/opencode.json`)- 用户偏好 -3. **自定义配置**(`OPENCODE_CONFIG` 环境变量)- 自定义覆盖 -4. **项目配置**(项目中的 `opencode.json`)- 项目特定设置 -5. **`.opencode` 目录** - 代理、命令、插件 -6. **内联配置**(`OPENCODE_CONFIG_CONTENT` 环境变量)- 运行时覆盖 - -这意味着项目配置可以覆盖全局默认值,全局配置可以覆盖远程组织默认值。 - -:::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 中,并使用与全局配置相同的 Schema。 - ---- - -### 自定义路径 - -使用 `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` 目录之后加载,因此**可以覆盖**它们的设置。 - ---- - -## Schema - -配置文件具有在 [**`opencode.ai/config.json`**](https://opencode.ai/config.json) 中定义的 Schema。 - -您的编辑器应该能够基于该 Schema 进行验证和自动补全。 - ---- - -### 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` - 控制差异渲染方式。`"auto"` 根据终端宽度自适应,`"stacked"` 始终显示单列。 - -[在此了解更多关于 TUI 的信息](/docs/tui)。 - ---- - -### 服务器 - -您可以通过 `server` 选项为 `opencode serve` 和 `opencode web` 命令配置服务器设置。 - -```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` - 从基于浏览器的客户端使用 HTTP 服务器时允许 CORS 的额外来源。值必须是完整的来源(协议 + 主机 + 可选端口),例如 `https://app.example.com`。 - -[在此了解更多关于服务器的信息](/docs/server)。 - ---- - -### 工具 - -您可以通过 `tools` 选项管理 LLM 可以使用的工具。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "tools": { - "write": false, - "bash": false - } -} -``` - -[在此了解更多关于工具的信息](/docs/tools)。 - ---- - -### 模型 - -您可以通过 `provider`、`model` 和 `small_model` 选项在 OpenCode 配置中设置要使用的提供商和模型。 - -```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` - Bedrock 的 AWS 区域(默认为 `AWS_REGION` 环境变量或 `us-east-1`) -- `profile` - 来自 `~/.aws/credentials` 的 AWS 命名配置文件(默认为 `AWS_PROFILE` 环境变量) -- `endpoint` - VPC 端点的自定义端点 URL。这是通用 `baseURL` 选项使用 AWS 特定术语的别名。如果两者都指定,`endpoint` 优先。 - -:::note -Bearer Token(`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": { - // Disable file modification tools for review-only agent - "write": false, - "edit": false, - }, - }, - }, -} -``` - -您还可以使用 `~/.config/opencode/agents/` 或 `.opencode/agents/` 中的 Markdown 文件定义代理。[在此了解更多](/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)功能。 - -```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", - }, - }, -} -``` - -您还可以使用 `~/.config/opencode/commands/` 或 `.opencode/commands/` 中的 Markdown 文件定义命令。[在此了解更多](/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": false, - "reserved": 10000 - } -} -``` - -- `auto` - 当上下文已满时自动压缩会话(默认值:`true`)。 -- `prune` - 删除旧的工具输出以节省 Token(默认值:`false`)。 -- `reserved` - 压缩时的 Token 缓冲区。保留足够的窗口以避免压缩过程中溢出。 - ---- - -### 文件监视器 - -您可以通过 `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/` 中。您还可以通过 `plugin` 选项从 npm 加载插件。 - -```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` 选项接受提供商 ID 的数组。当某个提供商被禁用时: - -- 即使设置了环境变量,也不会被加载。 -- 即使通过 `/connect` 命令配置了 API 密钥,也不会被加载。 -- 该提供商的模型不会出现在模型选择列表中。 - ---- - -### 启用提供商 - -您可以通过 `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 密钥等敏感数据保存在单独的文件中。 -- 引入大型指令文件而不会使配置变得杂乱。 -- 在多个配置文件之间共享通用配置片段。 diff --git a/packages/web/src/content/docs/zh-cn/custom-tools.mdx b/packages/web/src/content/docs/zh-cn/custom-tools.mdx deleted file mode 100644 index 8b44a0450c..0000000000 --- a/packages/web/src/content/docs/zh-cn/custom-tools.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: 自定义工具 -description: 创建 LLM 可在 opencode 中调用的工具。 ---- - -自定义工具是你创建的函数,LLM 可以在对话过程中调用它们。它们与 opencode 的[内置工具](/docs/tools)(如 `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` 的工具。 - ---- - -#### 单文件多工具 - -你也可以从单个文件中导出多个工具。每个导出都会成为**一个独立的工具**,命名格式为 **`_`**: - -```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` 获取 git worktree 根目录。 - ---- - -## 示例 - -### 用 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 脚本。 diff --git a/packages/web/src/content/docs/zh-cn/ecosystem.mdx b/packages/web/src/content/docs/zh-cn/ecosystem.mdx deleted file mode 100644 index aaa6a3ede4..0000000000 --- a/packages/web/src/content/docs/zh-cn/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -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) | 在隔离的 Daytona 沙箱中自动运行 OpenCode 会话,支持 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) | 多分支开发容器隔离,支持浅克隆和自动分配端口 | -| [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) | 通过修剪过时的工具输出来优化 Token 使用 | -| [opencode-vibeguard](https://github.com/inkdust2021/opencode-vibeguard) | 在调用 LLM 之前将机密/PII 替换为 VibeGuard 风格的占位符;并在本地恢复 | -| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | 为受支持的提供商添加原生网页搜索支持,采用 Google grounded 风格 | -| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | 使 AI 代理能够在 PTY 中运行后台进程,并向其发送交互式输入 | -| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | 非交互式 shell 命令指令——防止依赖 TTY 的操作导致挂起 | -| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | 使用 Wakatime 追踪 OpenCode 的使用情况 | -| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | 清理 LLM 生成的 Markdown 表格 | -| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | 通过 Morph 提供 Fast Apply 编辑、WarpGrep 代码搜索和上下文压缩 | -| [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) | 基于 OpenCode 上下文的 AI 驱动自动 Zellij 会话命名 | -| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | 允许 OpenCode 代理通过技能发现和注入按需延迟加载提示词 | -| [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) | 使用 cron 语法通过 launchd (Mac) 或 systemd (Linux) 调度周期性任务 | -| [micode](https://github.com/vtemian/micode) | 结构化的头脑风暴 → 计划 → 实现工作流,支持会话连续性 | -| [octto](https://github.com/vtemian/octto) | 用于 AI 头脑风暴的交互式浏览器 UI,支持多问题表单 | -| [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) | OpenCode 的零摩擦 git worktree 管理 | -| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | 使用 Sentry AI Monitoring 追踪和调试您的 AI 代理 | - ---- - -## 项目 - -| 名称 | 描述 | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------- | -| [kimaki](https://github.com/remorses/kimaki) | 用于控制 OpenCode 会话的 Discord 机器人,基于 SDK 构建 | -| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Neovim 插件,提供编辑器感知的提示词,基于 API 构建 | -| [portal](https://github.com/hosenur/portal) | 通过 Tailscale/VPN 使用的移动优先 OpenCode Web UI | -| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | 用于构建 OpenCode 插件的模板 | -| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | OpenCode 的 Neovim 前端——基于终端的 AI 编码代理 | -| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Vercel AI SDK 提供商,用于通过 @opencode-ai/sdk 使用 OpenCode | -| [OpenChamber](https://github.com/btriapitsyn/openchamber) | OpenCode 的 Web / 桌面应用和 VS Code 扩展 | -| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | 将 OpenCode 嵌入 Obsidian UI 的 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 的桌面、Web、移动和远程客户端应用 | - ---- - -## 代理 - -| 名称 | 描述 | -| ----------------------------------------------------------------- | ---------------------------------------- | -| [Agentic](https://github.com/Cluster444/agentic) | 用于结构化开发的模块化 AI 代理和命令 | -| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | 用于增强工作流的配置、提示词、代理和插件 | diff --git a/packages/web/src/content/docs/zh-cn/enterprise.mdx b/packages/web/src/content/docs/zh-cn/enterprise.mdx deleted file mode 100644 index 83e823e93a..0000000000 --- a/packages/web/src/content/docs/zh-cn/enterprise.mdx +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: 企业版 -description: 在您的组织中安全地使用 OpenCode。 ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -OpenCode 企业版面向希望确保代码和数据始终留在自有基础设施内的组织。它通过集中式配置与您的 SSO 和内部 AI 网关集成来实现这一目标。 - -:::note -OpenCode 不会存储您的任何代码或上下文数据。 -::: - -开始使用 OpenCode 企业版: - -1. 在团队内部进行试用。 -2. **联系我们**,讨论定价和实施方案。 - ---- - -## 试用 - -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 企业版采用按席位定价模型。如果您拥有自己的 LLM 网关,我们不会对使用的 Token 收取费用。有关定价和实施方案的更多详情,请**联系我们**。 - ---- - -## 部署 - -完成试用并准备好在组织中使用 OpenCode 后,您可以**联系我们**,讨论定价和实施方案。 - ---- - -### 集中式配置 - -我们可以为您的整个组织设置 OpenCode 的统一集中式配置。 - -该集中式配置可与您的 SSO 提供商集成,确保所有用户仅访问您的内部 AI 网关。 - ---- - -### SSO 集成 - -通过集中式配置,OpenCode 可以与您组织的 SSO 提供商集成进行身份验证。 - -这使得 OpenCode 能够通过您现有的身份管理系统获取内部 AI 网关的凭据。 - ---- - -### 内部 AI 网关 - -通过集中式配置,OpenCode 还可以被配置为仅使用您的内部 AI 网关。 - -您还可以禁用所有其他 AI 提供商,确保所有请求都经过组织批准的基础设施。 - ---- - -### 自托管 - -虽然我们建议禁用共享页面以确保您的数据始终不会离开组织,但我们也可以帮助您在自己的基础设施上自行托管这些页面。 - -此功能目前已列入我们的路线图。如果您感兴趣,请**告诉我们**。 - ---- - -## 常见问题 - -

-什么是 OpenCode 企业版? - -OpenCode 企业版面向希望确保代码和数据始终留在自有基础设施内的组织。它通过集中式配置与您的 SSO 和内部 AI 网关集成来实现这一目标。 - -
- -
-如何开始使用 OpenCode 企业版? - -只需在团队内部开始试用即可。OpenCode 默认不存储您的代码或上下文数据,因此可以轻松上手。 - -然后**联系我们**,讨论定价和实施方案。 - -
- -
-企业版定价如何运作? - -我们提供按席位的企业版定价。如果您拥有自己的 LLM 网关,我们不会对使用的 Token 收取费用。如需了解更多详情,请**联系我们**,获取根据您组织需求定制的报价。 - -
- -
-我的数据在 OpenCode 企业版中是否安全? - -是的。OpenCode 不会存储您的代码或上下文数据。所有处理均在本地完成,或通过直接 API 调用发送至您的 AI 提供商。通过集中式配置和 SSO 集成,您的数据将安全地保留在组织的基础设施内。 - -
- -
-我们可以使用自己的私有 NPM 注册表吗? - -OpenCode 通过 Bun 原生的 `.npmrc` 文件支持来支持私有 npm 注册表。如果您的组织使用私有注册表(例如 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 之前登录私有注册表,以确保能够从您的企业注册表安装软件包。 - -
diff --git a/packages/web/src/content/docs/zh-cn/formatters.mdx b/packages/web/src/content/docs/zh-cn/formatters.mdx deleted file mode 100644 index 1f4035fda6..0000000000 --- a/packages/web/src/content/docs/zh-cn/formatters.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: 格式化工具 -description: OpenCode 使用特定语言的格式化工具。 ---- - -OpenCode 会在文件写入或编辑后,自动使用特定语言的格式化工具对其进行格式化。这确保了生成的代码遵循你项目的代码风格。 - ---- - -## 内置格式化工具 - -OpenCode 内置了多种适用于主流语言和框架的格式化工具。下表列出了各格式化工具、支持的文件扩展名以及所需的命令或配置选项。 - -| 格式化工具 | 扩展名 | 要求 | -| -------------------- | ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | -| air | .R | `air` 命令可用 | -| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml 及[更多](https://biomejs.dev/) | `biome.json(c)` 配置文件 | -| cargofmt | .rs | `cargo fmt` 命令可用 | -| clang-format | .c, .cpp, .h, .hpp, .ino 及[更多](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` 配置文件 | -| cljfmt | .clj, .cljs, .cljc, .edn | `cljfmt` 命令可用 | -| dart | .dart | `dart` 命令可用 | -| dfmt | .d | `dfmt` 命令可用 | -| gleam | .gleam | `gleam` 命令可用 | -| gofmt | .go | `gofmt` 命令可用 | -| htmlbeautifier | .erb, .html.erb | `htmlbeautifier` 命令可用 | -| ktlint | .kt, .kts | `ktlint` 命令可用 | -| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | `mix` 命令可用 | -| nixfmt | .nix | `nixfmt` 命令可用 | -| ocamlformat | .ml, .mli | `ocamlformat` 命令可用且存在 `.ocamlformat` 配置文件 | -| ormolu | .hs | `ormolu` 命令可用 | -| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | `package.json` 中有 `oxfmt` 依赖,且设置了[实验性环境变量标志](/docs/cli/#experimental) | -| pint | .php | `composer.json` 中有 `laravel/pint` 依赖 | -| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml 及[更多](https://prettier.io/docs/en/index.html) | `package.json` 中有 `prettier` 依赖 | -| rubocop | .rb, .rake, .gemspec, .ru | `rubocop` 命令可用 | -| ruff | .py, .pyi | `ruff` 命令可用且有相应配置 | -| rustfmt | .rs | `rustfmt` 命令可用 | -| shfmt | .sh, .bash | `shfmt` 命令可用 | -| standardrb | .rb, .rake, .gemspec, .ru | `standardrb` 命令可用 | -| terraform | .tf, .tfvars | `terraform` 命令可用 | -| uv | .py, .pyi | `uv` 命令可用 | -| zig | .zig, .zon | `zig` 命令可用 | - -因此,如果你的项目 `package.json` 中包含 `prettier`,OpenCode 会自动使用它进行格式化。 - ---- - -## 工作原理 - -当 OpenCode 写入或编辑文件时,它会: - -1. 根据所有已启用的格式化工具检查文件扩展名。 -2. 对文件运行相应的格式化命令。 -3. 自动应用格式化更改。 - -整个过程在后台完成,无需任何手动操作即可保持代码风格的一致性。 - ---- - -## 配置 - -你可以通过 OpenCode 配置中的 `formatter` 部分自定义格式化工具。 - -```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` 占位符**会被替换为待格式化文件的路径。 diff --git a/packages/web/src/content/docs/zh-cn/github.mdx b/packages/web/src/content/docs/zh-cn/github.mdx deleted file mode 100644 index 01847f1938..0000000000 --- a/packages/web/src/content/docs/zh-cn/github.mdx +++ /dev/null @@ -1,321 +0,0 @@ ---- -title: GitHub -description: 在 GitHub Issue 和 Pull Request 中使用 OpenCode。 ---- - -OpenCode 可以与你的 GitHub 工作流集成。在评论中提及 `/opencode` 或 `/oc`,OpenCode 就会在你的 GitHub Actions 运行器中执行任务。 - ---- - -## 功能特性 - -- **问题分类**:让 OpenCode 调查某个 Issue 并为你做出解释。 -- **修复与实现**:让 OpenCode 修复 Issue 或实现某个功能。它会在新分支中工作,并提交包含所有变更的 PR。 -- **安全可靠**:OpenCode 在你自己的 GitHub 运行器中运行。 - ---- - -## 安装 - -在一个位于 GitHub 仓库中的项目里运行以下命令: - -```bash -opencode github install -``` - -该命令会引导你完成 GitHub App 的安装、工作流的创建以及密钥的配置。 - ---- - -### 手动设置 - -你也可以手动进行设置。 - -1. **安装 GitHub App** - - 前往 [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent),确保已在目标仓库中安装该应用。 - -2. **添加工作流** - - 将以下工作流文件添加到仓库的 `.github/workflows/opencode.yml` 中。请确保在 `env` 中设置合适的 `model` 及所需的 API 密钥。 - - ```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`:要使用的代理,必须是主代理。如果未找到,则回退到配置中的 `default_agent`,若仍未找到则使用 `"build"`。 -- `share`:是否共享 OpenCode 会话。对于公开仓库,默认为 **true**。 -- `prompt`:可选的自定义提示词,用于覆盖默认行为。可通过此项自定义 OpenCode 处理请求的方式。 -- `token`:可选的 GitHub 访问 Token,用于执行创建评论、提交变更和创建 Pull Request 等操作。默认情况下,OpenCode 使用 OpenCode GitHub App 的安装访问 Token,因此提交、评论和 Pull Request 会显示为来自该应用。 - - 你也可以使用 GitHub Action 运行器内置的 [`GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token),而无需安装 OpenCode GitHub App。只需确保在工作流中授予所需的权限: - - ```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 会读取上下文,并可创建分支、提交 PR 或回复。 | -| `pull_request_review_comment` | 在 PR 中对特定代码行发表评论 | 在代码审查时提及 `/opencode` 或 `/oc`。OpenCode 会接收文件路径、行号和 diff 上下文。 | -| `issues` | Issue 被创建或编辑 | 在 Issue 创建或修改时自动触发 OpenCode。需要提供 `prompt` 输入。 | -| `pull_request` | PR 被创建或更新 | 在 PR 被打开、同步或重新打开时自动触发 OpenCode。适用于自动化审查场景。 | -| `schedule` | 基于 Cron 的定时任务 | 按计划运行 OpenCode。需要提供 `prompt` 输入。输出会写入日志和 PR(没有 Issue 可供评论)。 | -| `workflow_dispatch` | 从 GitHub UI 手动触发 | 通过 Actions 选项卡按需触发 OpenCode。需要提供 `prompt` 输入。输出会写入日志和 PR。 | - -### 定时任务示例 - -按计划运行 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. -``` - -对于定时事件,`prompt` 输入为**必填**,因为没有评论可供提取指令。定时工作流在运行时没有用户上下文来进行权限检查,因此如果你希望 OpenCode 创建分支或 PR,工作流必须授予 `contents: write` 和 `pull-requests: write` 权限。 - ---- - -### Pull Request 示例 - -在 PR 被创建或更新时自动进行审查: - -```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 进行审查。 - ---- - -### Issue 分类示例 - -自动分类新建的 Issue。以下示例会过滤掉注册不满 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 的行为。 - -```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 -``` - -这对于在项目中实施特定的审查标准、编码规范或关注重点非常有用。 - ---- - -## 示例 - -以下是在 GitHub 中使用 OpenCode 的一些示例。 - -- **解释 Issue** - - 在 GitHub Issue 中添加以下评论: - - ``` - /opencode explain this issue - ``` - - OpenCode 会阅读整个讨论串(包括所有评论),并回复一份清晰的解释。 - -- **修复 Issue** - - 在 GitHub Issue 中输入: - - ``` - /opencode fix this - ``` - - OpenCode 会创建一个新分支,实现变更,并提交一个包含所有修改的 PR。 - -- **审查 PR 并进行修改** - - 在 GitHub PR 上留下以下评论: - - ``` - Delete the attachment from S3 when the note is removed /oc - ``` - - OpenCode 会实现所请求的变更并将其提交到同一个 PR 中。 - -- **审查特定代码行** - - 在 PR 的 "Files" 选项卡中直接对代码行留下评论。OpenCode 会自动检测文件、行号和 diff 上下文,从而提供精准的响应。 - - ``` - [Comment on specific lines in Files tab] - /oc add error handling here - ``` - - 当你对特定代码行发表评论时,OpenCode 会接收到: - - 正在审查的具体文件 - - 特定的代码行 - - 周围的 diff 上下文 - - 行号信息 - - 这样你就可以提出更有针对性的请求,而无需手动指定文件路径或行号。 diff --git a/packages/web/src/content/docs/zh-cn/gitlab.mdx b/packages/web/src/content/docs/zh-cn/gitlab.mdx deleted file mode 100644 index c1ffa0be61..0000000000 --- a/packages/web/src/content/docs/zh-cn/gitlab.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: GitLab -description: 在 GitLab issue 和合并请求中使用 OpenCode。 ---- - -OpenCode 通过 GitLab CI/CD 流水线或 GitLab Duo 与你的 GitLab 工作流集成。 - -在这两种情况下,OpenCode 都将在你的 GitLab Runner 上运行。 - ---- - -## GitLab CI - -OpenCode 可以在常规的 GitLab 流水线中运行。你可以将其作为 [CI 组件](https://docs.gitlab.com/ee/ci/components/) 集成到流水线中。 - -这里我们使用的是社区创建的 OpenCode CI/CD 组件 — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode)。 - ---- - -### 功能特性 - -- **按任务自定义配置**:使用自定义配置目录来配置 OpenCode,例如 `./config/#custom-directory`,以便为每次 OpenCode 调用启用或禁用特定功能。 -- **最小化配置**:CI 组件会在后台完成 OpenCode 的设置,你只需创建 OpenCode 配置和初始提示词即可。 -- **灵活可定制**:CI 组件支持多种输入参数来自定义其行为。 - ---- - -### 设置 - -1. 将你的 OpenCode 身份验证 JSON 作为文件类型的 CI 环境变量存储在 **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 调查某个 issue 并为你解释。 -- **修复与实现**:让 OpenCode 修复 issue 或实现某个功能。它会创建一个新分支,并提交包含更改的合并请求。 -- **安全可靠**:OpenCode 在你的 GitLab Runner 上运行。 - ---- - -### 设置 - -OpenCode 在你的 GitLab CI/CD 流水线中运行,以下是设置所需的步骤: - -:::tip -请查看 [**GitLab 文档**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) 获取最新说明。 -::: - -1. 配置你的 GitLab 环境 -2. 设置 CI/CD -3. 获取 AI 模型提供商的 API 密钥 -4. 创建服务账户 -5. 配置 CI/CD 变量 -6. 创建流程配置文件,以下是一个示例: - -
- - Flow configuration - - ```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. - - - 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. - - " - - 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 - ``` - -
- -详细说明请参考 [GitLab CLI agents 文档](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/)。 - ---- - -### 示例 - -以下是在 GitLab 中使用 OpenCode 的一些示例。 - -:::tip -你可以配置使用不同于 `@opencode` 的触发词。 -::: - -- **解释 issue** - - 在 GitLab issue 中添加以下评论。 - - ``` - @opencode explain this issue - ``` - - OpenCode 会阅读该 issue 并回复清晰的解释。 - -- **修复 issue** - - 在 GitLab issue 中输入: - - ``` - @opencode fix this - ``` - - OpenCode 会创建一个新分支,实现更改,并提交包含更改的合并请求。 - -- **审查合并请求** - - 在 GitLab 合并请求中留下以下评论。 - - ``` - @opencode review this merge request - ``` - - OpenCode 会审查合并请求并提供反馈。 diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx deleted file mode 100644 index 57cab75d3d..0000000000 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: Go -description: 低成本的开源编程模型订阅服务。 ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Go 是一项低成本的订阅服务 —— **首月 5 美元**,之后 **每月 10 美元** —— 让你能够稳定地访问流行的开源编程模型。 - -Go 的工作方式与 OpenCode 中的任何其他提供商(provider)一样。订阅 OpenCode Go 后你将获得 API 密钥。它是 **完全可选** 的,并非使用 OpenCode 所必需的条件。 - -它主要为国际用户设计,模型托管在美国、欧盟和新加坡,以确保稳定的全球访问。 - ---- - -## 背景 - -开源模型现在变得非常强大。在编程任务中,它们的性能已接近专有模型。由于许多提供商都可以提供具有竞争力的服务,它们通常要便宜得多。 - -然而,获得可靠、低延迟的访问可能很困难。各提供商在质量和可用性方面参差不齐。 - -:::tip -我们测试了一组经过精选且与 OpenCode 配合良好的模型和提供商。 -::: - -为了解决这个问题,我们做了以下几件事: - -1. 我们测试了一组精选的开源模型,并与他们的团队探讨了如何以最佳方式运行它们。 -2. 随后我们与一些提供商合作,以确保正确提供这些服务。 -3. 最后,我们对模型和提供商的组合进行了基准测试(benchmark),得出了一份我们乐于推荐的列表。 - -OpenCode Go 让你能够访问这些模型,**首月只需 5 美元**,之后 **每月 10 美元**。 - ---- - -## 工作原理 - -OpenCode Go 的工作方式与 OpenCode 中的其他提供商一样。 - -1. 登录 **OpenCode Zen**,订阅 Go,然后复制你的 API 密钥。 -2. 在 TUI 中运行 `/connect` 命令,选择 `OpenCode Go`,然后粘贴你的 API 密钥。 -3. 在 TUI 中运行 `/models` 以查看通过 Go 可用的模型列表。 - -:::note -每个工作空间只能有一名成员订阅 OpenCode Go。 -::: - -当前支持的模型列表包括: - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -随着我们进行测试和添加新模型,该列表可能会发生变化。 - ---- - -## 使用限制 - -OpenCode Go 包含以下限制: - -- **5 小时限制** — 12 美元使用额度 -- **每周限制** — 30 美元使用额度 -- **每月限制** — 60 美元使用额度 - -限制以美元价值定义。这意味着你的实际请求数取决于你所使用的模型。较便宜的模型(如 DeepSeek V4 Flash)允许更多请求,而较高成本的模型(如 GLM-5.2)允许较少请求。 - -下表提供了基于典型 Go 使用模式的预估请求数: - -| Model | 每 5 小时请求数 | 每周请求数 | 每月请求数 | -| ----------------- | --------------- | ---------- | ---------- | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -预估值基于观察到的平均请求模式: - -- GLM-5.2/5.1 — 每次请求 700 个输入 token,52,000 个缓存 token,150 个输出 token -- Kimi K2.7 Code/K2.6 — 每次请求 870 个输入 token,55,000 个缓存 token,200 个输出 token -- DeepSeek V4 Pro — 每次请求 750 个输入 token,82,000 个缓存 token,290 个输出 token -- DeepSeek V4 Flash — 每次请求 790 个输入 token,68,000 个缓存 token,280 个输出 token -- MiMo-V2.5 — 每次请求 830 个输入 token,71,500 个缓存 token,295 个输出 token -- MiMo-V2.5-Pro — 每次请求 790 个输入 token,86,000 个缓存 token,305 个输出 token -- MiniMax M3 — 每次请求 510 个输入 token,56,000 个缓存 token,190 个输出 token -- MiniMax M2.7 — 每次请求 300 个输入 token,55,000 个缓存 token,125 个输出 token -- Qwen3.7 Max — 每次请求 420 个输入 token,66,000 个缓存 token,200 个输出 token -- Qwen3.7 Plus — 每次请求 500 个输入 token,57,000 个缓存 token,190 个输出 token -- Qwen3.6 Plus — 每次请求 500 个输入 token,57,000 个缓存 token,190 个输出 token - -预估值还基于以下每 1M tokens 的价格: - -| 模型 | 输入 | 输出 | 缓存读取 | 缓存写入 | -| ---------------------------- | ----- | ----- | -------- | -------- | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -你可以在 **控制台** 中跟踪你当前的使用情况。 - -:::tip -如果你达到了使用限制,你可以继续使用免费模型。 -::: - -使用限制可能会随着我们从早期使用和反馈中学习而发生变化。 - ---- - -### 超出限制的使用 - -如果你的 Zen 余额中还有积分,可以在控制台中启用 **使用余额(Use balance)** 选项。启用后,当你达到使用限制时,Go 会回退使用你的 Zen 余额,而不是拦截请求。 - ---- - -## API 端点 - -你也可以通过以下 API 端点访问 Go 模型。 - -| 模型 | 模型 ID | 端点 | AI SDK 包 | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -你 OpenCode 配置中的 [模型 ID](/docs/config/#models) 使用 `opencode-go/` 格式。例如,对于 Kimi K2.7 Code,你将在配置中使用 `opencode-go/kimi-k2.7-code`。 - ---- - -### 模型 - -你可以从以下地址获取可用模型及其元数据的完整列表: - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## 隐私保护 - -该方案主要面向国际用户,模型托管在 US、EU 和 Singapore,以提供稳定的全球访问。我们的提供商遵循零保留政策,不会将您的数据用于模型训练。 - ---- - -## 目标 - -我们创建 OpenCode Go 的目的是: - -1. 通过低成本订阅让更多人能够 **无门槛地** 使用 AI 编程。 -2. 为最佳开源编程模型提供 **可靠的** 访问。 -3. 精选经过 **测试和基准评估**,适合编程 Agent 使用的模型。 -4. **无锁定(no lock-in)**,允许你与 OpenCode 一起使用任何其他提供商。 diff --git a/packages/web/src/content/docs/zh-cn/ide.mdx b/packages/web/src/content/docs/zh-cn/ide.mdx deleted file mode 100644 index 1a759a8e6a..0000000000 --- a/packages/web/src/content/docs/zh-cn/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: IDE -description: 适用于 VS Code、Cursor 及其他 IDE 的 OpenCode 扩展 ---- - -OpenCode 可与 VS Code、Cursor 或任何支持终端的 IDE 集成。只需在终端中运行 `opencode` 即可开始使用。 - ---- - -## 用法 - -- **快速启动**:使用 `Cmd+Esc`(Mac)或 `Ctrl+Esc`(Windows/Linux)在分屏终端视图中打开 OpenCode,如果已有终端会话正在运行,则会自动聚焦到该会话。 -- **新建会话**:使用 `Cmd+Shift+Esc`(Mac)或 `Ctrl+Shift+Esc`(Windows/Linux)启动新的 OpenCode 终端会话,即使已有会话在运行也会新建。你也可以点击界面中的 OpenCode 按钮。 -- **上下文感知**:自动将当前选中内容或标签页共享给 OpenCode。 -- **文件引用快捷键**:使用 `Cmd+Option+K`(Mac)或 `Alt+Ctrl+K`(Linux/Windows)插入文件引用。例如 `@File#L37-42`。 - ---- - -## 安装 - -在 VS Code 及其常见分支(如 Cursor、Windsurf、VSCodium)上安装 OpenCode: - -1. 打开 VS Code -2. 打开集成终端 -3. 运行 `opencode`——扩展将自动安装 - -如果你希望在 TUI 中执行 `/editor` 或 `/export` 时使用自己的 IDE,需要设置 `export EDITOR="code --wait"`。[了解更多](/docs/tui/#editor-setup)。 - ---- - -### 手动安装 - -在扩展商店中搜索 **OpenCode**,然后点击 **Install**。 - ---- - -### 故障排除 - -如果扩展未能自动安装: - -- 确保你是在集成终端中运行的 `opencode`。 -- 确认你的 IDE 对应的 CLI 命令已安装: - - 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 有权限安装扩展 diff --git a/packages/web/src/content/docs/zh-cn/index.mdx b/packages/web/src/content/docs/zh-cn/index.mdx deleted file mode 100644 index ed278e2397..0000000000 --- a/packages/web/src/content/docs/zh-cn/index.mdx +++ /dev/null @@ -1,343 +0,0 @@ ---- -title: 简介 -description: 开始使用 OpenCode。 ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" -import config from "../../../../config.mjs" -export const console = config.console - -[**OpenCode**](/) 是一个开源的 AI 编码代理。它提供终端界面、桌面应用和 IDE 扩展等多种使用方式。 - -![使用 opencode 主题的 OpenCode TUI](../../../assets/lander/screenshot.png) - -让我们开始吧。 - ---- - -#### 前提条件 - -要在终端中使用 OpenCode,你需要: - -1. 一款现代终端模拟器,例如: - - [WezTerm](https://wezterm.org),跨平台 - - [Alacritty](https://alacritty.org),跨平台 - - [Ghostty](https://ghostty.org),Linux 和 macOS - - [Kitty](https://sw.kovidgoyal.net/kitty/),Linux 和 macOS - -2. 你想使用的 LLM 提供商的 API 密钥。 - ---- - -## 安装 - -安装 OpenCode 最简单的方法是通过安装脚本。 - -```bash -curl -fsSL https://opencode.ai/install | bash -``` - -你也可以使用以下方式安装: - -- **使用 Node.js** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **在 macOS 和 Linux 上使用 Homebrew** - - ```bash - brew install anomalyco/tap/opencode - ``` - - > 我们推荐使用 OpenCode tap 以获取最新版本。官方的 `brew install opencode` formula 由 Homebrew 团队维护,更新频率较低。 - -- **在 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 - ``` - -在 Windows 上通过 Bun 安装 OpenCode 的支持目前正在开发中。 - -你也可以从 [Releases](https://github.com/anomalyco/opencode/releases) 页面直接下载二进制文件。 - ---- - -## 配置 - -通过 OpenCode,你可以配置 API 密钥来使用任意 LLM 提供商。 - -如果你刚开始接触 LLM 提供商,我们推荐使用 [OpenCode Zen](/docs/zen)。这是一组经过 OpenCode 团队测试和验证的精选模型。 - -1. 在 TUI 中运行 `/connect` 命令,选择 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 -你应该将项目的 `AGENTS.md` 文件提交到 Git。 -::: - -这有助于 OpenCode 理解项目结构和编码规范。 - ---- - -## 使用 - -现在你已经准备好使用 OpenCode 来处理项目了,尽管提问吧! - -如果你是第一次使用 AI 编码代理,以下示例可能会对你有所帮助。 - ---- - -### 提问 - -你可以让 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 有一个*计划模式*,该模式下它不会进行任何修改,而是建议*如何*实现该功能。 - - 使用 **Tab** 键切换到计划模式。你会在右下角看到模式指示器。 - - ```bash frame="none" title="Switch to Plan mode" - - ``` - - 接下来描述你希望它做什么。 - - ```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 - 将图片拖放到终端中即可将其添加到提示词中。 - ::: - - OpenCode 可以扫描你提供的图片并将其添加到提示词中。只需将图片拖放到终端窗口即可。 - -3. **构建功能** - - 当你对计划满意后,再次按 **Tab** 键切换回*构建模式*。 - - ```bash frame="none" - - ``` - - 然后让它开始实施。 - - ```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? -``` - -你可以调整提示词,让 OpenCode 重新尝试。 - -:::tip -你可以多次运行 `/undo` 来撤销多次修改。 -::: - -你也**可以使用** `/redo` 命令来重做修改。 - -```bash frame="none" -/redo -``` - ---- - -## 分享 - -你与 OpenCode 的对话可以[与团队分享](/docs/share)。 - -```bash frame="none" -/share -``` - -这会生成当前对话的链接并复制到剪贴板。 - -:::note -对话默认不会被分享。 -::: - -这是一个与 OpenCode 的[示例对话](https://opencode.ai/s/4XP1fce5)。 - ---- - -## 个性化 - -以上就是全部内容!你现在已经是 OpenCode 的使用高手了。 - -要让它更符合你的习惯,我们推荐[选择一个主题](/docs/themes)、[自定义快捷键](/docs/keybinds)、[配置代码格式化工具](/docs/formatters)、[创建自定义命令](/docs/commands),或者探索 [OpenCode 配置](/docs/config)。 diff --git a/packages/web/src/content/docs/zh-cn/keybinds.mdx b/packages/web/src/content/docs/zh-cn/keybinds.mdx deleted file mode 100644 index 0989a30f57..0000000000 --- a/packages/web/src/content/docs/zh-cn/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: 快捷键 -description: 自定义您的快捷键。 ---- - -OpenCode 提供了一系列快捷键,您可以通过 `tui.json` 进行自定义。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "h", - "display_thinking": "none" - } -} -``` - ---- - -## 前导键 - -OpenCode 的大多数快捷键使用 `leader`(前导键)。这可以避免与终端中的其他快捷键冲突。 - -默认情况下,`ctrl+x` 是前导键,大多数操作需要您先按下前导键,然后再按对应的快捷键。例如,要新建一个会话,请先按 `ctrl+x`,然后按 `n`。 - -您不一定需要使用前导键来设置快捷键,但我们建议您这样做。 - ---- - -## 禁用快捷键 - -您可以通过将键值添加到 `tui.json` 并设置为 "none" 来禁用某个快捷键。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.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 - -某些终端默认不会发送带修饰键的 Enter 键。您可能需要配置终端将 `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,或打开一个新标签页。 diff --git a/packages/web/src/content/docs/zh-cn/lsp.mdx b/packages/web/src/content/docs/zh-cn/lsp.mdx deleted file mode 100644 index 07466c384e..0000000000 --- a/packages/web/src/content/docs/zh-cn/lsp.mdx +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: LSP 服务器 -description: OpenCode 与你的 LSP 服务器集成。 ---- - -OpenCode 可以与语言服务器协议(LSP)服务器集成,将诊断信息作为 agent 的反馈。 - ---- - -## 内置支持 - -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+)` | -| julials | .jl | 需要安装 `julia` and `LanguageServer.jl` | -| 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 releases 自动安装 | -| tinymist | .typ, .typc | 从 GitHub releases 自动安装 | -| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | 项目中需要 `typescript` 依赖 | -| vue | .vue | 为 Vue 项目自动安装 | -| yaml-ls | .yaml, .yml | 自动安装 Red Hat yaml-language-server | -| zls | .zig, .zon | 需要 `zig` 命令可用 | - -LSP 默认关闭。启用后,当检测到上述文件扩展名且满足相应要求时,服务器会启动。 - -:::note -你可以将 `OPENCODE_DISABLE_LSP_DOWNLOAD` 环境变量设置为 `true` 来禁用 LSP 服务器的自动下载。 -::: - ---- - -## 工作原理 - -启用 LSP 且 opencode 打开文件时,它会: - -1. 将文件扩展名与所有已启用的 LSP 服务器进行匹配。 -2. 如果对应的 LSP 服务器尚未运行,则自动启动它。 - ---- - -## 最佳实践 - -LSP 可以通过语言服务器诊断帮助 agent 发现并修复问题。这对某些项目很有用,但并不总是带来净收益。 - -语言服务器可能与项目不同步、占用较多内存、随版本或项目表现不同,并拖慢 agent 工作流。在许多项目中,更好的做法是让 agent 直接运行 lint、typecheck 或其他诊断类 CLI 工具,这样错误会进入 agent 循环,同时避免这些权衡。将这些命令记录在 `AGENTS.md` 或 skills 等指令文件中,让 agent 知道该运行什么。当你的项目能从额外的语言服务器反馈中受益时再启用 LSP。 - ---- - -## 配置 - -你可以通过 opencode 配置文件中的 `lsp` 部分来启用并自定义 LSP 服务器。 - -要启用所有内置 LSP 服务器,请将 `lsp` 设置为 `true`。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -使用对象可以在保持内置服务器启用的同时配置覆盖项或自定义服务器。 - -```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 服务器都会被禁用。如果另一个配置启用了 LSP,可将 `lsp` 设置为 `false` 来禁用所有 LSP 服务器: - -```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` - -该文件应仅包含许可证密钥,不要添加其他任何内容。 diff --git a/packages/web/src/content/docs/zh-cn/mcp-servers.mdx b/packages/web/src/content/docs/zh-cn/mcp-servers.mdx deleted file mode 100644 index cac8778d48..0000000000 --- a/packages/web/src/content/docs/zh-cn/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -title: MCP 服务器 -description: 添加本地和远程 MCP 工具。 ---- - -你可以通过 _Model Context Protocol_(MCP)为 OpenCode 添加外部工具。OpenCode 同时支持本地和远程服务器。 - -添加后,MCP 工具会自动与内置工具一起提供给 LLM 使用。 - ---- - -#### 注意事项 - -使用 MCP 服务器时,它会占用上下文空间。如果你启用了大量工具,上下文消耗会迅速增加。因此,我们建议谨慎选择要使用的 MCP 服务器。 - -:::tip -MCP 服务器会占用你的上下文空间,所以请谨慎选择启用哪些服务器。 -::: - -某些 MCP 服务器(例如 GitHub MCP 服务器)往往会消耗大量 Token,很容易超出上下文限制。 - ---- - -## 启用 - -你可以在 [OpenCode 配置](https://opencode.ai/docs/config/)的 `mcp` 字段下定义 MCP 服务器。为每个 MCP 指定一个唯一的名称,在提示词中可以通过该名称来引用对应的 MCP。 - -```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` 来禁用某个服务器。当你想临时禁用某个服务器而不将其从配置中移除时,这个选项非常有用。 - ---- - -### 覆盖远程默认值 - -组织可以通过其 `.well-known/opencode` 端点提供默认的 MCP 服务器。这些服务器可能默认处于禁用状态,允许用户按需启用。 - -要启用组织远程配置中的某个服务器,请在本地配置中添加该服务器并设置 `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 服务器的启动命令。你还可以传入一组环境变量。 - -例如,以下是添加测试用的 [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP 服务器的方法。 - -```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` | 字符串 | 是 | MCP 服务器连接类型,必须为 `"local"`。 | -| `command` | 数组 | 是 | 运行 MCP 服务器的命令及参数。 | -| `environment` | 对象 | | 运行服务器时设置的环境变量。 | -| `enabled` | 布尔值 | | 启动时启用或禁用该 MCP 服务器。 | -| `timeout` | 数字 | | 从 MCP 服务器获取工具的超时时间(毫秒)。默认为 5000(即 5 秒)。 | - ---- - -## 远程 - -通过将 `type` 设置为 `"remote"` 来添加远程 MCP 服务器。 - -```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` 是远程 MCP 服务器的地址,通过 `headers` 选项可以传入一组请求头。 - ---- - -#### 选项 - -| 选项 | 类型 | 必填 | 描述 | -| --------- | ------ | ---- | ----------------------------------------------------------------- | -| `type` | 字符串 | 是 | MCP 服务器连接类型,必须为 `"remote"`。 | -| `url` | 字符串 | 是 | 远程 MCP 服务器的 URL。 | -| `enabled` | 布尔值 | | 启动时启用或禁用该 MCP 服务器。 | -| `headers` | 对象 | | 随请求发送的请求头。 | -| `oauth` | 对象 | | OAuth 身份验证配置。详见下方 [OAuth](#oauth) 部分。 | -| `timeout` | 数字 | | 从 MCP 服务器获取工具的超时时间(毫秒)。默认为 5000(即 5 秒)。 | - ---- - -## OAuth - -OpenCode 会自动处理远程 MCP 服务器的 OAuth 身份验证。当服务器需要身份验证时,OpenCode 将: - -1. 检测 401 响应并启动 OAuth 流程 -2. 在服务器支持的情况下使用**动态客户端注册(RFC 7591)** -3. 安全地存储 Token 以供后续请求使用 - ---- - -### 自动认证 - -对于大多数支持 OAuth 的 MCP 服务器,无需特殊配置。只需配置远程服务器即可: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "my-oauth-server": { - "type": "remote", - "url": "https://mcp.example.com/mcp" - } - } -} -``` - -如果服务器需要身份验证,OpenCode 会在你首次使用时提示你进行认证。你也可以使用 `opencode mcp auth ` [手动触发认证流程](#authenticating)。 - ---- - -### 预注册 - -如果你已经从 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 会将 Token 安全地存储在 `~/.local/share/opencode/mcp-auth.json` 中。 - ---- - -#### 禁用 OAuth - -如果你想为某个服务器禁用自动 OAuth(例如,该服务器使用 API 密钥而非 OAuth),可以将 `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` | 对象 \| `false` | OAuth 配置对象,或设为 `false` 以禁用 OAuth 自动检测。 | -| `clientId` | 字符串 | OAuth 客户端 ID。如果未提供,将尝试动态客户端注册。 | -| `clientSecret` | 字符串 | OAuth 客户端密钥(如果授权服务器要求提供)。 | -| `scope` | 字符串 | 授权时请求的 OAuth 作用域。 | - -#### 调试 - -如果远程 MCP 服务器身份验证失败,你可以通过以下方式诊断问题: - -```bash -# 查看所有支持 OAuth 的服务器的认证状态 -opencode mcp auth list - -# 调试特定服务器的连接和 OAuth 流程 -opencode mcp debug my-oauth-server -``` - -`mcp debug` 命令会显示当前认证状态、测试 HTTP 连接,并尝试执行 OAuth 发现流程。 - ---- - -## 管理 - -你的 MCP 在 OpenCode 中作为工具使用,与内置工具并列。因此,你可以像管理其他工具一样,通过 OpenCode 配置来管理它们。 - ---- - -### 全局 - -你可以全局启用或禁用 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-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 模式使用简单的正则通配符规则: - -- `*` 匹配零个或多个任意字符(例如,`"my-mcp*"` 匹配 `my-mcp_search`、`my-mcp_list` 等) -- `?` 匹配恰好一个字符 -- 其他字符按字面值匹配 - -:::note -MCP 服务器工具在注册时以服务器名称作为前缀,因此要禁用某个服务器的所有工具,只需使用: - -``` -"mymcpservername_*": false -``` - -::: - ---- - -## 示例 - -以下是一些常见 MCP 服务器的配置示例。如果你想记录其他服务器的用法,欢迎提交 PR。 - ---- - -### Sentry - -添加 [Sentry MCP 服务器](https://mcp.sentry.dev) 以与你的 Sentry 项目和问题进行交互。 - -```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 - -添加 [Context7 MCP 服务器](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` 即可使用 Context7 MCP 服务器。 - -```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 - -添加 [Grep by Vercel](https://grep.app) MCP 服务器以搜索 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. -``` diff --git a/packages/web/src/content/docs/zh-cn/models.mdx b/packages/web/src/content/docs/zh-cn/models.mdx deleted file mode 100644 index 5399a59abd..0000000000 --- a/packages/web/src/content/docs/zh-cn/models.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -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 - ---- - -## 设置默认模型 - -要将某个模型设为默认模型,可以在 OpenCode 配置中设置 `model` 字段。 - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "model": "lmstudio/google/gemma-3n-e4b" -} -``` - -这里完整的 ID 格式为 `provider_id/model_id`。例如,如果你使用 [OpenCode Zen](/docs/zen),则 GPT 5.1 Codex 对应的值为 `opencode/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, - }, - }, - }, - }, - }, - }, -} -``` - -这里我们为两个内置模型配置了全局设置:通过 `openai` 提供商访问的 `gpt-5`,以及通过 `anthropic` 提供商访问的 `claude-sonnet-4-20250514`。 -内置的提供商和模型名称可以在 [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` - 较低推理/Token 预算 -- `high` - 较高推理/Token 预算 - -:::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. `--model` 或 `-m` 命令行标志。格式与配置文件中相同:`provider_id/model_id`。 - -2. OpenCode 配置中的 model 字段。 - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-20250514" - } - ``` - - 格式为 `provider/model`。 - -3. 上次使用的模型。 - -4. 按内部优先级排列的第一个可用模型。 diff --git a/packages/web/src/content/docs/zh-cn/network.mdx b/packages/web/src/content/docs/zh-cn/network.mdx deleted file mode 100644 index 8289777a1e..0000000000 --- a/packages/web/src/content/docs/zh-cn/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: 网络 -description: 配置代理和自定义证书。 ---- - -OpenCode 支持标准代理环境变量和自定义证书,适用于企业网络环境。 - ---- - -## 代理 - -OpenCode 遵循标准代理环境变量。 - -```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 与本地 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 -``` - -此配置同时适用于代理连接和直接 API 访问。 diff --git a/packages/web/src/content/docs/zh-cn/permissions.mdx b/packages/web/src/content/docs/zh-cn/permissions.mdx deleted file mode 100644 index 7f905ac22e..0000000000 --- a/packages/web/src/content/docs/zh-cn/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -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`](#外部目录) 规则特别有用。 - -- `~/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`](#默认值),`external_directory` 下的条目也允许读取,除非另行覆盖。当需要在这些路径中限制某个工具时,请添加显式规则,例如在保留读取的同时阻止编辑: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - }, - "edit": { - "~/projects/personal/**": "deny" - } - } -} -``` - -请将列表限定在受信任的路径上,并根据需要为其他工具(例如 `bash`)叠加额外的允许或拒绝规则。 - ---- - -## 可用权限 - -OpenCode 的权限以工具名称为键,外加几个安全防护项: - -- `read` — 读取文件(匹配文件路径) -- `edit` — 所有文件修改(涵盖 `edit`、`write`、`patch`) -- `glob` — 文件通配(匹配通配模式) -- `grep` — 内容搜索(匹配正则表达式模式) -- `bash` — 运行 shell 命令(匹配解析后的命令,如 `git status --porcelain`) -- `task` — 启动子代理(匹配子代理类型) -- `skill` — 加载技能(匹配技能名称) -- `lsp` — 运行 LSP 查询(当前不支持细粒度配置) -- `webfetch` — 获取 URL(匹配 URL) -- `websearch` — 网页搜索(匹配查询内容) -- `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 -有关更详细的模式匹配示例,请参阅上方的[细粒度规则(对象语法)](#细粒度规则对象语法)部分。 -::: - -```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 *"`)。 -::: diff --git a/packages/web/src/content/docs/zh-cn/plugins.mdx b/packages/web/src/content/docs/zh-cn/plugins.mdx deleted file mode 100644 index e8a8bd70cb..0000000000 --- a/packages/web/src/content/docs/zh-cn/plugins.mdx +++ /dev/null @@ -1,388 +0,0 @@ ---- -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 包。 - -浏览[生态系统](/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 工作树路径。 -- `client`:用于与 AI 交互的 OpenCode SDK 客户端。 -- `$`:Bun 的 [Shell API](https://bun.com/docs/runtime/shell),用于执行命令。 - ---- - -### 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.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` 在 macOS 上运行 AppleScript 来发送通知。 - -:::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 执行(AI 工具和用户终端): - -```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 schema 函数,并返回一个工具定义,包含: - -- `description`:工具的功能描述 -- `args`:工具参数的 Zod schema -- `execute`:工具被调用时执行的函数 - -你的自定义工具将与内置工具一起在 OpenCode 中可用。 - -:::note -如果插件工具与内置工具使用相同的名称,则优先使用插件工具。 -::: - ---- - -### 日志记录 - -使用 `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` 数组将被忽略。 diff --git a/packages/web/src/content/docs/zh-cn/providers.mdx b/packages/web/src/content/docs/zh-cn/providers.mdx deleted file mode 100644 index 9c0a5d8a3b..0000000000 --- a/packages/web/src/content/docs/zh-cn/providers.mdx +++ /dev/null @@ -1,1949 +0,0 @@ ---- -title: 提供商 -description: 在 OpenCode 中使用任意 LLM 提供商。 ---- - -import config from "../../../../config.mjs" -export const console = config.console - -OpenCode 使用 [AI SDK](https://ai-sdk.dev/) 和 [Models.dev](https://models.dev),支持 **75+ LLM 提供商**,同时也支持运行本地模型。 - -要添加提供商,你需要: - -1. 使用 `/connect` 命令添加提供商的 API 密钥。 -2. 在 OpenCode 配置中设置该提供商。 - ---- - -### 凭据 - -使用 `/connect` 命令添加提供商的 API 密钥后,凭据会存储在 -`~/.local/share/opencode/auth.json` 中。 - ---- - -### 配置 - -你可以通过 OpenCode 配置中的 `provider` 部分来自定义提供商。 - ---- - -#### 自定义 Base URL - -你可以通过设置 `baseURL` 选项来自定义任何提供商的 Base URL。这在使用代理服务或自定义端点时非常有用。 - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen 是由 OpenCode 团队提供的模型列表,这些模型已经过测试和验证,能够与 OpenCode 良好配合使用。[了解更多](/docs/zen)。 - -:::tip -如果你是新用户,我们建议从 OpenCode Zen 开始。 -::: - -1. 在 TUI 中执行 `/connect` 命令,选择 opencode,然后前往 [opencode.ai/auth](https://opencode.ai/auth)。 - - ```txt - /connect - ``` - -2. 登录后添加账单信息,然后复制你的 API 密钥。 - -3. 粘贴你的 API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 在 TUI 中执行 `/models` 查看我们推荐的模型列表。 - - ```txt - /models - ``` - -它的使用方式与 OpenCode 中的其他提供商完全相同,且完全可选。 - ---- - -## 目录 - -下面我们来详细了解一些提供商。如果你想将某个提供商添加到列表中,欢迎提交 PR。 - -:::note -没有看到你想要的提供商?欢迎提交 PR。 -::: - ---- - -### 302.AI - -1. 前往 [302.AI 控制台](https://302.ai/),创建账户并生成 API 密钥。 - -2. 执行 `/connect` 命令并搜索 **302.AI**。 - - ```txt - /connect - ``` - -3. 输入你的 302.AI API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型。 - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -要在 OpenCode 中使用 Amazon Bedrock: - -1. 前往 Amazon Bedrock 控制台中的**模型目录**,申请访问你想要使用的模型。 - - :::tip - 你需要先在 Amazon Bedrock 中获得对目标模型的访问权限。 - ::: - -2. 使用以下方法之一**配置身份验证**: - - *** - - #### 环境变量(快速上手) - - 运行 opencode 时设置以下环境变量之一: - - ```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - 或者将它们添加到你的 bash 配置文件中: - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - *** - - #### 配置文件(推荐) - - 如需项目级别或持久化的配置,请使用 `opencode.json`: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **可用选项:** - - `region` - AWS 区域(例如 `us-east-1`、`eu-west-1`) - - `profile` - `~/.aws/credentials` 中的 AWS 命名配置文件 - - `endpoint` - VPC 端点的自定义端点 URL(通用 `baseURL` 选项的别名) - - :::tip - 配置文件中的选项优先级高于环境变量。 - ::: - - *** - - #### 进阶:VPC 端点 - - 如果你使用 Bedrock 的 VPC 端点: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } - } - ``` - - :::note - `endpoint` 选项是通用 `baseURL` 选项的别名,使用了 AWS 特有的术语。如果同时指定了 `endpoint` 和 `baseURL`,则 `endpoint` 优先。 - ::: - - *** - - #### 认证方式 - - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**:在 AWS 控制台中创建 IAM 用户并生成访问密钥 - - **`AWS_PROFILE`**:使用 `~/.aws/credentials` 中的命名配置文件。需要先通过 `aws configure --profile my-profile` 或 `aws sso login` 进行配置 - - **`AWS_BEARER_TOKEN_BEDROCK`**:从 Amazon Bedrock 控制台生成长期 API 密钥 - - **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**:适用于 EKS IRSA(服务账户的 IAM 角色)或其他支持 OIDC 联合的 Kubernetes 环境。使用服务账户注解时,Kubernetes 会自动注入这些环境变量。 - - *** - - #### 认证优先级 - - Amazon Bedrock 使用以下认证优先级: - 1. **Bearer Token** - `AWS_BEARER_TOKEN_BEDROCK` 环境变量或通过 `/connect` 命令获取的 Token - 2. **AWS 凭证链** - 配置文件、访问密钥、共享凭证、IAM 角色、Web Identity Token(EKS IRSA)、实例元数据 - - :::note - 当设置了 Bearer Token(通过 `/connect` 或 `AWS_BEARER_TOKEN_BEDROCK`)时,它的优先级高于所有 AWS 凭证方式,包括已配置的配置文件。 - ::: - -3. 执行 `/models` 命令选择你想要的模型。 - - ```txt - /models - ``` - -:::note -对于自定义推理配置文件,请在 key 中使用模型名称和提供商名称,并将 `id` 属性设置为 ARN。这可以确保正确的缓存行为: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - -::: - ---- - -### Anthropic - -1. 注册完成后,执行 `/connect` 命令并选择 Anthropic。 - - ```txt - /connect - ``` - -2. 你可以选择 **Claude Pro/Max** 选项,浏览器会自动打开并要求你进行身份验证。 - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. 现在使用 `/models` 命令即可看到所有 Anthropic 模型。 - - ```txt - /models - ``` - -:::info -在 OpenCode 中使用 Claude Pro/Max 订阅不是 [Anthropic](https://anthropic.com) 官方支持的用法。 -::: - -##### 使用 API 密钥 - -如果你没有 Pro/Max 订阅,也可以选择 **Create an API Key**。浏览器会自动打开并要求你登录 Anthropic,然后会提供一个代码供你粘贴到终端中。 - -如果你已经有 API 密钥,可以选择 **Manually enter API Key** 并将其粘贴到终端中。 - ---- - -### Atomic Chat - -你可以通过 [Atomic Chat](https://atomic.chat) 配置 opencode 以使用本地模型。Atomic Chat 是一款桌面应用程序,它在 OpenAI 兼容的 API 服务器后面运行本地 LLM(默认端点 `http://127.0.0.1:1337/v1`)。 - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -在此示例中: - -- `atomic-chat` 是自定义的提供商 ID。可以是任何你想要的字符串。 -- `npm` 指定此提供商使用的包。这里使用 `@ai-sdk/openai-compatible` 来连接任何 OpenAI 兼容的 API。 -- `name` 是提供商在界面中显示的名称。 -- `options.baseURL` 是本地服务器的端点。根据你的 Atomic Chat 设置修改主机和端口。 -- `models` 是模型 ID 到其显示名称的映射。每个 ID 必须与 `GET /v1/models` 返回的 `id` 匹配——运行 `curl http://127.0.0.1:1337/v1/models` 可列出 Atomic Chat 当前已加载的 ID。 - -:::tip -如果工具调用工作不佳,请选择一个对 tool calling 支持较好的已加载模型(例如 Qwen-Coder 或 DeepSeek-Coder 的变体)。 -::: - ---- - -### Azure OpenAI - -:::note -如果遇到 "I'm sorry, but I cannot assist with that request" 错误,请尝试将 Azure 资源中的内容过滤器从 **DefaultV2** 更改为 **Default**。 -::: - -1. 前往 [Azure 门户](https://portal.azure.com/)并创建 **Azure OpenAI** 资源。你需要: - - **资源名称**:这会成为你的 API 端点的一部分(`https://RESOURCE_NAME.openai.azure.com/`) - - **API 密钥**:资源中的 `KEY 1` 或 `KEY 2` - -2. 前往 [Azure AI Foundry](https://ai.azure.com/) 并部署一个模型。 - - :::note - 部署名称必须与模型名称一致,OpenCode 才能正常工作。 - ::: - -3. 执行 `/connect` 命令并搜索 **Azure**。 - - ```txt - /connect - ``` - -4. 输入你的 API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. 将资源名称设置为环境变量: - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - - 或者添加到你的 bash 配置文件中: - - ```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX - ``` - -6. 执行 `/models` 命令选择你已部署的模型。 - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. 前往 [Azure 门户](https://portal.azure.com/)并创建 **Azure OpenAI** 资源。你需要: - - **资源名称**:这会成为你的 API 端点的一部分(`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) - - **API 密钥**:资源中的 `KEY 1` 或 `KEY 2` - -2. 前往 [Azure AI Foundry](https://ai.azure.com/) 并部署一个模型。 - - :::note - 部署名称必须与模型名称一致,OpenCode 才能正常工作。 - ::: - -3. 执行 `/connect` 命令并搜索 **Azure Cognitive Services**。 - - ```txt - /connect - ``` - -4. 输入你的 API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. 将资源名称设置为环境变量: - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - - 或者添加到你的 bash 配置文件中: - - ```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX - ``` - -6. 执行 `/models` 命令选择你已部署的模型。 - - ```txt - /models - ``` - ---- - -### Baseten - -1. 前往 [Baseten](https://app.baseten.co/),创建账户并生成 API 密钥。 - -2. 执行 `/connect` 命令并搜索 **Baseten**。 - - ```txt - /connect - ``` - -3. 输入你的 Baseten API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型。 - - ```txt - /models - ``` - ---- - -### Cerebras - -1. 前往 [Cerebras 控制台](https://inference.cerebras.ai/),创建账户并生成 API 密钥。 - -2. 执行 `/connect` 命令并搜索 **Cerebras**。 - - ```txt - /connect - ``` - -3. 输入你的 Cerebras API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _Qwen 3 Coder 480B_。 - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -Cloudflare AI Gateway 允许你通过统一端点访问来自 OpenAI、Anthropic、Workers AI 等提供商的模型。通过 [Unified Billing](https://developers.cloudflare.com/ai-gateway/features/unified-billing/),你无需为每个提供商单独准备 API 密钥。 - -1. 前往 [Cloudflare 仪表盘](https://dash.cloudflare.com/),导航到 **AI** > **AI Gateway**,创建一个新的网关。 - -2. 将你的 Account ID 和 Gateway ID 设置为环境变量。 - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. 执行 `/connect` 命令并搜索 **Cloudflare AI Gateway**。 - - ```txt - /connect - ``` - -4. 输入你的 Cloudflare API Token。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - - 或者将其设置为环境变量。 - - ```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token - ``` - -5. 执行 `/models` 命令选择模型。 - - ```txt - /models - ``` - - 你也可以通过 OpenCode 配置添加模型。 - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } - } - ``` - ---- - -### Cortecs - -1. 前往 [Cortecs 控制台](https://cortecs.ai/),创建账户并生成 API 密钥。 - -2. 执行 `/connect` 命令并搜索 **Cortecs**。 - - ```txt - /connect - ``` - -3. 输入你的 Cortecs API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _Kimi K2 Instruct_。 - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. 前往 [DeepSeek 控制台](https://platform.deepseek.com/),创建账户并点击 **Create new API key**。 - -2. 执行 `/connect` 命令并搜索 **DeepSeek**。 - - ```txt - /connect - ``` - -3. 输入你的 DeepSeek API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择 DeepSeek 模型,例如 _DeepSeek V4 Pro_。 - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. 前往 [Deep Infra 仪表盘](https://deepinfra.com/dash),创建账户并生成 API 密钥。 - -2. 执行 `/connect` 命令并搜索 **Deep Infra**。 - - ```txt - /connect - ``` - -3. 输入你的 Deep Infra API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型。 - - ```txt - /models - ``` - ---- - -### FrogBot - -1. 前往 [FrogBot 仪表盘](https://app.frogbot.ai/signup),创建账户并生成 API 密钥。 - -2. 执行 `/connect` 命令并搜索 **FrogBot**。 - - ```txt - /connect - ``` - -3. 输入你的 FrogBot API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型。 - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. 前往 [Fireworks AI 控制台](https://app.fireworks.ai/),创建账户并点击 **Create API Key**。 - -2. 执行 `/connect` 命令并搜索 **Fireworks AI**。 - - ```txt - /connect - ``` - -3. 输入你的 Fireworks AI API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _Kimi K2 Instruct_。 - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo 通过 GitLab 的 Anthropic 代理提供具有原生工具调用能力的 AI 驱动的代理聊天。 - -1. 执行 `/connect` 命令并选择 GitLab。 - - ```txt - /connect - ``` - -2. 选择你的身份验证方式: - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### 使用 OAuth(推荐) - - 选择 **OAuth**,浏览器会自动打开进行授权。 - - #### 使用个人访问令牌 - 1. 前往 [GitLab 用户设置 > Access Tokens](https://gitlab.com/-/user_settings/personal_access_tokens) - 2. 点击 **Add new token** - 3. 名称填写 `OpenCode`,范围选择 `api` - 4. 复制令牌(以 `glpat-` 开头) - 5. 在终端中输入该令牌 - -3. 执行 `/models` 命令查看可用模型。 - - ```txt - /models - ``` - - 提供三个基于 Claude 的模型: - - **duo-chat-haiku-4-5**(默认)- 快速响应,适合简单任务 - - **duo-chat-sonnet-4-5** - 性能均衡,适合大多数工作流 - - **duo-chat-opus-4-5** - 最强大,适合复杂分析 - -:::note -你也可以通过指定 `GITLAB_TOKEN` 环境变量来避免将令牌存储在 OpenCode 的认证存储中。 -::: - -##### 自托管 GitLab - -:::note[合规说明] -OpenCode 会使用一个小模型来执行部分 AI 任务,例如生成会话标题。默认情况下使用由 Zen 托管的 gpt-5-nano。如果你需要让 OpenCode 仅使用你自己的 GitLab 托管实例,请在 `opencode.json` 文件中添加以下内容。同时建议禁用会话共享。 - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -对于自托管 GitLab 实例: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -如果你的实例运行了自定义 AI Gateway: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -或者添加到你的 bash 配置文件中: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -你的 GitLab 管理员必须启用以下功能: - -1. 为用户、群组或实例启用 [Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) -2. 功能标志(通过 Rails 控制台): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### 自托管实例的 OAuth - -要在自托管实例上使用 OAuth,你需要创建一个新应用(设置 → 应用),回调 URL 设置为 `http://127.0.0.1:8080/callback`,并选择以下范围: - -- api(代表你访问 API) -- read_user(读取你的个人信息) -- read_repository(允许对仓库进行只读访问) - -然后将应用 ID 导出为环境变量: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -更多文档请参阅 [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth) 主页。 - -##### 配置 - -通过 `opencode.json` 进行自定义配置: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### GitLab API 工具(可选,但强烈推荐) - -要访问 GitLab 工具(合并请求、Issue、流水线、CI/CD 等): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -该插件提供全面的 GitLab 仓库管理功能,包括 MR 审查、Issue 跟踪、流水线监控等。 - ---- - -### GitHub Copilot - -要在 OpenCode 中使用你的 GitHub Copilot 订阅: - -:::note -部分模型可能需要 [Pro+ 订阅](https://github.com/features/copilot/plans)才能使用。 -::: - -1. 执行 `/connect` 命令并搜索 GitHub Copilot。 - - ```txt - /connect - ``` - -2. 前往 [github.com/login/device](https://github.com/login/device) 并输入验证码。 - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - └ Waiting for authorization... - ``` - -3. 现在执行 `/models` 命令选择你想要的模型。 - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -要在 OpenCode 中使用 Google Vertex AI: - -1. 前往 Google Cloud Console 中的**模型花园**,查看你所在区域可用的模型。 - - :::note - 你需要一个启用了 Vertex AI API 的 Google Cloud 项目。 - ::: - -2. 设置所需的环境变量: - - `GOOGLE_CLOUD_PROJECT`:你的 Google Cloud 项目 ID - - `VERTEX_LOCATION`(可选):Vertex AI 的区域(默认为 `global`) - - 身份验证(选择其一): - - `GOOGLE_APPLICATION_CREDENTIALS`:服务账户 JSON 密钥文件的路径 - - 使用 gcloud CLI 进行身份验证:`gcloud auth application-default login` - - 在运行 opencode 时设置: - - ```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode - ``` - - 或者添加到你的 bash 配置文件中: - - ```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global - ``` - -:::tip -`global` 区域可以提高可用性并减少错误,且不会产生额外费用。如果有数据驻留需求,请使用区域端点(例如 `us-central1`)。[了解更多](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. 执行 `/models` 命令选择你想要的模型。 - - ```txt - /models - ``` - ---- - -### Groq - -1. 前往 [Groq 控制台](https://console.groq.com/),点击 **Create API Key** 并复制密钥。 - -2. 执行 `/connect` 命令并搜索 Groq。 - - ```txt - /connect - ``` - -3. 输入该提供商的 API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择你想要的模型。 - - ```txt - /models - ``` - ---- - -### Hugging Face - -[Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers) 提供对由 17+ 提供商支持的开放模型的访问。 - -1. 前往 [Hugging Face 设置](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained),创建一个具有调用 Inference Providers 权限的令牌。 - -2. 执行 `/connect` 命令并搜索 **Hugging Face**。 - - ```txt - /connect - ``` - -3. 输入你的 Hugging Face 令牌。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _Kimi-K2-Instruct_ 或 _GLM-4.6_。 - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) 是一个 LLM 可观测性平台,为你的 AI 应用提供日志记录、监控和分析功能。Helicone AI Gateway 会根据模型自动将请求路由到对应的提供商。 - -1. 前往 [Helicone](https://helicone.ai),创建账户并在仪表盘中生成 API 密钥。 - -2. 执行 `/connect` 命令并搜索 **Helicone**。 - - ```txt - /connect - ``` - -3. 输入你的 Helicone API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型。 - - ```txt - /models - ``` - -如需了解更多提供商以及缓存、速率限制等高级功能,请查阅 [Helicone 文档](https://docs.helicone.ai)。 - -#### 可选配置 - -如果 Helicone 的某些功能或模型未通过 OpenCode 自动配置,你随时可以手动配置。 - -[Helicone 模型目录](https://helicone.ai/models)中可以找到你需要添加的模型 ID。 - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### 自定义请求头 - -Helicone 支持用于缓存、用户跟踪和会话管理等功能的自定义请求头。使用 `options.headers` 将它们添加到提供商配置中: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### 会话跟踪 - -Helicone 的 [Sessions](https://docs.helicone.ai/features/sessions) 功能允许你将相关的 LLM 请求归为一组。使用 [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) 插件可以自动将每个 OpenCode 对话记录为 Helicone 中的一个会话。 - -```bash -npm install -g opencode-helicone-session -``` - -将其添加到配置中。 - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -该插件会在你的请求中注入 `Helicone-Session-Id` 和 `Helicone-Session-Name` 请求头。在 Helicone 的 Sessions 页面中,你可以看到每个 OpenCode 对话都作为独立的会话列出。 - -##### 常用 Helicone 请求头 - -| 请求头 | 描述 | -| -------------------------- | ------------------------------------------------------ | -| `Helicone-Cache-Enabled` | 启用响应缓存(`true`/`false`) | -| `Helicone-User-Id` | 按用户跟踪指标 | -| `Helicone-Property-[Name]` | 添加自定义属性(例如 `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | 将请求与提示词版本关联 | - -有关所有可用请求头,请参阅 [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory)。 - ---- - -### llama.cpp - -你可以通过 [llama.cpp](https://github.com/ggml-org/llama.cpp) 的 llama-server 工具配置 OpenCode 使用本地模型。 - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -在这个示例中: - -- `llama.cpp` 是自定义的提供商 ID,可以是任意字符串。 -- `npm` 指定该提供商使用的包。这里使用 `@ai-sdk/openai-compatible` 来兼容任何 OpenAI 兼容的 API。 -- `name` 是该提供商在 UI 中显示的名称。 -- `options.baseURL` 是本地服务器的端点地址。 -- `models` 是模型 ID 到其配置的映射。模型名称会显示在模型选择列表中。 - ---- - -### IO.NET - -IO.NET 提供 17 个针对不同用例优化的模型: - -1. 前往 [IO.NET 控制台](https://ai.io.net/),创建账户并生成 API 密钥。 - -2. 执行 `/connect` 命令并搜索 **IO.NET**。 - - ```txt - /connect - ``` - -3. 输入你的 IO.NET API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型。 - - ```txt - /models - ``` - ---- - -### LM Studio - -你可以通过 LM Studio 配置 OpenCode 使用本地模型。 - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -在这个示例中: - -- `lmstudio` 是自定义的提供商 ID,可以是任意字符串。 -- `npm` 指定该提供商使用的包。这里使用 `@ai-sdk/openai-compatible` 来兼容任何 OpenAI 兼容的 API。 -- `name` 是该提供商在 UI 中显示的名称。 -- `options.baseURL` 是本地服务器的端点地址。 -- `models` 是模型 ID 到其配置的映射。模型名称会显示在模型选择列表中。 - ---- - -### Moonshot AI - -要使用 Moonshot AI 的 Kimi K2: - -1. 前往 [Moonshot AI 控制台](https://platform.moonshot.ai/console),创建账户并点击 **Create API key**。 - -2. 执行 `/connect` 命令并搜索 **Moonshot AI**。 - - ```txt - /connect - ``` - -3. 输入你的 Moonshot API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择 _Kimi K2_。 - - ```txt - /models - ``` - ---- - -### MiniMax - -1. 前往 [MiniMax API 控制台](https://platform.minimax.io/login),创建账户并生成 API 密钥。 - -2. 执行 `/connect` 命令并搜索 **MiniMax**。 - - ```txt - /connect - ``` - -3. 输入你的 MiniMax API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _M2.1_。 - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. 前往 [Nebius Token Factory 控制台](https://tokenfactory.nebius.com/),创建账户并点击 **Add Key**。 - -2. 执行 `/connect` 命令并搜索 **Nebius Token Factory**。 - - ```txt - /connect - ``` - -3. 输入你的 Nebius Token Factory API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _Kimi K2 Instruct_。 - - ```txt - /models - ``` - ---- - -### Ollama - -你可以通过 Ollama 配置 OpenCode 使用本地模型。 - -:::tip -Ollama 可以自动为 OpenCode 进行配置。详见 [Ollama 集成文档](https://docs.ollama.com/integrations/opencode)。 -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -在这个示例中: - -- `ollama` 是自定义的提供商 ID,可以是任意字符串。 -- `npm` 指定该提供商使用的包。这里使用 `@ai-sdk/openai-compatible` 来兼容任何 OpenAI 兼容的 API。 -- `name` 是该提供商在 UI 中显示的名称。 -- `options.baseURL` 是本地服务器的端点地址。 -- `models` 是模型 ID 到其配置的映射。模型名称会显示在模型选择列表中。 - -:::tip -如果工具调用不工作,请尝试增大 Ollama 中的 `num_ctx` 值。建议从 16k - 32k 左右开始。 -::: - ---- - -### Ollama Cloud - -要在 OpenCode 中使用 Ollama Cloud: - -1. 前往 [https://ollama.com/](https://ollama.com/) 登录或创建账户。 - -2. 导航到 **Settings** > **Keys**,点击 **Add API Key** 生成新的 API 密钥。 - -3. 复制 API 密钥以便在 OpenCode 中使用。 - -4. 执行 `/connect` 命令并搜索 **Ollama Cloud**。 - - ```txt - /connect - ``` - -5. 输入你的 Ollama Cloud API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **重要**:在 OpenCode 中使用云端模型之前,必须先将模型信息拉取到本地: - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. 执行 `/models` 命令选择你的 Ollama Cloud 模型。 - - ```txt - /models - ``` - ---- - -### OpenAI - -我们建议注册 [ChatGPT Plus 或 Pro](https://chatgpt.com/pricing)。 - -1. 注册完成后,执行 `/connect` 命令并选择 OpenAI。 - - ```txt - /connect - ``` - -2. 你可以选择 **ChatGPT Plus/Pro** 选项,浏览器会自动打开并要求你进行身份验证。 - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. 现在使用 `/models` 命令即可看到所有 OpenAI 模型。 - - ```txt - /models - ``` - -##### 使用 API 密钥 - -如果你已经有 API 密钥,可以选择 **Manually enter API Key** 并将其粘贴到终端中。 - ---- - -### OpenCode Zen - -OpenCode Zen 是由 OpenCode 团队提供的经过测试和验证的模型列表。[了解更多](/docs/zen)。 - -1. 登录 **OpenCode Zen** 并点击 **Create API Key**。 - -2. 执行 `/connect` 命令并搜索 **OpenCode Zen**。 - - ```txt - /connect - ``` - -3. 输入你的 OpenCode API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _Qwen 3 Coder 480B_。 - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. 前往 [OpenRouter 仪表盘](https://openrouter.ai/settings/keys),点击 **Create API Key** 并复制密钥。 - -2. 执行 `/connect` 命令并搜索 OpenRouter。 - - ```txt - /connect - ``` - -3. 输入该提供商的 API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 默认已预加载了许多 OpenRouter 模型,执行 `/models` 命令选择你想要的模型。 - - ```txt - /models - ``` - - 你也可以通过 OpenCode 配置添加更多模型。 - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. 你还可以通过 OpenCode 配置自定义模型。以下是指定提供商的示例: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI Core 通过统一平台提供对来自 OpenAI、Anthropic、Google、Amazon、Meta、Mistral 和 AI21 的 40+ 模型的访问。 - -1. 前往 [SAP BTP Cockpit](https://account.hana.ondemand.com/),导航到你的 SAP AI Core 服务实例,并创建服务密钥。 - - :::tip - 服务密钥是一个包含 `clientid`、`clientsecret`、`url` 和 `serviceurls.AI_API_URL` 的 JSON 对象。你可以在 BTP Cockpit 的 **Services** > **Instances and Subscriptions** 下找到你的 AI Core 实例。 - ::: - -2. 执行 `/connect` 命令并搜索 **SAP AI Core**。 - - ```txt - /connect - ``` - -3. 输入你的服务密钥 JSON。 - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - 或者设置 `AICORE_SERVICE_KEY` 环境变量: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - 或者添加到你的 bash 配置文件中: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. 可选:设置部署 ID 和资源组: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - 这些设置是可选的,应根据你的 SAP AI Core 配置进行设置。 - ::: - -5. 执行 `/models` 命令从 40+ 个可用模型中进行选择。 - - ```txt - /models - ``` - ---- - -### STACKIT - -STACKIT AI Model Serving 提供完全托管的主权托管环境,专注于 Llama、Mistral 和 Qwen 等大语言模型,在欧洲基础设施上实现最大程度的数据主权。 - -1. 前往 [STACKIT Portal](https://portal.stackit.cloud),导航到 **AI Model Serving**,为你的项目创建认证令牌。 - - :::tip - 你需要先拥有 STACKIT 客户账户、用户账户和项目,才能创建认证令牌。 - ::: - -2. 执行 `/connect` 命令并搜索 **STACKIT**。 - - ```txt - /connect - ``` - -3. 输入你的 STACKIT AI Model Serving 认证令牌。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _Qwen3-VL 235B_ 或 _Llama 3.3 70B_。 - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. 前往 [OVHcloud 管理面板](https://ovh.com/manager)。导航到 `Public Cloud` 部分,`AI & Machine Learning` > `AI Endpoints`,在 `API Keys` 标签页中点击 **Create a new API key**。 - -2. 执行 `/connect` 命令并搜索 **OVHcloud AI Endpoints**。 - - ```txt - /connect - ``` - -3. 输入你的 OVHcloud AI Endpoints API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _gpt-oss-120b_。 - - ```txt - /models - ``` - ---- - -### Scaleway - -要在 OpenCode 中使用 [Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/): - -1. 前往 [Scaleway Console IAM 设置](https://console.scaleway.com/iam/api-keys)生成新的 API 密钥。 - -2. 执行 `/connect` 命令并搜索 **Scaleway**。 - - ```txt - /connect - ``` - -3. 输入你的 Scaleway API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _devstral-2-123b-instruct-2512_ 或 _gpt-oss-120b_。 - - ```txt - /models - ``` - ---- - -### Together AI - -1. 前往 [Together AI 控制台](https://api.together.ai),创建账户并点击 **Add Key**。 - -2. 执行 `/connect` 命令并搜索 **Together AI**。 - - ```txt - /connect - ``` - -3. 输入你的 Together AI API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _Kimi K2 Instruct_。 - - ```txt - /models - ``` - ---- - -### Venice AI - -1. 前往 [Venice AI 控制台](https://venice.ai),创建账户并生成 API 密钥。 - -2. 执行 `/connect` 命令并搜索 **Venice AI**。 - - ```txt - /connect - ``` - -3. 输入你的 Venice AI API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _Llama 3.3 70B_。 - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -Vercel AI Gateway 允许你通过统一端点访问来自 OpenAI、Anthropic、Google、xAI 等提供商的模型。模型按原价提供,不额外加价。 - -1. 前往 [Vercel 仪表盘](https://vercel.com/),导航到 **AI Gateway** 标签页,点击 **API keys** 创建新的 API 密钥。 - -2. 执行 `/connect` 命令并搜索 **Vercel AI Gateway**。 - - ```txt - /connect - ``` - -3. 输入你的 Vercel AI Gateway API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型。 - - ```txt - /models - ``` - -你也可以通过 OpenCode 配置自定义模型。以下是指定提供商路由顺序的示例。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -一些常用的路由选项: - -| 选项 | 描述 | -| ------------------- | -------------------------------- | -| `order` | 提供商尝试顺序 | -| `only` | 限制为特定提供商 | -| `zeroDataRetention` | 仅使用具有零数据留存策略的提供商 | - ---- - -### xAI - -1. 前往 [xAI 控制台](https://console.x.ai/),创建账户并生成 API 密钥。 - -2. 执行 `/connect` 命令并搜索 **xAI**。 - - ```txt - /connect - ``` - -3. 输入你的 xAI API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _Grok Beta_。 - - ```txt - /models - ``` - ---- - -### Z.AI - -1. 前往 [Z.AI API 控制台](https://z.ai/manage-apikey/apikey-list),创建账户并点击 **Create a new API key**。 - -2. 执行 `/connect` 命令并搜索 **Z.AI**。 - - ```txt - /connect - ``` - - 如果你订阅了 **GLM Coding Plan**,请选择 **Z.AI Coding Plan**。 - -3. 输入你的 Z.AI API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 执行 `/models` 命令选择模型,例如 _GLM-4.7_。 - - ```txt - /models - ``` - ---- - -### ZenMux - -1. 前往 [ZenMux 仪表盘](https://zenmux.ai/settings/keys),点击 **Create API Key** 并复制密钥。 - -2. 执行 `/connect` 命令并搜索 ZenMux。 - - ```txt - /connect - ``` - -3. 输入该提供商的 API 密钥。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 默认已预加载了许多 ZenMux 模型,执行 `/models` 命令选择你想要的模型。 - - ```txt - /models - ``` - - 你也可以通过 OpenCode 配置添加更多模型。 - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## 自定义提供商 - -要添加 `/connect` 命令中未列出的任何 **OpenAI 兼容**提供商: - -:::tip -你可以在 OpenCode 中使用任何 OpenAI 兼容的提供商。大多数现代 AI 提供商都提供 OpenAI 兼容的 API。 -::: - -1. 执行 `/connect` 命令,向下滚动到 **Other**。 - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. 输入该提供商的唯一 ID。 - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - 请选择一个容易记住的 ID,你将在配置文件中使用它。 - ::: - -3. 输入该提供商的 API 密钥。 - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. 在项目目录中创建或更新 `opencode.json` 文件: - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - - 以下是配置选项说明: - - **npm**:要使用的 AI SDK 包,对于 OpenAI 兼容的提供商使用 `@ai-sdk/openai-compatible`(适用于 `/v1/chat/completions`)。如果你的提供商/模型走 `/v1/responses`,请使用 `@ai-sdk/openai`。 - - **name**:在 UI 中显示的名称。 - - **models**:可用模型。 - - **options.baseURL**:API 端点 URL。 - - **options.apiKey**:可选,如果不使用 auth 认证,可直接设置 API 密钥。 - - **options.headers**:可选,设置自定义请求头。 - - 更多高级选项请参见下面的示例。 - -5. 执行 `/models` 命令,你自定义的提供商和模型将出现在选择列表中。 - ---- - -##### 示例 - -以下是设置 `apiKey`、`headers` 和模型 `limit` 选项的示例。 - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -配置详情: - -- **apiKey**:使用 `env` 变量语法设置,[了解更多](/docs/config#env-vars)。 -- **headers**:随每个请求发送的自定义请求头。 -- **limit.context**:模型接受的最大输入 Token 数。 -- **limit.output**:模型可生成的最大 Token 数。 - -`limit` 字段让 OpenCode 了解你还剩余多少上下文空间。标准提供商会自动从 models.dev 拉取这些信息。 - ---- - -## 故障排除 - -如果你在配置提供商时遇到问题,请检查以下几点: - -1. **检查认证设置**:运行 `opencode auth list` 查看该提供商的凭据是否已添加到配置中。 - - 这不适用于 Amazon Bedrock 等依赖环境变量进行认证的提供商。 - -2. 对于自定义提供商,请检查 OpenCode 配置并确认: - - `/connect` 命令中使用的提供商 ID 与 OpenCode 配置中的 ID 一致。 - - 使用了正确的 npm 包。例如,Cerebras 应使用 `@ai-sdk/cerebras`。对于其他所有 OpenAI 兼容的提供商,使用 `@ai-sdk/openai-compatible`(`/v1/chat/completions`);如果模型走 `/v1/responses`,请使用 `@ai-sdk/openai`。同一 provider 混用时,可在模型下设置 `provider.npm` 覆盖默认值。 - - `options.baseURL` 字段中的 API 端点地址正确。 diff --git a/packages/web/src/content/docs/zh-cn/rules.mdx b/packages/web/src/content/docs/zh-cn/rules.mdx deleted file mode 100644 index 9ce5c53de8..0000000000 --- a/packages/web/src/content/docs/zh-cn/rules.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: 规则 -description: 为 opencode 设置自定义指令。 ---- - -您可以通过创建 `AGENTS.md` 文件来为 opencode 提供自定义指令。这类似于 Cursor 的规则功能。该文件包含的指令会被纳入 LLM 的上下文中,以便针对您的特定项目自定义其行为。 - ---- - -## 初始化 - -要创建新的 `AGENTS.md` 文件,您可以在 opencode 中运行 `/init` 命令。 - -:::tip -您应该将项目的 `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 会话。 - -由于该文件不会被提交到 Git 或与团队共享,我们建议用它来指定 LLM 应遵循的个人规则。 - -### 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 - -推荐的方式是使用 `opencode.json` 中的 `instructions` 字段: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"] -} -``` - -### 在 AGENTS.md 中手动指定 - -您可以在 `AGENTS.md` 中提供明确的指令,教 opencode 读取外部文件。以下是一个实际示例: - -```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. -``` - -这种方式允许您: - -- 创建模块化、可复用的规则文件 -- 通过符号链接或 Git 子模块在项目之间共享规则 -- 保持 AGENTS.md 简洁,同时引用详细的指南 -- 确保 opencode 仅在特定任务需要时才加载文件 - -:::tip -对于 monorepo 或具有共享标准的项目,使用 `opencode.json` 配合 glob 模式(如 `packages/*/AGENTS.md`)比手动指定指令更易于维护。 -::: diff --git a/packages/web/src/content/docs/zh-cn/sdk.mdx b/packages/web/src/content/docs/zh-cn/sdk.mdx deleted file mode 100644 index 121e423d10..0000000000 --- a/packages/web/src/content/docs/zh-cn/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: SDK -description: opencode 服务器的类型安全 JS 客户端。 ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -opencode JS/TS SDK 提供了一个类型安全的客户端,用于与服务器进行交互。 -你可以用它来构建集成方案,并以编程方式控制 opencode。 - -[了解更多](/docs/server)关于服务器的工作原理。如需示例,请查看社区构建的[项目](/docs/ecosystem#projects)。 - ---- - -## 安装 - -从 npm 安装 SDK: - -```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 包含所有 API 类型的 TypeScript 定义。你可以直接导入它们: - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -所有类型均根据服务器的 OpenAPI 规范生成,可在类型文件中查看。 - ---- - -## 错误处理 - -SDK 可能会抛出错误,你可以捕获并处理这些错误: - -```typescript -try { - await client.session.get({ path: { id: "invalid-id" } }) -} catch (error) { - console.error("Failed to get session:", (error as Error).message) -} -``` - ---- - -## 结构化输出 - -你可以通过指定带有 JSON Schema 的 `format` 来请求模型返回结构化的 JSON 输出。模型会使用 `StructuredOutput` 工具返回符合你 Schema 的经过验证的 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` | 返回符合所提供 Schema 的经过验证的 JSON | - -### JSON Schema 格式 - -使用 `type: 'json_schema'` 时,需提供以下字段: - -| 字段 | 类型 | 描述 | -| ------------ | --------------- | ------------------------------------- | -| `type` | `'json_schema'` | 必填。指定 JSON Schema 模式 | -| `schema` | `object` | 必填。定义输出结构的 JSON Schema 对象 | -| `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. **在 Schema 属性中提供清晰的描述**,帮助模型理解需要提取的数据 -2. **使用 `required`** 指定哪些字段必须存在 -3. **保持 Schema 简洁** — 复杂的嵌套 Schema 可能会让模型更难正确填充 -4. **设置合适的 `retryCount`** — 对于复杂 Schema 可增加重试次数,对于简单 Schema 可减少 - ---- - -## API - -SDK 通过类型安全的客户端暴露所有服务器 API。 - ---- - -### 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()` | 列出所有可用的代理 | Agent[] | - ---- - -#### 示例 - -```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()` | 列出所有项目 | Project[] | -| `project.current()` | 获取当前项目 | Project | - ---- - -#### 示例 - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### Path - -| 方法 | 描述 | 响应 | -| ------------ | ------------ | ---------------------------------------- | -| `path.get()` | 获取当前路径 | Path | - ---- - -#### 示例 - -```javascript -// Get current path information -const pathInfo = await client.path.get() -``` - ---- - -### Config - -| 方法 | 描述 | 响应 | -| -------------------- | -------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | 获取配置信息 | Config | -| `config.providers()` | 列出提供商和默认模型 | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### 示例 - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### Sessions - -| 方法 | 描述 | 备注 | -| ---------------------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `session.list()` | 列出会话 | 返回 Session[] | -| `session.get({ path })` | 获取会话 | 返回 Session | -| `session.children({ path })` | 列出子会话 | 返回 Session[] | -| `session.create({ body })` | 创建会话 | 返回 Session | -| `session.delete({ path })` | 删除会话 | 返回 `boolean` | -| `session.update({ path, body })` | 更新会话属性 | 返回 Session | -| `session.init({ path, body })` | 分析应用并创建 `AGENTS.md` | 返回 `boolean` | -| `session.abort({ path })` | 中止正在运行的会话 | 返回 `boolean` | -| `session.share({ path })` | 分享会话 | 返回 Session | -| `session.unshare({ path })` | 取消分享会话 | 返回 Session | -| `session.summarize({ path, body })` | 总结会话 | 返回 `boolean` | -| `session.messages({ path })` | 列出会话中的消息 | 返回 `{ info: `Message`, parts: `Part[]`}[]` | -| `session.message({ path })` | 获取消息详情 | 返回 `{ info: `Message`, parts: `Part[]`}` | -| `session.prompt({ path, body })` | 发送提示词消息 | `body.noReply: true` 返回 UserMessage(仅注入上下文)。默认返回带有 AI 响应的 AssistantMessage。支持通过 `body.outputFormat` 使用[结构化输出](#结构化输出) | -| `session.command({ path, body })` | 向会话发送命令 | 返回 `{ info: `AssistantMessage`, parts: `Part[]`}` | -| `session.shell({ path, body })` | 执行 shell 命令 | 返回 AssistantMessage | -| `session.revert({ path, body })` | 撤回消息 | 返回 Session | -| `session.unrevert({ path })` | 恢复已撤回的消息 | 返回 Session | -| `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." }], - }, -}) -``` - ---- - -### Files - -| 方法 | 描述 | 响应 | -| ------------------------- | -------------------- | ----------------------------------------------------------------------------------- | -| `find.text({ query })` | 搜索文件中的文本 | 包含 `path`、`lines`、`line_number`、`absolute_offset`、`submatches` 的匹配对象数组 | -| `find.files({ query })` | 按名称查找文件和目录 | `string[]`(路径) | -| `find.symbols({ query })` | 查找工作区符号 | Symbol[] | -| `file.read({ query })` | 读取文件 | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | 获取已跟踪文件的状态 | File[] | - -`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.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" }, -}) -``` - ---- - -### Events - -| 方法 | 描述 | 响应 | -| ------------------- | ------------------ | ------------------ | -| `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) -} -``` diff --git a/packages/web/src/content/docs/zh-cn/server.mdx b/packages/web/src/content/docs/zh-cn/server.mdx deleted file mode 100644 index d28342ecc6..0000000000 --- a/packages/web/src/content/docs/zh-cn/server.mdx +++ /dev/null @@ -1,284 +0,0 @@ ---- -title: 服务器 -description: 通过 HTTP 与 opencode 服务器交互。 ---- - -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 ] [--hostname ] [--cors ] -``` - -#### 选项 - -| 标志 | 描述 | 默认值 | -| --------------- | --------------------- | ---------------- | -| `--port` | 监听端口 | `4096` | -| `--hostname` | 监听的主机名 | `127.0.0.1` | -| `--mdns` | 启用 mDNS 发现 | `false` | -| `--mdns-domain` | mDNS 服务的自定义域名 | `opencode.local` | -| `--cors` | 额外允许的浏览器来源 | `[]` | - -`--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` 时,它会启动一个 TUI 和一个服务器。TUI 是与服务器通信的客户端。服务器暴露一个 OpenAPI 3.1 规范端点。该端点也用于生成 [SDK](/docs/sdk)。 - -:::tip -使用 opencode 服务器以编程方式与 opencode 交互。 -::: - -这种架构让 opencode 支持多个客户端,并允许你以编程方式与 opencode 交互。 - -你可以运行 `opencode serve` 来启动一个独立的服务器。如果你已经在运行 opencode TUI,`opencode serve` 会启动一个新的服务器。 - ---- - -#### 连接到现有服务器 - -当你启动 TUI 时,它会随机分配端口和主机名。你也可以传入 `--hostname` 和 `--port` [标志](/docs/cli),然后用它来连接对应的服务器。 - -[`/tui`](#tui) 端点可用于通过服务器驱动 TUI。例如,你可以预填充或运行一个提示词。此方式被 OpenCode [IDE](/docs/ide) 插件所使用。 - ---- - -## 规范 - -服务器发布了一个 OpenAPI 3.1 规范,可在以下地址查看: - -``` -http://:/doc -``` - -例如,`http://localhost:4096/doc`。使用该规范可以生成客户端或检查请求和响应类型,也可以在 Swagger 浏览器中查看。 - ---- - -## API - -opencode 服务器暴露以下 API。 - ---- - -### 全局 - -| 方法 | 路径 | 描述 | 响应 | -| ----- | ---------------- | ------------------------ | ------------------------------------ | -| `GET` | `/global/health` | 获取服务器健康状态和版本 | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | 获取全局事件(SSE 流) | 事件流 | - ---- - -### 项目 - -| 方法 | 路径 | 描述 | 响应 | -| ----- | ------------------ | ------------ | --------------------------------------------- | -| `GET` | `/project` | 列出所有项目 | Project[] | -| `GET` | `/project/current` | 获取当前项目 | Project | - ---- - -### 路径和 VCS - -| 方法 | 路径 | 描述 | 响应 | -| ----- | ------- | ----------------------- | ------------------------------------------- | -| `GET` | `/path` | 获取当前路径 | Path | -| `GET` | `/vcs` | 获取当前项目的 VCS 信息 | VcsInfo | - ---- - -### 实例 - -| 方法 | 路径 | 描述 | 响应 | -| ------ | ------------------- | ------------ | --------- | -| `POST` | `/instance/dispose` | 销毁当前实例 | `boolean` | - ---- - -### 配置 - -| 方法 | 路径 | 描述 | 响应 | -| ------- | ------------------- | -------------------- | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | 获取配置信息 | Config | -| `PATCH` | `/config` | 更新配置 | Config | -| `GET` | `/config/providers` | 列出提供商和默认模型 | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -### 提供商 - -| 方法 | 路径 | 描述 | 响应 | -| ------ | -------------------------------- | ----------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | 列出所有提供商 | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | 获取提供商认证方式 | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | 使用 OAuth 授权提供商 | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | 处理提供商的 OAuth 回调 | `boolean` | - ---- - -### 会话 - -| 方法 | 路径 | 描述 | 说明 | -| -------- | ---------------------------------------- | -------------------------- | --------------------------------------------------------------------------------- | -| `GET` | `/session` | 列出所有会话 | 返回 Session[] | -| `POST` | `/session` | 创建新会话 | 请求体:`{ parentID?, title? }`,返回 Session | -| `GET` | `/session/status` | 获取所有会话的状态 | 返回 `{ [sessionID: string]: `SessionStatus` }` | -| `GET` | `/session/:id` | 获取会话详情 | 返回 Session | -| `DELETE` | `/session/:id` | 删除会话及其所有数据 | 返回 `boolean` | -| `PATCH` | `/session/:id` | 更新会话属性 | 请求体:`{ title? }`,返回 Session | -| `GET` | `/session/:id/children` | 获取会话的子会话 | 返回 Session[] | -| `GET` | `/session/:id/todo` | 获取会话的待办事项列表 | 返回 Todo[] | -| `POST` | `/session/:id/init` | 分析应用并创建 `AGENTS.md` | 请求体:`{ messageID, providerID, modelID }`,返回 `boolean` | -| `POST` | `/session/:id/fork` | 在某条消息处分叉现有会话 | 请求体:`{ messageID? }`,返回 Session | -| `POST` | `/session/:id/abort` | 中止正在运行的会话 | 返回 `boolean` | -| `POST` | `/session/:id/share` | 分享会话 | 返回 Session | -| `DELETE` | `/session/:id/share` | 取消分享会话 | 返回 Session | -| `GET` | `/session/:id/diff` | 获取本次会话的差异 | 查询参数:`messageID?`,返回 FileDiff[] | -| `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: `Message`, parts: `Part[]`}[]` | -| `POST` | `/session/:id/message` | 发送消息并等待响应 | 请求体:`{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`,返回 `{ info: `Message`, parts: `Part[]`}` | -| `GET` | `/session/:id/message/:messageID` | 获取消息详情 | 返回 `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/prompt_async` | 异步发送消息(不等待响应) | 请求体:与 `/session/:id/message` 相同,返回 `204 No Content` | -| `POST` | `/session/:id/command` | 执行斜杠命令 | 请求体:`{ messageID?, agent?, model?, command, arguments }`,返回 `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/shell` | 运行 shell 命令 | 请求体:`{ agent, model?, command }`,返回 `{ info: `Message`, parts: `Part[]`}` | - ---- - -### 命令 - -| 方法 | 路径 | 描述 | 响应 | -| ----- | ---------- | ------------ | --------------------------------------------- | -| `GET` | `/command` | 列出所有命令 | Command[] | - ---- - -### 文件 - -| 方法 | 路径 | 描述 | 响应 | -| ----- | ------------------------ | -------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | 在文件中搜索文本 | 包含 `path`、`lines`、`line_number`、`absolute_offset`、`submatches` 的匹配对象数组 | -| `GET` | `/find/file?query=` | 按名称查找文件和目录 | `string[]`(路径) | -| `GET` | `/find/symbol?query=` | 查找工作区符号 | Symbol[] | -| `GET` | `/file?path=` | 列出文件和目录 | FileNode[] | -| `GET` | `/file/content?path=

` | 读取文件 | FileContent | -| `GET` | `/file/status` | 获取已跟踪文件的状态 | File[] | - -#### `/find/file` 查询参数 - -- `query`(必需)— 搜索字符串(模糊匹配) -- `type`(可选)— 将结果限制为 `"file"` 或 `"directory"` -- `directory`(可选)— 覆盖搜索的项目根目录 -- `limit`(可选)— 最大结果数(1–200) -- `dirs`(可选)— 旧版标志(`"false"` 仅返回文件) - ---- - -### 工具(实验性) - -| 方法 | 路径 | 描述 | 响应 | -| ----- | ------------------------------------------- | ---------------------------------- | -------------------------------------------- | -| `GET` | `/experimental/tool/ids` | 列出所有工具 ID | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | 列出指定模型的工具及其 JSON Schema | ToolList | - ---- - -### LSP、格式化器和 MCP - -| 方法 | 路径 | 描述 | 响应 | -| ------ | ------------ | ------------------- | -------------------------------------------------------- | -| `GET` | `/lsp` | 获取 LSP 服务器状态 | LSPStatus[] | -| `GET` | `/formatter` | 获取格式化器状态 | FormatterStatus[] | -| `GET` | `/mcp` | 获取 MCP 服务器状态 | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | 动态添加 MCP 服务器 | 请求体:`{ name, config }`,返回 MCP 状态对象 | - ---- - -### 代理 - -| 方法 | 路径 | 描述 | 响应 | -| ----- | -------- | ------------------ | ------------------------------------------- | -| `GET` | `/agent` | 列出所有可用的代理 | Agent[] | - ---- - -### 日志 - -| 方法 | 路径 | 描述 | 响应 | -| ------ | ------ | ----------------------------------------------------------- | --------- | -| `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` | 显示提示消息(`{ title?, message, variant }`) | `boolean` | -| `GET` | `/tui/control/next` | 等待下一个控制请求 | 控制请求对象 | -| `POST` | `/tui/control/response` | 响应控制请求(`{ body }`) | `boolean` | - ---- - -### 认证 - -| 方法 | 路径 | 描述 | 响应 | -| ----- | ----------- | -------------------------------------------- | --------- | -| `PUT` | `/auth/:id` | 设置认证凭据。请求体必须匹配提供商的数据结构 | `boolean` | - ---- - -### 事件 - -| 方法 | 路径 | 描述 | 响应 | -| ----- | -------- | ----------------------------------------------------------------- | ---------------- | -| `GET` | `/event` | 服务器发送事件流。第一个事件是 `server.connected`,之后是总线事件 | 服务器发送事件流 | - ---- - -### 文档 - -| 方法 | 路径 | 描述 | 响应 | -| ----- | ------ | ---------------- | ----------------------------- | -| `GET` | `/doc` | OpenAPI 3.1 规范 | 包含 OpenAPI 规范的 HTML 页面 | diff --git a/packages/web/src/content/docs/zh-cn/share.mdx b/packages/web/src/content/docs/zh-cn/share.mdx deleted file mode 100644 index a2b34688e4..0000000000 --- a/packages/web/src/content/docs/zh-cn/share.mdx +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: 分享 -description: 分享您的 OpenCode 对话。 ---- - -OpenCode 的分享功能允许您创建指向 OpenCode 对话的公开链接,方便与团队成员协作或向他人寻求帮助。 - -:::note -共享的对话对任何拥有链接的人都是公开可访问的。 -::: - ---- - -## 工作原理 - -当您分享一段对话时,OpenCode 会: - -1. 为您的会话创建一个唯一的公开 URL -2. 将您的对话历史同步到我们的服务器 -3. 通过可分享的链接使对话可访问 — `opncd.ai/s/` - ---- - -## 分享模式 - -OpenCode 支持三种分享模式,用于控制对话的共享方式: - ---- - -### 手动模式(默认) - -默认情况下,OpenCode 使用手动分享模式。会话不会自动共享,但您可以使用 `/share` 命令手动分享: - -``` -/share -``` - -这将生成一个唯一的 URL 并复制到您的剪贴板。 - -要在[配置文件](/docs/config)中显式设置手动模式: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - ---- - -### 自动分享 - -您可以在[配置文件](/docs/config)中将 `share` 选项设置为 `"auto"`,为所有新对话启用自动分享: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "auto" -} -``` - -启用自动分享后,每个新对话都会自动共享并生成链接。 - ---- - -### 禁用 - -您可以在[配置文件](/docs/config)中将 `share` 选项设置为 `"disabled"`,完全禁用分享功能: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -要在团队中对特定项目强制执行此设置,请将其添加到项目的 `opencode.json` 文件中并提交到 Git。 - ---- - -## 取消分享 - -要停止分享对话并将其从公开访问中移除: - -``` -/unshare -``` - -这将移除分享链接并删除与该对话相关的数据。 - ---- - -## 隐私 - -分享对话时需要注意以下几点。 - ---- - -### 数据留存 - -共享的对话在您明确取消分享之前将一直保持可访问状态。这包括: - -- 完整的对话历史 -- 所有消息和回复 -- 会话元数据 - ---- - -### 建议 - -- 仅分享不包含敏感信息的对话。 -- 分享前请检查对话内容。 -- 协作完成后请取消分享。 -- 避免分享包含专有代码或机密数据的对话。 -- 对于敏感项目,请完全禁用分享功能。 - ---- - -## 企业版 - -对于企业部署,分享功能可以: - -- 出于安全合规考虑**完全禁用** -- **限制**为仅通过 SSO 身份验证的用户可用 -- **自托管**在您自己的基础设施上 - -[了解更多](/docs/enterprise)关于在您的组织中使用 OpenCode 的信息。 diff --git a/packages/web/src/content/docs/zh-cn/skills.mdx b/packages/web/src/content/docs/zh-cn/skills.mdx deleted file mode 100644 index 1c4f2fe69d..0000000000 --- a/packages/web/src/content/docs/zh-cn/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: "代理技能" -description: "通过 SKILL.md 定义可复用的行为" ---- - -代理技能让 OpenCode 能够从你的仓库或主目录中发现可复用的指令。 -技能通过原生的 `skill` 工具按需加载——代理可以查看可用技能,并在需要时加载完整内容。 - ---- - -## 放置文件 - -为每个技能名称创建一个文件夹,并在其中放入 `SKILL.md`。 -OpenCode 会搜索以下位置: - -- 项目配置:`.opencode/skills//SKILL.md` -- 全局配置:`~/.config/opencode/skills//SKILL.md` -- 项目 Claude 兼容:`.claude/skills//SKILL.md` -- 全局 Claude 兼容:`~/.claude/skills//SKILL.md` -- 项目代理兼容:`.agents/skills//SKILL.md` -- 全局代理兼容:`~/.agents/skills//SKILL.md` - ---- - -## 了解发现机制 - -对于项目本地路径,OpenCode 会从当前工作目录向上遍历,直到到达 git 工作树根目录。 -在此过程中,它会加载 `.opencode/` 中所有匹配的 `skills/*/SKILL.md`,以及匹配的 `.claude/skills/*/SKILL.md` 或 `.agents/skills/*/SKILL.md`。 - -全局定义也会从 `~/.config/opencode/skills/*/SKILL.md`、`~/.claude/skills/*/SKILL.md` 和 `~/.agents/skills/*/SKILL.md` 中加载。 - ---- - -## 编写 frontmatter - -每个 `SKILL.md` 必须以 YAML frontmatter 开头。 -仅识别以下字段: - -- `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 - - - git-release - Create consistent releases and changelogs - - -``` - -代理通过调用工具来加载技能: - -``` -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" - } - } - } - } -} -``` - ---- - -## 禁用技能工具 - -为不需要使用技能的代理完全禁用技能功能: - -**自定义代理**: - -```yaml ---- -tools: - skill: false ---- -``` - -**内置代理**: - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -禁用后,`` 部分将被完全省略。 - ---- - -## 排查加载问题 - -如果某个技能没有显示: - -1. 确认 `SKILL.md` 文件名全部为大写字母 -2. 检查 frontmatter 是否包含 `name` 和 `description` -3. 确保技能名称在所有位置中唯一 -4. 检查权限设置——设为 `deny` 的技能会对代理隐藏 diff --git a/packages/web/src/content/docs/zh-cn/themes.mdx b/packages/web/src/content/docs/zh-cn/themes.mdx deleted file mode 100644 index 79386fbe99..0000000000 --- a/packages/web/src/content/docs/zh-cn/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -title: 主题 -description: 选择内置主题或定义您自己的主题。 ---- - -通过 OpenCode,您可以从多个内置主题中进行选择,使用能自动适配终端主题的主题,或者定义您自己的自定义主题。 - -默认情况下,OpenCode 使用我们自己的 `opencode` 主题。 - ---- - -## 终端要求 - -为了使主题能够正确显示完整的调色板,您的终端必须支持**真彩色**(24 位色)。大多数现代终端默认支持此功能,但您可能需要手动启用: - -- **检查支持情况**:运行 `echo $COLORTERM` — 输出应为 `truecolor` 或 `24bit` -- **启用真彩色**:在您的 shell 配置文件中设置环境变量 `COLORTERM=truecolor` -- **终端兼容性**:确保您的终端模拟器支持 24 位色(大多数现代终端如 iTerm2、Alacritty、Kitty、Windows Terminal 以及较新版本的 GNOME Terminal 均已支持) - -如果没有真彩色支持,主题可能会出现色彩精度下降的情况,或者回退到最接近的 256 色近似值。 - ---- - -## 内置主题 - -OpenCode 自带多个内置主题。 - -| 名称 | 描述 | -| ---------------------- | ------------------------------------------------------------------- | -| `system` | 自动适配终端的背景颜色 | -| `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) Dark 主题 | - -我们还在不断添加更多主题。 - ---- - -## 系统主题 - -`system` 主题旨在自动适配您终端的配色方案。与使用固定颜色的传统主题不同,_system_ 主题具有以下特点: - -- **生成灰度色阶**:根据终端的背景颜色创建自定义灰度色阶,确保最佳对比度。 -- **使用 ANSI 颜色**:利用标准 ANSI 颜色(0-15)进行语法高亮和 UI 元素渲染,遵循终端的调色板设置。 -- **保留终端默认值**:将文本和背景颜色设为 `none`,以保持终端的原生外观。 - -系统主题适合以下用户: - -- 希望 OpenCode 与终端的外观保持一致 -- 使用了自定义终端配色方案 -- 偏好所有终端应用程序拥有统一的视觉风格 - ---- - -## 使用主题 - -您可以通过 `/theme` 命令调出主题选择界面来选择主题,也可以在 `tui.json` 文件中直接指定。 - -```json title="tui.json" {3} -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - ---- - -## 自定义主题 - -OpenCode 支持灵活的基于 JSON 的主题系统,让用户可以轻松创建和自定义主题。 - ---- - -### 层级优先级 - -主题按以下顺序从多个目录加载,后面的目录会覆盖前面的目录: - -1. **内置主题** — 嵌入在二进制文件中 -2. **用户配置目录** — 定义在 `~/.config/opencode/themes/*.json` 或 `$XDG_CONFIG_HOME/opencode/themes/*.json` -3. **项目根目录** — 定义在 `/.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"` — 使用终端的默认颜色或透明背景 - ---- - -### 颜色定义 - -`defs` 部分是可选的,它允许您定义可在主题中重复引用的可复用颜色。 - ---- - -### 终端默认值 - -特殊值 `"none"` 可用于任何颜色属性,以继承终端的默认颜色。这在创建需要与终端配色方案无缝融合的主题时特别有用: - -- `"text": "none"` — 使用终端的默认前景色 -- `"background": "none"` — 使用终端的默认背景色 - ---- - -### 示例 - -以下是一个自定义主题的完整示例: - -```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" - } - } -} -``` diff --git a/packages/web/src/content/docs/zh-cn/tools.mdx b/packages/web/src/content/docs/zh-cn/tools.mdx deleted file mode 100644 index 1a58eece5d..0000000000 --- a/packages/web/src/content/docs/zh-cn/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -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 运行终端命令,例如 `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 - -使用正则表达式搜索文件内容。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "grep": "allow" - } -} -``` - -在代码库中快速搜索内容。支持完整的正则表达式语法和文件模式过滤。 - ---- - -### glob - -通过模式匹配查找文件。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "glob": "allow" - } -} -``` - -使用 `**/*.js` 或 `src/**/*.ts` 等 glob 模式搜索文件。返回按修改时间排序的匹配文件路径。 - ---- - -### lsp(实验性) - -与已配置的 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 - -对文件应用补丁。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -该工具将补丁文件应用到您的代码库中。适用于应用来自各种来源的 diff 和补丁。 - -:::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 密钥——该工具无需身份验证即可直接连接到 Exa AI 的托管 MCP 服务。 - -:::tip -当您需要查找信息(发现)时使用 `websearch`,当您需要从特定 URL 获取内容(检索)时使用 `webfetch`。 -::: - ---- - -### 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` 中列出。 diff --git a/packages/web/src/content/docs/zh-cn/troubleshooting.mdx b/packages/web/src/content/docs/zh-cn/troubleshooting.mdx deleted file mode 100644 index 3f22cbf895..0000000000 --- a/packages/web/src/content/docs/zh-cn/troubleshooting.mdx +++ /dev/null @@ -1,299 +0,0 @@ ---- -title: 故障排除 -description: 常见问题及其解决方法。 ---- - -要调试 OpenCode 的问题,请先检查其存储在磁盘上的日志和本地数据。 - ---- - -## 日志 - -日志文件写入位置: - -- **macOS/Linux**: `~/.local/share/opencode/log/` -- **Windows**: 按 `WIN+R` 并粘贴 `%USERPROFILE%\.local\share\opencode\log` - -日志文件以时间戳命名(例如 `2025-01-09T123456.log`),并保留最近的 10 个日志文件。 - -你可以通过 `--log-level` 命令行选项设置日志级别以获取更详细的调试信息。例如:`opencode --log-level DEBUG`。 - ---- - -## 存储 - -OpenCode 将会话数据和其他应用数据存储在磁盘上: - -- **macOS/Linux**: `~/.local/share/opencode/` -- **Windows**: 按 `WIN+R` 并粘贴 `%USERPROFILE%\.local\share\opencode` - -该目录包含: - -- `auth.json` - 身份验证数据,如 API 密钥、OAuth Token -- `log/` - 应用日志 -- `project/` - 项目特定数据,如会话和消息数据 - - 如果项目位于 Git 仓库中,则存储在 `.//storage/` - - 如果不是 Git 仓库,则存储在 `./global/storage/` - ---- - -## 桌面应用 - -OpenCode Desktop 会在后台运行一个本地 OpenCode 服务器(即 `opencode-cli` 附属进程)。大多数问题是由插件异常、缓存损坏或错误的服务器设置引起的。 - -### 快速检查 - -- 完全退出并重新启动应用。 -- 如果应用显示错误页面,请点击**重新启动**并复制错误详情。 -- 仅限 macOS:`OpenCode` 菜单 -> **Reload Webview**(当 UI 空白或冻结时有效)。 - ---- - -### 禁用插件 - -如果桌面应用在启动时崩溃、卡住或行为异常,请先禁用插件。 - -#### 检查全局配置 - -打开你的全局配置文件,查找 `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` -- **项目插件**(仅当你使用了项目级配置时) - - `/.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 - -在主页面上,点击服务器名称(带有状态指示点)以打开服务器选择器。在**默认服务器**部分,点击**清除**。 - -#### 从配置中移除 `server.port` / `server.hostname` - -如果你的 `opencode.json(c)` 包含 `server` 部分,请临时移除该部分并重新启动桌面应用。 - -#### 检查环境变量 - -如果你在环境中设置了 `OPENCODE_PORT`,桌面应用将尝试使用该端口作为本地服务器端口。 - -- 取消设置 `OPENCODE_PORT`(或选择一个空闲端口)并重新启动。 - ---- - -### Linux: Wayland / X11 问题 - -在 Linux 上,某些 Wayland 设置可能会导致窗口空白或合成器错误。 - -- 如果你使用 Wayland 且应用出现空白或崩溃,请尝试使用 `OC_ALLOW_WAYLAND=1` 启动。 -- 如果情况变得更糟,请移除该设置并尝试在 X11 会话下启动。 - ---- - -### Windows: WebView2 运行时 - -在 Windows 上,OpenCode Desktop 需要 Microsoft Edge **WebView2 Runtime**。如果应用打开后是空白窗口或无法启动,请安装或更新 WebView2 后重试。 - ---- - -### Windows: 常见性能问题 - -如果你在 Windows 上遇到性能缓慢、文件访问问题或终端问题,请尝试使用 [WSL (Windows Subsystem for Linux)](/docs/windows-wsl)。WSL 提供了一个 Linux 环境,能更好地与 OpenCode 的功能兼容。 - ---- - -### 通知不显示 - -OpenCode Desktop 仅在以下情况下显示系统通知: - -- 在操作系统设置中已为 OpenCode 启用通知,且 -- 应用窗口未处于焦点状态。 - ---- - -### 重置桌面应用存储(最后手段) - -如果应用无法启动且你无法从 UI 内部清除设置,请重置桌面应用的保存状态。 - -1. 退出 OpenCode Desktop。 -2. 找到并删除以下文件(它们位于 OpenCode Desktop 应用数据目录中): - -- `opencode.settings.dat`(桌面默认服务器 URL) -- `opencode.global.dat` 和 `opencode.workspace.*.dat`(UI 状态,如最近的服务器/项目) - -快速找到该目录: - -- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support`(然后搜索上述文件名) -- **Linux**: 在 `~/.local/share` 下搜索上述文件名 -- **Windows**: 按 `WIN+R` -> `%APPDATA%`(然后搜索上述文件名) - ---- - -## 获取帮助 - -如果你遇到 OpenCode 的问题: - -1. **在 GitHub 上报告问题** - - 报告 Bug 或请求功能的最佳方式是通过我们的 GitHub 仓库: - - [**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues) - - 在创建新 Issue 之前,请先搜索已有的 Issue,看看你的问题是否已被报告。 - -2. **加入我们的 Discord** - - 如需实时帮助和社区讨论,请加入我们的 Discord 服务器: - - [**opencode.ai/discord**](https://opencode.ai/discord) - ---- - -## 常见问题 - -以下是一些常见问题及其解决方法。 - ---- - -### OpenCode 无法启动 - -1. 检查日志中的错误消息 -2. 尝试使用 `--print-logs` 运行以在终端中查看输出 -3. 使用 `opencode upgrade` 确保你使用的是最新版本 - ---- - -### 身份验证问题 - -1. 尝试在 TUI 中使用 `/connect` 命令重新进行身份验证 -2. 检查你的 API 密钥是否有效 -3. 确保你的网络允许连接到提供商的 API - ---- - -### 模型不可用 - -1. 检查你是否已通过提供商的身份验证 -2. 验证配置中的模型名称是否正确 -3. 某些模型可能需要特定的访问权限或订阅 - -如果你遇到 `ProviderModelNotFoundError`,很可能是在某处错误地引用了模型。 -模型应按如下方式引用:`/` - -示例: - -- `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. 在 TUI 中使用 `/connect` 命令重新与提供商进行身份验证。 - ---- - -### 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 -``` - -**对于无头环境:** - -```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`。 diff --git a/packages/web/src/content/docs/zh-cn/tui.mdx b/packages/web/src/content/docs/zh-cn/tui.mdx deleted file mode 100644 index 8b0a4085b0..0000000000 --- a/packages/web/src/content/docs/zh-cn/tui.mdx +++ /dev/null @@ -1,426 +0,0 @@ ---- -title: TUI -description: 使用 OpenCode 终端用户界面。 ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode 提供了一个交互式终端界面(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 TUI 时,您可以输入 `/` 后跟命令名称来快速执行操作。例如: - -```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" -/themes -``` - -**快捷键:** `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` 环境变量中指定的编辑器。 - - - - ```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" - ``` - - 要使其永久生效,请将其添加到您的 shell 配置文件中; - `~/.bashrc`、`~/.zshrc` 等。 - - - - - ```bash - set EDITOR=notepad - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - set EDITOR=code --wait - ``` - - 要使其永久生效,请使用**系统属性** > **环境变量**。 - - - - - ```powershell - $env:EDITOR = "notepad" - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - $env:EDITOR = "code --wait" - ``` - - 要使其永久生效,请将其添加到您的 PowerShell 配置文件中。 - - - - -常用的编辑器选项包括: - -- `code` - Visual Studio Code -- `cursor` - Cursor -- `windsurf` - Windsurf -- `nvim` - Neovim 编辑器 -- `vim` - Vim 编辑器 -- `nano` - Nano 编辑器 -- `notepad` - Notepad(Windows 记事本) -- `subl` - Sublime Text - -:::note -某些编辑器(如 VS Code)需要以 `--wait` 标志启动。 -::: - -某些编辑器需要命令行参数才能以阻塞模式运行。`--wait` 标志使编辑器进程阻塞直到关闭。 - ---- - -## 配置 - -您可以通过 `tui.json`(或 `tui.jsonc`)自定义 TUI 行为。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -这与 `opencode.json` 是分开的;`opencode.json` 用于配置服务器和运行时行为。 - -`keybinds` 会与内置默认值合并,因此你只需要配置想要修改的快捷键。 - -### 选项 - -- `theme` - 设置 UI 主题。[了解更多](/docs/themes)。 -- `keybinds` - 自定义键盘快捷键。[了解更多](/docs/keybinds)。 -- `leader_timeout` - 控制按下 leader key 后 OpenCode 等待后续按键的时间。默认为 `2000`。 -- `scroll_acceleration.enabled` - 启用 macOS 风格的滚动加速,让滚动更平滑自然。启用后,快速滚动时速度会增加,慢速移动时仍保持精确。**此设置优先于 `scroll_speed`,启用时会覆盖它。** -- `scroll_speed` - 控制使用滚动命令时 TUI 的滚动速度(最小值:`0.001`,支持小数)。默认为 `3`。**注意:如果 `scroll_acceleration.enabled` 设置为 `true`,则此设置会被忽略。** -- `diff_style` - 控制 diff 的显示方式。`"auto"` 会根据终端宽度自适应,`"stacked"` 始终显示单列布局。 -- `mouse` - 在 TUI 中启用或禁用鼠标捕获(默认:`true`)。禁用后,终端原生的鼠标选择和滚动行为会保留下来。 -- `attention` - 配置 TUI 桌面通知和声音。默认禁用。 - -使用 `OPENCODE_TUI_CONFIG` 可以加载自定义的 TUI 配置文件路径。 - -### Attention - -当 OpenCode 需要你处理问题、批准权限请求、查看会话错误,或想告知会话已完成时,TUI 可以通过声音和桌面通知提醒你。设置 `attention.enabled` 后会启用这些提醒;内置事件触发时会播放声音。桌面通知只会在终端窗口未聚焦时发送,并且不会用于 subagent 事件。 - -- `enabled` - 开启 Attention 的所有通知和声音。默认为 `false`。 -- `notifications` - 启用 Attention 后,允许 TUI 通过终端发送桌面通知。默认为 `true`。 -- `sound` - 启用 Attention 后,允许播放提示音。默认为 `true`。 -- `volume` - 默认提示音音量,范围从 `0` 到 `1`。默认为 `0.4`。 -- `sound_pack` - 要使用的 sound pack ID。默认为 `opencode.default`。 -- `sounds` - 为 `default`、`question`、`permission`、`error`、`done` 或 `subagent_done` 指定自定义声音文件。路径可以是绝对路径、`file://` URL,或相对于 `tui.json` 的路径。 - ---- - -## 自定义 - -您可以使用命令面板(`ctrl+x h` 或 `/help`)自定义 TUI 视图的各个方面。这些设置在重启后仍会保留。 - ---- - -#### 用户名显示 - -切换您的用户名是否显示在聊天消息中。通过以下方式访问: - -- 命令面板:搜索 "username" 或 "hide username" -- 该设置会自动保存,并在各个 TUI 会话中保持记忆 diff --git a/packages/web/src/content/docs/zh-cn/web.mdx b/packages/web/src/content/docs/zh-cn/web.mdx deleted file mode 100644 index 5b5a31653f..0000000000 --- a/packages/web/src/content/docs/zh-cn/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Web -description: 在浏览器中使用 OpenCode。 ---- - -OpenCode 可以作为 Web 应用在浏览器中运行,无需终端即可获得同样强大的 AI 编码体验。 - -![OpenCode Web - New Session](../../../assets/web/web-homepage-new-session.png) - -## 快速开始 - -运行以下命令启动 Web 界面: - -```bash -opencode web -``` - -这会在 `127.0.0.1` 上启动一个本地服务器,使用随机可用端口,并自动在默认浏览器中打开 OpenCode。 - -:::caution -如果未设置 `OPENCODE_SERVER_PASSWORD`,服务器将没有安全保护。本地使用没有问题,但在网络访问时应当设置密码。 -::: - -:::tip[Windows 用户] -为获得最佳体验,建议从 [WSL](/docs/windows-wsl) 而非 PowerShell 运行 `opencode web`。这可以确保正确的文件系统访问和终端集成。 -::: - ---- - -## 配置 - -你可以通过命令行标志或[配置文件](/docs/config)来配置 Web 服务器。 - -### 端口 - -默认情况下,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` 进行更改。 - ---- - -## 使用 Web 界面 - -启动后,Web 界面提供对 OpenCode 会话的访问。 - -### 会话 - -在主页上查看和管理你的会话。你可以查看活跃的会话,也可以创建新的会话。 - -![OpenCode Web - Active Session](../../../assets/web/web-homepage-active-session.png) - -### 服务器状态 - -点击"See Servers"可以查看已连接的服务器及其状态。 - -![OpenCode Web - See Servers](../../../assets/web/web-homepage-see-servers.png) - ---- - -## 连接终端 - -你可以将终端 TUI 连接到正在运行的 Web 服务器: - -```bash -# 启动 Web 服务器 -opencode web --port 4096 - -# 在另一个终端中连接 TUI -opencode attach http://localhost:4096 -``` - -这样你就可以同时使用 Web 界面和终端,共享相同的会话和状态。 - ---- - -## 配置文件 - -你也可以在 `opencode.json` 配置文件中设置服务器选项: - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -命令行标志的优先级高于配置文件中的设置。 diff --git a/packages/web/src/content/docs/zh-cn/windows-wsl.mdx b/packages/web/src/content/docs/zh-cn/windows-wsl.mdx deleted file mode 100644 index 853011acee..0000000000 --- a/packages/web/src/content/docs/zh-cn/windows-wsl.mdx +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Windows (WSL) -description: 通过 WSL 在 Windows 上运行 OpenCode 以获得最佳体验。 ---- - -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 提供更出色的文件系统性能、完整的终端支持,以及与 OpenCode 所依赖的开发工具的良好兼容性。 -::: - ---- - -## 安装配置 - - - -1. **安装 WSL** - - 如果尚未安装,请参照 Microsoft 官方指南[安装 WSL](https://learn.microsoft.com/en-us/windows/wsl/install)。 - -2. **在 WSL 中安装 OpenCode** - - WSL 设置完成后,打开 WSL 终端,使用任一[安装方式](/docs/)安装 OpenCode。 - - ```bash - curl -fsSL https://opencode.ai/install | bash - ``` - -3. **从 WSL 中使用 OpenCode** - - 导航到你的项目目录(通过 `/mnt/c/`、`/mnt/d/` 等路径访问 Windows 文件),然后运行 OpenCode。 - - ```bash - cd /mnt/c/Users/YourName/project - opencode - ``` - - - ---- - -## 桌面应用 + 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` 在你的环境中无法使用,请改用 WSL 的 IP 地址进行连接(在 WSL 中运行:`hostname -I`),使用 `http://:4096`。 -::: - -:::caution -使用 `--hostname 0.0.0.0` 时,请设置 `OPENCODE_SERVER_PASSWORD` 以保护服务器安全。 -::: - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0 -``` - ---- - -## Web 客户端 + WSL - -要在 Windows 上获得最佳的 Web 体验: - -1. **在 WSL 终端中运行 `opencode web`**,而非在 PowerShell 中运行: - - ```bash - opencode web --hostname 0.0.0.0 - ``` - -2. **在 Windows 浏览器中访问** `http://localhost:`(OpenCode 会输出该 URL) - -从 WSL 中运行 `opencode web` 可确保正确的文件系统访问和终端集成,同时仍可通过 Windows 浏览器进行访问。 - ---- - -## 访问 Windows 文件 - -WSL 可以通过 `/mnt/` 目录访问你的所有 Windows 文件: - -- `C:` 盘 → `/mnt/c/` -- `D:` 盘 → `/mnt/d/` -- 其他盘符以此类推... - -示例: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -为了获得更流畅的体验,建议将仓库克隆或复制到 WSL 文件系统中(例如 `~/code/` 目录下),然后在该位置运行 OpenCode。 -::: - ---- - -## 使用技巧 - -- 对于存储在 Windows 驱动器上的项目,在 WSL 中运行 OpenCode 即可无缝访问文件 -- 搭配 VS Code 的 [WSL 扩展](https://code.visualstudio.com/docs/remote/wsl) 使用 OpenCode,打造一体化的开发工作流 -- OpenCode 的配置和会话数据存储在 WSL 环境中的 `~/.local/share/opencode/` diff --git a/packages/web/src/content/docs/zh-cn/zen.mdx b/packages/web/src/content/docs/zh-cn/zen.mdx deleted file mode 100644 index 55a55308df..0000000000 --- a/packages/web/src/content/docs/zh-cn/zen.mdx +++ /dev/null @@ -1,301 +0,0 @@ ---- -title: Zen -description: 由 OpenCode 提供的精选模型列表。 ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen 是由 OpenCode 团队提供的一组经过测试和验证的模型。 - -Zen 的工作方式与 OpenCode 中的任何其他提供商相同。你登录 OpenCode Zen 并获取 API 密钥。它是**完全可选的**,即使不用它,你也可以照常使用 OpenCode。 - ---- - -## 背景 - -现在市面上有大量模型,但其中只有少数模型适合作为编码代理使用。此外,大多数提供商的配置方式差异很大,因此你获得的性能和质量也会非常不同。 - -:::tip -我们测试了一组与 OpenCode 配合良好的精选模型和提供商。 -::: - -所以,如果你通过 OpenRouter 之类的服务使用模型,你无法确定自己拿到的是否是目标模型的最佳版本。 - -为了解决这个问题,我们做了几件事: - -1. 我们测试了一组选定的模型,并与它们的团队讨论了如何以最佳方式运行这些模型。 -2. 然后我们与几家提供商合作,确保这些模型被正确提供。 -3. 最后,我们对模型和提供商的组合进行了基准测试,并整理出了一份我们认为值得推荐的列表。 - -OpenCode Zen 是一个 AI 网关,让你可以访问这些模型。 - ---- - -## 工作原理 - -OpenCode Zen 的工作方式与 OpenCode 中的任何其他提供商相同。 - -1. 登录 **OpenCode Zen**,添加你的账单信息,然后复制你的 API 密钥。 -2. 在 TUI 中运行 `/connect` 命令,选择 OpenCode Zen,然后粘贴你的 API 密钥。 -3. 在 TUI 中运行 `/models`,查看我们推荐的模型列表。 - -你按请求付费,也可以向账户充值。 - ---- - -## 端点 - -你也可以通过以下 API 端点访问我们的模型。 - -| 模型 | 模型 ID | 端点 | 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -在你的 OpenCode 配置中,[模型 ID](/docs/config/#models) 使用 `opencode/` 格式。例如,对于 GPT 5.5,你需要在配置中使用 `opencode/gpt-5.5`。 - ---- - -### 模型 - -你可以从以下地址获取可用模型及其元数据的完整列表: - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## 定价 - -我们支持按量付费模式。以下是**每 1M tokens** 的价格。 - -| 模型 | 输入 | 输出 | 缓存读取 | 缓存写入 | -| --------------------------------- | ------ | ------- | -------- | -------- | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -你可能会在使用记录中看到 _Claude Haiku 3.5_。这是一个[低成本模型](/docs/config/#models),用于生成会话标题。 - -:::note -信用卡手续费按成本转嫁(每笔交易 4.4% + $0.30);除此之外我们不会额外收费。 -::: - -免费模型: - -- DeepSeek V4 Flash Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 -- MiMo-V2.5 Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 -- North Mini Code Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 -- Nemotron 3 Ultra Free 目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 -- Big Pickle 是一个隐身模型,目前在 OpenCode 上限时免费提供。团队正在利用这段时间收集反馈并改进模型。 - -如果你有任何问题,请联系我们。 - ---- - -### 自动充值 - -如果你的余额低于 $5,Zen 将自动充值 $20。 - -你可以更改自动充值金额,也可以完全禁用自动充值。 - ---- - -### 月度限额 - -你还可以为整个工作区以及团队中的每位成员设置月度使用限额。 - -例如,假设你将月度使用限额设置为 $20,那么 Zen 在一个月内的使用金额不会超过 $20。但如果你启用了自动充值,当余额低于 $5 时,Zen 最终向你收取的金额可能会超过 $20。 - ---- - -### 已弃用模型 - -| 模型 | 弃用日期 | -| ------------------ | ----------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## 隐私 - -我们所有模型都托管在 US。我们的提供商遵循零保留政策,不会将你的数据用于模型训练,但以下情况除外: - -- Big Pickle:在免费期间,收集的数据可能会被用于改进模型。 -- DeepSeek V4 Flash Free:在免费期间,收集的数据可能会被用于改进模型。 -- MiMo-V2.5 Free:在免费期间,收集的数据可能会被用于改进模型。 -- North Mini Code Free:免费期间,所收集的数据可能会被保留并用于改进模型。请勿提交个人或机密数据。请参阅我们的[使用条款](https://cohere.com/terms-of-use)和[隐私政策](https://cohere.com/privacy)。 -- Nemotron 3 Ultra Free(NVIDIA 免费端点):仅供试用 — 请勿提交个人或机密数据。出于安全目的以及为改进 NVIDIA 产品和服务,系统会记录你的使用情况。出于改进目的而记录的会话数据不会与你的身份或任何持久标识符相关联。有关我们数据处理实践的更多信息,请参阅我们的[隐私政策](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。与此端点进行交互,即表示你同意我们收集、记录和使用此类信息,并同意 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。 -- OpenAI APIs:请求会根据 [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) 保留 30 天。 -- Anthropic APIs:请求会根据 [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage) 保留 30 天。 - ---- - -## 团队 - -Zen 也非常适合团队使用。你可以邀请队友、分配角色、管理团队使用的模型,等等。 - -:::note -作为测试版的一部分,工作区目前对团队免费开放。 -::: - -作为测试版的一部分,团队目前可以免费管理工作区。我们很快会分享更多定价细节。 - ---- - -### 角色 - -你可以邀请队友加入工作区并分配角色: - -- **Admin**:管理模型、成员、API 密钥和账单 -- **Member**:仅管理自己的 API 密钥 - -Admin 还可以为每位成员设置月度支出限额,以便控制成本。 - ---- - -### 模型访问 - -Admin 可以为工作区启用或禁用特定模型。向已禁用模型发出的请求会返回错误。 - -这在你想禁用会收集数据的模型时很有用。 - ---- - -### 自带密钥 - -你可以使用自己的 OpenAI 或 Anthropic API 密钥,同时仍然访问 Zen 中的其他模型。 - -当你使用自己的密钥时,tokens 由提供商直接计费,而不是由 Zen 计费。 - -例如,你的组织可能已经拥有 OpenAI 或 Anthropic 的密钥,并且你想使用它,而不是使用 Zen 提供的密钥。 - ---- - -## 目标 - -我们创建 OpenCode Zen,是为了: - -1. 为编码代理**基准测试**最佳模型和提供商。 -2. 提供**最高质量**的选项,而不是降低性能或路由到更便宜的提供商。 -3. 通过按成本销售来传递任何**降价**;因此唯一的加价只是为了覆盖我们的处理费用。 -4. 保持**无锁定**,允许你将它与任何其他编码代理一起使用。同时也始终允许你在 OpenCode 中使用任何其他提供商。 diff --git a/packages/web/src/content/docs/zh-tw/acp.mdx b/packages/web/src/content/docs/zh-tw/acp.mdx deleted file mode 100644 index 4dc7baef3e..0000000000 --- a/packages/web/src/content/docs/zh-tw/acp.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: ACP 支援 -description: 在任何相容 ACP 的編輯器中使用 OpenCode。 ---- - -OpenCode 支援 [Agent Client Protocol](https://agentclientprotocol.com)(ACP),允許你直接在相容的編輯器和 IDE 中使用它。 - -:::tip -有關支援 ACP 的編輯器和工具列表,請查看 [ACP 進展報告](https://zed.dev/blog/acp-progress-report#available-now)。 -::: - -ACP 是一個開放協議,用於標準化程式碼編輯器與 AI 編碼代理之間的通訊。 - ---- - -## 設定 - -要透過 ACP 使用 OpenCode,請在編輯器中設定執行 `opencode acp` 命令。 - -該命令會將 OpenCode 作為相容 ACP 的子程序啟動,透過 stdio 上的 JSON-RPC 與編輯器進行通訊。 - -以下是支援 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` 操作。 - -你也可以透過編輯 `keymap.json` 來繫結鍵盤快速鍵: - -```json title="keymap.json" -[ - { - "bindings": { - "cmd-alt-o": [ - "agent::NewExternalAgentThread", - { - "agent": { - "custom": { - "name": "OpenCode", - "command": { - "command": "opencode", - "args": ["acp"] - } - } - } - } - ] - } - } -] -``` - ---- - -### JetBrains IDEs - -根據[文件](https://www.jetbrains.com/help/ai-assistant/acp.html),將以下內容新增到你的 [JetBrains IDE](https://www.jetbrains.com/) 的 acp.json 中: - -```json title="acp.json" -{ - "agent_servers": { - "OpenCode": { - "command": "/absolute/path/bin/opencode", - "args": ["acp"] - } - } -} -``` - -開啟方式:在 AI Chat 代理選擇器中選擇新的 'OpenCode' 代理。 - ---- - -### 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 - -要在 [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim) 中將 OpenCode 用作 ACP 代理,請將以下內容新增到你的 Neovim 設定中: - -```lua -require("codecompanion").setup({ - interactions = { - chat = { - adapter = { - name = "opencode", - model = "claude-sonnet-4", - }, - }, - }, -}) -``` - -此設定將 CodeCompanion 設為使用 OpenCode 作為聊天的 ACP 代理。 - -如果需要傳遞環境變數(如 `OPENCODE_API_KEY`),請參閱 CodeCompanion.nvim 文件中的[設定適配器:環境變數](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key)了解詳細資訊。 - -## 支援 - -OpenCode 透過 ACP 使用時與在終端機中使用的效果完全一致。所有功能均受支援: - -:::note -部分內建斜線命令(如 `/undo` 和 `/redo`)目前暫不支援。 -::: - -- 內建工具(檔案操作、終端機命令等) -- 自訂工具和斜線命令 -- 在 OpenCode 設定中設定的 MCP 伺服器 -- 來自 `AGENTS.md` 的專案級規則 -- 自訂格式化工具和程式碼檢查工具 -- 代理和權限系統 diff --git a/packages/web/src/content/docs/zh-tw/agents.mdx b/packages/web/src/content/docs/zh-tw/agents.mdx deleted file mode 100644 index a9c7bbadbf..0000000000 --- a/packages/web/src/content/docs/zh-tw/agents.mdx +++ /dev/null @@ -1,754 +0,0 @@ ---- -title: 代理 -description: 設定和使用專門的代理。 ---- - -代理是專門的 AI 助手,可以針對特定任務和工作流程進行設定。它們允許您建立具有自訂提示詞、模型和工具存取權限的專用工具。 - -:::tip -使用 Plan 代理來分析程式碼和審查建議,而不會進行任何程式碼變更。 -::: - -您可以在工作階段期間切換代理,或使用 `@` 提及來呼叫它們。 - ---- - -## 類型 - -OpenCode 中有兩種類型的代理:主代理和子代理。 - ---- - -### 主代理 - -主代理是您直接互動的主要助手。您可以使用 **Tab** 鍵或設定的 `switch_agent` 快速鍵來循環切換它們。這些代理處理您的主要對話。工具存取透過權限進行設定——例如,Build 啟用了所有工具,而 Plan 則受到限制。 - -:::tip -您可以在工作階段期間使用 **Tab** 鍵在主代理之間切換。 -::: - -OpenCode 內建了兩個主代理:**Build** 和 **Plan**。我們將在下面介紹它們。 - ---- - -### 子代理 - -子代理是主代理可以呼叫來執行特定任務的專業助手。您也可以透過在訊息中 **@ 提及**它們來手動呼叫。 - -OpenCode 內建了三個子代理:**General**、**Explore** 和 **Scout**。我們將在下面介紹它們。 - ---- - -## 內建代理 - -OpenCode 內建了兩個主代理和三個子代理。 - ---- - -### 使用 Build - -_模式_:`primary` - -Build 是啟用了所有工具的**預設**主代理。這是用於需要完全存取檔案操作和系統命令的開發工作的標準代理。 - ---- - -### 使用 Plan - -_模式_:`primary` - -一個專為規劃和分析設計的受限代理。我們使用權限系統來為您提供更多控制權,並防止意外變更。 -預設情況下,以下所有項均設為 `ask`: - -- `file edits`:所有寫入、補丁和編輯 -- `bash`:所有 bash 命令 - -當您希望 LLM 分析程式碼、建議變更或建立計畫,而不對程式碼庫進行任何實際修改時,此代理非常有用。 - ---- - -### 使用 General - -_模式_:`subagent` - -一個用於研究複雜問題和執行多步驟任務的通用代理。擁有完整的工具存取權限(todo 除外),因此可以在需要時修改檔案。可用於並行執行多個工作單元。 - ---- - -### 使用 Explore - -_模式_:`subagent` - -一個用於探索程式碼庫的快速唯讀代理。無法修改檔案。當您需要按模式快速查找檔案、搜尋程式碼中的關鍵字或回答有關程式碼庫的問題時,請使用此代理。 - ---- - -### 使用 Scout - -_模式_:`subagent` - -一個用於外部文件與依賴研究的唯讀代理。當您需要將某個依賴儲存庫 clone 到 OpenCode 的託管快取中、檢查函式庫的原始碼,或在不修改工作區的情況下將本機程式碼與 upstream 實作交叉比對時,請使用此代理。 - ---- - -### 使用 Compaction - -_模式_:`primary` - -隱藏的系統代理,將長上下文壓縮為較小的摘要。它會在需要時自動執行,且無法在 UI 中選擇。 - ---- - -### 使用 Title - -_模式_:`primary` - -隱藏的系統代理,用於產生簡短的工作階段標題。它會自動執行,且無法在 UI 中選擇。 - ---- - -### 使用 Summary - -_模式_:`primary` - -隱藏的系統代理,用於建立工作階段摘要。它會自動執行,且無法在 UI 中選擇。 - ---- - -## 用法 - -1. 對於主代理,在工作階段期間使用 **Tab** 鍵循環切換。您也可以使用設定的 `switch_agent` 快速鍵。 - -2. 子代理可以透過以下方式呼叫: - - 由主代理根據其描述**自動**呼叫以執行專門任務。 - - 透過在訊息中 **@ 提及**子代理來手動呼叫。例如: - - ```txt frame="none" - @general help me search for this function - ``` - -3. **工作階段間導覽**:當子代理建立自己的子工作階段時,您可以使用以下方式在父工作階段和所有子工作階段之間導覽: - - **\+Right**(或設定的 `session_child_cycle` 快速鍵)向前循環:父工作階段 → 子工作階段1 → 子工作階段2 → ... → 父工作階段 - - **\+Left**(或設定的 `session_child_cycle_reverse` 快速鍵)向後循環:父工作階段 ← 子工作階段1 ← 子工作階段2 ← ... ← 父工作階段 - - 這使您可以在主對話和專門的子代理工作之間無縫切換。 - ---- - -## 設定 - -您可以自訂內建代理或透過設定建立自己的代理。代理可以透過兩種方式進行設定: - ---- - -### 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" - } - } -} -``` - -這是一個**必需的**設定選項。 - ---- - -### 溫度 - -使用 `temperature` 設定控制 LLM 回應的隨機性和創造力。 - -較低的值使回應更加集中和確定,而較高的值則增加創造力和多樣性。 - -```json title="opencode.json" -{ - "agent": { - "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" -{ - "agent": { - "analyze": { - "temperature": 0.1, - "prompt": "{file:./prompts/analysis.txt}" - }, - "build": { - "temperature": 0.3 - }, - "brainstorm": { - "temperature": 0.7, - "prompt": "{file:./prompts/creative.txt}" - } - } -} -``` - -如果未指定溫度,OpenCode 將使用模型特定的預設值;大多數模型通常為 0,Qwen 模型為 0.55。 - ---- - -### 最大步數 - -控制代理在被強制以純文字回應之前可以執行的最大代理迭代次數。這允許希望控制成本的使用者對代理操作設定限制。 - -如果未設定此選項,代理將持續迭代,直到模型選擇停止或使用者中斷工作階段。 - -```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` 設定為代理覆寫模型。適用於針對不同任務使用不同的最佳化模型。例如,用更快的模型進行規劃,用更強大的模型進行實作。 - -:::tip -如果您不指定模型,主代理將使用[全域設定的模型](/docs/config#models),而子代理將使用呼叫它的主代理所使用的模型。 -::: - -```json title="opencode.json" -{ - "agent": { - "plan": { - "model": "anthropic/claude-haiku-4-20250514" - } - } -} -``` - -OpenCode 設定中的模型 ID 使用 `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 -代理級設定會覆寫全域設定。 -::: - -您還可以使用萬用字元同時控制多個工具。例如,要停用 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` 的代理。 -::: - ---- - -### 任務權限 - -使用 `permission.task` 控制代理可以透過 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 -使用者始終可以透過 `@` 自動補全選單直接呼叫任何子代理,即使代理的任務權限會拒絕它。 -::: - ---- - -### 顏色 - -使用 `color` 選項自訂代理在 UI 中的視覺外觀。這會影響代理在介面中的顯示方式。 - -使用有效的十六進位顏色(例如 `#FF5733`)或主題顏色:`primary`、`secondary`、`accent`、`success`、`warning`、`error`、`info`。 - -```json title="opencode.json" -{ - "agent": { - "creative": { - "color": "#ff6b6b" - }, - "code-reviewer": { - "color": "accent" - } - } -} -``` - ---- - -### Top P - -使用 `top_p` 選項控制回應多樣性。這是控制隨機性的溫度替代方案。 - -```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. 詢問代理的儲存位置——全域或專案級。 -2. 描述代理應該做什麼。 -3. 產生合適的系統提示詞和識別碼。 -4. 讓您選擇代理可以存取哪些工具。 -5. 最後,建立一個包含代理設定的 Markdown 檔案。 - ---- - -## 使用場景 - -以下是不同代理的一些常見使用場景。 - -- **Build 代理**:啟用所有工具的完整開發工作 -- **Plan 代理**:分析和規劃,不進行任何變更 -- **Review 代理**:具有唯讀存取權限和文件工具的程式碼審查 -- **Debug 代理**:專注於問題排查,啟用 bash 和讀取工具 -- **Docs 代理**:文件編寫,具有檔案操作但不使用系統命令 - ---- - -## 範例 - -以下是一些您可能會覺得有用的範例代理。 - -:::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 -``` diff --git a/packages/web/src/content/docs/zh-tw/cli.mdx b/packages/web/src/content/docs/zh-tw/cli.mdx deleted file mode 100644 index 25e7bce88e..0000000000 --- a/packages/web/src/content/docs/zh-tw/cli.mdx +++ /dev/null @@ -1,617 +0,0 @@ ---- -title: CLI -description: OpenCode CLI 選項和指令。 ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode CLI 在不帶任何參數執行時,預設啟動 [TUI](/docs/tui)。 - -```bash -opencode -``` - -但它也接受本頁面中記錄的指令,使您可以透過程式方式與 OpenCode 進行互動。 - -```bash -opencode run "Explain how closures work in JavaScript" -``` - ---- - -### tui - -啟動 OpenCode 終端機使用者介面。 - -```bash -opencode [project] -``` - -#### 旗標 - -| 旗標 | 簡寫 | 說明 | -| ---------------------------------------- | ---- | ------------------------------------------------------------- | -| {"--continue"} | `-c` | 繼續上一個工作階段 | -| {"--session"} | `-s` | 要繼續的工作階段 ID | -| {"--fork"} | | 繼續時分岔工作階段(與 `--continue` 或 `--session` 搭配使用) | -| {"--prompt"} | | 要使用的提示詞 | -| {"--model"} | `-m` | 要使用的模型,格式為 provider/model | -| {"--agent"} | | 要使用的代理 | -| {"--port"} | | 監聽連接埠 | -| {"--hostname"} | | 監聽主機名稱 | - ---- - -## 指令 - -OpenCode CLI 還提供以下指令。 - ---- - -### agent - -管理 OpenCode 的代理。 - -```bash -opencode agent [command] -``` - ---- - -### attach - -將終端機連接到已透過 `serve` 或 `web` 指令啟動的 OpenCode 後端伺服器。 - -```bash -opencode attach [url] -``` - -這允許將 TUI 與遠端 OpenCode 後端搭配使用。例如: - -```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 -``` - -#### 旗標 - -| 旗標 | 簡寫 | 說明 | -| ---------------------------------------- | ---- | ----------------------------------------------------------------------- | -| {"--dir"} | | 啟動 TUI 的工作目錄 | -| {"--continue"} | `-c` | 繼續上一個工作階段 | -| {"--session"} | `-s` | 要繼續的工作階段 ID | -| {"--fork"} | | 繼續時分支工作階段(與 `--continue` 或 `--session` 一起使用) | -| {"--password"} | `-p` | 基本驗證密碼(預設使用 `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | 基本驗證使用者名稱(預設使用 `OPENCODE_SERVER_USERNAME` 或 `opencode`) | - ---- - -#### 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 - -對支援 OAuth 的 MCP 伺服器進行認證。 - -```bash -opencode mcp auth [name] -``` - -如果您不提供伺服器名稱,系統將提示您從可用的支援 OAuth 的伺服器中進行選擇。 - -您還可以列出支援 OAuth 的伺服器及其認證狀態。 - -```bash -opencode mcp auth list -``` - -或使用簡寫版本。 - -```bash -opencode mcp auth ls -``` - ---- - -#### logout - -移除 MCP 伺服器的 OAuth 憑證。 - -```bash -opencode mcp logout [name] -``` - ---- - -#### debug - -偵錯 MCP 伺服器的 OAuth 連線問題。 - -```bash -opencode mcp debug -``` - ---- - -### models - -列出已設定供應商的所有可用模型。 - -```bash -opencode models [provider] -``` - -此指令以 `provider/model` 的格式顯示所有已設定供應商中可用的模型。 - -這對於確定在[設定檔](/docs/config/)中使用的確切模型名稱非常有用。 - -您可以選擇傳入供應商 ID 來按供應商篩選模型。 - -```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 -# 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" -``` - -#### 旗標 - -| 旗標 | 簡寫 | 說明 | -| ---------------------------------------- | ---- | ----------------------------------------------------------------------- | -| {"--command"} | | 要執行的指令,使用 message 作為參數 | -| {"--continue"} | `-c` | 繼續上一個工作階段 | -| {"--session"} | `-s` | 要繼續的工作階段 ID | -| {"--fork"} | | 繼續時分岔工作階段(與 `--continue` 或 `--session` 搭配使用) | -| {"--share"} | | 分享工作階段 | -| {"--model"} | `-m` | 要使用的模型,格式為 provider/model | -| {"--agent"} | | 要使用的代理 | -| {"--file"} | `-f` | 附加到訊息的檔案 | -| {"--format"} | | 格式:default(格式化輸出)或 json(原始 JSON 事件) | -| {"--title"} | | 工作階段標題(未提供值時使用截斷的提示詞) | -| {"--attach"} | | 連接到正在執行的 opencode 伺服器(例如 http://localhost:4096) | -| {"--password"} | `-p` | 基本驗證密碼(預設使用 `OPENCODE_SERVER_PASSWORD`) | -| {"--username"} | `-u` | 基本驗證使用者名稱(預設使用 `OPENCODE_SERVER_USERNAME` 或 `opencode`) | -| {"--dir"} | | 執行目錄,或附加時遠端伺服器上的路徑 | -| {"--variant"} | | 模型變體(特定於提供者的推理級別) | -| {"--thinking"} | | 顯示思考區塊 | -| {"--port"} | | 本地伺服器連接埠(預設為隨機連接埠) | - ---- - -### serve - -啟動無介面的 OpenCode 伺服器以提供 API 存取。查看[伺服器文件](/docs/server)了解完整的 HTTP 介面。 - -```bash -opencode serve -``` - -此指令啟動一個 HTTP 伺服器,提供對 OpenCode 功能的 API 存取,無需 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 工作階段的 Token 用量和費用統計資訊。 - -```bash -opencode stats -``` - -#### 旗標 - -| 旗標 | 說明 | -| --------------------------------------- | ---------------------------------------------------- | -| {"--days"} | 顯示最近 N 天的統計資訊(預設為所有時間) | -| {"--tools"} | 顯示的工具數量(預設為全部) | -| {"--models"} | 顯示模型用量明細(預設隱藏)。傳入數字可顯示前 N 個 | -| {"--project"} | 按專案篩選(預設為所有專案,傳入空字串表示當前專案) | - ---- - -### export - -將工作階段資料匯出為 JSON。 - -```bash -opencode export [sessionID] -``` - -如果您不提供工作階段 ID,系統將提示您從可用的工作階段中進行選擇。 - ---- - -### import - -從 JSON 檔案或 OpenCode 分享連結匯入工作階段資料。 - -```bash -opencode import -``` - -您可以從本地檔案或 OpenCode 分享連結匯入。 - -```bash -opencode import session.json -opencode import https://opncd.ai/s/abc123 -``` - ---- - -### web - -啟動帶有 Web 介面的無介面 OpenCode 伺服器。 - -```bash -opencode web -``` - -此指令啟動一個 HTTP 伺服器並開啟瀏覽器,透過 Web 介面存取 OpenCode。設定 `OPENCODE_SERVER_PASSWORD` 可啟用 HTTP 基本認證(使用者名稱預設為 `opencode`)。 - -#### 旗標 - -| 旗標 | 說明 | -| ---------------------------------------- | -------------------------- | -| {"--port"} | 監聽連接埠 | -| {"--hostname"} | 監聽主機名稱 | -| {"--mdns"} | 啟用 mDNS 探索 | -| {"--cors"} | 允許 CORS 的額外瀏覽器來源 | - ---- - -### acp - -啟動 ACP(Agent Client Protocol)伺服器。 - -```bash -opencode acp -``` - -此指令啟動一個透過 stdin/stdout 使用 nd-JSON 進行通訊的 ACP 伺服器。 - -#### 旗標 - -| 旗標 | 說明 | -| ---------------------------------------- | ------------ | -| {"--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 CLI 接受以下全域旗標。 - -| 旗標 | 簡寫 | 說明 | -| ------------------------------------------ | ---- | ------------------------------------ | -| {"--help"} | `-h` | 顯示說明資訊 | -| {"--version"} | `-v` | 印出版本號 | -| {"--print-logs"} | | 將日誌輸出到 stderr | -| {"--log-level"} | | 日誌等級(DEBUG、INFO、WARN、ERROR) | - ---- - -## 環境變數 - -OpenCode 可以透過環境變數進行設定。 - -| 變數 | 類型 | 說明 | -| ------------------------------------- | ------- | ------------------------------------------- | -| `OPENCODE_AUTO_SHARE` | boolean | 自動分享工作階段 | -| `OPENCODE_GIT_BASH_PATH` | string | Windows 上 Git Bash 可執行檔的路徑 | -| `OPENCODE_CONFIG` | string | 設定檔路徑 | -| `OPENCODE_TUI_CONFIG` | string | TUI 設定檔路徑 | -| `OPENCODE_CONFIG_DIR` | string | 設定目錄路徑 | -| `OPENCODE_CONFIG_CONTENT` | string | 內嵌 JSON 設定內容 | -| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | 停用自動更新檢查 | -| `OPENCODE_DISABLE_PRUNE` | boolean | 停用舊資料清理 | -| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | 停用自動終端機標題更新 | -| `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 | 自訂模型設定擷取 URL | - ---- - -### 實驗性功能 - -這些環境變數用於啟用可能會變更或移除的實驗性功能。 - -| 變數 | 類型 | 說明 | -| ----------------------------------------------- | ------- | ------------------------------- | -| `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 回應的最大輸出 Token 數 | -| `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 | 為 python 檔案啟用 TY LSP | -| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | 啟用計畫模式 | -| `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS` | boolean | 啟用背景子代理任務 | -| `OPENCODE_EXPERIMENTAL_EVENT_SYSTEM` | boolean | 啟用實驗性事件系統 | -| `OPENCODE_EXPERIMENTAL_NATIVE_LLM` | boolean | 啟用原生 LLM 請求路徑 | -| `OPENCODE_EXPERIMENTAL_PARALLEL` | boolean | 啟用平行 Web 搜尋執行 | -| `OPENCODE_EXPERIMENTAL_SCOUT` | boolean | 啟用 Scout 子代理 | -| `OPENCODE_EXPERIMENTAL_WORKSPACES` | boolean | 啟用工作區支援 | diff --git a/packages/web/src/content/docs/zh-tw/commands.mdx b/packages/web/src/content/docs/zh-tw/commands.mdx deleted file mode 100644 index ede5a7081d..0000000000 --- a/packages/web/src/content/docs/zh-tw/commands.mdx +++ /dev/null @@ -1,322 +0,0 @@ ---- -title: 指令 -description: 為重複任務建立自訂指令。 ---- - -自訂指令允許您指定一個提示詞,當在 TUI 中執行該指令時會執行這個提示詞。 - -```bash frame="none" -/my-command -``` - -自訂指令是 `/init`、`/undo`、`/redo`、`/share`、`/help` 等內建指令之外的補充。[了解更多](/docs/tui#commands)。 - ---- - -## 建立指令檔案 - -在 `commands/` 目錄中建立 markdown 檔案來定義自訂指令。 - -建立 `.opencode/commands/test.md`: - -```md title=".opencode/commands/test.md" ---- -description: Run tests with coverage -agent: build -model: anthropic/claude-3-5-sonnet-20241022 ---- - -Run the full test suite with coverage report and show any failures. -Focus on the failing tests and suggest fixes. -``` - -frontmatter 定義指令屬性,內容則成為範本。 - -透過輸入 `/` 後跟指令名稱來使用該指令。 - -```bash frame="none" -"/test" -``` - ---- - -## 設定 - -您可以透過 OpenCode 設定或在 `commands/` 目錄中建立 markdown 檔案來新增自訂指令。 - ---- - -### JSON - -在 OpenCode [設定](/docs/config)中使用 `command` 選項: - -```json title="opencode.jsonc" {4-12} -{ - "$schema": "https://opencode.ai/config.json", - "command": { - // This becomes the name of the command - "test": { - // This is the prompt that will be sent to the LLM - "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.", - // This is shown as the description in the TUI - "description": "Run tests with coverage", - "agent": "build", - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -現在您可以在 TUI 中執行這個指令: - -```bash frame="none" -/test -``` - ---- - -### Markdown - -您還可以使用 markdown 檔案定義指令。將它們放在: - -- 全域:`~/.config/opencode/commands/` -- 專案層級:`.opencode/commands/` - -```markdown title="~/.config/opencode/commands/test.md" ---- -description: Run tests with coverage -agent: build -model: anthropic/claude-3-5-sonnet-20241022 ---- - -Run the full test suite with coverage report and show any failures. -Focus on the failing tests and suggest fixes. -``` - -markdown 檔案名稱即為指令名稱。例如,`test.md` 允許您執行: - -```bash frame="none" -/test -``` - ---- - -## 提示詞設定 - -自訂指令的提示詞支援多種特殊佔位符和語法。 - ---- - -### 參數 - -使用 `$ARGUMENTS` 佔位符向指令傳遞參數。 - -```md title=".opencode/commands/component.md" ---- -description: Create a new component ---- - -Create a new React component named $ARGUMENTS with TypeScript support. -Include proper typing and basic structure. -``` - -帶參數執行指令: - -```bash frame="none" -/component Button -``` - -`$ARGUMENTS` 將被替換為 `Button`。 - -您還可以使用位置參數存取各個參數: - -- `$1` - 第一個參數 -- `$2` - 第二個參數 -- `$3` - 第三個參數 -- 以此類推... - -例如: - -```md title=".opencode/commands/create-file.md" ---- -description: Create a new file with content ---- - -Create a file named $1 in the directory $2 -with the following content: $3 -``` - -執行指令: - -```bash frame="none" -/create-file config.json src "{ \"key\": \"value\" }" -``` - -替換結果為: - -- `$1` 替換為 `config.json` -- `$2` 替換為 `src` -- `$3` 替換為 `{ "key": "value" }` - ---- - -### Shell 輸出 - -使用 _!`command`_ 將 [bash 指令](/docs/tui#bash-commands)輸出注入到提示詞中。 - -例如,建立一個分析測試覆蓋率的自訂指令: - -```md title=".opencode/commands/analyze-coverage.md" ---- -description: Analyze test coverage ---- - -Here are the current test results: -!`npm test` - -Based on these results, suggest improvements to increase coverage. -``` - -或者查看最近的變更: - -```md title=".opencode/commands/review-changes.md" ---- -description: Review recent changes ---- - -Recent git commits: -!`git log --oneline -10` - -Review these changes and suggest any improvements. -``` - -指令在專案的根目錄中執行,其輸出會成為提示詞的一部分。 - ---- - -### 檔案參照 - -使用 `@` 後跟檔案名稱在指令中參照檔案。 - -```md title=".opencode/commands/review-component.md" ---- -description: Review component ---- - -Review the component in @src/components/Button.tsx. -Check for performance issues and suggest improvements. -``` - -檔案內容會自動包含在提示詞中。 - ---- - -## 選項 - -讓我們詳細了解各設定選項。 - ---- - -### Template - -`template` 選項定義執行指令時傳送給 LLM 的提示詞。 - -```json title="opencode.json" -{ - "command": { - "test": { - "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes." - } - } -} -``` - -這是一個**必需的**設定選項。 - ---- - -### Description - -使用 `description` 選項提供指令功能的簡要說明。 - -```json title="opencode.json" -{ - "command": { - "test": { - "description": "Run tests with coverage" - } - } -} -``` - -當您輸入指令時,這將在 TUI 中顯示為說明。 - ---- - -### Agent - -使用 `agent` 設定可選擇指定由哪個[代理](/docs/agents)執行此指令。 -如果這是一個[子代理](/docs/agents/#subagents),該指令預設會觸發子代理呼叫。 -要停用此行為,請將 `subtask` 設定為 `false`。 - -```json title="opencode.json" -{ - "command": { - "review": { - "agent": "plan" - } - } -} -``` - -這是一個**可選的**設定選項。如果未指定,預設使用您當前的代理。 - ---- - -### Subtask - -使用 `subtask` 布林值強制指令觸發[子代理](/docs/agents/#subagents)呼叫。 -如果您希望指令不污染主要上下文,這會很有用,它會**強制**代理作為子代理執行, -即使[代理](/docs/agents)設定中的 `mode` 設定為 `primary`。 - -```json title="opencode.json" -{ - "command": { - "analyze": { - "subtask": true - } - } -} -``` - -這是一個**可選的**設定選項。 - ---- - -### Model - -使用 `model` 設定覆寫此指令的預設模型。 - -```json title="opencode.json" -{ - "command": { - "analyze": { - "model": "anthropic/claude-3-5-sonnet-20241022" - } - } -} -``` - -這是一個**可選的**設定選項。 - ---- - -## 內建指令 - -OpenCode 包含多個內建指令,如 `/init`、`/undo`、`/redo`、`/share`、`/help`;[了解更多](/docs/tui#commands)。 - -:::note -自訂指令可以覆寫內建指令。 -::: - -如果您定義了同名的自訂指令,它將覆寫內建指令。 diff --git a/packages/web/src/content/docs/zh-tw/config.mdx b/packages/web/src/content/docs/zh-tw/config.mdx deleted file mode 100644 index 6a670f2cf8..0000000000 --- a/packages/web/src/content/docs/zh-tw/config.mdx +++ /dev/null @@ -1,687 +0,0 @@ ---- -title: 設定 -description: 使用 OpenCode JSON 設定。 ---- - -您可以使用 JSON 設定檔來設定 OpenCode。 - ---- - -## 格式 - -OpenCode 支援 **JSON** 和 **JSONC**(帶註解的 JSON)格式。 - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-5", - "autoupdate": true, - "server": { - "port": 4096, - }, -} -``` - ---- - -## 位置 - -您可以將設定放置在不同的位置,它們具有不同的優先順序。 - -:::note -設定檔是**合併在一起**的,而不是替換。 -::: - -設定檔是合併在一起的,而不是被替換。來自以下設定位置的設定會被合併。後面的設定僅在鍵衝突時覆寫前面的設定。所有設定中的非衝突設定都會被保留。 - -例如,如果您的全域設定設定了 `autoupdate: true`,而您的專案設定設定了 `model: "anthropic/claude-sonnet-4-5"`,則最終設定將包含這兩個設定。 - ---- - -### 優先順序 - -設定來源按以下順序載入(後面的來源覆寫前面的來源): - -1. **遠端設定**(來自 `.well-known/opencode`)- 組織預設值 -2. **全域設定**(`~/.config/opencode/opencode.json`)- 使用者偏好 -3. **自訂設定**(`OPENCODE_CONFIG` 環境變數)- 自訂覆寫 -4. **專案設定**(專案中的 `opencode.json`)- 專案特定設定 -5. **`.opencode` 目錄** - 代理、指令、外掛程式 -6. **內嵌設定**(`OPENCODE_CONFIG_CONTENT` 環境變數)- 執行時覆寫 - -這意味著專案設定可以覆寫全域預設值,全域設定可以覆寫遠端組織預設值。 - -:::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 中,並使用與全域設定相同的 Schema。 - ---- - -### 自訂路徑 - -使用 `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` 目錄之後載入,因此**可以覆寫**它們的設定。 - ---- - -## Schema - -設定檔具有在 [**`opencode.ai/config.json`**](https://opencode.ai/config.json) 中定義的 Schema。 - -您的編輯器應該能夠基於該 Schema 進行驗證和自動補全。 - ---- - -### 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` - 控制差異呈現方式。`"auto"` 根據終端機寬度自適應,`"stacked"` 始終顯示單列。 - -使用 `OPENCODE_TUI_CONFIG` 指向自訂 TUI 設定檔。 - -`opencode.json` 中的舊版 `theme`、`keybinds` 和 `tui` 鍵已被棄用,並將在可能的情況下自動遷移。 - -[在此了解更多關於 TUI 的資訊](/docs/tui)。 - ---- - -### 伺服器 - -您可以透過 `server` 選項為 `opencode serve` 和 `opencode web` 指令設定伺服器設定。 - -```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` - 從基於瀏覽器的用戶端使用 HTTP 伺服器時允許 CORS 的額外來源。值必須是完整的來源(通訊協定 + 主機 + 可選連接埠),例如 `https://app.example.com`。 - -[在此了解更多關於伺服器的資訊](/docs/server)。 - ---- - -### 工具 - -您可以透過 `tools` 選項管理 LLM 可以使用的工具。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "tools": { - "write": false, - "bash": false - } -} -``` - -[在此了解更多關於工具的資訊](/docs/tools)。 - ---- - -### 模型 - -您可以透過 `provider`、`model` 和 `small_model` 選項在 OpenCode 設定中設定要使用的供應商和模型。 - -```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` - Bedrock 的 AWS 區域(預設為 `AWS_REGION` 環境變數或 `us-east-1`) -- `profile` - 來自 `~/.aws/credentials` 的 AWS 命名設定檔(預設為 `AWS_PROFILE` 環境變數) -- `endpoint` - VPC 端點的自訂端點 URL。這是通用 `baseURL` 選項使用 AWS 特定術語的別名。如果兩者都指定,`endpoint` 優先。 - -:::note -Bearer Token(`AWS_BEARER_TOKEN_BEDROCK` 或 `/connect`)優先於基於設定檔的身分驗證。詳情請參見[認證優先級](/docs/providers#authentication-precedence)。 -::: - -[了解更多關於 Amazon Bedrock 設定的資訊](/docs/providers#amazon-bedrock)。 - ---- - -### 主題 - -在 `tui.json` 中設定您的 UI 主題。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - -[在此了解更多](/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": { - // Disable file modification tools for review-only agent - "write": false, - "edit": false, - }, - }, - }, -} -``` - -您還可以使用 `~/.config/opencode/agents/` 或 `.opencode/agents/` 中的 Markdown 檔案定義代理。[在此了解更多](/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)功能。 - -```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", - }, - }, -} -``` - -您還可以使用 `~/.config/opencode/commands/` 或 `.opencode/commands/` 中的 Markdown 檔案定義指令。[在此了解更多](/docs/commands)。 - ---- - -### 快捷鍵 - -在 `tui.json` 中自訂快捷鍵。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.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": false, - "reserved": 10000 - } -} -``` - -- `auto` - 當上下文已滿時自動壓縮工作階段(預設值:`true`)。 -- `prune` - 刪除舊的工具輸出以節省 Token(預設值:`false`)。 -- `reserved` - 壓縮時的 Token 緩衝區。保留足夠的窗口以避免壓縮過程中溢出。 - ---- - -### 檔案監看器 - -您可以透過 `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/` 中。您還可以透過 `plugin` 選項從 npm 載入外掛程式。 - -```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` 選項接受供應商 ID 的陣列。當某個供應商被停用時: - -- 即使設定了環境變數,也不會被載入。 -- 即使透過 `/connect` 指令設定了 API 金鑰,也不會被載入。 -- 該供應商的模型不會出現在模型選擇列表中。 - ---- - -### 啟用供應商 - -您可以透過 `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 金鑰等敏感資料保存在單獨的檔案中。 -- 引入大型指示檔案而不會使設定變得雜亂。 -- 在多個設定檔之間共享通用設定片段。 diff --git a/packages/web/src/content/docs/zh-tw/custom-tools.mdx b/packages/web/src/content/docs/zh-tw/custom-tools.mdx deleted file mode 100644 index 86c2b0467f..0000000000 --- a/packages/web/src/content/docs/zh-tw/custom-tools.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: 自訂工具 -description: 建立 LLM 可在 OpenCode 中呼叫的工具。 ---- - -自訂工具是您建立的函式,LLM 可以在對話過程中呼叫它們。它們與 OpenCode 的[內建工具](/docs/tools)(如 `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` 的工具。 - ---- - -#### 單檔案多工具 - -您也可以從單個檔案中匯出多個工具。每個匯出都會成為**一個獨立的工具**,命名格式為 **`_`**: - -```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` 取得 git worktree 根目錄。 - ---- - -## 範例 - -### 用 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 指令碼。 diff --git a/packages/web/src/content/docs/zh-tw/ecosystem.mdx b/packages/web/src/content/docs/zh-tw/ecosystem.mdx deleted file mode 100644 index 99067acf46..0000000000 --- a/packages/web/src/content/docs/zh-tw/ecosystem.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -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) | 在隔離的 Daytona 沙箱中自動執行 OpenCode 工作階段,支援 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) | 多分支開發容器隔離,支援淺層複製和自動分配連接埠 | -| [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) | 透過修剪過時的工具輸出來最佳化 Token 使用 | -| [opencode-vibeguard](https://github.com/inkdust2021/opencode-vibeguard) | 在呼叫 LLM 之前將秘密/PII 編輯為 VibeGuard 風格的預留位置;並在本地還原 | -| [opencode-websearch-cited](https://github.com/ghoulr/opencode-websearch-cited.git) | 為受支援的供應商新增原生網頁搜尋支援,採用 Google grounded 風格 | -| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | 使 AI 代理能夠在 PTY 中執行背景處理程序,並向其傳送互動式輸入 | -| [opencode-shell-strategy](https://github.com/JRedeker/opencode-shell-strategy) | 非互動式 shell 指令說明——防止依賴 TTY 的操作導致卡住 | -| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | 使用 Wakatime 追蹤 OpenCode 的使用情況 | -| [opencode-md-table-formatter](https://github.com/franlol/opencode-md-table-formatter/tree/main) | 清理 LLM 生成的 Markdown 表格 | -| [opencode-morph-plugin](https://github.com/morphllm/opencode-morph-plugin) | 透過 Morph 提供 Fast Apply 編輯、WarpGrep 程式碼搜尋和上下文壓縮 | -| [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) | 基於 OpenCode 上下文的 AI 驅動自動 Zellij 工作階段命名 | -| [opencode-skillful](https://github.com/zenobi-us/opencode-skillful) | 允許 OpenCode 代理透過技能發現和注入按需延遲載入提示詞 | -| [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) | 使用 cron 語法透過 launchd (Mac) 或 systemd (Linux) 排程週期性任務 | -| [micode](https://github.com/vtemian/micode) | 結構化的腦力激盪 → 計畫 → 實作工作流程,支援工作階段連續性 | -| [octto](https://github.com/vtemian/octto) | 用於 AI 腦力激盪的互動式瀏覽器 UI,支援多問題表單 | -| [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) | OpenCode 的零摩擦 git worktree 管理 | -| [opencode-sentry-monitor](https://github.com/stolinski/opencode-sentry-monitor) | 使用 Sentry AI Monitoring 追蹤與除錯您的 AI 代理 | - ---- - -## 專案 - -| 名稱 | 說明 | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------- | -| [kimaki](https://github.com/remorses/kimaki) | 用於控制 OpenCode 工作階段的 Discord 機器人,基於 SDK 建置 | -| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Neovim 外掛程式,提供編輯器感知的提示詞,基於 API 建置 | -| [portal](https://github.com/hosenur/portal) | 透過 Tailscale/VPN 使用的行動優先 OpenCode Web UI | -| [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | 用於建置 OpenCode 外掛程式的範本 | -| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | OpenCode 的 Neovim 前端——基於終端機的 AI 編碼代理 | -| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Vercel AI SDK 供應商,用於透過 @opencode-ai/sdk 使用 OpenCode | -| [OpenChamber](https://github.com/btriapitsyn/openchamber) | OpenCode 的 Web / 桌面應用程式和 VS Code 擴充功能 | -| [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | 將 OpenCode 嵌入 Obsidian UI 的 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 的桌面、Web、行動和遠端用戶端應用程式 | - ---- - -## 代理 - -| 名稱 | 說明 | -| ----------------------------------------------------------------- | ---------------------------------------------- | -| [Agentic](https://github.com/Cluster444/agentic) | 用於結構化開發的模組化 AI 代理和指令 | -| [opencode-agents](https://github.com/darrenhinde/opencode-agents) | 用於增強工作流程的設定、提示詞、代理和外掛程式 | diff --git a/packages/web/src/content/docs/zh-tw/enterprise.mdx b/packages/web/src/content/docs/zh-tw/enterprise.mdx deleted file mode 100644 index 386cae21c5..0000000000 --- a/packages/web/src/content/docs/zh-tw/enterprise.mdx +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: 企業版 -description: 在您的組織中安全地使用 OpenCode。 ---- - -import config from "../../../../config.mjs" -export const email = `mailto:${config.email}` - -OpenCode 企業版面向希望確保程式碼和資料始終留在自有基礎架構內的組織。它透過集中式設定與您的 SSO 和內部 AI 閘道整合來實現這一目標。 - -:::note -OpenCode 不會儲存您的任何程式碼或上下文資料。 -::: - -開始使用 OpenCode 企業版: - -1. 在團隊內部進行試用。 -2. **聯絡我們**,討論定價和實作方案。 - ---- - -## 試用 - -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 企業版採用按席位定價模型。如果您擁有自己的 LLM 閘道,我們不會對使用的 Token 收取費用。有關定價和實作方案的更多詳情,請**聯絡我們**。 - ---- - -## 部署 - -完成試用並準備好在組織中使用 OpenCode 後,您可以**聯絡我們**,討論定價和實作方案。 - ---- - -### 集中式設定 - -我們可以為您的整個組織設定 OpenCode 的統一集中式設定。 - -該集中式設定可與您的 SSO 供應商整合,確保所有使用者僅存取您的內部 AI 閘道。 - ---- - -### SSO 整合 - -透過集中式設定,OpenCode 可以與您組織的 SSO 供應商整合進行身分驗證。 - -這使得 OpenCode 能夠透過您現有的身分管理系統取得內部 AI 閘道的憑證。 - ---- - -### 內部 AI 閘道 - -透過集中式設定,OpenCode 還可以被設定為僅使用您的內部 AI 閘道。 - -您還可以停用所有其他 AI 供應商,確保所有請求都經過組織核准的基礎架構。 - ---- - -### 自行託管 - -雖然我們建議停用共享頁面以確保您的資料始終不會離開組織,但我們也可以幫助您在自己的基礎架構上自行託管這些頁面。 - -此功能目前已列入我們的路線圖。如果您感興趣,請**告訴我們**。 - ---- - -## 常見問題 - -

-什麼是 OpenCode 企業版? - -OpenCode 企業版面向希望確保程式碼和資料始終留在自有基礎架構內的組織。它透過集中式設定與您的 SSO 和內部 AI 閘道整合來實現這一目標。 - -
- -
-如何開始使用 OpenCode 企業版? - -只需在團隊內部開始試用即可。OpenCode 預設不會儲存您的程式碼或上下文資料,因此可以輕鬆上手。 - -然後**聯絡我們**,討論定價和實作方案。 - -
- -
-企業版定價如何運作? - -我們提供按席位的企業版定價。如果您擁有自己的 LLM 閘道,我們不會對使用的 Token 收取費用。如需了解更多詳情,請**聯絡我們**,取得根據您組織需求訂製的報價。 - -
- -
-我的資料在 OpenCode 企業版中是否安全? - -是的。OpenCode 不會儲存您的程式碼或上下文資料。所有處理均在本地完成,或透過直接 API 呼叫傳送至您的 AI 供應商。透過集中式設定和 SSO 整合,您的資料將安全地保留在組織的基礎架構內。 - -
- -
-我們可以使用自己的私有 NPM 註冊表嗎? - -OpenCode 透過 Bun 原生的 `.npmrc` 檔案支援來支援私有 npm 註冊表。如果您的組織使用私有註冊表(例如 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 之前登入私有註冊表,以確保能夠從您的企業註冊表安裝套件。 - -
diff --git a/packages/web/src/content/docs/zh-tw/formatters.mdx b/packages/web/src/content/docs/zh-tw/formatters.mdx deleted file mode 100644 index bb462a66d3..0000000000 --- a/packages/web/src/content/docs/zh-tw/formatters.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: 格式化器 -description: OpenCode 使用特定語言的格式化器。 ---- - -OpenCode 會在檔案寫入或編輯後,自動使用特定語言的格式化器對其進行格式化。這確保了生成的程式碼遵循您專案的程式碼風格。 - ---- - -## 內建格式化器 - -OpenCode 內建了多種適用於主流語言和框架的格式化器。下表列出了各格式化器、支援的副檔名以及所需的指令或設定選項。 - -| 格式化器 | 副檔名 | 要求 | -| -------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | -| air | .R | `air` 指令可用 | -| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml 及[更多](https://biomejs.dev/) | `biome.json(c)` 設定檔 | -| cargofmt | .rs | `cargo fmt` 指令可用 | -| clang-format | .c, .cpp, .h, .hpp, .ino 及[更多](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` 設定檔 | -| cljfmt | .clj, .cljs, .cljc, .edn | `cljfmt` 指令可用 | -| dart | .dart | `dart` 指令可用 | -| dfmt | .d | `dfmt` 指令可用 | -| gleam | .gleam | `gleam` 指令可用 | -| gofmt | .go | `gofmt` 指令可用 | -| htmlbeautifier | .erb, .html.erb | `htmlbeautifier` 指令可用 | -| ktlint | .kt, .kts | `ktlint` 指令可用 | -| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | `mix` 指令可用 | -| nixfmt | .nix | `nixfmt` 指令可用 | -| ocamlformat | .ml, .mli | `ocamlformat` 指令可用且存在 `.ocamlformat` 設定檔 | -| ormolu | .hs | `ormolu` 指令可用 | -| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | `package.json` 中有 `oxfmt` 相依套件,且設定了[實驗性環境變數旗標](/docs/cli/#experimental) | -| pint | .php | `composer.json` 中有 `laravel/pint` 相依套件 | -| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml 及[更多](https://prettier.io/docs/en/index.html) | `package.json` 中有 `prettier` 相依套件 | -| rubocop | .rb, .rake, .gemspec, .ru | `rubocop` 指令可用 | -| ruff | .py, .pyi | `ruff` 指令可用且有相應設定 | -| rustfmt | .rs | `rustfmt` 指令可用 | -| shfmt | .sh, .bash | `shfmt` 指令可用 | -| standardrb | .rb, .rake, .gemspec, .ru | `standardrb` 指令可用 | -| terraform | .tf, .tfvars | `terraform` 指令可用 | -| uv | .py, .pyi | `uv` 指令可用 | -| zig | .zig, .zon | `zig` 指令可用 | - -因此,如果您的專案 `package.json` 中包含 `prettier`,OpenCode 會自動使用它進行格式化。 - ---- - -## 工作原理 - -當 OpenCode 寫入或編輯檔案時,它會: - -1. 根據所有已啟用的格式化器檢查副檔名。 -2. 對檔案執行相應的格式化指令。 -3. 自動套用格式化變更。 - -整個過程在背景完成,無需任何手動操作即可保持程式碼風格的一致性。 - ---- - -## 設定 - -您可以透過 OpenCode 設定中的 `formatter` 部分自訂格式化器。 - -```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` 佔位符**會被替換為待格式化檔案的路徑。 diff --git a/packages/web/src/content/docs/zh-tw/github.mdx b/packages/web/src/content/docs/zh-tw/github.mdx deleted file mode 100644 index f12de29077..0000000000 --- a/packages/web/src/content/docs/zh-tw/github.mdx +++ /dev/null @@ -1,321 +0,0 @@ ---- -title: GitHub -description: 在 GitHub Issue 和 Pull Request 中使用 OpenCode。 ---- - -OpenCode 可以與您的 GitHub 工作流程整合。在評論中提及 `/opencode` 或 `/oc`,OpenCode 就會在您的 GitHub Actions Runner 中執行任務。 - ---- - -## 功能特性 - -- **Issue 分類**:讓 OpenCode 調查某個 Issue 並為您做出解釋。 -- **修復與實作**:讓 OpenCode 修復 Issue 或實作某個功能。它會在新分支中工作,並提交包含所有變更的 PR。 -- **安全可靠**:OpenCode 在您自己的 GitHub Runner 中執行。 - ---- - -## 安裝 - -在一個位於 GitHub 儲存庫中的專案裡執行以下指令: - -```bash -opencode github install -``` - -該指令會引導您完成 GitHub App 的安裝、工作流程的建立以及密鑰的設定。 - ---- - -### 手動設定 - -您也可以手動進行設定。 - -1. **安裝 GitHub App** - - 前往 [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent),確保已在目標儲存庫中安裝該應用程式。 - -2. **新增工作流程** - - 將以下工作流程檔案新增到儲存庫的 `.github/workflows/opencode.yml` 中。請確保在 `env` 中設定合適的 `model` 及所需的 API 金鑰。 - - ```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`:要使用的代理,必須是主代理。如果未找到,則回退到設定中的 `default_agent`,若仍未找到則使用 `"build"`。 -- `share`:是否共享 OpenCode 工作階段。對於公開儲存庫,預設為 **true**。 -- `prompt`:可選的自訂提示詞,用於覆寫預設行為。可透過此項自訂 OpenCode 處理請求的方式。 -- `token`:可選的 GitHub 存取權杖,用於執行建立評論、提交變更和建立 Pull Request 等操作。預設情況下,OpenCode 使用 OpenCode GitHub App 的安裝存取權杖,因此提交、評論和 Pull Request 會顯示為來自該應用程式。 - - 您也可以使用 GitHub Action Runner 內建的 [`GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token),而無需安裝 OpenCode GitHub App。只需確保在工作流程中授予所需的權限: - - ```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 會讀取上下文,並可建立分支、提交 PR 或回覆。 | -| `pull_request_review_comment` | 在 PR 中對特定程式碼行發表評論 | 在程式碼審查時提及 `/opencode` 或 `/oc`。OpenCode 會接收檔案路徑、行號和 diff 上下文。 | -| `issues` | Issue 被建立或編輯 | 在 Issue 建立或修改時自動觸發 OpenCode。需要提供 `prompt` 輸入。 | -| `pull_request` | PR 被建立或更新 | 在 PR 被開啟、同步或重新開啟時自動觸發 OpenCode。適用於自動化審查情境。 | -| `schedule` | 基於 Cron 的定時任務 | 按排程執行 OpenCode。需要提供 `prompt` 輸入。輸出會寫入日誌和 PR(沒有 Issue 可供評論)。 | -| `workflow_dispatch` | 從 GitHub UI 手動觸發 | 透過 Actions 分頁按需觸發 OpenCode。需要提供 `prompt` 輸入。輸出會寫入日誌和 PR。 | - -### 定時任務範例 - -按排程執行 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. -``` - -對於定時事件,`prompt` 輸入為**必填**,因為沒有評論可供提取指令。定時工作流程在執行時沒有使用者上下文來進行權限檢查,因此如果您希望 OpenCode 建立分支或 PR,工作流程必須授予 `contents: write` 和 `pull-requests: write` 權限。 - ---- - -### Pull Request 範例 - -在 PR 被建立或更新時自動進行審查: - -```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 進行審查。 - ---- - -### Issue 分類範例 - -自動分類新建的 Issue。以下範例會過濾掉註冊不滿 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 的行為。 - -```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 -``` - -這對於在專案中實施特定的審查標準、編碼規範或關注重點非常有用。 - ---- - -## 範例 - -以下是在 GitHub 中使用 OpenCode 的一些範例。 - -- **解釋 Issue** - - 在 GitHub Issue 中新增以下評論: - - ``` - /opencode explain this issue - ``` - - OpenCode 會閱讀整個討論串(包括所有評論),並回覆一份清晰的解釋。 - -- **修復 Issue** - - 在 GitHub Issue 中輸入: - - ``` - /opencode fix this - ``` - - OpenCode 會建立一個新分支,實作變更,並提交一個包含所有修改的 PR。 - -- **審查 PR 並進行修改** - - 在 GitHub PR 上留下以下評論: - - ``` - Delete the attachment from S3 when the note is removed /oc - ``` - - OpenCode 會實作所請求的變更並將其提交到同一個 PR 中。 - -- **審查特定程式碼行** - - 在 PR 的「Files」分頁中直接對程式碼行留下評論。OpenCode 會自動偵測檔案、行號和 diff 上下文,從而提供精準的回應。 - - ``` - [Comment on specific lines in Files tab] - /oc add error handling here - ``` - - 當您對特定程式碼行發表評論時,OpenCode 會接收到: - - 正在審查的具體檔案 - - 特定的程式碼行 - - 周圍的 diff 上下文 - - 行號資訊 - - 這樣您就可以提出更有針對性的請求,而無需手動指定檔案路徑或行號。 diff --git a/packages/web/src/content/docs/zh-tw/gitlab.mdx b/packages/web/src/content/docs/zh-tw/gitlab.mdx deleted file mode 100644 index d1ebccfebe..0000000000 --- a/packages/web/src/content/docs/zh-tw/gitlab.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: GitLab -description: 在 GitLab Issue 和合併請求中使用 OpenCode。 ---- - -OpenCode 透過 GitLab CI/CD 管線或 GitLab Duo 與您的 GitLab 工作流程整合。 - -在這兩種情況下,OpenCode 都將在您的 GitLab Runner 上執行。 - ---- - -## GitLab CI - -OpenCode 可以在常規的 GitLab 管線中執行。您可以將其作為 [CI 元件](https://docs.gitlab.com/ee/ci/components/) 整合到管線中。 - -這裡我們使用的是社群建立的 OpenCode CI/CD 元件 — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode)。 - ---- - -### 功能特性 - -- **按任務自訂設定**:使用自訂設定目錄來設定 OpenCode,例如 `./config/#custom-directory`,以便為每次 OpenCode 呼叫啟用或停用特定功能。 -- **最小化設定**:CI 元件會在背景完成 OpenCode 的設定,您只需建立 OpenCode 設定和初始提示詞即可。 -- **靈活可自訂**:CI 元件支援多種輸入參數來自訂其行為。 - ---- - -### 設定 - -1. 將您的 OpenCode 身分驗證 JSON 作為檔案類型的 CI 環境變數儲存在 **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 管線中執行任務。 - ---- - -### 功能特性 - -- **Issue 分類**:讓 OpenCode 調查某個 Issue 並為您解釋。 -- **修復與實作**:讓 OpenCode 修復 Issue 或實作某個功能。它會建立一個新分支,並提交包含變更的合併請求。 -- **安全可靠**:OpenCode 在您的 GitLab Runner 上執行。 - ---- - -### 設定 - -OpenCode 在您的 GitLab CI/CD 管線中執行,以下是設定所需的步驟: - -:::tip -請查看 [**GitLab 文件**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) 取得最新說明。 -::: - -1. 設定您的 GitLab 環境 -2. 設定 CI/CD -3. 取得 AI 模型供應商的 API 金鑰 -4. 建立服務帳戶 -5. 設定 CI/CD 變數 -6. 建立流程設定檔,以下是一個範例: - -
- - Flow configuration - - ```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. - - - 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. - - " - - 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 - ``` - -
- -詳細說明請參考 [GitLab CLI agents 文件](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/)。 - ---- - -### 範例 - -以下是在 GitLab 中使用 OpenCode 的一些範例。 - -:::tip -您可以設定使用不同於 `@opencode` 的觸發詞。 -::: - -- **解釋 Issue** - - 在 GitLab Issue 中新增以下評論。 - - ``` - @opencode explain this issue - ``` - - OpenCode 會閱讀該 Issue 並回覆清晰的解釋。 - -- **修復 Issue** - - 在 GitLab Issue 中輸入: - - ``` - @opencode fix this - ``` - - OpenCode 會建立一個新分支,實作變更,並提交包含變更的合併請求。 - -- **審查合併請求** - - 在 GitLab 合併請求中留下以下評論。 - - ``` - @opencode review this merge request - ``` - - OpenCode 會審查合併請求並提供回饋。 diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx deleted file mode 100644 index 49e146d5f5..0000000000 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: Go -description: 專為開源寫程式模型提供的低成本訂閱服務。 ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Go 是一項低成本的訂閱服務——**首月 $5 美元**,之後**每月 $10 美元**——讓您能穩定使用受歡迎的開源寫程式模型。 - -Go 的運作方式與 OpenCode 中的任何其他供應商相同。您訂閱 OpenCode Go 並取得您的 API key。這是**完全可選的**,您不需要使用它也能使用 OpenCode。 - -它主要為國際使用者設計,模型託管於美國、歐盟和新加坡,以提供全球穩定的存取。 - ---- - -## 背景 - -開源模型已經變得非常強大。它們在寫程式任務上的表現,現在已經接近專有模型。而且因為有許多供應商競爭提供服務,它們通常便宜得多。 - -然而,要獲得穩定、低延遲的存取可能很困難。各家供應商的品質和可用性不一。 - -:::tip -我們測試了一組精選的模型和供應商,它們與 OpenCode 搭配運作良好。 -::: - -為了解決這個問題,我們做了幾件事: - -1. 我們測試了一組精選的開源模型,並與它們的團隊討論如何最佳化運行。 -2. 接著我們與幾家供應商合作,確保這些模型被正確地提供服務。 -3. 最後,我們對模型與供應商的組合進行了基準測試,並整理出一份我們樂於推薦的清單。 - -OpenCode Go 讓您可以存取這些模型,**首月只需 $5 美元**,之後**每月 $10 美元**。 - ---- - -## 運作方式 - -OpenCode Go 的運作方式與 OpenCode 中的任何其他供應商相同。 - -1. 您登入 **OpenCode Zen**,訂閱 Go,然後複製您的 API key。 -2. 您在 TUI 中執行 `/connect` 命令,選擇 `OpenCode Go`,然後貼上您的 API key。 -3. 在 TUI 中執行 `/models` 即可查看透過 Go 可用的模型清單。 - -:::note -每個工作區只能有一位成員訂閱 OpenCode Go。 -::: - -目前的模型清單包括: - -- **GLM-5.2** -- **GLM-5.1** -- **Kimi K2.7 Code** -- **Kimi K2.6** -- **MiMo-V2.5** -- **MiMo-V2.5-Pro** -- **MiniMax M3** -- **MiniMax M2.7** -- **Qwen3.7 Max** -- **Qwen3.7 Plus** -- **Qwen3.6 Plus** -- **DeepSeek V4 Pro** -- **DeepSeek V4 Flash** - -隨著我們測試並加入新模型,模型清單可能會有所變動。 - ---- - -## 使用限制 - -OpenCode Go 包含以下限制: - -- **5 小時限制** — $12 美元的使用量 -- **每週限制** — $30 美元的使用量 -- **每月限制** — $60 美元的使用量 - -限制是以美元價值來定義。這意味著您的實際請求次數取決於您使用的模型。像 DeepSeek V4 Flash 這樣較便宜的模型允許更多的請求次數,而像 GLM-5.2 這樣成本較高的模型則允許較少次數。 - -下表提供了基於典型 Go 使用模式的預估請求次數: - -| Model | 每 5 小時請求數 | 每週請求數 | 每月請求數 | -| ----------------- | --------------- | ---------- | ---------- | -| GLM-5.2 | 880 | 2,150 | 4,300 | -| GLM-5.1 | 880 | 2,150 | 4,300 | -| Kimi K2.6 | 1,150 | 2,880 | 5,750 | -| Kimi K2.7 Code | 1,350 | 4,630 | 9,250 | -| MiMo-V2.5 | 30,100 | 75,200 | 150,400 | -| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 | -| MiniMax M3 | 3,200 | 8,000 | 16,000 | -| MiniMax M2.7 | 3,400 | 8,500 | 17,000 | -| Qwen3.7 Max | 950 | 2,390 | 4,770 | -| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 | -| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 | -| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 | -| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 | - -這些預估值是基於觀察到的平均請求模式: - -- GLM-5.2/5.1 — 每次請求 700 個輸入 token、52,000 個快取 token、150 個輸出 token -- Kimi K2.7 Code/K2.6 — 每次請求 870 個輸入 token、55,000 個快取 token、200 個輸出 token -- DeepSeek V4 Pro — 每次請求 750 個輸入 token、82,000 個快取 token、290 個輸出 token -- DeepSeek V4 Flash — 每次請求 790 個輸入 token、68,000 個快取 token、280 個輸出 token -- MiniMax M3 — 每次請求 510 個輸入 token、56,000 個快取 token、190 個輸出 token -- MiniMax M2.7 — 每次請求 300 個輸入 token、55,000 個快取 token、125 個輸出 token -- Qwen3.7 Max — 每次請求 420 個輸入 token、66,000 個快取 token、200 個輸出 token -- Qwen3.7 Plus — 每次請求 500 個輸入 token、57,000 個快取 token、190 個輸出 token -- Qwen3.6 Plus — 每次請求 500 個輸入 token、57,000 個快取 token、190 個輸出 token -- MiMo-V2.5 — 每次請求 830 個輸入 token、71,500 個快取 token、295 個輸出 token -- MiMo-V2.5-Pro — 每次請求 790 個輸入 token、86,000 個快取 token、305 個輸出 token - -這些預估值也基於以下每 1M tokens 的價格: - -| 模型 | 輸入 | 輸出 | 快取讀取 | 快取寫入 | -| ---------------------------- | ----- | ----- | -------- | -------- | -| GLM-5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM-5.1 | $1.40 | $4.40 | $0.26 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| MiMo V2.5 | $0.14 | $0.28 | $0.0028 | - | -| MiMo V2.5 Pro | $1.74 | $3.48 | $0.0145 | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | $0.375 | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus (≤ 256K tokens) | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.7 Plus (> 256K tokens) | $1.20 | $4.80 | $0.12 | $1.50 | -| Qwen3.6 Plus (≤ 256K tokens) | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.6 Plus (> 256K tokens) | $2.00 | $6.00 | $0.20 | $2.50 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.0145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.0028 | - | - -您可以在 **console** 中追蹤您目前的使用量。 - -:::tip -如果您達到了使用限制,您可以繼續使用免費模型。 -::: - -使用限制可能會隨著我們從早期使用情況和回饋中學習而有所調整。 - ---- - -### 超出限制的使用量 - -如果您在您的 Zen 餘額中也有額度,您可以在 console 中啟用 **Use balance** 選項。啟用後,當您達到使用限制時,Go 將會改用您的 Zen 餘額,而不是阻擋請求。 - ---- - -## 端點 - -您也可以透過以下 API 端點存取 Go 模型。 - -| 模型 | 模型 ID | 端點 | AI SDK 套件 | -| ----------------- | ----------------- | ------------------------------------------------ | --------------------------- | -| GLM-5.2 | glm-5.2 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM-5.1 | glm-5.1 | `https://opencode.ai/zen/go/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Kimi K2.7 Code | kimi-k2.7-code | `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.5 | mimo-v2.5 | `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` | -| MiniMax M3 | minimax-m3 | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/go/v1/messages` | `@ai-sdk/anthropic` | - -您的 OpenCode 設定中的 [model id](/docs/config/#models) 使用 `opencode-go/` 格式。例如,Kimi K2.7 Code 在設定中應使用 `opencode-go/kimi-k2.7-code`。 - ---- - -### 模型 - -你可以從以下位置取得所有可用模型及其中繼資料的完整清單: - -``` -https://opencode.ai/zen/go/v1/models -``` - ---- - -## 隱私權 - -此方案主要為國際使用者設計,模型部署於 US、EU 與 Singapore,以提供穩定的全球存取體驗。我們的供應商遵循零保留政策,不會將你的資料用於模型訓練。 - ---- - -## 目標 - -我們建立 OpenCode Go 的目的是: - -1. 透過低成本的訂閱服務,讓更多人能**輕鬆獲得** AI 寫程式的協助。 -2. 提供**穩定可靠**的途徑來存取最好的開源寫程式模型。 -3. 精選經過**測試與效能評估**、適合寫程式代理使用的模型。 -4. 允許您在 OpenCode 中同時使用任何其他供應商,確保**不被單一廠商綁定**。 diff --git a/packages/web/src/content/docs/zh-tw/ide.mdx b/packages/web/src/content/docs/zh-tw/ide.mdx deleted file mode 100644 index eee3e8c609..0000000000 --- a/packages/web/src/content/docs/zh-tw/ide.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: IDE -description: 適用於 VS Code、Cursor 及其他 IDE 的 OpenCode 擴充功能 ---- - -OpenCode 可與 VS Code、Cursor 或任何支援終端機的 IDE 整合。只需在終端機中執行 `opencode` 即可開始使用。 - ---- - -## 用法 - -- **快速啟動**:使用 `Cmd+Esc`(Mac)或 `Ctrl+Esc`(Windows/Linux)在分割終端機視圖中開啟 OpenCode,如果已有終端機工作階段正在執行,則會自動聚焦到該工作階段。 -- **新建工作階段**:使用 `Cmd+Shift+Esc`(Mac)或 `Ctrl+Shift+Esc`(Windows/Linux)啟動新的 OpenCode 終端機工作階段,即使已有工作階段在執行也會新建。您也可以點選介面中的 OpenCode 按鈕。 -- **上下文感知**:自動將當前選取內容或分頁共享給 OpenCode。 -- **檔案參照快捷鍵**:使用 `Cmd+Option+K`(Mac)或 `Alt+Ctrl+K`(Linux/Windows)插入檔案參照。例如 `@File#L37-42`。 - ---- - -## 安裝 - -在 VS Code 及其常見分支(如 Cursor、Windsurf、VSCodium)上安裝 OpenCode: - -1. 開啟 VS Code -2. 開啟整合終端機 -3. 執行 `opencode`——擴充功能將自動安裝 - -如果您希望在 TUI 中執行 `/editor` 或 `/export` 時使用自己的 IDE,需要設定 `export EDITOR="code --wait"`。[了解更多](/docs/tui/#editor-setup)。 - ---- - -### 手動安裝 - -在擴充功能商店中搜尋 **OpenCode**,然後點選 **Install**。 - ---- - -### 疑難排解 - -如果擴充功能未能自動安裝: - -- 確保您是在整合終端機中執行的 `opencode`。 -- 確認您的 IDE 對應的 CLI 指令已安裝: - - 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 有權限安裝擴充功能 diff --git a/packages/web/src/content/docs/zh-tw/index.mdx b/packages/web/src/content/docs/zh-tw/index.mdx deleted file mode 100644 index 89649c3dae..0000000000 --- a/packages/web/src/content/docs/zh-tw/index.mdx +++ /dev/null @@ -1,343 +0,0 @@ ---- -title: 簡介 -description: 開始使用 OpenCode。 ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" -import config from "../../../../config.mjs" -export const console = config.console - -[**OpenCode**](/) 是一個開源的 AI 編碼代理。它提供終端機介面、桌面應用程式和 IDE 擴充功能等多種使用方式。 - -![使用 OpenCode 主題的 OpenCode TUI](../../../assets/lander/screenshot.png) - -讓我們開始吧。 - ---- - -#### 前提條件 - -要在終端機中使用 OpenCode,您需要: - -1. 一款現代終端機模擬器,例如: - - [WezTerm](https://wezterm.org),跨平台 - - [Alacritty](https://alacritty.org),跨平台 - - [Ghostty](https://ghostty.org),Linux 和 macOS - - [Kitty](https://sw.kovidgoyal.net/kitty/),Linux 和 macOS - -2. 您想使用的 LLM 供應商的 API 金鑰。 - ---- - -## 安裝 - -安裝 OpenCode 最簡單的方法是透過安裝指令碼。 - -```bash -curl -fsSL https://opencode.ai/install | bash -``` - -您也可以使用以下方式安裝: - -- **使用 Node.js** - - - - - ```bash - npm install -g opencode-ai - ``` - - - - - ```bash - bun install -g opencode-ai - ``` - - - - - ```bash - pnpm install -g opencode-ai - ``` - - - - - ```bash - yarn global add opencode-ai - ``` - - - - - -- **在 macOS 和 Linux 上使用 Homebrew** - - ```bash - brew install anomalyco/tap/opencode - ``` - - > 我們推薦使用 OpenCode tap 以取得最新版本。官方的 `brew install opencode` formula 由 Homebrew 團隊維護,更新頻率較低。 - -- **在 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 - ``` - -在 Windows 上透過 Bun 安裝 OpenCode 的支援目前正在開發中。 - -您也可以從 [Releases](https://github.com/anomalyco/opencode/releases) 頁面直接下載二進位檔案。 - ---- - -## 設定 - -透過 OpenCode,您可以設定 API 金鑰來使用任意 LLM 供應商。 - -如果您剛開始接觸 LLM 供應商,我們推薦使用 [OpenCode Zen](/docs/zen)。這是一組經過 OpenCode 團隊測試和驗證的精選模型。 - -1. 在 TUI 中執行 `/connect` 指令,選擇 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 -您應該將專案的 `AGENTS.md` 檔案提交到 Git。 -::: - -這有助於 OpenCode 理解專案結構和編碼規範。 - ---- - -## 使用 - -現在您已經準備好使用 OpenCode 來處理專案了,儘管提問吧! - -如果您是第一次使用 AI 編碼代理,以下範例可能會對您有所幫助。 - ---- - -### 提問 - -您可以讓 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 有一個*計畫模式*,該模式下它不會進行任何修改,而是建議*如何*實作該功能。 - - 使用 **Tab** 鍵切換到計畫模式。您會在右下角看到模式指示器。 - - ```bash frame="none" title="Switch to Plan mode" - - ``` - - 接下來描述您希望它做什麼。 - - ```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 - 將圖片拖放到終端機中即可將其新增到提示詞中。 - ::: - - OpenCode 可以掃描您提供的圖片並將其新增到提示詞中。只需將圖片拖放到終端機視窗即可。 - -3. **建置功能** - - 當您對計畫滿意後,再次按 **Tab** 鍵切換回*建置模式*。 - - ```bash frame="none" - - ``` - - 然後讓它開始實施。 - - ```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? -``` - -您可以調整提示詞,讓 OpenCode 重新嘗試。 - -:::tip -您可以多次執行 `/undo` 來復原多次修改。 -::: - -您也**可以使用** `/redo` 指令來重做修改。 - -```bash frame="none" -/redo -``` - ---- - -## 分享 - -您與 OpenCode 的對話可以[與團隊分享](/docs/share)。 - -```bash frame="none" -/share -``` - -這會生成當前對話的連結並複製到剪貼簿。 - -:::note -對話預設不會被分享。 -::: - -這是一個與 OpenCode 的[範例對話](https://opencode.ai/s/4XP1fce5)。 - ---- - -## 個人化 - -以上就是全部內容!您現在已經是 OpenCode 的使用高手了。 - -要讓它更符合您的習慣,我們推薦[選擇一個主題](/docs/themes)、[自訂快捷鍵](/docs/keybinds)、[設定程式碼格式化器](/docs/formatters)、[建立自訂指令](/docs/commands),或者探索 [OpenCode 設定](/docs/config)。 diff --git a/packages/web/src/content/docs/zh-tw/keybinds.mdx b/packages/web/src/content/docs/zh-tw/keybinds.mdx deleted file mode 100644 index 61d902141a..0000000000 --- a/packages/web/src/content/docs/zh-tw/keybinds.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: 快捷鍵 -description: 自訂您的快捷鍵。 ---- - -OpenCode 提供了一系列快捷鍵,您可以透過 `tui.json` 進行自訂。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "keybinds": { - "leader": "ctrl+x", - "app_exit": "ctrl+c,ctrl+d,q", - "editor_open": "e", - "theme_list": "t", - "sidebar_toggle": "b", - "scrollbar_toggle": "none", - "username_toggle": "none", - "status_view": "s", - "tool_details": "none", - "session_export": "x", - "session_new": "n", - "session_list": "l", - "session_timeline": "g", - "session_fork": "none", - "session_rename": "none", - "session_share": "none", - "session_unshare": "none", - "session_interrupt": "escape", - "session_compact": "c", - "session_child_first": "down", - "session_child_cycle": "right", - "session_child_cycle_reverse": "left", - "session_parent": "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": "y", - "messages_undo": "u", - "messages_redo": "r", - "messages_last_user": "none", - "messages_toggle_conceal": "h", - "model_list": "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": "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": "h", - "display_thinking": "none" - } -} -``` - ---- - -## 前導鍵 - -OpenCode 的大多數快捷鍵使用 `leader`(前導鍵)。這可以避免與終端機中的其他快捷鍵衝突。 - -預設情況下,`ctrl+x` 是前導鍵,大多數操作需要您先按下前導鍵,然後再按對應的快捷鍵。例如,要新建一個工作階段,請先按 `ctrl+x`,然後按 `n`。 - -您不一定需要使用前導鍵來設定快捷鍵,但我們建議您這樣做。 - ---- - -## 停用快捷鍵 - -您可以透過在 `tui.json` 中將對應的鍵值設定為 "none" 來停用某個快捷鍵。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.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 - -某些終端機預設不會發送帶修飾鍵的 Enter 鍵。您可能需要設定終端機將 `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,或開啟一個新分頁。 diff --git a/packages/web/src/content/docs/zh-tw/lsp.mdx b/packages/web/src/content/docs/zh-tw/lsp.mdx deleted file mode 100644 index 32e1f05079..0000000000 --- a/packages/web/src/content/docs/zh-tw/lsp.mdx +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: LSP 伺服器 -description: OpenCode 與您的 LSP 伺服器整合。 ---- - -OpenCode 可以與語言伺服器協定(LSP)伺服器整合,將診斷資訊作為 agent 的回饋。 - ---- - -## 內建支援 - -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+)` | -| julials | .jl | 需要已安裝 `julia` 和 `LanguageServer.jl` | -| 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 releases 自動安裝 | -| tinymist | .typ, .typc | 從 GitHub releases 自動安裝 | -| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | 專案中需要 `typescript` 相依套件 | -| vue | .vue | 為 Vue 專案自動安裝 | -| yaml-ls | .yaml, .yml | 自動安裝 Red Hat yaml-language-server | -| zls | .zig, .zon | 需要 `zig` 指令可用 | - -LSP 預設關閉。啟用後,當偵測到上述檔案副檔名且滿足相應要求時,伺服器會啟動。 - -:::note -您可以將 `OPENCODE_DISABLE_LSP_DOWNLOAD` 環境變數設定為 `true` 來停用 LSP 伺服器的自動下載。 -::: - ---- - -## 工作原理 - -啟用 LSP 且 OpenCode 開啟檔案時,它會: - -1. 將檔案副檔名與所有已啟用的 LSP 伺服器進行比對。 -2. 如果對應的 LSP 伺服器尚未執行,則自動啟動它。 - ---- - -## 最佳實踐 - -LSP 可以透過語言伺服器診斷幫助 agent 發現並修復問題。這對某些專案很有用,但不一定總是帶來淨收益。 - -語言伺服器可能與專案不同步、佔用較多記憶體、隨版本或專案表現不同,並拖慢 agent 工作流程。在許多專案中,更好的做法是讓 agent 直接執行 lint、typecheck 或其他診斷類 CLI 工具,這樣錯誤會回到 agent 循環,同時避免這些取捨。將這些指令記錄在 `AGENTS.md` 或 skills 等指示檔中,讓 agent 知道該執行什麼。當您的專案能從額外的語言伺服器回饋中受益時再啟用 LSP。 - ---- - -## 設定 - -您可以透過 OpenCode 設定檔中的 `lsp` 部分來啟用並自訂 LSP 伺服器。 - -要啟用所有內建 LSP 伺服器,請將 `lsp` 設定為 `true`。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true -} -``` - -使用物件可以在保持內建伺服器啟用的同時設定覆寫項或自訂伺服器。 - -```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 伺服器都會被停用。如果另一個設定啟用了 LSP,可將 `lsp` 設定為 `false` 來停用所有 LSP 伺服器: - -```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` - -該檔案應僅包含授權金鑰,不要新增其他任何內容。 diff --git a/packages/web/src/content/docs/zh-tw/mcp-servers.mdx b/packages/web/src/content/docs/zh-tw/mcp-servers.mdx deleted file mode 100644 index 971b48d356..0000000000 --- a/packages/web/src/content/docs/zh-tw/mcp-servers.mdx +++ /dev/null @@ -1,511 +0,0 @@ ---- -title: MCP 伺服器 -description: 新增本地和遠端 MCP 工具。 ---- - -您可以透過 _Model Context Protocol_(MCP)為 OpenCode 新增外部工具。OpenCode 同時支援本地和遠端伺服器。 - -新增後,MCP 工具會自動與內建工具一起提供給 LLM 使用。 - ---- - -#### 注意事項 - -使用 MCP 伺服器時,它會佔用上下文空間。如果您啟用了大量工具,上下文消耗會迅速增加。因此,我們建議謹慎選擇要使用的 MCP 伺服器。 - -:::tip -MCP 伺服器會佔用您的上下文空間,所以請謹慎選擇啟用哪些伺服器。 -::: - -某些 MCP 伺服器(例如 GitHub MCP 伺服器)往往會消耗大量 Token,很容易超出上下文限制。 - ---- - -## 啟用 - -您可以在 [OpenCode 設定](https://opencode.ai/docs/config/)的 `mcp` 欄位下定義 MCP 伺服器。為每個 MCP 指定一個唯一的名稱,在提示詞中可以透過該名稱來參照對應的 MCP。 - -```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` 來停用某個伺服器。當您想臨時停用某個伺服器而不將其從設定中移除時,這個選項非常有用。 - ---- - -### 覆寫遠端預設值 - -組織可以透過其 `.well-known/opencode` 端點提供預設的 MCP 伺服器。這些伺服器可能預設處於停用狀態,允許使用者按需啟用。 - -要啟用組織遠端設定中的某個伺服器,請在本地設定中新增該伺服器並設定 `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 伺服器的啟動指令。您還可以傳入一組環境變數。 - -例如,以下是新增測試用的 [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP 伺服器的方法。 - -```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` | 字串 | 是 | MCP 伺服器連線類型,必須為 `"local"`。 | -| `command` | 陣列 | 是 | 執行 MCP 伺服器的指令及參數。 | -| `environment` | 物件 | | 執行伺服器時設定的環境變數。 | -| `enabled` | 布林值 | | 啟動時啟用或停用該 MCP 伺服器。 | -| `timeout` | 數字 | | 從 MCP 伺服器取得工具的逾時時間(毫秒)。預設為 5000(即 5 秒)。 | - ---- - -## 遠端 - -透過將 `type` 設定為 `"remote"` 來新增遠端 MCP 伺服器。 - -```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` 是遠端 MCP 伺服器的位址,透過 `headers` 選項可以傳入一組請求標頭。 - ---- - -#### 選項 - -| 選項 | 類型 | 必填 | 描述 | -| --------- | ------ | ---- | ----------------------------------------------------------------- | -| `type` | 字串 | 是 | MCP 伺服器連線類型,必須為 `"remote"`。 | -| `url` | 字串 | 是 | 遠端 MCP 伺服器的 URL。 | -| `enabled` | 布林值 | | 啟動時啟用或停用該 MCP 伺服器。 | -| `headers` | 物件 | | 隨請求傳送的請求標頭。 | -| `oauth` | 物件 | | OAuth 身分驗證設定。詳見下方 [OAuth](#oauth) 部分。 | -| `timeout` | 數字 | | 從 MCP 伺服器取得工具的逾時時間(毫秒)。預設為 5000(即 5 秒)。 | - ---- - -## OAuth - -OpenCode 會自動處理遠端 MCP 伺服器的 OAuth 身分驗證。當伺服器需要身分驗證時,OpenCode 將: - -1. 偵測 401 回應並啟動 OAuth 流程 -2. 在伺服器支援的情況下使用**動態用戶端註冊(RFC 7591)** -3. 安全地儲存 Token 以供後續請求使用 - ---- - -### 自動認證 - -對於大多數支援 OAuth 的 MCP 伺服器,無需特殊設定。只需設定遠端伺服器即可: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "mcp": { - "my-oauth-server": { - "type": "remote", - "url": "https://mcp.example.com/mcp" - } - } -} -``` - -如果伺服器需要身分驗證,OpenCode 會在您首次使用時提示您進行認證。您也可以使用 `opencode mcp auth ` [手動觸發認證流程](#authenticating)。 - ---- - -### 預先註冊 - -如果您已經從 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 會將 Token 安全地儲存在 `~/.local/share/opencode/mcp-auth.json` 中。 - ---- - -#### 停用 OAuth - -如果您想為某個伺服器停用自動 OAuth(例如,該伺服器使用 API 金鑰而非 OAuth),可以將 `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` | 物件 \| `false` | OAuth 設定物件,或設為 `false` 以停用 OAuth 自動偵測。 | -| `clientId` | 字串 | OAuth 用戶端 ID。如果未提供,將嘗試動態用戶端註冊。 | -| `clientSecret` | 字串 | OAuth 用戶端密鑰(如果授權伺服器要求提供)。 | -| `scope` | 字串 | 授權時請求的 OAuth 作用域。 | - -#### 偵錯 - -如果遠端 MCP 伺服器身分驗證失敗,您可以透過以下方式診斷問題: - -```bash -# 查看所有支援 OAuth 的伺服器的認證狀態 -opencode mcp auth list - -# 偵錯特定伺服器的連線和 OAuth 流程 -opencode mcp debug my-oauth-server -``` - -`mcp debug` 指令會顯示當前認證狀態、測試 HTTP 連線,並嘗試執行 OAuth 發現流程。 - ---- - -## 管理 - -您的 MCP 在 OpenCode 中作為工具使用,與內建工具並列。因此,您可以像管理其他工具一樣,透過 OpenCode 設定來管理它們。 - ---- - -### 全域 - -您可以全域啟用或停用 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-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 模式使用簡單的正規表示式萬用字元規則: - -- `*` 比對零個或多個任意字元(例如,`"my-mcp*"` 比對 `my-mcp_search`、`my-mcp_list` 等) -- `?` 比對恰好一個字元 -- 其他字元按字面值比對 - -:::note -MCP 伺服器工具在註冊時以伺服器名稱作為前綴,因此要停用某個伺服器的所有工具,只需使用: - -``` -"mymcpservername_*": false -``` - -::: - ---- - -## 範例 - -以下是一些常見 MCP 伺服器的設定範例。如果您想記錄其他伺服器的用法,歡迎提交 PR。 - ---- - -### Sentry - -新增 [Sentry MCP 伺服器](https://mcp.sentry.dev) 以與您的 Sentry 專案和問題進行互動。 - -```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 - -新增 [Context7 MCP 伺服器](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` 即可使用 Context7 MCP 伺服器。 - -```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 - -新增 [Grep by Vercel](https://grep.app) MCP 伺服器以搜尋 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. -``` diff --git a/packages/web/src/content/docs/zh-tw/models.mdx b/packages/web/src/content/docs/zh-tw/models.mdx deleted file mode 100644 index 5c945463aa..0000000000 --- a/packages/web/src/content/docs/zh-tw/models.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -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 - ---- - -## 設定預設模型 - -要將某個模型設為預設模型,可以在 OpenCode 設定中設定 `model` 欄位。 - -```json title="opencode.json" {3} -{ - "$schema": "https://opencode.ai/config.json", - "model": "lmstudio/google/gemma-3n-e4b" -} -``` - -這裡完整的 ID 格式為 `provider_id/model_id`。例如,如果您使用 [OpenCode Zen](/docs/zen),則 GPT 5.1 Codex 對應的值為 `opencode/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, - }, - }, - }, - }, - }, - }, -} -``` - -這裡我們為兩個內建模型設定了全域選項:透過 `openai` 提供商存取的 `gpt-5`,以及透過 `anthropic` 提供商存取的 `claude-sonnet-4-20250514`。 -內建的提供商和模型名稱可以在 [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` - 較低推理/Token 預算 -- `high` - 較高推理/Token 預算 - -:::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. `--model` 或 `-m` 命令列旗標。格式與設定檔中相同:`provider_id/model_id`。 - -2. OpenCode 設定中的 model 欄位。 - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "model": "anthropic/claude-sonnet-4-20250514" - } - ``` - - 格式為 `provider/model`。 - -3. 上次使用的模型。 - -4. 按內部優先順序排列的第一個可用模型。 diff --git a/packages/web/src/content/docs/zh-tw/network.mdx b/packages/web/src/content/docs/zh-tw/network.mdx deleted file mode 100644 index dcb0eb9fcf..0000000000 --- a/packages/web/src/content/docs/zh-tw/network.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: 網路 -description: 設定代理伺服器和自訂憑證。 ---- - -OpenCode 支援標準代理環境變數和自訂憑證,適用於企業網路環境。 - ---- - -## 代理伺服器 - -OpenCode 遵循標準代理環境變數。 - -```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 與本地 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 -``` - -此設定同時適用於代理連線和直接 API 存取。 diff --git a/packages/web/src/content/docs/zh-tw/permissions.mdx b/packages/web/src/content/docs/zh-tw/permissions.mdx deleted file mode 100644 index 08670da80e..0000000000 --- a/packages/web/src/content/docs/zh-tw/permissions.mdx +++ /dev/null @@ -1,235 +0,0 @@ ---- -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`](#外部目錄) 規則特別有用。 - -- `~/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`](#預設值),`external_directory` 下的項目也允許讀取,除非另行覆寫。當需要在這些路徑中限制某個工具時,請新增顯式規則,例如在保留讀取的同時阻止編輯: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "external_directory": { - "~/projects/personal/**": "allow" - }, - "edit": { - "~/projects/personal/**": "deny" - } - } -} -``` - -請將列表限定在受信任的路徑上,並根據需要為其他工具(例如 `bash`)疊加額外的允許或拒絕規則。 - ---- - -## 可用權限 - -OpenCode 的權限以工具名稱為鍵,外加幾個安全防護項: - -- `read` — 讀取檔案(比對檔案路徑) -- `edit` — 所有檔案修改(涵蓋 `edit`、`write`、`patch`) -- `glob` — 檔案萬用字元比對(比對萬用字元模式) -- `grep` — 內容搜尋(比對正規表示式模式) -- `bash` — 執行 shell 指令(比對解析後的指令,如 `git status --porcelain`) -- `task` — 啟動子代理(比對子代理類型) -- `skill` — 載入技能(比對技能名稱) -- `lsp` — 執行 LSP 查詢(目前不支援細粒度設定) -- `webfetch` — 擷取 URL(比對 URL) -- `websearch` — 網頁搜尋(比對查詢內容) -- `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 -有關更詳細的模式比對範例,請參閱上方的[細粒度規則(物件語法)](#細粒度規則物件語法)部分。 -::: - -```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 *"`)。 -::: diff --git a/packages/web/src/content/docs/zh-tw/plugins.mdx b/packages/web/src/content/docs/zh-tw/plugins.mdx deleted file mode 100644 index 8163c291e0..0000000000 --- a/packages/web/src/content/docs/zh-tw/plugins.mdx +++ /dev/null @@ -1,388 +0,0 @@ ---- -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 套件。 - -瀏覽[生態系統](/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 工作樹路徑。 -- `client`:用於與 AI 互動的 OpenCode SDK 用戶端。 -- `$`:Bun 的 [Shell API](https://bun.com/docs/runtime/shell),用於執行指令。 - ---- - -### 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.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` 在 macOS 上執行 AppleScript 來傳送通知。 - -:::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 執行(AI 工具和使用者終端機): - -```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 schema 函式,並回傳一個工具定義,包含: - -- `description`:工具的功能描述 -- `args`:工具參數的 Zod schema -- `execute`:工具被呼叫時執行的函式 - -您的自訂工具將與內建工具一起在 OpenCode 中可用。 - -:::note -如果外掛工具使用與內建工具相同的名稱,則外掛工具具有優先權。 -::: - ---- - -### 日誌記錄 - -使用 `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` 陣列將被忽略。 diff --git a/packages/web/src/content/docs/zh-tw/providers.mdx b/packages/web/src/content/docs/zh-tw/providers.mdx deleted file mode 100644 index d4e55ed712..0000000000 --- a/packages/web/src/content/docs/zh-tw/providers.mdx +++ /dev/null @@ -1,1970 +0,0 @@ ---- -title: 提供商 -description: 在 OpenCode 中使用任意 LLM 提供商。 ---- - -import config from "../../../../config.mjs" -export const console = config.console - -OpenCode 使用 [AI SDK](https://ai-sdk.dev/) 和 [Models.dev](https://models.dev),支援 **75+ LLM 提供商**,同時也支援執行本地模型。 - -要新增提供商,您需要: - -1. 使用 `/connect` 指令新增提供商的 API 金鑰。 -2. 在 OpenCode 設定中設定該提供商。 - ---- - -### 憑證 - -使用 `/connect` 指令新增提供商的 API 金鑰後,憑證會儲存在 -`~/.local/share/opencode/auth.json` 中。 - ---- - -### 設定 - -您可以透過 OpenCode 設定中的 `provider` 部分來自訂提供商。 - ---- - -#### 自訂 Base URL - -您可以透過設定 `baseURL` 選項來自訂任何提供商的 Base URL。這在使用代理服務或自訂端點時非常有用。 - -```json title="opencode.json" {6} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "anthropic": { - "options": { - "baseURL": "https://api.anthropic.com/v1" - } - } - } -} -``` - ---- - -## OpenCode Zen - -OpenCode Zen 是由 OpenCode 團隊提供的模型列表,這些模型已經過測試和驗證,能夠與 OpenCode 良好配合使用。[了解更多](/docs/zen)。 - -:::tip -如果您是新使用者,我們建議從 OpenCode Zen 開始。 -::: - -1. 在 TUI 中執行 `/connect` 指令,選擇 `OpenCode Zen`,然後前往 [opencode.ai/auth](https://opencode.ai/zen)。 - - ```txt - /connect - ``` - -2. 登入後新增帳單資訊,然後複製您的 API 金鑰。 - -3. 貼上您的 API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 在 TUI 中執行 `/models` 查看我們推薦的模型列表。 - - ```txt - /models - ``` - -它的使用方式與 OpenCode 中的其他提供商完全相同,且完全可選。 - ---- - -## OpenCode Go - -OpenCode Go 是一個低成本的訂閱計畫,提供對 OpenCode 團隊提供的流行開放編碼模型的可靠存取,這些模型已經過測試和驗證,能夠與 OpenCode 良好配合使用。 - -1. 在 TUI 中執行 `/connect` 指令,選擇 `OpenCode Go`,然後前往 [opencode.ai/auth](https://opencode.ai/zen)。 - - ```txt - /connect - ``` - -2. 登入後新增帳單資訊,然後複製您的 API 金鑰。 - -3. 貼上您的 API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 在 TUI 中執行 `/models` 查看我們推薦的模型列表。 - - ```txt - /models - ``` - -它的使用方式與 OpenCode 中的任何其他提供商相同,且完全可選。 - ---- - -## 目錄 - -下面我們來詳細了解一些提供商。如果您想將某個提供商新增到列表中,歡迎提交 PR。 - -:::note -沒有看到您想要的提供商?歡迎提交 PR。 -::: - ---- - -### 302.AI - -1. 前往 [302.AI 控制台](https://302.ai/),建立帳號並產生 API 金鑰。 - -2. 執行 `/connect` 指令並搜尋 **302.AI**。 - - ```txt - /connect - ``` - -3. 輸入您的 302.AI API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型。 - - ```txt - /models - ``` - ---- - -### Amazon Bedrock - -要在 OpenCode 中使用 Amazon Bedrock: - -1. 前往 Amazon Bedrock 控制台中的**模型目錄**,申請存取您想要使用的模型。 - - :::tip - 您需要先在 Amazon Bedrock 中取得對目標模型的存取權限。 - ::: - -2. 使用以下方法之一**設定身分驗證**: - - #### 環境變數(快速上手) - - 執行 opencode 時設定以下環境變數之一: - - ```bash - # Option 1: Using AWS access keys - AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY opencode - - # Option 2: Using named AWS profile - AWS_PROFILE=my-profile opencode - - # Option 3: Using Bedrock bearer token - AWS_BEARER_TOKEN_BEDROCK=XXX opencode - ``` - - 或者將它們新增到您的 bash 設定檔中: - - ```bash title="~/.bash_profile" - export AWS_PROFILE=my-dev-profile - export AWS_REGION=us-east-1 - ``` - - #### 設定檔(推薦) - - 如需專案級別或持久化的設定,請使用 `opencode.json`: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "my-aws-profile" - } - } - } - } - ``` - - **可用選項:** - - `region` - AWS 區域(例如 `us-east-1`、`eu-west-1`) - - `profile` - `~/.aws/credentials` 中的 AWS 命名設定檔 - - `endpoint` - VPC 端點的自訂端點 URL(通用 `baseURL` 選項的別名) - - :::tip - 設定檔中的選項優先順序高於環境變數。 - ::: - - #### 進階:VPC 端點 - - 如果您使用 Bedrock 的 VPC 端點: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1", - "profile": "production", - "endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com" - } - } - } - } - ``` - - :::note - `endpoint` 選項是通用 `baseURL` 選項的別名,使用了 AWS 特有的術語。如果同時指定了 `endpoint` 和 `baseURL`,則 `endpoint` 優先。 - ::: - - #### 認證方式 - - **`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`**:在 AWS 控制台中建立 IAM 使用者並產生存取金鑰 - - **`AWS_PROFILE`**:使用 `~/.aws/credentials` 中的命名設定檔。需要先透過 `aws configure --profile my-profile` 或 `aws sso login` 進行設定 - - **`AWS_BEARER_TOKEN_BEDROCK`**:從 Amazon Bedrock 控制台產生長期 API 金鑰 - - **`AWS_WEB_IDENTITY_TOKEN_FILE` / `AWS_ROLE_ARN`**:適用於 EKS IRSA(服務帳號的 IAM 角色)或其他支援 OIDC 聯合的 Kubernetes 環境。使用服務帳號註解時,Kubernetes 會自動注入這些環境變數。 - - #### 認證優先順序 - - Amazon Bedrock 使用以下認證優先順序: - 1. **Bearer Token** - `AWS_BEARER_TOKEN_BEDROCK` 環境變數或透過 `/connect` 指令取得的 Token - 2. **AWS 憑證鏈** - 設定檔、存取金鑰、共享憑證、IAM 角色、Web Identity Token(EKS IRSA)、執行個體中繼資料 - - :::note - 當設定了 Bearer Token(透過 `/connect` 或 `AWS_BEARER_TOKEN_BEDROCK`)時,它的優先順序高於所有 AWS 憑證方式,包括已設定的設定檔。 - ::: - -3. 執行 `/models` 指令選擇您想要的模型。 - - ```txt - /models - ``` - -:::note -對於自訂推理設定檔,請在 key 中使用模型名稱和提供商名稱,並將 `id` 屬性設定為 ARN。這可以確保正確的快取行為: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "amazon-bedrock": { - // ... - "models": { - "anthropic-claude-sonnet-4.5": { - "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" - } - } - } - } -} -``` - -::: - ---- - -### Anthropic - -1. 註冊完成後,執行 `/connect` 指令並選擇 Anthropic。 - - ```txt - /connect - ``` - -2. 您可以選擇 **Claude Pro/Max** 選項,瀏覽器會自動開啟並要求您進行身分驗證。 - - ```txt - ┌ Select auth method - │ - │ Claude Pro/Max - │ Create an API Key - │ Manually enter API Key - └ - ``` - -3. 現在使用 `/models` 指令即可看到所有 Anthropic 模型。 - - ```txt - /models - ``` - -:::info -在 OpenCode 中使用 Claude Pro/Max 訂閱不是 [Anthropic](https://anthropic.com) 官方支援的用法。 -::: - -##### 使用 API 金鑰 - -如果您沒有 Pro/Max 訂閱,也可以選擇 **Create an API Key**。瀏覽器會自動開啟並要求您登入 Anthropic,然後會提供一個代碼供您貼上到終端機中。 - -如果您已經有 API 金鑰,可以選擇 **Manually enter API Key** 並將其貼上到終端機中。 - ---- - -### Atomic Chat - -你可以透過 [Atomic Chat](https://atomic.chat) 設定 opencode 以使用本地模型。Atomic Chat 是一款桌面應用程式,它在 OpenAI 相容的 API 伺服器後方執行本地 LLM(預設端點 `http://127.0.0.1:1337/v1`)。 - -```json title="opencode.json" "atomic-chat" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "atomic-chat": { - "npm": "@ai-sdk/openai-compatible", - "name": "Atomic Chat (local)", - "options": { - "baseURL": "http://127.0.0.1:1337/v1" - }, - "models": { - "": { - "name": "" - } - } - } - } -} -``` - -在此範例中: - -- `atomic-chat` 是自訂的提供者 ID。可以是任何你想要的字串。 -- `npm` 指定此提供者所使用的套件。這裡使用 `@ai-sdk/openai-compatible` 來連接任何 OpenAI 相容的 API。 -- `name` 是提供者在介面中顯示的名稱。 -- `options.baseURL` 是本地伺服器的端點。請根據你的 Atomic Chat 設定修改主機與連接埠。 -- `models` 是模型 ID 到其顯示名稱的對應表。每個 ID 必須與 `GET /v1/models` 所回傳的 `id` 相符——執行 `curl http://127.0.0.1:1337/v1/models` 可列出 Atomic Chat 目前載入的 ID。 - -:::tip -如果工具呼叫運作不佳,請選擇一個對 tool calling 支援較好的已載入模型(例如 Qwen-Coder 或 DeepSeek-Coder 的變體)。 -::: - ---- - -### Azure OpenAI - -:::note -如果遇到 "I'm sorry, but I cannot assist with that request" 錯誤,請嘗試將 Azure 資源中的內容篩選器從 **DefaultV2** 更改為 **Default**。 -::: - -1. 前往 [Azure 入口網站](https://portal.azure.com/)並建立 **Azure OpenAI** 資源。您需要: - - **資源名稱**:這會成為您的 API 端點的一部分(`https://RESOURCE_NAME.openai.azure.com/`) - - **API 金鑰**:資源中的 `KEY 1` 或 `KEY 2` - -2. 前往 [Azure AI Foundry](https://ai.azure.com/) 並部署一個模型。 - - :::note - 部署名稱必須與模型名稱一致,OpenCode 才能正常運作。 - ::: - -3. 執行 `/connect` 指令並搜尋 **Azure**。 - - ```txt - /connect - ``` - -4. 輸入您的 API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. 將資源名稱設定為環境變數: - - ```bash - AZURE_RESOURCE_NAME=XXX opencode - ``` - - 或者新增到您的 bash 設定檔中: - - ```bash title="~/.bash_profile" - export AZURE_RESOURCE_NAME=XXX - ``` - -6. 執行 `/models` 指令選擇您已部署的模型。 - - ```txt - /models - ``` - ---- - -### Azure Cognitive Services - -1. 前往 [Azure 入口網站](https://portal.azure.com/)並建立 **Azure OpenAI** 資源。您需要: - - **資源名稱**:這會成為您的 API 端點的一部分(`https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/`) - - **API 金鑰**:資源中的 `KEY 1` 或 `KEY 2` - -2. 前往 [Azure AI Foundry](https://ai.azure.com/) 並部署一個模型。 - - :::note - 部署名稱必須與模型名稱一致,OpenCode 才能正常運作。 - ::: - -3. 執行 `/connect` 指令並搜尋 **Azure Cognitive Services**。 - - ```txt - /connect - ``` - -4. 輸入您的 API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -5. 將資源名稱設定為環境變數: - - ```bash - AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX opencode - ``` - - 或者新增到您的 bash 設定檔中: - - ```bash title="~/.bash_profile" - export AZURE_COGNITIVE_SERVICES_RESOURCE_NAME=XXX - ``` - -6. 執行 `/models` 指令選擇您已部署的模型。 - - ```txt - /models - ``` - ---- - -### Baseten - -1. 前往 [Baseten](https://app.baseten.co/),建立帳號並產生 API 金鑰。 - -2. 執行 `/connect` 指令並搜尋 **Baseten**。 - - ```txt - /connect - ``` - -3. 輸入您的 Baseten API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型。 - - ```txt - /models - ``` - ---- - -### Cerebras - -1. 前往 [Cerebras 控制台](https://inference.cerebras.ai/),建立帳號並產生 API 金鑰。 - -2. 執行 `/connect` 指令並搜尋 **Cerebras**。 - - ```txt - /connect - ``` - -3. 輸入您的 Cerebras API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _Qwen 3 Coder 480B_。 - - ```txt - /models - ``` - ---- - -### Cloudflare AI Gateway - -Cloudflare AI Gateway 允許您透過統一端點存取來自 OpenAI、Anthropic、Workers AI 等提供商的模型。透過 [Unified Billing](https://developers.cloudflare.com/ai-gateway/features/unified-billing/),您無需為每個提供商單獨準備 API 金鑰。 - -1. 前往 [Cloudflare 儀表板](https://dash.cloudflare.com/),導覽到 **AI** > **AI Gateway**,建立一個新的閘道。 - -2. 將您的 Account ID 和 Gateway ID 設定為環境變數。 - - ```bash title="~/.bash_profile" - export CLOUDFLARE_ACCOUNT_ID=your-32-character-account-id - export CLOUDFLARE_GATEWAY_ID=your-gateway-id - ``` - -3. 執行 `/connect` 指令並搜尋 **Cloudflare AI Gateway**。 - - ```txt - /connect - ``` - -4. 輸入您的 Cloudflare API Token。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - - 或者將其設定為環境變數。 - - ```bash title="~/.bash_profile" - export CLOUDFLARE_API_TOKEN=your-api-token - ``` - -5. 執行 `/models` 指令選擇模型。 - - ```txt - /models - ``` - - 您也可以透過 OpenCode 設定新增模型。 - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "cloudflare-ai-gateway": { - "models": { - "openai/gpt-4o": {}, - "anthropic/claude-sonnet-4": {} - } - } - } - } - ``` - ---- - -### Cortecs - -1. 前往 [Cortecs 控制台](https://cortecs.ai/),建立帳號並產生 API 金鑰。 - -2. 執行 `/connect` 指令並搜尋 **Cortecs**。 - - ```txt - /connect - ``` - -3. 輸入您的 Cortecs API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _Kimi K2 Instruct_。 - - ```txt - /models - ``` - ---- - -### DeepSeek - -1. 前往 [DeepSeek 控制台](https://platform.deepseek.com/),建立帳號並點擊 **Create new API key**。 - -2. 執行 `/connect` 指令並搜尋 **DeepSeek**。 - - ```txt - /connect - ``` - -3. 輸入您的 DeepSeek API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇 DeepSeek 模型,例如 _DeepSeek V4 Pro_。 - - ```txt - /models - ``` - ---- - -### Deep Infra - -1. 前往 [Deep Infra 儀表板](https://deepinfra.com/dash),建立帳號並產生 API 金鑰。 - -2. 執行 `/connect` 指令並搜尋 **Deep Infra**。 - - ```txt - /connect - ``` - -3. 輸入您的 Deep Infra API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型。 - - ```txt - /models - ``` - ---- - -### FrogBot - -1. 前往 [FrogBot 儀表板](https://app.frogbot.ai/signup),建立帳號並產生 API 金鑰。 - -2. 執行 `/connect` 指令並搜尋 **FrogBot**。 - - ```txt - /connect - ``` - -3. 輸入您的 FrogBot API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型。 - - ```txt - /models - ``` - ---- - -### Fireworks AI - -1. 前往 [Fireworks AI 控制台](https://app.fireworks.ai/),建立帳號並點擊 **Create API Key**。 - -2. 執行 `/connect` 指令並搜尋 **Fireworks AI**。 - - ```txt - /connect - ``` - -3. 輸入您的 Fireworks AI API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _Kimi K2 Instruct_。 - - ```txt - /models - ``` - ---- - -### GitLab Duo - -GitLab Duo 透過 GitLab 的 Anthropic 代理提供具有原生工具呼叫能力的 AI 驅動代理聊天。 - -1. 執行 `/connect` 指令並選擇 GitLab。 - - ```txt - /connect - ``` - -2. 選擇您的身分驗證方式: - - ```txt - ┌ Select auth method - │ - │ OAuth (Recommended) - │ Personal Access Token - └ - ``` - - #### 使用 OAuth(推薦) - - 選擇 **OAuth**,瀏覽器會自動開啟進行授權。 - - #### 使用個人存取權杖 - 1. 前往 [GitLab 使用者設定 > Access Tokens](https://gitlab.com/-/user_settings/personal_access_tokens) - 2. 點擊 **Add new token** - 3. 名稱填寫 `OpenCode`,範圍選擇 `api` - 4. 複製權杖(以 `glpat-` 開頭) - 5. 在終端機中輸入該權杖 - -3. 執行 `/models` 指令查看可用模型。 - - ```txt - /models - ``` - - 提供三個基於 Claude 的模型: - - **duo-chat-haiku-4-5**(預設)- 快速回應,適合簡單任務 - - **duo-chat-sonnet-4-5** - 效能均衡,適合大多數工作流程 - - **duo-chat-opus-4-5** - 最強大,適合複雜分析 - -:::note -您也可以透過指定 `GITLAB_TOKEN` 環境變數來避免將權杖儲存在 OpenCode 的認證儲存中。 -::: - -##### 自架 GitLab - -:::note[合規說明] -OpenCode 會使用一個小模型來執行部分 AI 任務,例如產生工作階段標題。預設情況下使用由 Zen 託管的 gpt-5-nano。如果您需要讓 OpenCode 僅使用您自己的 GitLab 託管實例,請在 `opencode.json` 檔案中新增以下內容。同時建議停用工作階段分享。 - -```json -{ - "$schema": "https://opencode.ai/config.json", - "small_model": "gitlab/duo-chat-haiku-4-5", - "share": "disabled" -} -``` - -::: - -對於自架 GitLab 實例: - -```bash -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-... -``` - -如果您的實例執行了自訂 AI Gateway: - -```bash -GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -``` - -或者新增到您的 bash 設定檔中: - -```bash title="~/.bash_profile" -export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com -export GITLAB_TOKEN=glpat-... -``` - -:::note -您的 GitLab 管理員必須啟用以下功能: - -1. 為使用者、群組或實例啟用 [Duo Agent Platform](https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/) -2. 功能旗標(透過 Rails 控制台): - - `agent_platform_claude_code` - - `third_party_agents_enabled` - ::: - -##### 自架實例的 OAuth - -要在自架實例上使用 OAuth,您需要建立一個新應用程式(設定 → 應用程式),回呼 URL 設定為 `http://127.0.0.1:8080/callback`,並選擇以下範圍: - -- api(代表您存取 API) -- read_user(讀取您的個人資訊) -- read_repository(允許對儲存庫進行唯讀存取) - -然後將應用程式 ID 匯出為環境變數: - -```bash -export GITLAB_OAUTH_CLIENT_ID=your_application_id_here -``` - -更多文件請參閱 [opencode-gitlab-auth](https://www.npmjs.com/package/opencode-gitlab-auth) 首頁。 - -##### 設定 - -透過 `opencode.json` 進行自訂設定: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "gitlab": { - "options": { - "instanceUrl": "https://gitlab.com" - } - } - } -} -``` - -##### GitLab API 工具(可選,但強烈推薦) - -要存取 GitLab 工具(合併請求、Issue、流水線、CI/CD 等): - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-gitlab-plugin"] -} -``` - -該外掛提供全面的 GitLab 儲存庫管理功能,包括 MR 審查、Issue 追蹤、流水線監控等。 - ---- - -### GitHub Copilot - -要在 OpenCode 中使用您的 GitHub Copilot 訂閱: - -:::note -部分模型可能需要 [Pro+ 訂閱](https://github.com/features/copilot/plans)才能使用。 -::: - -1. 執行 `/connect` 指令並搜尋 GitHub Copilot。 - - ```txt - /connect - ``` - -2. 前往 [github.com/login/device](https://github.com/login/device) 並輸入驗證碼。 - - ```txt - ┌ Login with GitHub Copilot - │ - │ https://github.com/login/device - │ - │ Enter code: 8F43-6FCF - │ - └ Waiting for authorization... - ``` - -3. 現在執行 `/models` 指令選擇您想要的模型。 - - ```txt - /models - ``` - ---- - -### Google Vertex AI - -要在 OpenCode 中使用 Google Vertex AI: - -1. 前往 Google Cloud Console 中的**模型花園**,查看您所在區域可用的模型。 - - :::note - 您需要一個啟用了 Vertex AI API 的 Google Cloud 專案。 - ::: - -2. 設定所需的環境變數: - - `GOOGLE_CLOUD_PROJECT`:您的 Google Cloud 專案 ID - - `VERTEX_LOCATION`(可選):Vertex AI 的區域(預設為 `global`) - - 身分驗證(選擇其一): - - `GOOGLE_APPLICATION_CREDENTIALS`:服務帳號 JSON 金鑰檔案的路徑 - - 使用 gcloud CLI 進行身分驗證:`gcloud auth application-default login` - - 在執行 opencode 時設定: - - ```bash - GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json GOOGLE_CLOUD_PROJECT=your-project-id opencode - ``` - - 或者新增到您的 bash 設定檔中: - - ```bash title="~/.bash_profile" - export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json - export GOOGLE_CLOUD_PROJECT=your-project-id - export VERTEX_LOCATION=global - ``` - -:::tip -`global` 區域可以提高可用性並減少錯誤,且不會產生額外費用。如果有資料駐留需求,請使用區域端點(例如 `us-central1`)。[了解更多](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#regional_and_global_endpoints) -::: - -3. 執行 `/models` 指令選擇您想要的模型。 - - ```txt - /models - ``` - ---- - -### Groq - -1. 前往 [Groq 控制台](https://console.groq.com/),點擊 **Create API Key** 並複製金鑰。 - -2. 執行 `/connect` 指令並搜尋 Groq。 - - ```txt - /connect - ``` - -3. 輸入該提供商的 API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇您想要的模型。 - - ```txt - /models - ``` - ---- - -### Hugging Face - -[Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers) 提供對由 17+ 提供商支援的開放模型的存取。 - -1. 前往 [Hugging Face 設定](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained),建立一個具有呼叫 Inference Providers 權限的權杖。 - -2. 執行 `/connect` 指令並搜尋 **Hugging Face**。 - - ```txt - /connect - ``` - -3. 輸入您的 Hugging Face 權杖。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _Kimi-K2-Instruct_ 或 _GLM-4.6_。 - - ```txt - /models - ``` - ---- - -### Helicone - -[Helicone](https://helicone.ai) 是一個 LLM 可觀測性平台,為您的 AI 應用程式提供日誌記錄、監控和分析功能。Helicone AI Gateway 會根據模型自動將請求路由到對應的提供商。 - -1. 前往 [Helicone](https://helicone.ai),建立帳號並在儀表板中產生 API 金鑰。 - -2. 執行 `/connect` 指令並搜尋 **Helicone**。 - - ```txt - /connect - ``` - -3. 輸入您的 Helicone API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型。 - - ```txt - /models - ``` - -如需了解更多提供商以及快取、速率限制等進階功能,請查閱 [Helicone 文件](https://docs.helicone.ai)。 - -#### 可選設定 - -如果 Helicone 的某些功能或模型未透過 OpenCode 自動設定,您隨時可以手動設定。 - -[Helicone 模型目錄](https://helicone.ai/models)中可以找到您需要新增的模型 ID。 - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - }, - "models": { - "gpt-4o": { - // Model ID (from Helicone's model directory page) - "name": "GPT-4o", // Your own custom name for the model - }, - "claude-sonnet-4-20250514": { - "name": "Claude Sonnet 4", - }, - }, - }, - }, -} -``` - -#### 自訂請求標頭 - -Helicone 支援用於快取、使用者追蹤和工作階段管理等功能的自訂請求標頭。使用 `options.headers` 將它們新增到提供商設定中: - -```jsonc title="~/.config/opencode/opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "helicone": { - "npm": "@ai-sdk/openai-compatible", - "name": "Helicone", - "options": { - "baseURL": "https://ai-gateway.helicone.ai", - "headers": { - "Helicone-Cache-Enabled": "true", - "Helicone-User-Id": "opencode", - }, - }, - }, - }, -} -``` - -##### 工作階段追蹤 - -Helicone 的 [Sessions](https://docs.helicone.ai/features/sessions) 功能允許您將相關的 LLM 請求歸為一組。使用 [opencode-helicone-session](https://github.com/H2Shami/opencode-helicone-session) 外掛可以自動將每個 OpenCode 對話記錄為 Helicone 中的一個工作階段。 - -```bash -npm install -g opencode-helicone-session -``` - -將其新增到設定中。 - -```json title="opencode.json" -{ - "plugin": ["opencode-helicone-session"] -} -``` - -該外掛會在您的請求中注入 `Helicone-Session-Id` 和 `Helicone-Session-Name` 請求標頭。在 Helicone 的 Sessions 頁面中,您可以看到每個 OpenCode 對話都作為獨立的工作階段列出。 - -##### 常用 Helicone 請求標頭 - -| 請求標頭 | 描述 | -| -------------------------- | ---------------------------------------------------- | -| `Helicone-Cache-Enabled` | 啟用回應快取(`true`/`false`) | -| `Helicone-User-Id` | 按使用者追蹤指標 | -| `Helicone-Property-[Name]` | 新增自訂屬性(例如 `Helicone-Property-Environment`) | -| `Helicone-Prompt-Id` | 將請求與提示詞版本關聯 | - -有關所有可用請求標頭,請參閱 [Helicone Header Directory](https://docs.helicone.ai/helicone-headers/header-directory)。 - ---- - -### llama.cpp - -您可以透過 [llama.cpp](https://github.com/ggml-org/llama.cpp) 的 llama-server 工具設定 OpenCode 使用本地模型。 - -```json title="opencode.json" "llama.cpp" {5, 6, 8, 10-15} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "llama.cpp": { - "npm": "@ai-sdk/openai-compatible", - "name": "llama-server (local)", - "options": { - "baseURL": "http://127.0.0.1:8080/v1" - }, - "models": { - "qwen3-coder:a3b": { - "name": "Qwen3-Coder: a3b-30b (local)", - "limit": { - "context": 128000, - "output": 65536 - } - } - } - } - } -} -``` - -在這個範例中: - -- `llama.cpp` 是自訂的提供商 ID,可以是任意字串。 -- `npm` 指定該提供商使用的套件。這裡使用 `@ai-sdk/openai-compatible` 來相容任何 OpenAI 相容的 API。 -- `name` 是該提供商在 UI 中顯示的名稱。 -- `options.baseURL` 是本地伺服器的端點位址。 -- `models` 是模型 ID 到其設定的對應。模型名稱會顯示在模型選擇列表中。 - ---- - -### IO.NET - -IO.NET 提供 17 個針對不同使用情境最佳化的模型: - -1. 前往 [IO.NET 控制台](https://ai.io.net/),建立帳號並產生 API 金鑰。 - -2. 執行 `/connect` 指令並搜尋 **IO.NET**。 - - ```txt - /connect - ``` - -3. 輸入您的 IO.NET API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型。 - - ```txt - /models - ``` - ---- - -### LM Studio - -您可以透過 LM Studio 設定 OpenCode 使用本地模型。 - -```json title="opencode.json" "lmstudio" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "lmstudio": { - "npm": "@ai-sdk/openai-compatible", - "name": "LM Studio (local)", - "options": { - "baseURL": "http://127.0.0.1:1234/v1" - }, - "models": { - "google/gemma-3n-e4b": { - "name": "Gemma 3n-e4b (local)" - } - } - } - } -} -``` - -在這個範例中: - -- `lmstudio` 是自訂的提供商 ID,可以是任意字串。 -- `npm` 指定該提供商使用的套件。這裡使用 `@ai-sdk/openai-compatible` 來相容任何 OpenAI 相容的 API。 -- `name` 是該提供商在 UI 中顯示的名稱。 -- `options.baseURL` 是本地伺服器的端點位址。 -- `models` 是模型 ID 到其設定的對應。模型名稱會顯示在模型選擇列表中。 - ---- - -### Moonshot AI - -要使用 Moonshot AI 的 Kimi K2: - -1. 前往 [Moonshot AI 控制台](https://platform.moonshot.ai/console),建立帳號並點擊 **Create API key**。 - -2. 執行 `/connect` 指令並搜尋 **Moonshot AI**。 - - ```txt - /connect - ``` - -3. 輸入您的 Moonshot API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇 _Kimi K2_。 - - ```txt - /models - ``` - ---- - -### MiniMax - -1. 前往 [MiniMax API 控制台](https://platform.minimax.io/login),建立帳號並產生 API 金鑰。 - -2. 執行 `/connect` 指令並搜尋 **MiniMax**。 - - ```txt - /connect - ``` - -3. 輸入您的 MiniMax API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _M2.1_。 - - ```txt - /models - ``` - ---- - -### Nebius Token Factory - -1. 前往 [Nebius Token Factory 控制台](https://tokenfactory.nebius.com/),建立帳號並點擊 **Add Key**。 - -2. 執行 `/connect` 指令並搜尋 **Nebius Token Factory**。 - - ```txt - /connect - ``` - -3. 輸入您的 Nebius Token Factory API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _Kimi K2 Instruct_。 - - ```txt - /models - ``` - ---- - -### Ollama - -您可以透過 Ollama 設定 OpenCode 使用本地模型。 - -:::tip -Ollama 可以自動為 OpenCode 進行設定。詳見 [Ollama 整合文件](https://docs.ollama.com/integrations/opencode)。 -::: - -```json title="opencode.json" "ollama" {5, 6, 8, 10-14} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "ollama": { - "npm": "@ai-sdk/openai-compatible", - "name": "Ollama (local)", - "options": { - "baseURL": "http://localhost:11434/v1" - }, - "models": { - "llama2": { - "name": "Llama 2" - } - } - } - } -} -``` - -在這個範例中: - -- `ollama` 是自訂的提供商 ID,可以是任意字串。 -- `npm` 指定該提供商使用的套件。這裡使用 `@ai-sdk/openai-compatible` 來相容任何 OpenAI 相容的 API。 -- `name` 是該提供商在 UI 中顯示的名稱。 -- `options.baseURL` 是本地伺服器的端點位址。 -- `models` 是模型 ID 到其設定的對應。模型名稱會顯示在模型選擇列表中。 - -:::tip -如果工具呼叫不運作,請嘗試增大 Ollama 中的 `num_ctx` 值。建議從 16k - 32k 左右開始。 -::: - ---- - -### Ollama Cloud - -要在 OpenCode 中使用 Ollama Cloud: - -1. 前往 [https://ollama.com/](https://ollama.com/) 登入或建立帳號。 - -2. 導覽到 **Settings** > **Keys**,點擊 **Add API Key** 產生新的 API 金鑰。 - -3. 複製 API 金鑰以便在 OpenCode 中使用。 - -4. 執行 `/connect` 指令並搜尋 **Ollama Cloud**。 - - ```txt - /connect - ``` - -5. 輸入您的 Ollama Cloud API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -6. **重要**:在 OpenCode 中使用雲端模型之前,必須先將模型資訊拉取到本地: - - ```bash - ollama pull gpt-oss:20b-cloud - ``` - -7. 執行 `/models` 指令選擇您的 Ollama Cloud 模型。 - - ```txt - /models - ``` - ---- - -### OpenAI - -我們建議註冊 [ChatGPT Plus 或 Pro](https://chatgpt.com/pricing)。 - -1. 註冊完成後,執行 `/connect` 指令並選擇 OpenAI。 - - ```txt - /connect - ``` - -2. 您可以選擇 **ChatGPT Plus/Pro** 選項,瀏覽器會自動開啟並要求您進行身分驗證。 - - ```txt - ┌ Select auth method - │ - │ ChatGPT Plus/Pro - │ Manually enter API Key - └ - ``` - -3. 現在使用 `/models` 指令即可看到所有 OpenAI 模型。 - - ```txt - /models - ``` - -##### 使用 API 金鑰 - -如果您已經有 API 金鑰,可以選擇 **Manually enter API Key** 並將其貼上到終端機中。 - ---- - -### OpenCode Zen - -OpenCode Zen 是由 OpenCode 團隊提供的經過測試和驗證的模型列表。[了解更多](/docs/zen)。 - -1. 登入 **OpenCode Zen** 並點擊 **Create API Key**。 - -2. 執行 `/connect` 指令並搜尋 **OpenCode Zen**。 - - ```txt - /connect - ``` - -3. 輸入您的 OpenCode API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _Qwen 3 Coder 480B_。 - - ```txt - /models - ``` - ---- - -### OpenRouter - -1. 前往 [OpenRouter 儀表板](https://openrouter.ai/settings/keys),點擊 **Create API Key** 並複製金鑰。 - -2. 執行 `/connect` 指令並搜尋 OpenRouter。 - - ```txt - /connect - ``` - -3. 輸入該提供商的 API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 預設已預先載入了許多 OpenRouter 模型,執行 `/models` 指令選擇您想要的模型。 - - ```txt - /models - ``` - - 您也可以透過 OpenCode 設定新增更多模型。 - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - -5. 您還可以透過 OpenCode 設定自訂模型。以下是指定提供商的範例: - - ```json title="opencode.json" - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "models": { - "moonshotai/kimi-k2": { - "options": { - "provider": { - "order": ["baseten"], - "allow_fallbacks": false - } - } - } - } - } - } - } - ``` - ---- - -### SAP AI Core - -SAP AI Core 透過統一平台提供對來自 OpenAI、Anthropic、Google、Amazon、Meta、Mistral 和 AI21 的 40+ 模型的存取。 - -1. 前往 [SAP BTP Cockpit](https://account.hana.ondemand.com/),導覽到您的 SAP AI Core 服務實例,並建立服務金鑰。 - - :::tip - 服務金鑰是一個包含 `clientid`、`clientsecret`、`url` 和 `serviceurls.AI_API_URL` 的 JSON 物件。您可以在 BTP Cockpit 的 **Services** > **Instances and Subscriptions** 下找到您的 AI Core 實例。 - ::: - -2. 執行 `/connect` 指令並搜尋 **SAP AI Core**。 - - ```txt - /connect - ``` - -3. 輸入您的服務金鑰 JSON。 - - ```txt - ┌ Service key - │ - │ - └ enter - ``` - - 或者設定 `AICORE_SERVICE_KEY` 環境變數: - - ```bash - AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' opencode - ``` - - 或者新增到您的 bash 設定檔中: - - ```bash title="~/.bash_profile" - export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}' - ``` - -4. 可選:設定部署 ID 和資源群組: - - ```bash - AICORE_DEPLOYMENT_ID=your-deployment-id AICORE_RESOURCE_GROUP=your-resource-group opencode - ``` - - :::note - 這些設定是可選的,應根據您的 SAP AI Core 設定進行配置。 - ::: - -5. 執行 `/models` 指令從 40+ 個可用模型中進行選擇。 - - ```txt - /models - ``` - ---- - -### STACKIT - -STACKIT AI Model Serving 提供完全託管的主權託管環境,專注於 Llama、Mistral 和 Qwen 等大語言模型,在歐洲基礎設施上實現最大程度的資料主權。 - -1. 前往 [STACKIT Portal](https://portal.stackit.cloud),導覽到 **AI Model Serving**,為您的專案建立認證權杖。 - - :::tip - 您需要先擁有 STACKIT 客戶帳號、使用者帳號和專案,才能建立認證權杖。 - ::: - -2. 執行 `/connect` 指令並搜尋 **STACKIT**。 - - ```txt - /connect - ``` - -3. 輸入您的 STACKIT AI Model Serving 認證權杖。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _Qwen3-VL 235B_ 或 _Llama 3.3 70B_。 - - ```txt - /models - ``` - ---- - -### OVHcloud AI Endpoints - -1. 前往 [OVHcloud 管理面板](https://ovh.com/manager)。導覽到 `Public Cloud` 部分,`AI & Machine Learning` > `AI Endpoints`,在 `API Keys` 分頁中點擊 **Create a new API key**。 - -2. 執行 `/connect` 指令並搜尋 **OVHcloud AI Endpoints**。 - - ```txt - /connect - ``` - -3. 輸入您的 OVHcloud AI Endpoints API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _gpt-oss-120b_。 - - ```txt - /models - ``` - ---- - -### Scaleway - -要在 OpenCode 中使用 [Scaleway Generative APIs](https://www.scaleway.com/en/docs/generative-apis/): - -1. 前往 [Scaleway Console IAM 設定](https://console.scaleway.com/iam/api-keys)產生新的 API 金鑰。 - -2. 執行 `/connect` 指令並搜尋 **Scaleway**。 - - ```txt - /connect - ``` - -3. 輸入您的 Scaleway API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _devstral-2-123b-instruct-2512_ 或 _gpt-oss-120b_。 - - ```txt - /models - ``` - ---- - -### Together AI - -1. 前往 [Together AI 控制台](https://api.together.ai),建立帳號並點擊 **Add Key**。 - -2. 執行 `/connect` 指令並搜尋 **Together AI**。 - - ```txt - /connect - ``` - -3. 輸入您的 Together AI API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _Kimi K2 Instruct_。 - - ```txt - /models - ``` - ---- - -### Venice AI - -1. 前往 [Venice AI 控制台](https://venice.ai),建立帳號並產生 API 金鑰。 - -2. 執行 `/connect` 指令並搜尋 **Venice AI**。 - - ```txt - /connect - ``` - -3. 輸入您的 Venice AI API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _Llama 3.3 70B_。 - - ```txt - /models - ``` - ---- - -### Vercel AI Gateway - -Vercel AI Gateway 允許您透過統一端點存取來自 OpenAI、Anthropic、Google、xAI 等提供商的模型。模型按原價提供,不額外加價。 - -1. 前往 [Vercel 儀表板](https://vercel.com/),導覽到 **AI Gateway** 分頁,點擊 **API keys** 建立新的 API 金鑰。 - -2. 執行 `/connect` 指令並搜尋 **Vercel AI Gateway**。 - - ```txt - /connect - ``` - -3. 輸入您的 Vercel AI Gateway API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型。 - - ```txt - /models - ``` - -您也可以透過 OpenCode 設定自訂模型。以下是指定提供商路由順序的範例。 - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "vercel": { - "models": { - "anthropic/claude-sonnet-4": { - "options": { - "order": ["anthropic", "vertex"] - } - } - } - } - } -} -``` - -一些常用的路由選項: - -| 選項 | 描述 | -| ------------------- | -------------------------------- | -| `order` | 提供商嘗試順序 | -| `only` | 限制為特定提供商 | -| `zeroDataRetention` | 僅使用具有零資料留存策略的提供商 | - ---- - -### xAI - -1. 前往 [xAI 控制台](https://console.x.ai/),建立帳號並產生 API 金鑰。 - -2. 執行 `/connect` 指令並搜尋 **xAI**。 - - ```txt - /connect - ``` - -3. 輸入您的 xAI API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _Grok Beta_。 - - ```txt - /models - ``` - ---- - -### Z.AI - -1. 前往 [Z.AI API 控制台](https://z.ai/manage-apikey/apikey-list),建立帳號並點擊 **Create a new API key**。 - -2. 執行 `/connect` 指令並搜尋 **Z.AI**。 - - ```txt - /connect - ``` - - 如果您訂閱了 **GLM Coding Plan**,請選擇 **Z.AI Coding Plan**。 - -3. 輸入您的 Z.AI API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 執行 `/models` 指令選擇模型,例如 _GLM-4.7_。 - - ```txt - /models - ``` - ---- - -### ZenMux - -1. 前往 [ZenMux 儀表板](https://zenmux.ai/settings/keys),點擊 **Create API Key** 並複製金鑰。 - -2. 執行 `/connect` 指令並搜尋 ZenMux。 - - ```txt - /connect - ``` - -3. 輸入該提供商的 API 金鑰。 - - ```txt - ┌ API key - │ - │ - └ enter - ``` - -4. 預設已預先載入了許多 ZenMux 模型,執行 `/models` 指令選擇您想要的模型。 - - ```txt - /models - ``` - - 您也可以透過 OpenCode 設定新增更多模型。 - - ```json title="opencode.json" {6} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "zenmux": { - "models": { - "somecoolnewmodel": {} - } - } - } - } - ``` - ---- - -## 自訂提供商 - -要新增 `/connect` 指令中未列出的任何 **OpenAI 相容**提供商: - -:::tip -您可以在 OpenCode 中使用任何 OpenAI 相容的提供商。大多數現代 AI 提供商都提供 OpenAI 相容的 API。 -::: - -1. 執行 `/connect` 指令,向下捲動到 **Other**。 - - ```bash - $ /connect - - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Other - └ - ``` - -2. 輸入該提供商的唯一 ID。 - - ```bash - $ /connect - - ┌ Add credential - │ - ◇ Enter provider id - │ myprovider - └ - ``` - - :::note - 請選擇一個容易記住的 ID,您將在設定檔中使用它。 - ::: - -3. 輸入該提供商的 API 金鑰。 - - ```bash - $ /connect - - ┌ Add credential - │ - ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. - │ - ◇ Enter your API key - │ sk-... - └ - ``` - -4. 在專案目錄中建立或更新 `opencode.json` 檔案: - - ```json title="opencode.json" ""myprovider"" {5-15} - { - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1" - }, - "models": { - "my-model-name": { - "name": "My Model Display Name" - } - } - } - } - } - ``` - - 以下是設定選項說明: - - **npm**:要使用的 AI SDK 套件,對於 OpenAI 相容的提供商使用 `@ai-sdk/openai-compatible` - - **name**:在 UI 中顯示的名稱。 - - **models**:可用模型。 - - **options.baseURL**:API 端點 URL。 - - **options.apiKey**:可選,如果不使用 auth 認證,可直接設定 API 金鑰。 - - **options.headers**:可選,設定自訂請求標頭。 - - 更多進階選項請參見下面的範例。 - -5. 執行 `/models` 指令,您自訂的提供商和模型將出現在選擇列表中。 - ---- - -##### 範例 - -以下是設定 `apiKey`、`headers` 和模型 `limit` 選項的範例。 - -```json title="opencode.json" {9,11,17-20} -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "myprovider": { - "npm": "@ai-sdk/openai-compatible", - "name": "My AI ProviderDisplay Name", - "options": { - "baseURL": "https://api.myprovider.com/v1", - "apiKey": "{env:ANTHROPIC_API_KEY}", - "headers": { - "Authorization": "Bearer custom-token" - } - }, - "models": { - "my-model-name": { - "name": "My Model Display Name", - "limit": { - "context": 200000, - "output": 65536 - } - } - } - } - } -} -``` - -設定詳情: - -- **apiKey**:使用 `env` 變數語法設定,[了解更多](/docs/config#env-vars)。 -- **headers**:隨每個請求傳送的自訂請求標頭。 -- **limit.context**:模型接受的最大輸入 Token 數。 -- **limit.output**:模型可產生的最大 Token 數。 - -`limit` 欄位讓 OpenCode 了解您還剩餘多少上下文空間。標準提供商會自動從 models.dev 拉取這些資訊。 - ---- - -## 疑難排解 - -如果您在設定提供商時遇到問題,請檢查以下幾點: - -1. **檢查認證設定**:執行 `opencode auth list` 查看該提供商的憑證是否已新增到設定中。 - - 這不適用於 Amazon Bedrock 等依賴環境變數進行認證的提供商。 - -2. 對於自訂提供商,請檢查 OpenCode 設定並確認: - - `/connect` 指令中使用的提供商 ID 與 OpenCode 設定中的 ID 一致。 - - 使用了正確的 npm 套件。例如,Cerebras 應使用 `@ai-sdk/cerebras`。對於其他所有 OpenAI 相容的提供商,使用 `@ai-sdk/openai-compatible`。 - - `options.baseURL` 欄位中的 API 端點位址正確。 diff --git a/packages/web/src/content/docs/zh-tw/rules.mdx b/packages/web/src/content/docs/zh-tw/rules.mdx deleted file mode 100644 index 705474c8a2..0000000000 --- a/packages/web/src/content/docs/zh-tw/rules.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: 規則 -description: 為 opencode 設定自訂指令。 ---- - -您可以透過建立 `AGENTS.md` 檔案來為 opencode 提供自訂指令。這類似於 Cursor 的規則功能。該檔案包含的指令會被納入 LLM 的上下文中,以便針對您的特定專案自訂其行為。 - ---- - -## 初始化 - -要建立新的 `AGENTS.md` 檔案,您可以在 opencode 中執行 `/init` 指令。 - -:::tip -您應該將專案的 `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 工作階段。 - -由於該檔案不會被提交到 Git 或與團隊共享,我們建議用它來指定 LLM 應遵循的個人規則。 - -### 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 - -建議的方式是使用 `opencode.json` 中的 `instructions` 欄位: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"] -} -``` - -### 在 AGENTS.md 中手動指定 - -您可以在 `AGENTS.md` 中提供明確的指令,教 opencode 讀取外部檔案。以下是一個實際範例: - -```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. -``` - -這種方式允許您: - -- 建立模組化、可複用的規則檔案 -- 透過符號連結或 Git 子模組在專案之間共享規則 -- 保持 AGENTS.md 簡潔,同時參照詳細的指南 -- 確保 opencode 僅在特定任務需要時才載入檔案 - -:::tip -對於 monorepo 或具有共享標準的專案,使用 `opencode.json` 搭配 glob 模式(如 `packages/*/AGENTS.md`)比手動指定指令更易於維護。 -::: diff --git a/packages/web/src/content/docs/zh-tw/sdk.mdx b/packages/web/src/content/docs/zh-tw/sdk.mdx deleted file mode 100644 index 2ed216d8b9..0000000000 --- a/packages/web/src/content/docs/zh-tw/sdk.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: SDK -description: opencode 伺服器的型別安全 JS 用戶端。 ---- - -import config from "../../../../config.mjs" -export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` - -opencode JS/TS SDK 提供了一個型別安全的用戶端,用於與伺服器進行互動。 -您可以用它來建構整合方案,並以程式化方式控制 opencode。 - -[了解更多](/docs/server)關於伺服器的運作原理。如需範例,請查看社群建構的[專案](/docs/ecosystem#projects)。 - ---- - -## 安裝 - -從 npm 安裝 SDK: - -```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 包含所有 API 型別的 TypeScript 定義。您可以直接匯入它們: - -```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" -``` - -所有型別均根據伺服器的 OpenAPI 規範產生,可在型別檔案中查看。 - ---- - -## 錯誤處理 - -SDK 可能會拋出錯誤,您可以捕捉並處理這些錯誤: - -```typescript -try { - await client.session.get({ path: { id: "invalid-id" } }) -} catch (error) { - console.error("Failed to get session:", (error as Error).message) -} -``` - ---- - -## 結構化輸出 - -您可以透過指定帶有 JSON Schema 的 `format` 來請求模型回傳結構化的 JSON 輸出。模型會使用 `StructuredOutput` 工具回傳符合您 Schema 的經過驗證的 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` | 回傳符合所提供 Schema 的經過驗證的 JSON | - -### JSON Schema 格式 - -使用 `type: 'json_schema'` 時,需提供以下欄位: - -| 欄位 | 型別 | 描述 | -| ------------ | --------------- | ------------------------------------- | -| `type` | `'json_schema'` | 必填。指定 JSON Schema 模式 | -| `schema` | `object` | 必填。定義輸出結構的 JSON Schema 物件 | -| `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. **在 Schema 屬性中提供清晰的描述**,幫助模型理解需要擷取的資料 -2. **使用 `required`** 指定哪些欄位必須存在 -3. **保持 Schema 簡潔** — 複雜的巢狀 Schema 可能會讓模型更難正確填充 -4. **設定合適的 `retryCount`** — 對於複雜 Schema 可增加重試次數,對於簡單 Schema 可減少 - ---- - -## API - -SDK 透過型別安全的用戶端公開所有伺服器 API。 - ---- - -### 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()` | 列出所有可用的代理 | Agent[] | - ---- - -#### 範例 - -```javascript -// 寫入一筆日誌 -await client.app.log({ - body: { - service: "my-app", - level: "info", - message: "Operation completed", - }, -}) - -// 列出可用的代理 -const agents = await client.app.agents() -``` - ---- - -### Project - -| 方法 | 描述 | 回應 | -| ------------------- | ------------ | --------------------------------------------- | -| `project.list()` | 列出所有專案 | Project[] | -| `project.current()` | 取得當前專案 | Project | - ---- - -#### 範例 - -```javascript -// List all projects -const projects = await client.project.list() - -// Get current project -const currentProject = await client.project.current() -``` - ---- - -### Path - -| 方法 | 描述 | 回應 | -| ------------ | ------------ | ---------------------------------------- | -| `path.get()` | 取得當前路徑 | Path | - ---- - -#### 範例 - -```javascript -// 取得當前路徑資訊 -const pathInfo = await client.path.get() -``` - ---- - -### Config - -| 方法 | 描述 | 回應 | -| -------------------- | -------------------- | ----------------------------------------------------------------------------------------------------- | -| `config.get()` | 取得設定資訊 | Config | -| `config.providers()` | 列出供應商和預設模型 | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -#### 範例 - -```javascript -const config = await client.config.get() - -const { providers, default: defaults } = await client.config.providers() -``` - ---- - -### Sessions - -| 方法 | 描述 | 備註 | -| ---------------------------------------------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `session.list()` | 列出工作階段 | 回傳 Session[] | -| `session.get({ path })` | 取得工作階段 | 回傳 Session | -| `session.children({ path })` | 列出子工作階段 | 回傳 Session[] | -| `session.create({ body })` | 建立工作階段 | 回傳 Session | -| `session.delete({ path })` | 刪除工作階段 | 回傳 `boolean` | -| `session.update({ path, body })` | 更新工作階段屬性 | 回傳 Session | -| `session.init({ path, body })` | 分析應用程式並建立 `AGENTS.md` | 回傳 `boolean` | -| `session.abort({ path })` | 中止正在執行的工作階段 | 回傳 `boolean` | -| `session.share({ path })` | 分享工作階段 | 回傳 Session | -| `session.unshare({ path })` | 取消分享工作階段 | 回傳 Session | -| `session.summarize({ path, body })` | 摘要工作階段 | 回傳 `boolean` | -| `session.messages({ path })` | 列出工作階段中的訊息 | 回傳 `{ info: `Message`, parts: `Part[]`}[]` | -| `session.message({ path })` | 取得訊息詳情 | 回傳 `{ info: `Message`, parts: `Part[]`}` | -| `session.prompt({ path, body })` | 傳送提示訊息 | `body.noReply: true` 回傳 UserMessage(僅注入上下文)。預設回傳帶有 AI 回應的 AssistantMessage。支援透過 `body.outputFormat` 使用[結構化輸出](#結構化輸出) | -| `session.command({ path, body })` | 向工作階段傳送指令 | 回傳 `{ info: `AssistantMessage`, parts: `Part[]`}` | -| `session.shell({ path, body })` | 執行 shell 指令 | 回傳 AssistantMessage | -| `session.revert({ path, body })` | 還原訊息 | 回傳 Session | -| `session.unrevert({ path })` | 恢復已還原的訊息 | 回傳 Session | -| `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." }], - }, -}) -``` - ---- - -### Files - -| 方法 | 描述 | 回應 | -| ------------------------- | -------------------- | ----------------------------------------------------------------------------------- | -| `find.text({ query })` | 搜尋檔案中的文字 | 包含 `path`、`lines`、`line_number`、`absolute_offset`、`submatches` 的比對物件陣列 | -| `find.files({ query })` | 按名稱尋找檔案和目錄 | `string[]`(路徑) | -| `find.symbols({ query })` | 尋找工作區符號 | Symbol[] | -| `file.read({ query })` | 讀取檔案 | `{ type: "raw" \| "patch", content: string }` | -| `file.status({ query? })` | 取得已追蹤檔案的狀態 | File[] | - -`find.files` 支援以下選填的查詢欄位: - -- `type`:`"file"` 或 `"directory"` -- `directory`:覆寫搜尋的專案根目錄 -- `limit`:最大結果數(1–200) - ---- - -#### 範例 - -```javascript -// 搜尋和讀取檔案 -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.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 -// 控制 TUI 介面 -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" }, -}) -``` - ---- - -### Events - -| 方法 | 描述 | 回應 | -| ------------------- | -------------------- | -------------------- | -| `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) -} -``` diff --git a/packages/web/src/content/docs/zh-tw/server.mdx b/packages/web/src/content/docs/zh-tw/server.mdx deleted file mode 100644 index 411bc0eb72..0000000000 --- a/packages/web/src/content/docs/zh-tw/server.mdx +++ /dev/null @@ -1,284 +0,0 @@ ---- -title: 伺服器 -description: 透過 HTTP 與 opencode 伺服器互動。 ---- - -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 ] [--hostname ] [--cors ] -``` - -#### 選項 - -| 旗標 | 描述 | 預設 | -| --------------- | ----------------------- | ---------------- | -| `--port` | 監聽連接埠 | `4096` | -| `--hostname` | 監聽的主機名稱 | `127.0.0.1` | -| `--mdns` | 啟用 mDNS 探索 | `false` | -| `--mdns-domain` | mDNS 服務的自訂網域名稱 | `opencode.local` | -| `--cors` | 額外允許的瀏覽器來源 | `[]` | - -`--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` 時,它會啟動一個 TUI 和一個伺服器。TUI 是與伺服器通訊的客戶端。伺服器暴露一個 OpenAPI 3.1 規範端點。該端點也用於產生 [SDK](/docs/sdk)。 - -:::tip -使用 opencode 伺服器以程式化方式與 opencode 互動。 -::: - -這種架構讓 opencode 支援多個客戶端,並允許你以程式化方式與 opencode 互動。 - -你可以執行 `opencode serve` 來啟動一個獨立的伺服器。如果你已經在執行 opencode TUI,`opencode serve` 會啟動一個新的伺服器。 - ---- - -#### 連接到現有伺服器 - -當你啟動 TUI 時,它會隨機分配連接埠和主機名稱。你也可以傳入 `--hostname` 和 `--port` [旗標](/docs/cli),然後用它來連接對應的伺服器。 - -[`/tui`](#tui) 端點可用於透過伺服器驅動 TUI。例如,你可以預填充或執行一個提示詞。此方式被 OpenCode [IDE](/docs/ide) 外掛所使用。 - ---- - -## 規範 - -伺服器發布了一個 OpenAPI 3.1 規範,可在以下位址查看: - -``` -http://:/doc -``` - -例如,`http://localhost:4096/doc`。使用該規範可以產生客戶端或檢查請求和回應類型,也可以在 Swagger 瀏覽器中查看。 - ---- - -## API - -opencode 伺服器暴露以下 API。 - ---- - -### 全域 - -| 方法 | 路徑 | 描述 | 回應 | -| ----- | ---------------- | ------------------------ | ------------------------------------ | -| `GET` | `/global/health` | 取得伺服器健康狀態和版本 | `{ healthy: true, version: string }` | -| `GET` | `/global/event` | 取得全域事件(SSE 串流) | 事件串流 | - ---- - -### 專案 - -| 方法 | 路徑 | 描述 | 回應 | -| ----- | ------------------ | ------------ | --------------------------------------------- | -| `GET` | `/project` | 列出所有專案 | Project[] | -| `GET` | `/project/current` | 取得當前專案 | Project | - ---- - -### 路徑和 VCS - -| 方法 | 路徑 | 描述 | 回應 | -| ----- | ------- | ----------------------- | ------------------------------------------- | -| `GET` | `/path` | 取得當前路徑 | Path | -| `GET` | `/vcs` | 取得當前專案的 VCS 資訊 | VcsInfo | - ---- - -### 實例 - -| 方法 | 路徑 | 描述 | 回應 | -| ------ | ------------------- | ------------ | --------- | -| `POST` | `/instance/dispose` | 銷毀當前實例 | `boolean` | - ---- - -### 設定 - -| 方法 | 路徑 | 描述 | 回應 | -| ------- | ------------------- | -------------------- | ---------------------------------------------------------------------------------------- | -| `GET` | `/config` | 取得設定資訊 | Config | -| `PATCH` | `/config` | 更新設定 | Config | -| `GET` | `/config/providers` | 列出供應商和預設模型 | `{ providers: `Provider[]`, default: { [key: string]: string } }` | - ---- - -### 供應商 - -| 方法 | 路徑 | 描述 | 回應 | -| ------ | -------------------------------- | ----------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/provider` | 列出所有供應商 | `{ all: `Provider[]`, default: {...}, connected: string[] }` | -| `GET` | `/provider/auth` | 取得供應商認證方式 | `{ [providerID: string]: `ProviderAuthMethod[]` }` | -| `POST` | `/provider/{id}/oauth/authorize` | 使用 OAuth 授權供應商 | ProviderAuthAuthorization | -| `POST` | `/provider/{id}/oauth/callback` | 處理供應商的 OAuth 回呼 | `boolean` | - ---- - -### 工作階段 - -| 方法 | 路徑 | 描述 | 說明 | -| -------- | ---------------------------------------- | ------------------------------ | ----------------------------------------------------------------------------------- | -| `GET` | `/session` | 列出所有工作階段 | 回傳 Session[] | -| `POST` | `/session` | 建立新工作階段 | 請求主體:`{ parentID?, title? }`,回傳 Session | -| `GET` | `/session/status` | 取得所有工作階段的狀態 | 回傳 `{ [sessionID: string]: `SessionStatus` }` | -| `GET` | `/session/:id` | 取得工作階段詳情 | 回傳 Session | -| `DELETE` | `/session/:id` | 刪除工作階段及其所有資料 | 回傳 `boolean` | -| `PATCH` | `/session/:id` | 更新工作階段屬性 | 請求主體:`{ title? }`,回傳 Session | -| `GET` | `/session/:id/children` | 取得工作階段的子工作階段 | 回傳 Session[] | -| `GET` | `/session/:id/todo` | 取得工作階段的待辦事項清單 | 回傳 Todo[] | -| `POST` | `/session/:id/init` | 分析應用程式並建立 `AGENTS.md` | 請求主體:`{ messageID, providerID, modelID }`,回傳 `boolean` | -| `POST` | `/session/:id/fork` | 在某條訊息處分岔現有工作階段 | 請求主體:`{ messageID? }`,回傳 Session | -| `POST` | `/session/:id/abort` | 中止正在執行的工作階段 | 回傳 `boolean` | -| `POST` | `/session/:id/share` | 分享工作階段 | 回傳 Session | -| `DELETE` | `/session/:id/share` | 取消分享工作階段 | 回傳 Session | -| `GET` | `/session/:id/diff` | 取得本次工作階段的差異 | 查詢參數:`messageID?`,回傳 FileDiff[] | -| `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: `Message`, parts: `Part[]`}[]` | -| `POST` | `/session/:id/message` | 傳送訊息並等待回應 | 請求主體:`{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`,回傳 `{ info: `Message`, parts: `Part[]`}` | -| `GET` | `/session/:id/message/:messageID` | 取得訊息詳情 | 回傳 `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/prompt_async` | 非同步傳送訊息(不等待回應) | 請求主體:與 `/session/:id/message` 相同,回傳 `204 No Content` | -| `POST` | `/session/:id/command` | 執行斜線指令 | 請求主體:`{ messageID?, agent?, model?, command, arguments }`,回傳 `{ info: `Message`, parts: `Part[]`}` | -| `POST` | `/session/:id/shell` | 執行 shell 指令 | 請求主體:`{ agent, model?, command }`,回傳 `{ info: `Message`, parts: `Part[]`}` | - ---- - -### 指令 - -| 方法 | 路徑 | 描述 | 回應 | -| ----- | ---------- | ------------ | --------------------------------------------- | -| `GET` | `/command` | 列出所有指令 | Command[] | - ---- - -### 檔案 - -| 方法 | 路徑 | 描述 | 回應 | -| ----- | ------------------------ | -------------------- | ----------------------------------------------------------------------------------- | -| `GET` | `/find?pattern=` | 在檔案中搜尋文字 | 包含 `path`、`lines`、`line_number`、`absolute_offset`、`submatches` 的匹配物件陣列 | -| `GET` | `/find/file?query=` | 按名稱尋找檔案和目錄 | `string[]`(路徑) | -| `GET` | `/find/symbol?query=` | 尋找工作區符號 | Symbol[] | -| `GET` | `/file?path=` | 列出檔案和目錄 | FileNode[] | -| `GET` | `/file/content?path=

` | 讀取檔案 | FileContent | -| `GET` | `/file/status` | 取得已追蹤檔案的狀態 | File[] | - -#### `/find/file` 查詢參數 - -- `query`(必填)— 搜尋字串(模糊匹配) -- `type`(選填)— 將結果限制為 `"file"` 或 `"directory"` -- `directory`(選填)— 覆蓋搜尋的專案根目錄 -- `limit`(選填)— 最大結果數(1–200) -- `dirs`(選填)— 舊版旗標(`"false"` 僅回傳檔案) - ---- - -### 工具(實驗性) - -| 方法 | 路徑 | 描述 | 回應 | -| ----- | ------------------------------------------- | ---------------------------------- | -------------------------------------------- | -| `GET` | `/experimental/tool/ids` | 列出所有工具 ID | ToolIDs | -| `GET` | `/experimental/tool?provider=

&model=` | 列出指定模型的工具及其 JSON Schema | ToolList | - ---- - -### LSP、格式化工具和 MCP - -| 方法 | 路徑 | 描述 | 回應 | -| ------ | ------------ | ------------------- | -------------------------------------------------------- | -| `GET` | `/lsp` | 取得 LSP 伺服器狀態 | LSPStatus[] | -| `GET` | `/formatter` | 取得格式化工具狀態 | FormatterStatus[] | -| `GET` | `/mcp` | 取得 MCP 伺服器狀態 | `{ [name: string]: `MCPStatus` }` | -| `POST` | `/mcp` | 動態新增 MCP 伺服器 | 請求主體:`{ name, config }`,回傳 MCP 狀態物件 | - ---- - -### 代理 - -| 方法 | 路徑 | 描述 | 回應 | -| ----- | -------- | ------------------ | ------------------------------------------- | -| `GET` | `/agent` | 列出所有可用的代理 | Agent[] | - ---- - -### 日誌 - -| 方法 | 路徑 | 描述 | 回應 | -| ------ | ------ | ------------------------------------------------------------- | --------- | -| `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` | 顯示提示訊息(`{ title?, message, variant }`) | `boolean` | -| `GET` | `/tui/control/next` | 等待下一個控制請求 | 控制請求物件 | -| `POST` | `/tui/control/response` | 回應控制請求(`{ body }`) | `boolean` | - ---- - -### 認證 - -| 方法 | 路徑 | 描述 | 回應 | -| ----- | ----------- | ---------------------------------------------- | --------- | -| `PUT` | `/auth/:id` | 設定認證憑證。請求主體必須匹配供應商的資料結構 | `boolean` | - ---- - -### 事件 - -| 方法 | 路徑 | 描述 | 回應 | -| ----- | -------- | --------------------------------------------------------------------- | ------------------ | -| `GET` | `/event` | 伺服器傳送事件串流。第一個事件是 `server.connected`,之後是匯流排事件 | 伺服器傳送事件串流 | - ---- - -### 文件 - -| 方法 | 路徑 | 描述 | 回應 | -| ----- | ------ | ---------------- | ----------------------------- | -| `GET` | `/doc` | OpenAPI 3.1 規範 | 包含 OpenAPI 規範的 HTML 頁面 | diff --git a/packages/web/src/content/docs/zh-tw/share.mdx b/packages/web/src/content/docs/zh-tw/share.mdx deleted file mode 100644 index 58365035b6..0000000000 --- a/packages/web/src/content/docs/zh-tw/share.mdx +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: 分享 -description: 分享您的 OpenCode 對話。 ---- - -OpenCode 的分享功能允許您建立指向 OpenCode 對話的公開連結,方便與團隊成員協作或向他人尋求幫助。 - -:::note -共享的對話對任何擁有連結的人都是公開可存取的。 -::: - ---- - -## 工作原理 - -當您分享一段對話時,OpenCode 會: - -1. 為您的工作階段建立一個唯一的公開 URL -2. 將您的對話歷史同步到我們的伺服器 -3. 透過可分享的連結使對話可存取 — `opncd.ai/s/` - ---- - -## 分享模式 - -OpenCode 支援三種分享模式,用於控制對話的共享方式: - ---- - -### 手動模式(預設) - -預設情況下,OpenCode 使用手動分享模式。工作階段不會自動共享,但您可以使用 `/share` 指令手動分享: - -``` -/share -``` - -這將產生一個唯一的 URL 並複製到您的剪貼簿。 - -要在[設定檔](/docs/config)中明確設定手動模式: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual" -} -``` - ---- - -### 自動分享 - -您可以在[設定檔](/docs/config)中將 `share` 選項設定為 `"auto"`,為所有新對話啟用自動分享: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "auto" -} -``` - -啟用自動分享後,每個新對話都會自動共享並產生連結。 - ---- - -### 停用 - -您可以在[設定檔](/docs/config)中將 `share` 選項設定為 `"disabled"`,完全停用分享功能: - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "share": "disabled" -} -``` - -要在團隊中對特定專案強制執行此設定,請將其新增到專案的 `opencode.json` 檔案中並提交到 Git。 - ---- - -## 取消分享 - -要停止分享對話並將其從公開存取中移除: - -``` -/unshare -``` - -這將移除分享連結並刪除與該對話相關的資料。 - ---- - -## 隱私 - -分享對話時需要注意以下幾點。 - ---- - -### 資料保留 - -共享的對話在您明確取消分享之前將一直保持可存取狀態。這包括: - -- 完整的對話歷史 -- 所有訊息和回覆 -- 工作階段中繼資料 - ---- - -### 建議 - -- 僅分享不包含敏感資訊的對話。 -- 分享前請檢查對話內容。 -- 協作完成後請取消分享。 -- 避免分享包含專有程式碼或機密資料的對話。 -- 對於敏感專案,請完全停用分享功能。 - ---- - -## 企業版 - -對於企業部署,分享功能可以: - -- 出於安全合規考量**完全停用** -- **限制**為僅通過 SSO 身分驗證的使用者可用 -- **自行託管**在您自己的基礎架構上 - -[了解更多](/docs/enterprise)關於在您的組織中使用 OpenCode 的資訊。 diff --git a/packages/web/src/content/docs/zh-tw/skills.mdx b/packages/web/src/content/docs/zh-tw/skills.mdx deleted file mode 100644 index c37fca7beb..0000000000 --- a/packages/web/src/content/docs/zh-tw/skills.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: "代理技能" -description: "透過 SKILL.md 定義可重複使用的行為" ---- - -代理技能讓 OpenCode 能夠從你的儲存庫或主目錄中發現可重複使用的指令。 -技能透過原生的 `skill` 工具按需載入——代理可以查看可用技能,並在需要時載入完整內容。 - ---- - -## 放置檔案 - -為每個技能名稱建立一個資料夾,並在其中放入 `SKILL.md`。 -OpenCode 會搜尋以下位置: - -- 專案設定:`.opencode/skills//SKILL.md` -- 全域設定:`~/.config/opencode/skills//SKILL.md` -- 專案 Claude 相容:`.claude/skills//SKILL.md` -- 全域 Claude 相容:`~/.claude/skills//SKILL.md` -- 專案代理相容:`.agents/skills//SKILL.md` -- 全域代理相容:`~/.agents/skills//SKILL.md` - ---- - -## 了解發現機制 - -對於專案本地路徑,OpenCode 會從當前工作目錄向上遍歷,直到到達 git 工作樹根目錄。 -在此過程中,它會載入 `.opencode/` 中所有匹配的 `skills/*/SKILL.md`,以及匹配的 `.claude/skills/*/SKILL.md` 或 `.agents/skills/*/SKILL.md`。 - -全域定義也會從 `~/.config/opencode/skills/*/SKILL.md`、`~/.claude/skills/*/SKILL.md` 和 `~/.agents/skills/*/SKILL.md` 中載入。 - ---- - -## 撰寫 frontmatter - -每個 `SKILL.md` 必須以 YAML frontmatter 開頭。 -僅識別以下欄位: - -- `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 - - - git-release - Create consistent releases and changelogs - - -``` - -代理透過呼叫工具來載入技能: - -``` -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" - } - } - } - } -} -``` - ---- - -## 停用技能工具 - -為不需要使用技能的代理完全停用技能功能: - -**自訂代理**: - -```yaml ---- -tools: - skill: false ---- -``` - -**內建代理**: - -```json -{ - "agent": { - "plan": { - "tools": { - "skill": false - } - } - } -} -``` - -停用後,`` 部分將被完全省略。 - ---- - -## 排查載入問題 - -如果某個技能沒有顯示: - -1. 確認 `SKILL.md` 檔案名稱全部為大寫字母 -2. 檢查 frontmatter 是否包含 `name` 和 `description` -3. 確保技能名稱在所有位置中唯一 -4. 檢查權限設定——設為 `deny` 的技能會對代理隱藏 diff --git a/packages/web/src/content/docs/zh-tw/themes.mdx b/packages/web/src/content/docs/zh-tw/themes.mdx deleted file mode 100644 index 256b78ccb6..0000000000 --- a/packages/web/src/content/docs/zh-tw/themes.mdx +++ /dev/null @@ -1,369 +0,0 @@ ---- -title: 主題 -description: 選擇內建主題或定義您自己的主題。 ---- - -透過 OpenCode,您可以從多個內建主題中進行選擇,使用能自動適配終端機主題的主題,或者定義您自己的自訂主題。 - -預設情況下,OpenCode 使用我們自己的 `opencode` 主題。 - ---- - -## 終端機要求 - -為了使主題能夠正確顯示完整的調色盤,您的終端機必須支援**真彩色**(24 位元色)。大多數現代終端機預設支援此功能,但您可能需要手動啟用: - -- **檢查支援情況**:執行 `echo $COLORTERM` — 輸出應為 `truecolor` 或 `24bit` -- **啟用真彩色**:在您的 shell 設定檔中設定環境變數 `COLORTERM=truecolor` -- **終端機相容性**:確保您的終端機模擬器支援 24 位元色(大多數現代終端機如 iTerm2、Alacritty、Kitty、Windows Terminal 以及較新版本的 GNOME Terminal 均已支援) - -如果沒有真彩色支援,主題可能會出現色彩精度下降的情況,或者回退到最接近的 256 色近似值。 - ---- - -## 內建主題 - -OpenCode 自帶多個內建主題。 - -| 名稱 | 描述 | -| ---------------------- | ------------------------------------------------------------------- | -| `system` | 自動適配終端機的背景顏色 | -| `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) Dark 主題 | - -我們還在不斷新增更多主題。 - ---- - -## 系統主題 - -`system` 主題旨在自動適配您終端機的配色方案。與使用固定顏色的傳統主題不同,_system_ 主題具有以下特點: - -- **產生灰階色階**:根據終端機的背景顏色建立自訂灰階色階,確保最佳對比度。 -- **使用 ANSI 顏色**:利用標準 ANSI 顏色(0-15)進行語法高亮和 UI 元素渲染,遵循終端機的調色盤設定。 -- **保留終端機預設值**:將文字和背景顏色設為 `none`,以保持終端機的原生外觀。 - -系統主題適合以下使用者: - -- 希望 OpenCode 與終端機的外觀保持一致 -- 使用了自訂終端機配色方案 -- 偏好所有終端機應用程式擁有統一的視覺風格 - ---- - -## 使用主題 - -您可以透過 `/theme` 指令調出主題選擇介面來選擇主題,也可以在 `tui.json` 中直接指定。 - -```json title="tui.json" {3} -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "tokyonight" -} -``` - ---- - -## 自訂主題 - -OpenCode 支援靈活的基於 JSON 的主題系統,讓使用者可以輕鬆建立和自訂主題。 - ---- - -### 層級優先順序 - -主題按以下順序從多個目錄載入,後面的目錄會覆蓋前面的目錄: - -1. **內建主題** — 嵌入在二進位檔案中 -2. **使用者設定目錄** — 定義在 `~/.config/opencode/themes/*.json` 或 `$XDG_CONFIG_HOME/opencode/themes/*.json` -3. **專案根目錄** — 定義在 `/.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"` — 使用終端機的預設顏色或透明背景 - ---- - -### 顏色定義 - -`defs` 部分是選填的,它允許您定義可在主題中重複引用的可重複使用顏色。 - ---- - -### 終端機預設值 - -特殊值 `"none"` 可用於任何顏色屬性,以繼承終端機的預設顏色。這在建立需要與終端機配色方案無縫融合的主題時特別有用: - -- `"text": "none"` — 使用終端機的預設前景色 -- `"background": "none"` — 使用終端機的預設背景色 - ---- - -### 範例 - -以下是一個自訂主題的完整範例: - -```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" - } - } -} -``` diff --git a/packages/web/src/content/docs/zh-tw/tools.mdx b/packages/web/src/content/docs/zh-tw/tools.mdx deleted file mode 100644 index 763d0ce9a7..0000000000 --- a/packages/web/src/content/docs/zh-tw/tools.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -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 執行終端機指令,例如 `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 - -使用正規表示式搜尋檔案內容。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "grep": "allow" - } -} -``` - -在程式碼庫中快速搜尋內容。支援完整的正規表示式語法和檔案模式過濾。 - ---- - -### glob - -透過模式匹配查找檔案。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "glob": "allow" - } -} -``` - -使用 `**/*.js` 或 `src/**/*.ts` 等 glob 模式搜尋檔案。回傳按修改時間排序的匹配檔案路徑。 - ---- - -### lsp(實驗性) - -與已設定的 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 - -對檔案套用補丁。 - -```json title="opencode.json" {4} -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "edit": "allow" - } -} -``` - -該工具將補丁檔案套用到您的程式碼庫中。適用於套用來自各種來源的 diff 和補丁。 - -:::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 金鑰——該工具無需身分驗證即可直接連接到 Exa AI 的託管 MCP 服務。 - -:::tip -當您需要查找資訊(發現)時使用 `websearch`,當您需要從特定 URL 擷取內容(檢索)時使用 `webfetch`。 -::: - ---- - -### 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` 中列出。 diff --git a/packages/web/src/content/docs/zh-tw/troubleshooting.mdx b/packages/web/src/content/docs/zh-tw/troubleshooting.mdx deleted file mode 100644 index 71981a032e..0000000000 --- a/packages/web/src/content/docs/zh-tw/troubleshooting.mdx +++ /dev/null @@ -1,299 +0,0 @@ ---- -title: 疑難排解 -description: 常見問題及其解決方法。 ---- - -要偵錯 OpenCode 的問題,請先檢查其儲存在磁碟上的日誌和本地資料。 - ---- - -## 日誌 - -日誌檔案寫入位置: - -- **macOS/Linux**: `~/.local/share/opencode/log/` -- **Windows**: 按 `WIN+R` 並貼上 `%USERPROFILE%\.local\share\opencode\log` - -日誌檔案以時間戳記命名(例如 `2025-01-09T123456.log`),並保留最近的 10 個日誌檔案。 - -你可以透過 `--log-level` 命令列選項設定日誌等級以取得更詳細的偵錯資訊。例如:`opencode --log-level DEBUG`。 - ---- - -## 儲存 - -OpenCode 將工作階段資料和其他應用程式資料儲存在磁碟上: - -- **macOS/Linux**: `~/.local/share/opencode/` -- **Windows**: 按 `WIN+R` 並貼上 `%USERPROFILE%\.local\share\opencode` - -該目錄包含: - -- `auth.json` - 身分驗證資料,如 API 金鑰、OAuth Token -- `log/` - 應用程式日誌 -- `project/` - 專案特定資料,如工作階段和訊息資料 - - 如果專案位於 Git 儲存庫中,則儲存在 `.//storage/` - - 如果不是 Git 儲存庫,則儲存在 `./global/storage/` - ---- - -## 桌面應用程式 - -OpenCode Desktop 會在背景執行一個本地 OpenCode 伺服器(即 `opencode-cli` 附屬程序)。大多數問題是由外掛異常、快取損壞或錯誤的伺服器設定引起的。 - -### 快速檢查 - -- 完全退出並重新啟動應用程式。 -- 如果應用程式顯示錯誤頁面,請點擊**重新啟動**並複製錯誤詳情。 -- 僅限 macOS:`OpenCode` 選單 -> **Reload Webview**(當 UI 空白或凍結時有效)。 - ---- - -### 停用外掛 - -如果桌面應用程式在啟動時當機、卡住或行為異常,請先停用外掛。 - -#### 檢查全域設定 - -開啟你的全域設定檔,查找 `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` -- **專案外掛**(僅當你使用了專案級設定時) - - `/.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 - -在主頁面上,點擊伺服器名稱(帶有狀態指示點)以開啟伺服器選擇器。在**預設伺服器**部分,點擊**清除**。 - -#### 從設定中移除 `server.port` / `server.hostname` - -如果你的 `opencode.json(c)` 包含 `server` 部分,請暫時移除該部分並重新啟動桌面應用程式。 - -#### 檢查環境變數 - -如果你在環境中設定了 `OPENCODE_PORT`,桌面應用程式將嘗試使用該連接埠作為本地伺服器連接埠。 - -- 取消設定 `OPENCODE_PORT`(或選擇一個空閒連接埠)並重新啟動。 - ---- - -### Linux: Wayland / X11 問題 - -在 Linux 上,某些 Wayland 設定可能會導致視窗空白或合成器錯誤。 - -- 如果你使用 Wayland 且應用程式出現空白或當機,請嘗試使用 `OC_ALLOW_WAYLAND=1` 啟動。 -- 如果情況變得更糟,請移除該設定並嘗試在 X11 工作階段下啟動。 - ---- - -### Windows: WebView2 執行階段 - -在 Windows 上,OpenCode Desktop 需要 Microsoft Edge **WebView2 Runtime**。如果應用程式開啟後是空白視窗或無法啟動,請安裝或更新 WebView2 後重試。 - ---- - -### Windows: 常見效能問題 - -如果你在 Windows 上遇到效能緩慢、檔案存取問題或終端機問題,請嘗試使用 [WSL (Windows Subsystem for Linux)](/docs/windows-wsl)。WSL 提供了一個 Linux 環境,能更好地與 OpenCode 的功能相容。 - ---- - -### 通知不顯示 - -OpenCode Desktop 僅在以下情況下顯示系統通知: - -- 在作業系統設定中已為 OpenCode 啟用通知,且 -- 應用程式視窗未處於焦點狀態。 - ---- - -### 重設桌面應用程式儲存(最後手段) - -如果應用程式無法啟動且你無法從 UI 內部清除設定,請重設桌面應用程式的儲存狀態。 - -1. 退出 OpenCode Desktop。 -2. 找到並刪除以下檔案(它們位於 OpenCode Desktop 應用程式資料目錄中): - -- `opencode.settings.dat`(桌面預設伺服器 URL) -- `opencode.global.dat` 和 `opencode.workspace.*.dat`(UI 狀態,如最近的伺服器/專案) - -快速找到該目錄: - -- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support`(然後搜尋上述檔案名稱) -- **Linux**: 在 `~/.local/share` 下搜尋上述檔案名稱 -- **Windows**: 按 `WIN+R` -> `%APPDATA%`(然後搜尋上述檔案名稱) - ---- - -## 取得幫助 - -如果你遇到 OpenCode 的問題: - -1. **在 GitHub 上回報問題** - - 回報 Bug 或請求功能的最佳方式是透過我們的 GitHub 儲存庫: - - [**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues) - - 在建立新 Issue 之前,請先搜尋已有的 Issue,看看你的問題是否已被回報。 - -2. **加入我們的 Discord** - - 如需即時幫助和社群討論,請加入我們的 Discord 伺服器: - - [**opencode.ai/discord**](https://opencode.ai/discord) - ---- - -## 常見問題 - -以下是一些常見問題及其解決方法。 - ---- - -### OpenCode 無法啟動 - -1. 檢查日誌中的錯誤訊息 -2. 嘗試使用 `--print-logs` 執行以在終端機中查看輸出 -3. 使用 `opencode upgrade` 確保你使用的是最新版本 - ---- - -### 身分驗證問題 - -1. 嘗試在 TUI 中使用 `/connect` 指令重新進行身分驗證 -2. 檢查你的 API 金鑰是否有效 -3. 確保你的網路允許連線到供應商的 API - ---- - -### 模型不可用 - -1. 檢查你是否已通過供應商的身分驗證 -2. 驗證設定中的模型名稱是否正確 -3. 某些模型可能需要特定的存取權限或訂閱 - -如果你遇到 `ProviderModelNotFoundError`,很可能是在某處錯誤地參考了模型。 -模型應按如下方式參考:`/` - -範例: - -- `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. 在 TUI 中使用 `/connect` 指令重新與供應商進行身分驗證。 - ---- - -### 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 -``` - -**對於無頭環境:** - -```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`。 diff --git a/packages/web/src/content/docs/zh-tw/tui.mdx b/packages/web/src/content/docs/zh-tw/tui.mdx deleted file mode 100644 index f2f7b09cc5..0000000000 --- a/packages/web/src/content/docs/zh-tw/tui.mdx +++ /dev/null @@ -1,426 +0,0 @@ ---- -title: TUI -description: 使用 OpenCode 終端機使用者介面。 ---- - -import { Tabs, TabItem } from "@astrojs/starlight/components" - -OpenCode 提供了一個互動式終端機介面(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 TUI 時,您可以輸入 `/` 後跟指令名稱來快速執行操作。例如: - -```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` 環境變數中指定的編輯器。 - - - - ```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" - ``` - - 要使其永久生效,請將其新增到您的 shell 設定檔中; - `~/.bashrc`、`~/.zshrc` 等。 - - - - - ```bash - set EDITOR=notepad - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - set EDITOR=code --wait - ``` - - 要使其永久生效,請使用**系統內容** > **環境變數**。 - - - - - ```powershell - $env:EDITOR = "notepad" - - # For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc. - # include --wait - $env:EDITOR = "code --wait" - ``` - - 要使其永久生效,請將其新增到您的 PowerShell 設定檔中。 - - - - -常用的編輯器選項包括: - -- `code` - Visual Studio Code -- `cursor` - Cursor -- `windsurf` - Windsurf -- `nvim` - Neovim 編輯器 -- `vim` - Vim 編輯器 -- `nano` - Nano 編輯器 -- `notepad` - Notepad(Windows 記事本) -- `subl` - Sublime Text - -:::note -某些編輯器(如 VS Code)需要以 `--wait` 旗標啟動。 -::: - -某些編輯器需要命令列參數才能以阻塞模式執行。`--wait` 旗標使編輯器程序阻塞直到關閉。 - ---- - -## 設定 - -您可以透過 `tui.json`(或 `tui.jsonc`)自訂 TUI 行為。 - -```json title="tui.json" -{ - "$schema": "https://opencode.ai/tui.json", - "theme": "opencode", - "leader_timeout": 2000, - "keybinds": { - "leader": "ctrl+x", - "command_list": "ctrl+p" - }, - "scroll_speed": 3, - "scroll_acceleration": { - "enabled": false - }, - "diff_style": "auto", - "mouse": true, - "attention": { - "enabled": true, - "notifications": true, - "sound": true, - "volume": 0.4, - "sound_pack": "opencode.default", - "sounds": { - "error": "./sounds/error.mp3" - } - } -} -``` - -這與設定伺服器/執行時行為的 `opencode.json` 是分開的。 - -`keybinds` 會與內建預設值合併,因此您只需要設定想要修改的快捷鍵。 - -### 選項 - -- `theme` - 設定您的 UI 主題。[了解更多](/docs/themes)。 -- `keybinds` - 自訂鍵盤快速鍵。[了解更多](/docs/keybinds)。 -- `leader_timeout` - 控制按下 leader key 後 OpenCode 等待後續按鍵的時間。預設為 `2000`。 -- `scroll_acceleration.enabled` - 啟用 macOS 風格的捲動加速,實現平滑、自然的捲動體驗。啟用後,快速捲動時速度會增加,慢速移動時保持精確。**此設定優先於 `scroll_speed`,啟用時會覆蓋它。** -- `scroll_speed` - 控制使用捲動指令時 TUI 的捲動速度(最小值:`0.001`,支援小數值)。預設為 `3`。**注意:如果 `scroll_acceleration.enabled` 設定為 `true`,則此設定會被忽略。** -- `diff_style` - 控制差異呈現方式。`"auto"` 根據終端機寬度自適應,`"stacked"` 始終顯示單列。 -- `mouse` - 在 TUI 中啟用或停用滑鼠捕捉(預設:`true`)。停用後,會保留終端機原生的滑鼠選取和捲動行為。 -- `attention` - 設定 TUI 桌面通知和聲音。預設停用。 - -使用 `OPENCODE_TUI_CONFIG` 載入自訂 TUI 設定路徑。 - -### Attention - -當 OpenCode 需要你處理問題、核准權限請求、查看工作階段錯誤,或告知工作階段已完成時,TUI 可以透過聲音和桌面通知提醒你。設定 `attention.enabled` 後會啟用這些提醒;內建事件觸發時會播放聲音。桌面通知只會在終端機視窗未聚焦時傳送,且不會用於 subagent 事件。 - -- `enabled` - 開啟 Attention 的所有通知和聲音。預設為 `false`。 -- `notifications` - 啟用 Attention 後,允許 TUI 透過終端機傳送桌面通知。預設為 `true`。 -- `sound` - 啟用 Attention 後,允許播放提示音。預設為 `true`。 -- `volume` - 預設提示音音量,範圍從 `0` 到 `1`。預設為 `0.4`。 -- `sound_pack` - 要使用的 sound pack ID。預設為 `opencode.default`。 -- `sounds` - 為 `default`、`question`、`permission`、`error`、`done` 或 `subagent_done` 指定自訂聲音檔案。路徑可以是絕對路徑、`file://` URL,或相對於 `tui.json` 的路徑。 - ---- - -## 自訂 - -您可以使用指令面板(`ctrl+x h` 或 `/help`)自訂 TUI 檢視的各個方面。這些設定在重新啟動後仍會保留。 - ---- - -#### 使用者名稱顯示 - -切換您的使用者名稱是否顯示在聊天訊息中。透過以下方式存取: - -- 指令面板:搜尋「username」或「hide username」 -- 該設定會自動儲存,並在各個 TUI 工作階段中保持記憶 diff --git a/packages/web/src/content/docs/zh-tw/web.mdx b/packages/web/src/content/docs/zh-tw/web.mdx deleted file mode 100644 index f55f995606..0000000000 --- a/packages/web/src/content/docs/zh-tw/web.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Web -description: 在瀏覽器中使用 OpenCode。 ---- - -OpenCode 可以作為 Web 應用程式在瀏覽器中執行,無需終端機即可獲得同樣強大的 AI 編碼體驗。 - -![OpenCode Web - New Session](../../../assets/web/web-homepage-new-session.png) - -## 快速開始 - -執行以下指令啟動 Web 介面: - -```bash -opencode web -``` - -這會在 `127.0.0.1` 上啟動一個本地伺服器,使用隨機可用連接埠,並自動在預設瀏覽器中開啟 OpenCode。 - -:::caution -如果未設定 `OPENCODE_SERVER_PASSWORD`,伺服器將沒有安全保護。本地使用沒有問題,但在網路存取時應當設定密碼。 -::: - -:::tip[Windows 使用者] -為獲得最佳體驗,建議從 [WSL](/docs/windows-wsl) 而非 PowerShell 執行 `opencode web`。這可以確保正確的檔案系統存取和終端機整合。 -::: - ---- - -## 設定 - -你可以透過命令列旗標或[設定檔](/docs/config)來設定 Web 伺服器。 - -### 連接埠 - -預設情況下,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` 進行更改。 - ---- - -## 使用 Web 介面 - -啟動後,Web 介面提供對 OpenCode 工作階段的存取。 - -### 工作階段 - -在主頁上查看和管理你的工作階段。你可以查看進行中的工作階段,也可以建立新的工作階段。 - -![OpenCode Web - Active Session](../../../assets/web/web-homepage-active-session.png) - -### 伺服器狀態 - -點擊「See Servers」可以查看已連線的伺服器及其狀態。 - -![OpenCode Web - See Servers](../../../assets/web/web-homepage-see-servers.png) - ---- - -## 連接終端機 - -你可以將終端機 TUI 連接到正在執行的 Web 伺服器: - -```bash -# 啟動 Web 伺服器 -opencode web --port 4096 - -# 在另一個終端機中連接 TUI -opencode attach http://localhost:4096 -``` - -這樣你就可以同時使用 Web 介面和終端機,共享相同的工作階段和狀態。 - ---- - -## 設定檔 - -你也可以在 `opencode.json` 設定檔中設定伺服器選項: - -```json -{ - "server": { - "port": 4096, - "hostname": "0.0.0.0", - "mdns": true, - "cors": ["https://example.com"] - } -} -``` - -命令列旗標的優先順序高於設定檔中的設定。 diff --git a/packages/web/src/content/docs/zh-tw/windows-wsl.mdx b/packages/web/src/content/docs/zh-tw/windows-wsl.mdx deleted file mode 100644 index 66b203acc7..0000000000 --- a/packages/web/src/content/docs/zh-tw/windows-wsl.mdx +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Windows (WSL) -description: 透過 WSL 在 Windows 上執行 OpenCode 以獲得最佳體驗。 ---- - -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 提供更出色的檔案系統效能、完整的終端機支援,以及與 OpenCode 所依賴的開發工具的良好相容性。 -::: - ---- - -## 安裝設定 - - - -1. **安裝 WSL** - - 如果尚未安裝,請參照 Microsoft 官方指南[安裝 WSL](https://learn.microsoft.com/en-us/windows/wsl/install)。 - -2. **在 WSL 中安裝 OpenCode** - - WSL 設定完成後,開啟 WSL 終端機,使用任一[安裝方式](/docs/)安裝 OpenCode。 - - ```bash - curl -fsSL https://opencode.ai/install | bash - ``` - -3. **從 WSL 中使用 OpenCode** - - 導航到你的專案目錄(透過 `/mnt/c/`、`/mnt/d/` 等路徑存取 Windows 檔案),然後執行 OpenCode。 - - ```bash - cd /mnt/c/Users/YourName/project - opencode - ``` - - - ---- - -## 桌面應用程式 + 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` 在你的環境中無法使用,請改用 WSL 的 IP 位址進行連線(在 WSL 中執行:`hostname -I`),使用 `http://:4096`。 -::: - -:::caution -使用 `--hostname 0.0.0.0` 時,請設定 `OPENCODE_SERVER_PASSWORD` 以保護伺服器安全。 -::: - -```bash -OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0 -``` - ---- - -## Web 客戶端 + WSL - -要在 Windows 上獲得最佳的 Web 體驗: - -1. **在 WSL 終端機中執行 `opencode web`**,而非在 PowerShell 中執行: - - ```bash - opencode web --hostname 0.0.0.0 - ``` - -2. **在 Windows 瀏覽器中存取** `http://localhost:`(OpenCode 會輸出該 URL) - -從 WSL 中執行 `opencode web` 可確保正確的檔案系統存取和終端機整合,同時仍可透過 Windows 瀏覽器進行存取。 - ---- - -## 存取 Windows 檔案 - -WSL 可以透過 `/mnt/` 目錄存取你的所有 Windows 檔案: - -- `C:` 磁碟 → `/mnt/c/` -- `D:` 磁碟 → `/mnt/d/` -- 其他磁碟以此類推... - -範例: - -```bash -cd /mnt/c/Users/YourName/Documents/project -opencode -``` - -:::tip -為了獲得更流暢的體驗,建議將儲存庫克隆或複製到 WSL 檔案系統中(例如 `~/code/` 目錄下),然後在該位置執行 OpenCode。 -::: - ---- - -## 使用技巧 - -- 對於儲存在 Windows 磁碟上的專案,在 WSL 中執行 OpenCode 即可無縫存取檔案 -- 搭配 VS Code 的 [WSL 擴充套件](https://code.visualstudio.com/docs/remote/wsl) 使用 OpenCode,打造一體化的開發工作流程 -- OpenCode 的設定和工作階段資料儲存在 WSL 環境中的 `~/.local/share/opencode/` diff --git a/packages/web/src/content/docs/zh-tw/zen.mdx b/packages/web/src/content/docs/zh-tw/zen.mdx deleted file mode 100644 index 778df663bf..0000000000 --- a/packages/web/src/content/docs/zh-tw/zen.mdx +++ /dev/null @@ -1,308 +0,0 @@ ---- -title: Zen -description: 由 OpenCode 提供的精選模型列表。 ---- - -import config from "../../../../config.mjs" -export const console = config.console -export const email = `mailto:${config.email}` - -OpenCode Zen 是由 OpenCode 團隊提供、經過測試與驗證的模型清單。 - -Zen 的運作方式和 OpenCode 中的其他供應商一樣。你登入 OpenCode Zen 並取得 -你的 API 金鑰。它是 **完全可選的**,你不需要使用它也能使用 -OpenCode。 - ---- - -## 背景 - -市面上有大量模型,但其中只有少數能作為編碼代理良好運作。此外,大多數供應商的 -設定方式差異很大,因此你得到的效能與品質也會非常不同。 - -:::tip -我們測試了一組與 OpenCode 搭配良好的精選模型與供應商。 -::: - -所以如果你是透過 OpenRouter 之類的服務使用模型,你永遠無法確定自己拿到的是不是 -你想要那個模型的最佳版本。 - -為了改善這件事,我們做了幾件事: - -1. 我們測試了一組精選模型,並和它們的團隊討論如何以最佳方式執行。 -2. 接著我們與幾家供應商合作,確保這些模型能被正確提供。 -3. 最後,我們針對模型與供應商的組合進行基準測試,整理出一份我們有信心推薦的清單。 - -OpenCode Zen 是一個 AI 閘道,讓你可以存取這些模型。 - ---- - -## 運作方式 - -OpenCode Zen 的運作方式和 OpenCode 中的其他供應商一樣。 - -1. 你登入 **OpenCode Zen**,加入帳單資訊,然後複製你的 API 金鑰。 -2. 你在 TUI 中執行 `/connect` 指令,選擇 OpenCode Zen,然後貼上你的 API 金鑰。 -3. 在 TUI 中執行 `/models`,查看我們推薦的模型清單。 - -你會依請求計費,也可以為帳戶儲值。 - ---- - -## 端點 - -你也可以透過以下 API 端點存取我們的模型。 - -| 模型 | Model ID | 端點 | 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 Fable 5 | claude-fable-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Claude Opus 4.8 | claude-opus-4-8 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| 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 Sonnet 5 | claude-sonnet-5 | `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 Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Gemini 3.5 Flash | gemini-3.5-flash | `https://opencode.ai/zen/v1/models/gemini-3.5-flash` | `@ai-sdk/google` | -| 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.7 Max | qwen3.7-max | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.7 Plus | qwen3.7-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.6 Plus | qwen3.6-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| Qwen3.5 Plus | qwen3.5-plus | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` | -| DeepSeek V4 Pro | deepseek-v4-pro | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash | deepseek-v4-flash | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| MiniMax M3 | minimax-m3 | `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` | -| MiniMax M2.5 | minimax-m2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| GLM 5.2 | glm-5.2 | `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` | -| Kimi K2.7 Code | kimi-k2.7-code | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Grok Build 0.1 | grok-build-0.1 | `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` | -| MiMo-V2.5 Free | mimo-v2.5-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| North Mini Code Free | north-mini-code-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| Nemotron 3 Ultra Free | nemotron-3-ultra-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | -| DeepSeek V4 Flash Free | deepseek-v4-flash-free | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` | - -OpenCode 設定中的 [模型 ID](/docs/config/#models) 會使用 `opencode/` -格式。例如,如果是 GPT 5.5,你會在設定中使用 `opencode/gpt-5.5`。 - ---- - -### 模型 - -你可以從以下位置取得所有可用模型及其中繼資料的完整清單: - -``` -https://opencode.ai/zen/v1/models -``` - ---- - -## 定價 - -我們支援按量付費模式。以下是 **每 1M tokens** 的價格。 - -| 模型 | 輸入 | 輸出 | 快取讀取 | 快取寫入 | -| --------------------------------- | ------ | ------- | -------- | -------- | -| Big Pickle | Free | Free | Free | - | -| DeepSeek V4 Flash Free | Free | Free | Free | - | -| MiMo-V2.5 Free | Free | Free | Free | - | -| North Mini Code Free | Free | Free | Free | - | -| Nemotron 3 Ultra Free | Free | Free | Free | - | -| MiniMax M3 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.7 | $0.30 | $1.20 | $0.06 | - | -| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - | -| GLM 5.2 | $1.40 | $4.40 | $0.26 | - | -| GLM 5.1 | $1.40 | $4.40 | $0.26 | - | -| GLM 5 | $1.00 | $3.20 | $0.20 | - | -| Kimi K2.7 Code | $0.95 | $4.00 | $0.19 | - | -| Kimi K2.6 | $0.95 | $4.00 | $0.16 | - | -| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - | -| Qwen3.7 Max | $2.50 | $7.50 | $0.50 | $3.125 | -| Qwen3.7 Plus | $0.40 | $1.60 | $0.04 | $0.50 | -| Qwen3.6 Plus | $0.50 | $3.00 | $0.05 | $0.625 | -| Qwen3.5 Plus | $0.20 | $1.20 | $0.02 | $0.25 | -| DeepSeek V4 Pro | $1.74 | $3.48 | $0.145 | - | -| DeepSeek V4 Flash | $0.14 | $0.28 | $0.028 | - | -| Grok Build 0.1 | $1.00 | $2.00 | $0.20 | - | -| Claude Fable 5 | $10.00 | $50.00 | $1.00 | $12.50 | -| Claude Opus 4.8 | $5.00 | $25.00 | $0.50 | $6.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 Sonnet 5 | $2.00 | $10.00 | $0.20 | $2.50 | -| 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 Haiku 4.5 | $1.00 | $5.00 | $0.10 | $1.25 | -| Gemini 3.5 Flash | $1.50 | $9.00 | $0.15 | - | -| 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 | $0.05 | $0.40 | $0.005 | - | - -你可能會在使用紀錄中看到 _Claude Haiku 3.5_。這是一個[低成本模型](/docs/config/#models), -會用來產生工作階段的標題。 - -:::note -信用卡手續費會以成本轉嫁(每筆交易 4.4% + $0.30);除此之外,我們不會額外收費。 -::: - -免費模型: - -- DeepSeek V4 Flash Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 -- MiMo-V2.5 Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 -- North Mini Code Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 -- Nemotron 3 Ultra Free 在 OpenCode 上限時提供。團隊正在利用這段時間收集回饋並改進模型。 -- Big Pickle 是一個隱身模型,在 OpenCode 上限時免費提供。團隊正在利用這段時間收集回饋並改進模型。 - -如果你有任何問題,請聯絡我們。 - ---- - -### 自動儲值 - -如果你的餘額低於 $5,Zen 會自動儲值 $20。 - -你可以調整自動儲值金額,也可以完全停用自動儲值。 - ---- - -### 每月限額 - -你也可以為整個工作區以及團隊中的每位成員設定每月使用限額。 - -例如,假設你把每月使用限額設為 $20,Zen 在一個月內就不會使用超過 $20。 -但如果你啟用了自動儲值,當餘額低於 $5 時,Zen 最終仍可能向你收取超過 $20。 - ---- - -### 已棄用模型 - -| 模型 | 棄用日期 | -| ------------------ | ----------------- | -| 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 Opus 4.1 | August 5, 2026 | -| Claude Sonnet 4 | June 15, 2026 | -| Claude Haiku 3.5 | February 16, 2026 | -| Gemini 3 Pro | March 9, 2026 | -| MiniMax M2.5 | August 5, 2026 | -| MiniMax M2.1 | March 15, 2026 | -| GLM 5 | May 14, 2026 | -| GLM 4.7 | March 15, 2026 | -| GLM 4.6 | March 15, 2026 | -| Kimi K2.5 | August 5, 2026 | -| Kimi K2 Thinking | March 6, 2026 | -| Kimi K2 | March 6, 2026 | -| Qwen3 Coder 480B | February 6, 2026 | - ---- - -## 隱私 - -我們所有模型都託管於美國。我們的供應商遵循零保留政策,且不會將你的資料用於模型訓練,但以下情況除外: - -- Big Pickle: 在免費期間,收集到的資料可能會用於改進模型。 -- DeepSeek V4 Flash Free: 在免費期間,收集到的資料可能會用於改進模型。 -- MiMo-V2.5 Free: 在免費期間,收集到的資料可能會用於改進模型。 -- North Mini Code Free:免費期間,所收集的資料可能會被保留並用於改進模型。請勿提交個人或機密資料。請參閱我們的[使用條款](https://cohere.com/terms-of-use)和[隱私權政策](https://cohere.com/privacy)。 -- Nemotron 3 Ultra Free(NVIDIA 免費端點):僅供試用 — 請勿提交個人或機密資料。基於安全目的以及為了改進 NVIDIA 產品與服務,系統會記錄你的使用情況。基於改進目的而記錄的工作階段資料不會與你的身分或任何持久識別碼相關聯。有關我們資料處理實務的更多資訊,請參閱我們的[隱私政策](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。與此端點進行互動,即表示你同意我們收集、記錄與使用此類資訊,並同意 [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf)。 -- OpenAI APIs: 請求會依據 [OpenAI's Data Policies](https://platform.openai.com/docs/guides/your-data) 保留 30 天。 -- Anthropic APIs: 請求會依據 [Anthropic's Data Policies](https://docs.anthropic.com/en/docs/claude-code/data-usage) 保留 30 天。 - ---- - -## 團隊 - -Zen 也很適合團隊使用。你可以邀請隊友、指派角色、管理團隊要使用的模型等等。 - -:::note -作為 beta 的一部分,工作區目前對團隊免費。 -::: - -作為 beta 的一部分,管理你的工作區目前對團隊免費。我們很快會分享更多定價細節。 - ---- - -### 角色 - -你可以邀請隊友加入你的工作區,並指派角色: - -- **Admin**:管理模型、成員、API 金鑰與帳單 -- **Member**:只能管理自己的 API 金鑰 - -Admin 也可以為每位成員設定每月支出上限,協助控制成本。 - ---- - -### 模型存取 - -Admin 可以為工作區啟用或停用特定模型。對已停用模型發出的請求會回傳錯誤。 - -這在你想停用會收集資料的模型時很有用。 - ---- - -### 自備金鑰 - -你可以使用自己的 OpenAI 或 Anthropic API 金鑰,同時仍然存取 Zen 中的其他模型。 - -當你使用自己的金鑰時,Token 會直接由供應商計費,而不是由 Zen 計費。 - -例如,你的組織可能已經有 OpenAI 或 Anthropic 的金鑰,而你想改用那把金鑰,而不是 Zen 提供的金鑰。 - ---- - -## 目標 - -我們建立 OpenCode Zen,是為了: - -1. 為編碼代理對最佳模型與供應商進行 **基準測試**。 -2. 取得 **最高品質** 的選項,而不是降低效能或改路由到更便宜的供應商。 -3. 透過以成本價銷售,把任何 **降價** 回饋給你;唯一的加價只用來支付我們的處理費。 -4. 保持 **無鎖定**,讓你能把它與任何其他編碼代理一起使用,同時也始終能在 OpenCode 中使用任何其他供應商。 diff --git a/packages/web/src/content/i18n/ar.json b/packages/web/src/content/i18n/ar.json deleted file mode 100644 index d8029441fe..0000000000 --- a/packages/web/src/content/i18n/ar.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "وكيل برمجة بالذكاء الاصطناعي مصمم لـ terminal", - "app.header.home": "الرئيسية", - "app.header.docs": "التوثيق", - "app.footer.issueLink": "وجدت خطأ؟ افتح بلاغا", - "app.footer.discordLink": "انضم إلى مجتمع Discord الخاص بنا", - "app.lander.hero.title": "وكيل البرمجة بالذكاء الاصطناعي المصمم لـ terminal.", - "app.lander.cta.getStarted": "ابدأ الآن", - "app.lander.features.native_tui.title": "TUI أصلي", - "app.lander.features.native_tui.description": "واجهة terminal أصلية، سريعة الاستجابة، وقابلة للتخصيص.", - "app.lander.features.lsp_enabled.title": "يدعم LSP", - "app.lander.features.lsp_enabled.description": "يحمّل تلقائيا خوادم LSP المناسبة لـ LLM.", - "app.lander.features.multi_session.title": "جلسات متعددة", - "app.lander.features.multi_session.description": "شغّل عدة وكلاء بالتوازي على نفس المشروع.", - "app.lander.features.shareable_links.title": "روابط قابلة للمشاركة", - "app.lander.features.shareable_links.description": "شارك رابطا لأي جلسة للرجوع إليها أو لتصحيح الأخطاء.", - "app.lander.features.github_copilot.description": "سجّل الدخول عبر GitHub لاستخدام حساب Copilot الخاص بك.", - "app.lander.features.chatgpt_plus_pro.description": "سجّل الدخول عبر OpenAI لاستخدام حساب ChatGPT Plus أو Pro.", - "app.lander.features.use_any_model.title": "استخدم أي نموذج", - "app.lander.features.use_any_model.prefix": "يدعم أكثر من 75 مزودا لـ LLM عبر", - "app.lander.features.use_any_model.suffix": "بما في ذلك النماذج المحلية.", - "app.lander.images.tui.caption": "opencode TUI مع سمة tokyonight", - "app.lander.images.tui.alt": "opencode TUI مع سمة tokyonight", - "app.lander.images.vscode.caption": "opencode في VS Code", - "app.lander.images.vscode.alt": "opencode في VS Code", - "app.lander.images.github.caption": "opencode في GitHub", - "app.lander.images.github.alt": "opencode في GitHub", - "share.meta_description": "opencode - وكيل البرمجة بالذكاء الاصطناعي المصمم لـ terminal.", - "share.not_found": "غير موجود", - "share.link_to_message": "رابط إلى هذه الرسالة", - "share.copied": "تم النسخ!", - "share.copy": "نسخ", - "share.show_more": "عرض المزيد", - "share.show_less": "عرض أقل", - "share.show_results": "عرض النتائج", - "share.hide_results": "إخفاء النتائج", - "share.show_details": "عرض التفاصيل", - "share.hide_details": "إخفاء التفاصيل", - "share.show_preview": "عرض المعاينة", - "share.hide_preview": "إخفاء المعاينة", - "share.show_contents": "عرض المحتويات", - "share.hide_contents": "إخفاء المحتويات", - "share.show_output": "عرض المخرجات", - "share.hide_output": "إخفاء المخرجات", - "share.error": "خطأ", - "share.waiting_for_messages": "بانتظار الرسائل...", - "share.status_connected_waiting": "متصل، بانتظار الرسائل...", - "share.status_connecting": "جارٍ الاتصال...", - "share.status_disconnected": "غير متصل", - "share.status_reconnecting": "جارٍ إعادة الاتصال...", - "share.status_error": "خطأ", - "share.status_unknown": "غير معروف", - "share.error_id_not_found": "لم يتم العثور على id", - "share.error_api_url_not_found": "لم يتم العثور على API URL", - "share.error_connection_failed": "فشل الاتصال", - "share.opencode_version": "إصدار opencode", - "share.opencode_name": "opencode", - "share.models": "النماذج", - "share.cost": "التكلفة", - "share.input_tokens": "رموز الإدخال", - "share.output_tokens": "رموز الإخراج", - "share.reasoning_tokens": "رموز التفكير", - "share.scroll_to_bottom": "التمرير إلى الأسفل", - "share.attachment": "مرفق", - "share.thinking": "تفكير", - "share.thinking_pending": "جارٍ التفكير...", - "share.creating_plan": "جارٍ إنشاء الخطة", - "share.completing_plan": "جارٍ إكمال الخطة", - "share.updating_plan": "جارٍ تحديث الخطة", - "share.match_one": "مطابقة", - "share.match_other": "مطابقات", - "share.result_one": "نتيجة", - "share.result_other": "نتائج", - "share.debug_key": "المفتاح" -} diff --git a/packages/web/src/content/i18n/bs.json b/packages/web/src/content/i18n/bs.json deleted file mode 100644 index 6dc96ce7f3..0000000000 --- a/packages/web/src/content/i18n/bs.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "AI agent za kodiranje, napravljen za terminal", - "app.header.home": "Početna", - "app.header.docs": "Dokumentacija", - "app.footer.issueLink": "Pronašli ste grešku? Prijavite problem", - "app.footer.discordLink": "Pridružite se našoj Discord zajednici", - "app.lander.hero.title": "AI agent za kodiranje, napravljen za terminal.", - "app.lander.cta.getStarted": "Započnite", - "app.lander.features.native_tui.title": "Izvorni TUI", - "app.lander.features.native_tui.description": "Prilagodljiv, izvorni, tematski interfejs terminala.", - "app.lander.features.lsp_enabled.title": "LSP omogućen", - "app.lander.features.lsp_enabled.description": "Automatski učitava ispravne LSP-ove za LLM.", - "app.lander.features.multi_session.title": "Više sesija", - "app.lander.features.multi_session.description": "Pokrenite više agenata paralelno na istom projektu.", - "app.lander.features.shareable_links.title": "Linkovi za dijeljenje", - "app.lander.features.shareable_links.description": "Podijelite link do bilo koje sesije za referencu ili otklanjanje grešaka.", - "app.lander.features.github_copilot.description": "Prijavite se na GitHub da koristite svoj Copilot nalog.", - "app.lander.features.chatgpt_plus_pro.description": "Prijavite se na OpenAI da koristite svoj ChatGPT Plus ili Pro nalog.", - "app.lander.features.use_any_model.title": "Koristite bilo koji model", - "app.lander.features.use_any_model.prefix": "Podržava 75+ LLM provajdera kroz", - "app.lander.features.use_any_model.suffix": "uključujući lokalne modele.", - "app.lander.images.tui.caption": "OpenCode TUI u tokyonight temi", - "app.lander.images.tui.alt": "OpenCode TUI u tokyonight temi", - "app.lander.images.vscode.caption": "OpenCode u VS Code", - "app.lander.images.vscode.alt": "OpenCode u VS Code", - "app.lander.images.github.caption": "OpenCode u GitHub", - "app.lander.images.github.alt": "OpenCode u GitHub", - "share.meta_description": "OpenCode - AI agent za kodiranje napravljen za terminal.", - "share.not_found": "Nije pronađeno", - "share.link_to_message": "Link do ove poruke", - "share.copied": "Kopirano!", - "share.copy": "Kopiraj", - "share.show_more": "Prikaži više", - "share.show_less": "Prikaži manje", - "share.show_results": "Prikaži rezultate", - "share.hide_results": "Sakrij rezultate", - "share.show_details": "Prikaži detalje", - "share.hide_details": "Sakrij detalje", - "share.show_preview": "Prikaži pregled", - "share.hide_preview": "Sakrij pregled", - "share.show_contents": "Prikaži sadržaj", - "share.hide_contents": "Sakrij sadržaj", - "share.show_output": "Prikaži izlaz", - "share.hide_output": "Sakrij izlaz", - "share.error": "Greška", - "share.waiting_for_messages": "Čekanje poruka...", - "share.status_connected_waiting": "Povezano, čekanje poruka...", - "share.status_connecting": "Povezivanje...", - "share.status_disconnected": "Prekinuto", - "share.status_reconnecting": "Ponovno povezivanje...", - "share.status_error": "Greška", - "share.status_unknown": "Nepoznato", - "share.error_id_not_found": "ID nije pronađen", - "share.error_api_url_not_found": "API URL nije pronađen", - "share.error_connection_failed": "Povezivanje nije uspjelo", - "share.opencode_version": "OpenCode verzija", - "share.opencode_name": "OpenCode", - "share.models": "Modeli", - "share.cost": "Cijena", - "share.input_tokens": "Ulazni tokeni", - "share.output_tokens": "Izlazni tokeni", - "share.reasoning_tokens": "Tokeni rezonovanja", - "share.scroll_to_bottom": "Pomjerite na dno", - "share.attachment": "Prilog", - "share.thinking": "Razmišljanje", - "share.thinking_pending": "razmišlja...", - "share.creating_plan": "Kreiranje plana", - "share.completing_plan": "Završavanje plana", - "share.updating_plan": "Ažuriranje plana", - "share.match_one": "podudaranje", - "share.match_other": "podudaranja", - "share.result_one": "rezultat", - "share.result_other": "rezultati", - "share.debug_key": "Ključ" -} diff --git a/packages/web/src/content/i18n/da.json b/packages/web/src/content/i18n/da.json deleted file mode 100644 index a375c6713e..0000000000 --- a/packages/web/src/content/i18n/da.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "AI-kodningsagent bygget til terminalen", - "app.header.home": "Hjem", - "app.header.docs": "Dokumentation", - "app.footer.issueLink": "Har du fundet en fejl? Opret en issue", - "app.footer.discordLink": "Bliv en del af vores Discord-fællesskab", - "app.lander.hero.title": "AI-kodningsagenten bygget til terminalen.", - "app.lander.cta.getStarted": "Kom i gang", - "app.lander.features.native_tui.title": "Indbygget TUI", - "app.lander.features.native_tui.description": "En responsiv, indbygget, temavenlig terminal-brugergrænseflade.", - "app.lander.features.lsp_enabled.title": "LSP aktiveret", - "app.lander.features.lsp_enabled.description": "Indlæser automatisk de rigtige LSPs for LLM.", - "app.lander.features.multi_session.title": "Flere sessioner", - "app.lander.features.multi_session.description": "Start flere agenter parallelt på det samme projekt.", - "app.lander.features.shareable_links.title": "Delbare links", - "app.lander.features.shareable_links.description": "Del et link til enhver session til reference eller til fejlretning.", - "app.lander.features.github_copilot.description": "Log ind med GitHub for at bruge din Copilot konto.", - "app.lander.features.chatgpt_plus_pro.description": "Log ind med OpenAI for at bruge din ChatGPT Plus eller Pro-konto.", - "app.lander.features.use_any_model.title": "Brug enhver model", - "app.lander.features.use_any_model.prefix": "Understøtter 75+ LLM udbydere igennem", - "app.lander.features.use_any_model.suffix": "herunder lokale modeller.", - "app.lander.images.tui.caption": "opencode TUI med tokyonight-temaet", - "app.lander.images.tui.alt": "opencode TUI med tokyonight-temaet", - "app.lander.images.vscode.caption": "opencode i VS Code", - "app.lander.images.vscode.alt": "opencode i VS Code", - "app.lander.images.github.caption": "opencode i GitHub", - "app.lander.images.github.alt": "opencode i GitHub", - "share.meta_description": "opencode - AI-kodningsagenten bygget til terminalen.", - "share.not_found": "Ikke fundet", - "share.link_to_message": "Link til denne besked", - "share.copied": "Kopieret!", - "share.copy": "Kopiér", - "share.show_more": "Vis mere", - "share.show_less": "Vis mindre", - "share.show_results": "Vis resultater", - "share.hide_results": "Skjul resultater", - "share.show_details": "Vis detaljer", - "share.hide_details": "Skjul detaljer", - "share.show_preview": "Vis forhåndsvisning", - "share.hide_preview": "Skjul forhåndsvisning", - "share.show_contents": "Vis indhold", - "share.hide_contents": "Skjul indhold", - "share.show_output": "Vis output", - "share.hide_output": "Skjul output", - "share.error": "Fejl", - "share.waiting_for_messages": "Venter på beskeder...", - "share.status_connected_waiting": "Forbundet, venter på beskeder...", - "share.status_connecting": "Opretter forbindelse...", - "share.status_disconnected": "Afbrudt", - "share.status_reconnecting": "Genopretter forbindelse...", - "share.status_error": "Fejl", - "share.status_unknown": "Ukendt", - "share.error_id_not_found": "id ikke fundet", - "share.error_api_url_not_found": "API URL ikke fundet", - "share.error_connection_failed": "Forbindelsen mislykkedes", - "share.opencode_version": "opencode-version", - "share.opencode_name": "opencode", - "share.models": "Modeller", - "share.cost": "Omkostning", - "share.input_tokens": "Input-tokens", - "share.output_tokens": "Output-tokens", - "share.reasoning_tokens": "Ræsonneringstokens", - "share.scroll_to_bottom": "Rul til bunden", - "share.attachment": "Vedhæftet fil", - "share.thinking": "Tænker", - "share.thinking_pending": "Tænker...", - "share.creating_plan": "Oprettelse af plan", - "share.completing_plan": "Færdiggør plan", - "share.updating_plan": "Opdatering af plan", - "share.match_one": "træf", - "share.match_other": "træf", - "share.result_one": "resultat", - "share.result_other": "resultater", - "share.debug_key": "Nøgle" -} diff --git a/packages/web/src/content/i18n/de.json b/packages/web/src/content/i18n/de.json deleted file mode 100644 index 9d63143689..0000000000 --- a/packages/web/src/content/i18n/de.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "AI-Coding-Agent für das Terminal", - "app.header.home": "Startseite", - "app.header.docs": "Dokumentation", - "app.footer.issueLink": "Einen Fehler gefunden? Eröffne ein Issue", - "app.footer.discordLink": "Tritt unserer Discord-Community bei", - "app.lander.hero.title": "Der AI-Coding-Agent für das Terminal.", - "app.lander.cta.getStarted": "Loslegen", - "app.lander.features.native_tui.title": "Natives TUI", - "app.lander.features.native_tui.description": "Eine reaktionsschnelle, native, anpassbare Terminal-UI.", - "app.lander.features.lsp_enabled.title": "LSP aktiviert", - "app.lander.features.lsp_enabled.description": "Lädt automatisch die passenden LSPs für das LLM.", - "app.lander.features.multi_session.title": "Mehrere Sitzungen", - "app.lander.features.multi_session.description": "Starten Sie mehrere Agenten parallel für dasselbe Projekt.", - "app.lander.features.shareable_links.title": "Gemeinsam nutzbare Links", - "app.lander.features.shareable_links.description": "Teilen Sie einen Link zu beliebigen Sitzungen als Referenz oder zum Debuggen.", - "app.lander.features.github_copilot.description": "Melden Sie sich bei GitHub an, um Ihr Copilot-Konto zu verwenden.", - "app.lander.features.chatgpt_plus_pro.description": "Melden Sie sich mit OpenAI an, um Ihr ChatGPT Plus- oder Pro-Konto zu verwenden.", - "app.lander.features.use_any_model.title": "Beliebiges Modell nutzen", - "app.lander.features.use_any_model.prefix": "Unterstützt 75+ LLM-Provider über", - "app.lander.features.use_any_model.suffix": "einschließlich lokaler Modelle.", - "app.lander.images.tui.caption": "opencode TUI mit dem tokyonight Theme", - "app.lander.images.tui.alt": "opencode TUI mit dem tokyonight Theme", - "app.lander.images.vscode.caption": "opencode im VS-Code-Editor", - "app.lander.images.vscode.alt": "opencode im VS-Code-Editor", - "app.lander.images.github.caption": "opencode auf GitHub", - "app.lander.images.github.alt": "opencode auf GitHub", - "share.meta_description": "opencode - Der AI-Coding-Agent für das Terminal.", - "share.not_found": "Nicht gefunden", - "share.link_to_message": "Link zu dieser Nachricht", - "share.copied": "Kopiert!", - "share.copy": "Kopieren", - "share.show_more": "Mehr anzeigen", - "share.show_less": "Weniger anzeigen", - "share.show_results": "Ergebnisse anzeigen", - "share.hide_results": "Ergebnisse ausblenden", - "share.show_details": "Details anzeigen", - "share.hide_details": "Details ausblenden", - "share.show_preview": "Vorschau anzeigen", - "share.hide_preview": "Vorschau ausblenden", - "share.show_contents": "Inhalte anzeigen", - "share.hide_contents": "Inhalte ausblenden", - "share.show_output": "Ausgabe anzeigen", - "share.hide_output": "Ausgabe ausblenden", - "share.error": "Fehler", - "share.waiting_for_messages": "Warten auf Nachrichten...", - "share.status_connected_waiting": "Verbunden, warte auf Nachrichten...", - "share.status_connecting": "Verbinden...", - "share.status_disconnected": "Getrennt", - "share.status_reconnecting": "Verbindet erneut...", - "share.status_error": "Fehler", - "share.status_unknown": "Unbekannt", - "share.error_id_not_found": "ID nicht gefunden", - "share.error_api_url_not_found": "API URL nicht gefunden", - "share.error_connection_failed": "Verbindung fehlgeschlagen", - "share.opencode_version": "opencode Version", - "share.opencode_name": "opencode", - "share.models": "Modelle", - "share.cost": "Kosten", - "share.input_tokens": "Eingabe-Token", - "share.output_tokens": "Ausgabe-Token", - "share.reasoning_tokens": "Reasoning-Token", - "share.scroll_to_bottom": "Nach unten scrollen", - "share.attachment": "Anhang", - "share.thinking": "Denken", - "share.thinking_pending": "Denken...", - "share.creating_plan": "Plan wird erstellt", - "share.completing_plan": "Plan wird abgeschlossen", - "share.updating_plan": "Plan wird aktualisiert", - "share.match_one": "Treffer", - "share.match_other": "Treffer", - "share.result_one": "Ergebnis", - "share.result_other": "Ergebnisse", - "share.debug_key": "Schlüssel" -} diff --git a/packages/web/src/content/i18n/fr.json b/packages/web/src/content/i18n/fr.json deleted file mode 100644 index 294badf495..0000000000 --- a/packages/web/src/content/i18n/fr.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "Agent IA de code conçu pour le terminal", - "app.header.home": "Accueil", - "app.header.docs": "Documentation", - "app.footer.issueLink": "Vous avez trouvé un bug ? Ouvrez une issue", - "app.footer.discordLink": "Rejoignez notre communauté Discord", - "app.lander.hero.title": "L'agent de codage AI conçu pour le terminal.", - "app.lander.cta.getStarted": "Commencer", - "app.lander.features.native_tui.title": "TUI natif", - "app.lander.features.native_tui.description": "Une interface terminal native, réactive et personnalisable.", - "app.lander.features.lsp_enabled.title": "LSP activé", - "app.lander.features.lsp_enabled.description": "Charge automatiquement les bons LSP pour le LLM.", - "app.lander.features.multi_session.title": "Sessions multiples", - "app.lander.features.multi_session.description": "Démarrez plusieurs agents en parallèle sur le même projet.", - "app.lander.features.shareable_links.title": "Liens partageables", - "app.lander.features.shareable_links.description": "Partagez un lien vers n’importe quelle session pour référence ou pour déboguer.", - "app.lander.features.github_copilot.description": "Connectez-vous avec GitHub pour utiliser votre compte Copilot.", - "app.lander.features.chatgpt_plus_pro.description": "Connectez-vous avec OpenAI pour utiliser votre compte ChatGPT Plus ou Pro.", - "app.lander.features.use_any_model.title": "Utiliser n'importe quel modèle", - "app.lander.features.use_any_model.prefix": "Prend en charge plus de 75 fournisseurs LLM via", - "app.lander.features.use_any_model.suffix": "y compris des modèles locaux.", - "app.lander.images.tui.caption": "opencode TUI avec le thème tokyonight", - "app.lander.images.tui.alt": "opencode TUI avec le thème tokyonight", - "app.lander.images.vscode.caption": "opencode dans VS Code", - "app.lander.images.vscode.alt": "opencode dans VS Code", - "app.lander.images.github.caption": "opencode dans GitHub", - "app.lander.images.github.alt": "opencode dans GitHub", - "share.meta_description": "opencode - Agent IA de code conçu pour le terminal.", - "share.not_found": "Pas trouvé", - "share.link_to_message": "Lien vers ce message", - "share.copied": "Copié!", - "share.copy": "Copier", - "share.show_more": "Afficher plus", - "share.show_less": "Afficher moins", - "share.show_results": "Afficher les résultats", - "share.hide_results": "Masquer les résultats", - "share.show_details": "Afficher les détails", - "share.hide_details": "Masquer les détails", - "share.show_preview": "Afficher l'aperçu", - "share.hide_preview": "Masquer l'aperçu", - "share.show_contents": "Afficher le contenu", - "share.hide_contents": "Masquer le contenu", - "share.show_output": "Afficher la sortie", - "share.hide_output": "Masquer la sortie", - "share.error": "Erreur", - "share.waiting_for_messages": "En attente de messages...", - "share.status_connected_waiting": "Connecté, en attente de messages...", - "share.status_connecting": "Connexion...", - "share.status_disconnected": "Déconnecté", - "share.status_reconnecting": "Reconnexion...", - "share.status_error": "Erreur", - "share.status_unknown": "Inconnu", - "share.error_id_not_found": "id introuvable", - "share.error_api_url_not_found": "API URL introuvable", - "share.error_connection_failed": "La connexion a échoué", - "share.opencode_version": "version d'opencode", - "share.opencode_name": "opencode", - "share.models": "Modèles", - "share.cost": "Coût", - "share.input_tokens": "Tokens d'entrée", - "share.output_tokens": "Tokens de sortie", - "share.reasoning_tokens": "Tokens de raisonnement", - "share.scroll_to_bottom": "Faire défiler vers le bas", - "share.attachment": "Pièce jointe", - "share.thinking": "Réflexion", - "share.thinking_pending": "Réflexion...", - "share.creating_plan": "Création du plan", - "share.completing_plan": "Finalisation du plan", - "share.updating_plan": "Mise à jour du plan", - "share.match_one": "correspondance", - "share.match_other": "correspondances", - "share.result_one": "résultat", - "share.result_other": "résultats", - "share.debug_key": "Clé" -} diff --git a/packages/web/src/content/i18n/it.json b/packages/web/src/content/i18n/it.json deleted file mode 100644 index a9ed2b1f86..0000000000 --- a/packages/web/src/content/i18n/it.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "Agente AI di coding creato per il terminale", - "app.header.home": "Inizio", - "app.header.docs": "Documentazione", - "app.footer.issueLink": "Hai trovato un bug? Apri una issue", - "app.footer.discordLink": "Unisciti alla nostra community Discord", - "app.lander.hero.title": "L'agente AI di coding creato per il terminale.", - "app.lander.cta.getStarted": "Inizia", - "app.lander.features.native_tui.title": "TUI nativa", - "app.lander.features.native_tui.description": "Un'interfaccia per terminale reattiva, nativa e personalizzabile.", - "app.lander.features.lsp_enabled.title": "LSP abilitato", - "app.lander.features.lsp_enabled.description": "Carica automaticamente gli LSP corretti per l'LLM.", - "app.lander.features.multi_session.title": "Multi-sessione", - "app.lander.features.multi_session.description": "Avvia più agenti in parallelo sullo stesso progetto.", - "app.lander.features.shareable_links.title": "Link condivisibili", - "app.lander.features.shareable_links.description": "Condividi un link a qualsiasi sessione per riferimento o debug.", - "app.lander.features.github_copilot.description": "Accedi con GitHub per usare il tuo account Copilot.", - "app.lander.features.chatgpt_plus_pro.description": "Accedi con OpenAI per usare il tuo account ChatGPT Plus o Pro.", - "app.lander.features.use_any_model.title": "Usa qualsiasi modello", - "app.lander.features.use_any_model.prefix": "Supporta oltre 75 provider LLM tramite", - "app.lander.features.use_any_model.suffix": "inclusi i modelli locali.", - "app.lander.images.tui.caption": "TUI di opencode con il tema tokyonight", - "app.lander.images.tui.alt": "TUI di opencode con il tema tokyonight", - "app.lander.images.vscode.caption": "opencode su VS Code", - "app.lander.images.vscode.alt": "opencode su VS Code", - "app.lander.images.github.caption": "opencode su GitHub", - "app.lander.images.github.alt": "opencode su GitHub", - "share.meta_description": "opencode - L'agente AI di coding creato per il terminale.", - "share.not_found": "Non trovato", - "share.link_to_message": "Link a questo messaggio", - "share.copied": "Copiato!", - "share.copy": "Copia", - "share.show_more": "Mostra altro", - "share.show_less": "Mostra meno", - "share.show_results": "Mostra risultati", - "share.hide_results": "Nascondi risultati", - "share.show_details": "Mostra dettagli", - "share.hide_details": "Nascondi dettagli", - "share.show_preview": "Mostra anteprima", - "share.hide_preview": "Nascondi anteprima", - "share.show_contents": "Mostra contenuto", - "share.hide_contents": "Nascondi contenuto", - "share.show_output": "Mostra output", - "share.hide_output": "Nascondi output", - "share.error": "Errore", - "share.waiting_for_messages": "In attesa di messaggi...", - "share.status_connected_waiting": "Connesso, in attesa di messaggi...", - "share.status_connecting": "Connessione in corso...", - "share.status_disconnected": "Disconnesso", - "share.status_reconnecting": "Riconnessione in corso...", - "share.status_error": "Errore", - "share.status_unknown": "Sconosciuto", - "share.error_id_not_found": "ID non trovato", - "share.error_api_url_not_found": "URL API non trovato", - "share.error_connection_failed": "Connessione non riuscita", - "share.opencode_version": "Versione OpenCode", - "share.opencode_name": "opencode", - "share.models": "Modelli", - "share.cost": "Costo", - "share.input_tokens": "Token di input", - "share.output_tokens": "Token di output", - "share.reasoning_tokens": "Token di ragionamento", - "share.scroll_to_bottom": "Scorri in basso", - "share.attachment": "Allegato", - "share.thinking": "Elaborazione", - "share.thinking_pending": "Elaborazione...", - "share.creating_plan": "Creazione piano", - "share.completing_plan": "Completamento piano", - "share.updating_plan": "Aggiornamento piano", - "share.match_one": "corrispondenza", - "share.match_other": "corrispondenze", - "share.result_one": "risultato", - "share.result_other": "risultati", - "share.debug_key": "Chiave" -} diff --git a/packages/web/src/content/i18n/ja.json b/packages/web/src/content/i18n/ja.json deleted file mode 100644 index 9ef6851e52..0000000000 --- a/packages/web/src/content/i18n/ja.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "ターミナル向けのAIコーディングエージェント", - "app.header.home": "ホーム", - "app.header.docs": "ドキュメント", - "app.footer.issueLink": "バグを見つけたらIssueを作成", - "app.footer.discordLink": "Discordコミュニティに参加", - "app.lander.hero.title": "ターミナル向けのAIコーディングエージェント", - "app.lander.cta.getStarted": "始める", - "app.lander.features.native_tui.title": "ネイティブ TUI", - "app.lander.features.native_tui.description": "レスポンシブでネイティブ、テーマ対応のターミナル UI。", - "app.lander.features.lsp_enabled.title": "LSP対応", - "app.lander.features.lsp_enabled.description": "LLMに最適なLSPを自動で読み込みます。", - "app.lander.features.multi_session.title": "マルチセッション", - "app.lander.features.multi_session.description": "同じプロジェクトで複数のエージェントを並列で起動します。", - "app.lander.features.shareable_links.title": "共有リンク", - "app.lander.features.shareable_links.description": "参照やデバッグのためにセッションリンクを共有します。", - "app.lander.features.github_copilot.description": "Copilotアカウントを使うにはGitHubでログインします。", - "app.lander.features.chatgpt_plus_pro.description": "ChatGPT PlusまたはProアカウントを使うにはOpenAIでログインします。", - "app.lander.features.use_any_model.title": "任意のモデルを使う", - "app.lander.features.use_any_model.prefix": "75以上のLLMプロバイダーをサポート", - "app.lander.features.use_any_model.suffix": "ローカルモデルを含みます。", - "app.lander.images.tui.caption": "tokyonightテーマのopencode TUI", - "app.lander.images.tui.alt": "tokyonightテーマのopencode TUI", - "app.lander.images.vscode.caption": "VS Codeでのopencode", - "app.lander.images.vscode.alt": "VS Codeでのopencode", - "app.lander.images.github.caption": "GitHubでのopencode", - "app.lander.images.github.alt": "GitHubでのopencode", - "share.meta_description": "opencode - ターミナル向けのAIコーディングエージェント。", - "share.not_found": "見つかりません", - "share.link_to_message": "このメッセージへのリンク", - "share.copied": "コピーしました!", - "share.copy": "コピー", - "share.show_more": "もっと見る", - "share.show_less": "表示を減らす", - "share.show_results": "結果を表示", - "share.hide_results": "結果を非表示", - "share.show_details": "詳細を表示", - "share.hide_details": "詳細を非表示", - "share.show_preview": "プレビューを表示", - "share.hide_preview": "プレビューを非表示", - "share.show_contents": "内容を表示", - "share.hide_contents": "内容を非表示", - "share.show_output": "出力を表示", - "share.hide_output": "出力を非表示", - "share.error": "エラー", - "share.waiting_for_messages": "メッセージを待機中...", - "share.status_connected_waiting": "接続済み、メッセージを待機中...", - "share.status_connecting": "接続中...", - "share.status_disconnected": "切断されました", - "share.status_reconnecting": "再接続中...", - "share.status_error": "エラー", - "share.status_unknown": "不明", - "share.error_id_not_found": "idが見つかりません", - "share.error_api_url_not_found": "API URLが見つかりません", - "share.error_connection_failed": "接続に失敗しました", - "share.opencode_version": "opencode バージョン", - "share.opencode_name": "opencode", - "share.models": "モデル", - "share.cost": "コスト", - "share.input_tokens": "入力トークン", - "share.output_tokens": "出力トークン", - "share.reasoning_tokens": "推論トークン", - "share.scroll_to_bottom": "一番下までスクロール", - "share.attachment": "添付ファイル", - "share.thinking": "思考", - "share.thinking_pending": "思考中...", - "share.creating_plan": "計画を作成", - "share.completing_plan": "計画を完了", - "share.updating_plan": "計画を更新", - "share.match_one": "一致", - "share.match_other": "一致", - "share.result_one": "結果", - "share.result_other": "結果", - "share.debug_key": "キー" -} diff --git a/packages/web/src/content/i18n/ko.json b/packages/web/src/content/i18n/ko.json deleted file mode 100644 index 6336655170..0000000000 --- a/packages/web/src/content/i18n/ko.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "터미널에 최적화된 AI coding agent", - "app.header.home": "홈", - "app.header.docs": "문서", - "app.footer.issueLink": "버그를 찾으셨나요? 이슈를 열어 주세요", - "app.footer.discordLink": "Discord 커뮤니티에 참여하세요", - "app.lander.hero.title": "터미널을 위해 만든 AI coding agent.", - "app.lander.cta.getStarted": "시작하기", - "app.lander.features.native_tui.title": "네이티브 TUI", - "app.lander.features.native_tui.description": "반응형의 네이티브 테마형 터미널 UI입니다.", - "app.lander.features.lsp_enabled.title": "LSP 지원", - "app.lander.features.lsp_enabled.description": "LLM에 맞는 LSP를 자동으로 불러옵니다.", - "app.lander.features.multi_session.title": "멀티 세션", - "app.lander.features.multi_session.description": "같은 프로젝트에서 여러 에이전트를 병렬로 실행합니다.", - "app.lander.features.shareable_links.title": "공유 링크", - "app.lander.features.shareable_links.description": "참고나 디버깅을 위해 세션 링크를 공유합니다.", - "app.lander.features.github_copilot.description": "GitHub 로그인으로 Copilot 계정을 사용할 수 있습니다.", - "app.lander.features.chatgpt_plus_pro.description": "OpenAI 로그인으로 ChatGPT Plus 또는 Pro를 사용할 수 있습니다.", - "app.lander.features.use_any_model.title": "모든 모델 사용", - "app.lander.features.use_any_model.prefix": "75개 이상의 LLM provider를 지원하며", - "app.lander.features.use_any_model.suffix": "로컬 모델도 포함됩니다.", - "app.lander.images.tui.caption": "tokyonight theme의 opencode TUI", - "app.lander.images.tui.alt": "tokyonight theme의 opencode TUI", - "app.lander.images.vscode.caption": "VS Code에서 실행 중인 opencode", - "app.lander.images.vscode.alt": "VS Code에서 실행 중인 opencode", - "app.lander.images.github.caption": "GitHub에서 실행 중인 opencode", - "app.lander.images.github.alt": "GitHub에서 실행 중인 opencode", - "share.meta_description": "opencode - terminal을 위한 AI coding agent.", - "share.not_found": "찾을 수 없음", - "share.link_to_message": "이 메시지 링크", - "share.copied": "복사됨", - "share.copy": "복사", - "share.show_more": "더 보기", - "share.show_less": "접기", - "share.show_results": "결과 보기", - "share.hide_results": "결과 숨기기", - "share.show_details": "세부 정보 보기", - "share.hide_details": "세부 정보 숨기기", - "share.show_preview": "미리보기 보기", - "share.hide_preview": "미리보기 숨기기", - "share.show_contents": "내용 보기", - "share.hide_contents": "내용 숨기기", - "share.show_output": "출력 보기", - "share.hide_output": "출력 숨기기", - "share.error": "오류", - "share.waiting_for_messages": "메시지를 기다리는 중...", - "share.status_connected_waiting": "연결됨, 메시지를 기다리는 중...", - "share.status_connecting": "연결 중...", - "share.status_disconnected": "연결 끊김", - "share.status_reconnecting": "재연결 중...", - "share.status_error": "오류", - "share.status_unknown": "알 수 없음", - "share.error_id_not_found": "id를 찾을 수 없음", - "share.error_api_url_not_found": "API URL을 찾을 수 없음", - "share.error_connection_failed": "연결 실패", - "share.opencode_version": "opencode 버전", - "share.opencode_name": "opencode", - "share.models": "모델", - "share.cost": "비용", - "share.input_tokens": "입력 토큰", - "share.output_tokens": "출력 토큰", - "share.reasoning_tokens": "추론 토큰", - "share.scroll_to_bottom": "맨 아래로 이동", - "share.attachment": "첨부 파일", - "share.thinking": "생각 중", - "share.thinking_pending": "생각 중...", - "share.creating_plan": "계획 생성 중", - "share.completing_plan": "계획 완료 중", - "share.updating_plan": "계획 업데이트 중", - "share.match_one": "일치", - "share.match_other": "일치", - "share.result_one": "결과", - "share.result_other": "결과", - "share.debug_key": "키" -} diff --git a/packages/web/src/content/i18n/nb.json b/packages/web/src/content/i18n/nb.json deleted file mode 100644 index c91ba2e229..0000000000 --- a/packages/web/src/content/i18n/nb.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "AI-kodeagent bygget for terminalen", - "app.header.home": "Hjem", - "app.header.docs": "Dokumenter", - "app.footer.issueLink": "Fant du en feil? Åpne en issue", - "app.footer.discordLink": "Bli med i Discord-fellesskapet vårt", - "app.lander.hero.title": "AI-kodeagenten bygget for terminalen.", - "app.lander.cta.getStarted": "Kom i gang", - "app.lander.features.native_tui.title": "Innebygd TUI", - "app.lander.features.native_tui.description": "En responsiv, native og tilpassbar TUI.", - "app.lander.features.lsp_enabled.title": "LSP aktivert", - "app.lander.features.lsp_enabled.description": "Laster automatisk de riktige LSP-ene for LLM.", - "app.lander.features.multi_session.title": "Multi-sesjon", - "app.lander.features.multi_session.description": "Start flere agenter parallelt på samme prosjekt.", - "app.lander.features.shareable_links.title": "Delbare lenker", - "app.lander.features.shareable_links.description": "Del en lenke til en valgfri økt for referanse eller feilsøking.", - "app.lander.features.github_copilot.description": "Logg på med GitHub for å bruke Copilot-kontoen din.", - "app.lander.features.chatgpt_plus_pro.description": "Logg på med OpenAI for å bruke ChatGPT Plus- eller Pro-kontoen din.", - "app.lander.features.use_any_model.title": "Bruk hvilken som helst modell", - "app.lander.features.use_any_model.prefix": "Støtter 75+ LLM-leverandører gjennom", - "app.lander.features.use_any_model.suffix": "inkludert lokale modeller.", - "app.lander.images.tui.caption": "opencode TUI med tokyonight-temaet", - "app.lander.images.tui.alt": "opencode TUI med tokyonight-temaet", - "app.lander.images.vscode.caption": "opencode i VS Code", - "app.lander.images.vscode.alt": "opencode i VS Code", - "app.lander.images.github.caption": "opencode i GitHub", - "app.lander.images.github.alt": "opencode i GitHub", - "share.meta_description": "opencode - AI-kodeagenten bygget for terminalen.", - "share.not_found": "Ikke funnet", - "share.link_to_message": "Link til denne meldingen", - "share.copied": "Kopiert!", - "share.copy": "Kopier", - "share.show_more": "Vis mer", - "share.show_less": "Vis mindre", - "share.show_results": "Vis resultater", - "share.hide_results": "Skjul resultater", - "share.show_details": "Vis detaljer", - "share.hide_details": "Skjul detaljer", - "share.show_preview": "Vis forhåndsvisning", - "share.hide_preview": "Skjul forhåndsvisning", - "share.show_contents": "Vis innhold", - "share.hide_contents": "Skjul innholdet", - "share.show_output": "Vis utdata", - "share.hide_output": "Skjul utdata", - "share.error": "Feil", - "share.waiting_for_messages": "Venter på meldinger...", - "share.status_connected_waiting": "Tilkoblet, venter på meldinger...", - "share.status_connecting": "Kobler til...", - "share.status_disconnected": "Koblet fra", - "share.status_reconnecting": "Kobler til på nytt...", - "share.status_error": "Feil", - "share.status_unknown": "Ukjent", - "share.error_id_not_found": "id ikke funnet", - "share.error_api_url_not_found": "API URL ikke funnet", - "share.error_connection_failed": "Tilkobling mislyktes", - "share.opencode_version": "opencode versjon", - "share.opencode_name": "opencode", - "share.models": "Modeller", - "share.cost": "Kostnad", - "share.input_tokens": "Inndata-tokens", - "share.output_tokens": "Utdata-tokens", - "share.reasoning_tokens": "Resonneringstokens", - "share.scroll_to_bottom": "Rull til bunnen", - "share.attachment": "Vedlegg", - "share.thinking": "Tenker", - "share.thinking_pending": "Tenker...", - "share.creating_plan": "Oppretter plan", - "share.completing_plan": "Fullfører plan", - "share.updating_plan": "Oppdaterer plan", - "share.match_one": "treff", - "share.match_other": "treff", - "share.result_one": "resultat", - "share.result_other": "resultater", - "share.debug_key": "Nøkkel" -} diff --git a/packages/web/src/content/i18n/pl.json b/packages/web/src/content/i18n/pl.json deleted file mode 100644 index 8cc874f82c..0000000000 --- a/packages/web/src/content/i18n/pl.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "Agent kodujący AI zbudowany dla terminala", - "app.header.home": "Strona główna", - "app.header.docs": "Dokumentacja", - "app.footer.issueLink": "Znalazłeś błąd? Otwórz issue", - "app.footer.discordLink": "Dołącz do naszej społeczności Discord", - "app.lander.hero.title": "Agent kodujący AI zbudowany dla terminala.", - "app.lander.cta.getStarted": "Rozpocznij", - "app.lander.features.native_tui.title": "Natywny TUI", - "app.lander.features.native_tui.description": "Responsywny, natywny, tematyczny interfejs terminala.", - "app.lander.features.lsp_enabled.title": "Włączone LSP", - "app.lander.features.lsp_enabled.description": "Automatycznie ładuje odpowiednie LSP dla LLM.", - "app.lander.features.multi_session.title": "Wiele sesji", - "app.lander.features.multi_session.description": "Uruchom wielu agentów równolegle w jednym projekcie.", - "app.lander.features.shareable_links.title": "Udostępniane linki", - "app.lander.features.shareable_links.description": "Udostępnij link do dowolnych sesji w celach informacyjnych lub do debugowania.", - "app.lander.features.github_copilot.description": "Zaloguj się w GitHub, aby korzystać ze swojego konta Copilot.", - "app.lander.features.chatgpt_plus_pro.description": "Zaloguj się za pomocą OpenAI, aby korzystać ze swojego konta ChatGPT Plus lub Pro.", - "app.lander.features.use_any_model.title": "Użyj dowolnego modelu", - "app.lander.features.use_any_model.prefix": "Obsługuje ponad 75 dostawców LLM przez", - "app.lander.features.use_any_model.suffix": "w tym modele lokalne.", - "app.lander.images.tui.caption": "opencode TUI z motywem tokyonight", - "app.lander.images.tui.alt": "opencode TUI z motywem tokyonight", - "app.lander.images.vscode.caption": "opencode w VS Code", - "app.lander.images.vscode.alt": "opencode w VS Code", - "app.lander.images.github.caption": "opencode w GitHub", - "app.lander.images.github.alt": "opencode w GitHub", - "share.meta_description": "opencode - agent kodujący AI dla terminala.", - "share.not_found": "Nie znaleziono", - "share.link_to_message": "Link do tej wiadomości", - "share.copied": "Skopiowano!", - "share.copy": "Kopiuj", - "share.show_more": "Pokaż więcej", - "share.show_less": "Pokaż mniej", - "share.show_results": "Pokaż wyniki", - "share.hide_results": "Ukryj wyniki", - "share.show_details": "Pokaż szczegóły", - "share.hide_details": "Ukryj szczegóły", - "share.show_preview": "Pokaż podgląd", - "share.hide_preview": "Ukryj podgląd", - "share.show_contents": "Pokaż zawartość", - "share.hide_contents": "Ukryj zawartość", - "share.show_output": "Pokaż dane wyjściowe", - "share.hide_output": "Ukryj dane wyjściowe", - "share.error": "Błąd", - "share.waiting_for_messages": "Oczekiwanie na wiadomości...", - "share.status_connected_waiting": "Połączono, czekam na wiadomości...", - "share.status_connecting": "Łączenie...", - "share.status_disconnected": "Rozłączono", - "share.status_reconnecting": "Ponowne łączenie...", - "share.status_error": "Błąd", - "share.status_unknown": "Nieznany", - "share.error_id_not_found": "Nie znaleziono identyfikatora", - "share.error_api_url_not_found": "Nie znaleziono API URL", - "share.error_connection_failed": "Połączenie nie powiodło się", - "share.opencode_version": "Wersja opencode", - "share.opencode_name": "opencode", - "share.models": "Modele", - "share.cost": "Koszt", - "share.input_tokens": "Tokeny wejściowe", - "share.output_tokens": "Tokeny wyjściowe", - "share.reasoning_tokens": "Tokeny wnioskowania", - "share.scroll_to_bottom": "Przewiń w dół", - "share.attachment": "Załącznik", - "share.thinking": "Myślenie", - "share.thinking_pending": "Myślenie...", - "share.creating_plan": "Tworzenie planu", - "share.completing_plan": "Uzupełnianie planu", - "share.updating_plan": "Aktualizacja planu", - "share.match_one": "dopasowanie", - "share.match_other": "dopasowania", - "share.result_one": "wynik", - "share.result_other": "wyniki", - "share.debug_key": "Klawisz" -} diff --git a/packages/web/src/content/i18n/pt-BR.json b/packages/web/src/content/i18n/pt-BR.json deleted file mode 100644 index c7a378131f..0000000000 --- a/packages/web/src/content/i18n/pt-BR.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "Agente de codificação de IA construído para o terminal", - "app.header.home": "Início", - "app.header.docs": "Documentação", - "app.footer.issueLink": "Encontrou um bug? Abra uma issue", - "app.footer.discordLink": "Participe da nossa comunidade no Discord", - "app.lander.hero.title": "O agente de codificação de IA construído para o terminal.", - "app.lander.cta.getStarted": "Começar", - "app.lander.features.native_tui.title": "TUI nativo", - "app.lander.features.native_tui.description": "Uma interface de terminal nativa, responsiva e com tema personalizável.", - "app.lander.features.lsp_enabled.title": "LSP habilitado", - "app.lander.features.lsp_enabled.description": "Carrega automaticamente os LSPs corretos para o LLM.", - "app.lander.features.multi_session.title": "Multi-sessão", - "app.lander.features.multi_session.description": "Inicie vários agentes em paralelo no mesmo projeto.", - "app.lander.features.shareable_links.title": "Links compartilháveis", - "app.lander.features.shareable_links.description": "Compartilhe um link para qualquer sessão para referência ou para depuração.", - "app.lander.features.github_copilot.description": "Faça login com o GitHub para usar sua conta do Copilot.", - "app.lander.features.chatgpt_plus_pro.description": "Faça login com a OpenAI para usar sua conta do ChatGPT Plus ou Pro.", - "app.lander.features.use_any_model.title": "Use qualquer modelo", - "app.lander.features.use_any_model.prefix": "Suporta mais de 75 provedores de LLM através de", - "app.lander.features.use_any_model.suffix": "incluindo modelos locais.", - "app.lander.images.tui.caption": "opencode TUI com o tema tokyonight", - "app.lander.images.tui.alt": "opencode TUI com o tema tokyonight", - "app.lander.images.vscode.caption": "opencode no VS Code", - "app.lander.images.vscode.alt": "opencode no VS Code", - "app.lander.images.github.caption": "opencode no GitHub", - "app.lander.images.github.alt": "opencode no GitHub", - "share.meta_description": "opencode - O agente de codificação de IA construído para o terminal.", - "share.not_found": "Não encontrado", - "share.link_to_message": "Link para esta mensagem", - "share.copied": "Copiado!", - "share.copy": "Copiar", - "share.show_more": "Mostrar mais", - "share.show_less": "Mostrar menos", - "share.show_results": "Mostrar resultados", - "share.hide_results": "Ocultar resultados", - "share.show_details": "Mostrar detalhes", - "share.hide_details": "Ocultar detalhes", - "share.show_preview": "Mostrar pré-visualização", - "share.hide_preview": "Ocultar pré-visualização", - "share.show_contents": "Mostrar conteúdos", - "share.hide_contents": "Ocultar conteúdos", - "share.show_output": "Mostrar saída", - "share.hide_output": "Ocultar saída", - "share.error": "Erro", - "share.waiting_for_messages": "Aguardando mensagens...", - "share.status_connected_waiting": "Conectado, aguardando mensagens...", - "share.status_connecting": "Conectando...", - "share.status_disconnected": "Desconectado", - "share.status_reconnecting": "Reconectando...", - "share.status_error": "Erro", - "share.status_unknown": "Desconhecido", - "share.error_id_not_found": "id não encontrado", - "share.error_api_url_not_found": "API URL não encontrada", - "share.error_connection_failed": "Falha na conexão", - "share.opencode_version": "versão do opencode", - "share.opencode_name": "opencode", - "share.models": "Modelos", - "share.cost": "Custo", - "share.input_tokens": "Tokens de Entrada", - "share.output_tokens": "Tokens de Saída", - "share.reasoning_tokens": "Tokens de Raciocínio", - "share.scroll_to_bottom": "Rolar para baixo", - "share.attachment": "Anexo", - "share.thinking": "Pensando", - "share.thinking_pending": "Pensando...", - "share.creating_plan": "Criando plano", - "share.completing_plan": "Concluindo plano", - "share.updating_plan": "Atualizando plano", - "share.match_one": "correspondência", - "share.match_other": "correspondências", - "share.result_one": "resultado", - "share.result_other": "resultados", - "share.debug_key": "Chave" -} diff --git a/packages/web/src/content/i18n/ru.json b/packages/web/src/content/i18n/ru.json deleted file mode 100644 index 945bc7b0bd..0000000000 --- a/packages/web/src/content/i18n/ru.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "AI-агент для программирования, созданный для терминала", - "app.header.home": "Главная", - "app.header.docs": "Документация", - "app.footer.issueLink": "Нашли ошибку? Откройте issue", - "app.footer.discordLink": "Присоединяйтесь к нашему сообществу в Discord", - "app.lander.hero.title": "AI-агент для программирования, созданный для терминала.", - "app.lander.cta.getStarted": "Начать", - "app.lander.features.native_tui.title": "Нативный TUI", - "app.lander.features.native_tui.description": "Отзывчивый нативный интерфейс терминала с поддержкой тем.", - "app.lander.features.lsp_enabled.title": "Поддержка LSP", - "app.lander.features.lsp_enabled.description": "Автоматически загружает подходящие LSP для LLM.", - "app.lander.features.multi_session.title": "Несколько сессий", - "app.lander.features.multi_session.description": "Запускайте несколько агентов параллельно в одном проекте.", - "app.lander.features.shareable_links.title": "Ссылки для общего доступа", - "app.lander.features.shareable_links.description": "Поделитесь ссылкой на любую сессию для справки или отладки.", - "app.lander.features.github_copilot.description": "Войдите через GitHub, чтобы использовать аккаунт Copilot.", - "app.lander.features.chatgpt_plus_pro.description": "Войдите через OpenAI, чтобы использовать аккаунт ChatGPT Plus или Pro.", - "app.lander.features.use_any_model.title": "Используйте любую модель", - "app.lander.features.use_any_model.prefix": "Поддерживает 75+ провайдеров LLM через", - "app.lander.features.use_any_model.suffix": "включая локальные модели.", - "app.lander.images.tui.caption": "opencode TUI с темой tokyonight", - "app.lander.images.tui.alt": "opencode TUI с темой tokyonight", - "app.lander.images.vscode.caption": "opencode в VS Code", - "app.lander.images.vscode.alt": "opencode в VS Code", - "app.lander.images.github.caption": "opencode в GitHub", - "app.lander.images.github.alt": "opencode в GitHub", - "share.meta_description": "opencode - AI-агент для программирования, созданный для терминала.", - "share.not_found": "Не найдено", - "share.link_to_message": "Ссылка на это сообщение", - "share.copied": "Скопировано!", - "share.copy": "Копировать", - "share.show_more": "Показать больше", - "share.show_less": "Показать меньше", - "share.show_results": "Показать результаты", - "share.hide_results": "Скрыть результаты", - "share.show_details": "Показать детали", - "share.hide_details": "Скрыть детали", - "share.show_preview": "Показать предпросмотр", - "share.hide_preview": "Скрыть предпросмотр", - "share.show_contents": "Показать содержимое", - "share.hide_contents": "Скрыть содержимое", - "share.show_output": "Показать вывод", - "share.hide_output": "Скрыть вывод", - "share.error": "Ошибка", - "share.waiting_for_messages": "Ожидание сообщений...", - "share.status_connected_waiting": "Подключено, ожидание сообщений...", - "share.status_connecting": "Подключение...", - "share.status_disconnected": "Отключено", - "share.status_reconnecting": "Повторное подключение...", - "share.status_error": "Ошибка", - "share.status_unknown": "Неизвестно", - "share.error_id_not_found": "id не найден", - "share.error_api_url_not_found": "API URL не найден", - "share.error_connection_failed": "Не удалось подключиться", - "share.opencode_version": "версия opencode", - "share.opencode_name": "opencode", - "share.models": "Модели", - "share.cost": "Стоимость", - "share.input_tokens": "Входные токены", - "share.output_tokens": "Выходные токены", - "share.reasoning_tokens": "Токены рассуждения", - "share.scroll_to_bottom": "Прокрутить вниз", - "share.attachment": "Вложение", - "share.thinking": "Размышление", - "share.thinking_pending": "Размышление...", - "share.creating_plan": "Создание плана", - "share.completing_plan": "Завершение плана", - "share.updating_plan": "Обновление плана", - "share.match_one": "совпадение", - "share.match_other": "совпадений", - "share.result_one": "результат", - "share.result_other": "результатов", - "share.debug_key": "Ключ" -} diff --git a/packages/web/src/content/i18n/th.json b/packages/web/src/content/i18n/th.json deleted file mode 100644 index 11eb7145cf..0000000000 --- a/packages/web/src/content/i18n/th.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "เอเจนต์เขียนโค้ด AI ที่สร้างมาเพื่อ terminal", - "app.header.home": "หน้าหลัก", - "app.header.docs": "เอกสาร", - "app.footer.issueLink": "พบข้อผิดพลาดหรือไม่? เปิด issue", - "app.footer.discordLink": "เข้าร่วมชุมชน Discord ของเรา", - "app.lander.hero.title": "เอเจนต์เขียนโค้ด AI ที่สร้างมาเพื่อ terminal", - "app.lander.cta.getStarted": "เริ่มต้นใช้งาน", - "app.lander.features.native_tui.title": "TUI แบบเนทีฟ", - "app.lander.features.native_tui.description": "อินเทอร์เฟซ terminal แบบเนทีฟที่ตอบสนองไวและปรับธีมได้", - "app.lander.features.lsp_enabled.title": "รองรับ LSP", - "app.lander.features.lsp_enabled.description": "โหลด LSP ที่เหมาะสมสำหรับ LLM โดยอัตโนมัติ", - "app.lander.features.multi_session.title": "หลายเซสชัน", - "app.lander.features.multi_session.description": "เริ่มเอเจนต์หลายตัวพร้อมกันบนโปรเจ็กต์เดียวกัน", - "app.lander.features.shareable_links.title": "ลิงก์ที่แชร์ได้", - "app.lander.features.shareable_links.description": "แชร์ลิงก์ไปยังเซสชันใดก็ได้เพื่ออ้างอิงหรือดีบัก", - "app.lander.features.github_copilot.description": "เข้าสู่ระบบด้วย GitHub เพื่อใช้บัญชี Copilot ของคุณ", - "app.lander.features.chatgpt_plus_pro.description": "เข้าสู่ระบบด้วย OpenAI เพื่อใช้บัญชี ChatGPT Plus หรือ Pro ของคุณ", - "app.lander.features.use_any_model.title": "ใช้ได้ทุกโมเดล", - "app.lander.features.use_any_model.prefix": "รองรับผู้ให้บริการ LLM มากกว่า 75 รายผ่าน", - "app.lander.features.use_any_model.suffix": "รวมถึงโมเดลภายในเครื่อง", - "app.lander.images.tui.caption": "opencode TUI พร้อมธีม tokyonight", - "app.lander.images.tui.alt": "opencode TUI พร้อมธีม tokyonight", - "app.lander.images.vscode.caption": "opencode ใน VS Code", - "app.lander.images.vscode.alt": "opencode ใน VS Code", - "app.lander.images.github.caption": "opencode ใน GitHub", - "app.lander.images.github.alt": "opencode ใน GitHub", - "share.meta_description": "opencode - เอเจนต์เขียนโค้ด AI ที่สร้างมาเพื่อ terminal", - "share.not_found": "ไม่พบ", - "share.link_to_message": "ลิงก์ไปยังข้อความนี้", - "share.copied": "คัดลอกแล้ว!", - "share.copy": "คัดลอก", - "share.show_more": "แสดงเพิ่มเติม", - "share.show_less": "แสดงน้อยลง", - "share.show_results": "แสดงผลลัพธ์", - "share.hide_results": "ซ่อนผลลัพธ์", - "share.show_details": "แสดงรายละเอียด", - "share.hide_details": "ซ่อนรายละเอียด", - "share.show_preview": "แสดงตัวอย่าง", - "share.hide_preview": "ซ่อนตัวอย่าง", - "share.show_contents": "แสดงเนื้อหา", - "share.hide_contents": "ซ่อนเนื้อหา", - "share.show_output": "แสดงเอาต์พุต", - "share.hide_output": "ซ่อนเอาต์พุต", - "share.error": "ข้อผิดพลาด", - "share.waiting_for_messages": "กำลังรอข้อความ...", - "share.status_connected_waiting": "เชื่อมต่อแล้ว กำลังรอข้อความ...", - "share.status_connecting": "กำลังเชื่อมต่อ...", - "share.status_disconnected": "ตัดการเชื่อมต่อแล้ว", - "share.status_reconnecting": "กำลังเชื่อมต่อใหม่...", - "share.status_error": "ข้อผิดพลาด", - "share.status_unknown": "ไม่ทราบสถานะ", - "share.error_id_not_found": "ไม่พบ id", - "share.error_api_url_not_found": "ไม่พบ API URL", - "share.error_connection_failed": "การเชื่อมต่อล้มเหลว", - "share.opencode_version": "เวอร์ชัน opencode", - "share.opencode_name": "opencode", - "share.models": "โมเดล", - "share.cost": "ค่าใช้จ่าย", - "share.input_tokens": "โทเค็นอินพุต", - "share.output_tokens": "โทเค็นเอาต์พุต", - "share.reasoning_tokens": "โทเค็นการให้เหตุผล", - "share.scroll_to_bottom": "เลื่อนไปด้านล่าง", - "share.attachment": "ไฟล์แนบ", - "share.thinking": "กำลังคิด", - "share.thinking_pending": "กำลังคิด...", - "share.creating_plan": "กำลังสร้างแผน", - "share.completing_plan": "กำลังทำแผนให้เสร็จ", - "share.updating_plan": "กำลังอัปเดตแผน", - "share.match_one": "รายการที่ตรงกัน", - "share.match_other": "รายการที่ตรงกัน", - "share.result_one": "ผลลัพธ์", - "share.result_other": "ผลลัพธ์", - "share.debug_key": "คีย์" -} diff --git a/packages/web/src/content/i18n/tr.json b/packages/web/src/content/i18n/tr.json deleted file mode 100644 index 9f3e95aa79..0000000000 --- a/packages/web/src/content/i18n/tr.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "Terminal için AI kodlama asistanı", - "app.header.home": "Ana sayfa", - "app.header.docs": "Dokümanlar", - "app.footer.issueLink": "Bir hata mı buldunuz? Issue açın", - "app.footer.discordLink": "Discord topluluğumuza katılın", - "app.lander.hero.title": "Terminal için üretilmiş AI kodlama ajanı.", - "app.lander.cta.getStarted": "Başlayın", - "app.lander.features.native_tui.title": "Yerel TUI", - "app.lander.features.native_tui.description": "Hızlı, yerel ve tema uyumlu terminal arayüzü.", - "app.lander.features.lsp_enabled.title": "LSP etkin", - "app.lander.features.lsp_enabled.description": "LLM için doğru LSP'leri otomatik yükler.", - "app.lander.features.multi_session.title": "Çoklu oturum", - "app.lander.features.multi_session.description": "Aynı projede birden fazla agent'ı paralel başlatın.", - "app.lander.features.shareable_links.title": "Paylaşılabilir bağlantılar", - "app.lander.features.shareable_links.description": "Referans veya hata ayıklama için oturum bağlantısı paylaşın.", - "app.lander.features.github_copilot.description": "Copilot hesabınızı kullanmak için GitHub ile giriş yapın.", - "app.lander.features.chatgpt_plus_pro.description": "ChatGPT Plus veya Pro hesabınızı kullanmak için OpenAI ile giriş yapın.", - "app.lander.features.use_any_model.title": "Herhangi bir modeli kullanın", - "app.lander.features.use_any_model.prefix": "75+ LLM sağlayıcısını destekler", - "app.lander.features.use_any_model.suffix": "yerel modeller dahil.", - "app.lander.images.tui.caption": "tokyonight temasıyla opencode TUI", - "app.lander.images.tui.alt": "tokyonight temasıyla opencode TUI", - "app.lander.images.vscode.caption": "VS Code içinde opencode", - "app.lander.images.vscode.alt": "VS Code içinde opencode", - "app.lander.images.github.caption": "GitHub'da opencode", - "app.lander.images.github.alt": "GitHub'da opencode", - "share.meta_description": "opencode - Terminal için üretilmiş AI kodlama aracı.", - "share.not_found": "Bulunamadı", - "share.link_to_message": "Bu mesaja bağlantı", - "share.copied": "Kopyalandı!", - "share.copy": "Kopyala", - "share.show_more": "Daha fazla göster", - "share.show_less": "Daha az göster", - "share.show_results": "Sonuçları göster", - "share.hide_results": "Sonuçları gizle", - "share.show_details": "Ayrıntıları göster", - "share.hide_details": "Ayrıntıları gizle", - "share.show_preview": "Önizlemeyi göster", - "share.hide_preview": "Önizlemeyi gizle", - "share.show_contents": "İçeriği göster", - "share.hide_contents": "İçeriği gizle", - "share.show_output": "Çıktıyı göster", - "share.hide_output": "Çıktıyı gizle", - "share.error": "Hata", - "share.waiting_for_messages": "Mesajlar bekleniyor...", - "share.status_connected_waiting": "Bağlandı, mesajlar bekleniyor...", - "share.status_connecting": "Bağlanıyor...", - "share.status_disconnected": "Bağlantı kesildi", - "share.status_reconnecting": "Yeniden bağlanıyor...", - "share.status_error": "Hata", - "share.status_unknown": "Bilinmiyor", - "share.error_id_not_found": "id bulunamadı", - "share.error_api_url_not_found": "API URL bulunamadı", - "share.error_connection_failed": "Bağlantı başarısız", - "share.opencode_version": "opencode sürümü", - "share.opencode_name": "opencode", - "share.models": "Modeller", - "share.cost": "Maliyet", - "share.input_tokens": "Girdi Token'ları", - "share.output_tokens": "Çıktı Token'ları", - "share.reasoning_tokens": "Akıl Yürütme Token'ları", - "share.scroll_to_bottom": "En alta kaydır", - "share.attachment": "Ek", - "share.thinking": "Düşünüyor", - "share.thinking_pending": "Düşünüyor...", - "share.creating_plan": "Plan oluşturuluyor", - "share.completing_plan": "Plan tamamlanıyor", - "share.updating_plan": "Plan güncelleniyor", - "share.match_one": "eşleşme", - "share.match_other": "eşleşme", - "share.result_one": "sonuç", - "share.result_other": "sonuç", - "share.debug_key": "Anahtar" -} diff --git a/packages/web/src/content/i18n/zh-CN.json b/packages/web/src/content/i18n/zh-CN.json deleted file mode 100644 index e1c9f0c9ea..0000000000 --- a/packages/web/src/content/i18n/zh-CN.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "为终端打造的 AI 编码代理", - "app.header.home": "首页", - "app.header.docs": "文档", - "app.footer.issueLink": "发现问题?提交 issue", - "app.footer.discordLink": "加入我们的 Discord 社区", - "app.lander.hero.title": "为终端打造的 AI 编码代理。", - "app.lander.cta.getStarted": "开始使用", - "app.lander.features.native_tui.title": "原生 TUI", - "app.lander.features.native_tui.description": "响应迅速、原生且可主题化的 terminal UI。", - "app.lander.features.lsp_enabled.title": "LSP 已启用", - "app.lander.features.lsp_enabled.description": "自动为 LLM 加载合适的 LSP。", - "app.lander.features.multi_session.title": "多会话", - "app.lander.features.multi_session.description": "在同一项目中并行启动多个代理。", - "app.lander.features.shareable_links.title": "可分享链接", - "app.lander.features.shareable_links.description": "分享任意会话链接用于参考或调试。", - "app.lander.features.github_copilot.description": "使用 GitHub 登录并使用你的 Copilot 账号。", - "app.lander.features.chatgpt_plus_pro.description": "使用 OpenAI 登录并使用你的 ChatGPT Plus 或 Pro 账号。", - "app.lander.features.use_any_model.title": "使用任意模型", - "app.lander.features.use_any_model.prefix": "通过以下方式支持 75+ LLM 提供商", - "app.lander.features.use_any_model.suffix": "包括本地模型。", - "app.lander.images.tui.caption": "opencode TUI(tokyonight 主题)", - "app.lander.images.tui.alt": "opencode TUI(tokyonight 主题)", - "app.lander.images.vscode.caption": "VS Code 中的 opencode", - "app.lander.images.vscode.alt": "VS Code 中的 opencode", - "app.lander.images.github.caption": "GitHub 中的 opencode", - "app.lander.images.github.alt": "GitHub 中的 opencode", - "share.meta_description": "opencode - 为终端打造的 AI 编码代理。", - "share.not_found": "未找到", - "share.link_to_message": "链接到此消息", - "share.copied": "已复制!", - "share.copy": "复制", - "share.show_more": "显示更多", - "share.show_less": "显示更少", - "share.show_results": "显示结果", - "share.hide_results": "隐藏结果", - "share.show_details": "显示详情", - "share.hide_details": "隐藏详情", - "share.show_preview": "显示预览", - "share.hide_preview": "隐藏预览", - "share.show_contents": "显示内容", - "share.hide_contents": "隐藏内容", - "share.show_output": "显示输出", - "share.hide_output": "隐藏输出", - "share.error": "错误", - "share.waiting_for_messages": "正在等待消息...", - "share.status_connected_waiting": "已连接,正在等待消息...", - "share.status_connecting": "正在连接...", - "share.status_disconnected": "已断开连接", - "share.status_reconnecting": "正在重新连接...", - "share.status_error": "错误", - "share.status_unknown": "未知", - "share.error_id_not_found": "未找到 id", - "share.error_api_url_not_found": "未找到 API URL", - "share.error_connection_failed": "连接失败", - "share.opencode_version": "opencode 版本", - "share.opencode_name": "opencode", - "share.models": "模型", - "share.cost": "成本", - "share.input_tokens": "输入 Tokens", - "share.output_tokens": "输出 Tokens", - "share.reasoning_tokens": "推理 Tokens", - "share.scroll_to_bottom": "滚动到底部", - "share.attachment": "附件", - "share.thinking": "思考", - "share.thinking_pending": "思考中...", - "share.creating_plan": "正在创建计划", - "share.completing_plan": "正在完成计划", - "share.updating_plan": "正在更新计划", - "share.match_one": "匹配", - "share.match_other": "匹配项", - "share.result_one": "结果", - "share.result_other": "结果", - "share.debug_key": "键" -} diff --git a/packages/web/src/content/i18n/zh-TW.json b/packages/web/src/content/i18n/zh-TW.json deleted file mode 100644 index 82cc25771e..0000000000 --- a/packages/web/src/content/i18n/zh-TW.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "app.head.titleSuffix": "為終端機打造的 AI 程式碼代理", - "app.header.home": "首頁", - "app.header.docs": "文件", - "app.footer.issueLink": "發現問題?提交 Issue", - "app.footer.discordLink": "加入我們的 Discord 社群", - "app.lander.hero.title": "為終端機打造的 AI 程式碼代理。", - "app.lander.cta.getStarted": "開始使用", - "app.lander.features.native_tui.title": "原生 TUI", - "app.lander.features.native_tui.description": "反應靈敏、原生、可自訂主題的終端機 UI。", - "app.lander.features.lsp_enabled.title": "LSP 已啟用", - "app.lander.features.lsp_enabled.description": "自動為 LLM 載入正確的 LSP。", - "app.lander.features.multi_session.title": "多重工作階段", - "app.lander.features.multi_session.description": "在同一專案上並行啟動多個代理。", - "app.lander.features.shareable_links.title": "可分享的連結", - "app.lander.features.shareable_links.description": "分享任何工作階段的連結以供參考或除錯。", - "app.lander.features.github_copilot.description": "使用 GitHub 登入以使用您的 Copilot 帳戶。", - "app.lander.features.chatgpt_plus_pro.description": "使用 OpenAI 登入以使用您的 ChatGPT Plus 或 Pro 帳戶。", - "app.lander.features.use_any_model.title": "使用任何模型", - "app.lander.features.use_any_model.prefix": "透過以下方式支援 75+ LLM 供應商", - "app.lander.features.use_any_model.suffix": "包括本地模型。", - "app.lander.images.tui.caption": "OpenCode TUI (Tokyo Night 主題)", - "app.lander.images.tui.alt": "OpenCode TUI (Tokyo Night 主題)", - "app.lander.images.vscode.caption": "OpenCode 在 VS Code 中", - "app.lander.images.vscode.alt": "OpenCode 在 VS Code 中", - "app.lander.images.github.caption": "OpenCode 在 GitHub 中", - "app.lander.images.github.alt": "OpenCode 在 GitHub 中", - "share.meta_description": "OpenCode - 為終端機打造的 AI 程式碼代理。", - "share.not_found": "找不到", - "share.link_to_message": "連結到此訊息", - "share.copied": "已複製!", - "share.copy": "複製", - "share.show_more": "顯示更多", - "share.show_less": "顯示較少", - "share.show_results": "顯示結果", - "share.hide_results": "隱藏結果", - "share.show_details": "顯示詳情", - "share.hide_details": "隱藏詳細資訊", - "share.show_preview": "顯示預覽", - "share.hide_preview": "隱藏預覽", - "share.show_contents": "顯示內容", - "share.hide_contents": "隱藏內容", - "share.show_output": "顯示輸出", - "share.hide_output": "隱藏輸出", - "share.error": "錯誤", - "share.waiting_for_messages": "等待訊息...", - "share.status_connected_waiting": "已連線,等待訊息...", - "share.status_connecting": "正在連線...", - "share.status_disconnected": "已斷開連線", - "share.status_reconnecting": "正在重新連線...", - "share.status_error": "錯誤", - "share.status_unknown": "未知", - "share.error_id_not_found": "找不到 ID", - "share.error_api_url_not_found": "找不到 API URL", - "share.error_connection_failed": "連線失敗", - "share.opencode_version": "OpenCode 版本", - "share.opencode_name": "opencode", - "share.models": "模型", - "share.cost": "成本", - "share.input_tokens": "輸入 Tokens", - "share.output_tokens": "輸出 Tokens", - "share.reasoning_tokens": "推理 Tokens", - "share.scroll_to_bottom": "捲動到底部", - "share.attachment": "附件", - "share.thinking": "思考中", - "share.thinking_pending": "思考中...", - "share.creating_plan": "建立計畫", - "share.completing_plan": "完成計畫", - "share.updating_plan": "更新計畫", - "share.match_one": "符合項目", - "share.match_other": "符合項目", - "share.result_one": "結果", - "share.result_other": "結果", - "share.debug_key": "金鑰" -} diff --git a/packages/web/src/i18n/locales.ts b/packages/web/src/i18n/locales.ts index d1b3e74d1f..5123f12afe 100644 --- a/packages/web/src/i18n/locales.ts +++ b/packages/web/src/i18n/locales.ts @@ -1,23 +1,4 @@ -export const docsLocale = [ - "ar", - "bs", - "da", - "de", - "es", - "fr", - "it", - "ja", - "ko", - "nb", - "pl", - "pt-br", - "ru", - "th", - "tr", - "uk", - "zh-cn", - "zh-tw", -] as const +export const docsLocale = ["es"] as const export type DocsLocale = (typeof docsLocale)[number] @@ -26,49 +7,13 @@ export const locale = ["root", ...docsLocale] as const export type Locale = (typeof locale)[number] export const localeAlias = { - ar: "ar", - br: "pt-br", - bs: "bs", - da: "da", - de: "de", en: "root", es: "es", - fr: "fr", - it: "it", - ja: "ja", - ko: "ko", - nb: "nb", - nn: "nb", - no: "nb", - pl: "pl", - pt: "pt-br", - "pt-br": "pt-br", root: "root", - ru: "ru", - th: "th", - tr: "tr", - uk: "uk", - zh: "zh-cn", - "zh-cn": "zh-cn", - zht: "zh-tw", - "zh-tw": "zh-tw", } as const satisfies Record const starts = [ - ["ko", "ko"], - ["bs", "bs"], - ["de", "de"], ["es", "es"], - ["fr", "fr"], - ["it", "it"], - ["da", "da"], - ["ja", "ja"], - ["pl", "pl"], - ["ru", "ru"], - ["uk", "uk"], - ["ar", "ar"], - ["th", "th"], - ["tr", "tr"], ["en", "root"], ] as const @@ -99,19 +44,9 @@ export function matchLocale(input: string) { const value = parse(input) if (!value) return null - if (value.startsWith("zh")) { - if (value.includes("hant") || value.includes("-tw") || value.includes("-hk") || value.includes("-mo")) { - return "zh-tw" - } - return "zh-cn" - } - if (value in localeAlias) { return localeAlias[value as keyof typeof localeAlias] } - if (value.startsWith("pt")) return "pt-br" - if (value.startsWith("no") || value.startsWith("nb") || value.startsWith("nn")) return "nb" - return starts.find((item) => value.startsWith(item[0]))?.[1] ?? null }