resolve merge conflicts

This commit is contained in:
Catriel Müller
2026-02-03 19:28:35 -03:00
189 changed files with 2483 additions and 1322 deletions
+34
View File
@@ -0,0 +1,34 @@
name: beta
on:
push:
branches: [dev]
pull_request:
types: [opened, synchronize, labeled, unlabeled]
jobs:
sync:
if: |
github.event_name == 'push' ||
(github.event_name == 'pull_request' &&
contains(github.event.pull_request.labels.*.name, 'contributor'))
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
contents: write
pull-requests: read
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Bun
uses: ./.github/actions/setup-bun
- name: Configure Git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: Sync beta branch
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: bun script/beta.ts
+1 -1
View File
@@ -1,4 +1,4 @@
name: Daily Issues Recap name: daily-issues-recap
on: on:
schedule: schedule:
+1 -1
View File
@@ -1,4 +1,4 @@
name: Daily PR Recap name: daily-pr-recap
on: on:
schedule: schedule:
+1 -1
View File
@@ -1,4 +1,4 @@
name: Docs Update name: docs-update
on: on:
schedule: schedule:
+1 -1
View File
@@ -1,4 +1,4 @@
name: Duplicate Issue Detection name: duplicate-issues
on: on:
issues: issues:
+1
View File
@@ -4,6 +4,7 @@ on:
push: push:
branches: branches:
- dev - dev
pull_request:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
@@ -1,4 +1,4 @@
name: nix desktop name: nix-desktop
on: on:
push: push:
@@ -21,7 +21,7 @@ on:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
build-desktop: nix-desktop:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@@ -1,4 +1,4 @@
name: Update Nix Hashes name: nix-hashes
permissions: permissions:
contents: write contents: write
@@ -11,17 +11,17 @@ on:
- "package.json" - "package.json"
- "packages/*/package.json" - "packages/*/package.json"
- "flake.lock" - "flake.lock"
- ".github/workflows/update-nix-hashes.yml" - ".github/workflows/nix-hashes.yml"
pull_request: pull_request:
paths: paths:
- "bun.lock" - "bun.lock"
- "package.json" - "package.json"
- "packages/*/package.json" - "packages/*/package.json"
- "flake.lock" - "flake.lock"
- ".github/workflows/update-nix-hashes.yml" - ".github/workflows/nix-hashes.yml"
jobs: jobs:
update-node-modules-hashes: nix-hashes:
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
runs-on: depot-ubuntu-24.04-4 runs-on: depot-ubuntu-24.04-4
env: env:
+1 -1
View File
@@ -1,4 +1,4 @@
name: discord name: notify-discord
on: on:
release: release:
@@ -1,4 +1,4 @@
name: Duplicate PR Check name: pr-management
on: on:
pull_request_target: pull_request_target:
@@ -67,3 +67,26 @@ jobs:
gh pr comment "$PR_NUMBER" --body "_The following comment was made by an LLM, it may be inaccurate:_ gh pr comment "$PR_NUMBER" --body "_The following comment was made by an LLM, it may be inaccurate:_
$COMMENT" $COMMENT"
add-contributor-label:
runs-on: ubuntu-latest
permissions:
pull-requests: write
issues: write
steps:
- name: Add Contributor Label
uses: actions/github-script@v8
with:
script: |
const isPR = !!context.payload.pull_request;
const issueNumber = isPR ? context.payload.pull_request.number : context.payload.issue.number;
const authorAssociation = isPR ? context.payload.pull_request.author_association : context.payload.issue.author_association;
if (authorAssociation === 'CONTRIBUTOR') {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
labels: ['contributor']
});
}
+1 -1
View File
@@ -1,4 +1,4 @@
name: PR Standards name: pr-standards
on: on:
pull_request_target: pull_request_target:
+1 -1
View File
@@ -1,4 +1,4 @@
name: Guidelines Check name: review
on: on:
issue_comment: issue_comment:
+1 -1
View File
@@ -1,4 +1,4 @@
name: "Auto-close stale issues" name: stale-issues
on: on:
schedule: schedule:
-4
View File
@@ -1,9 +1,6 @@
name: test name: test
on: on:
push:
branches:
- dev
pull_request: pull_request:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
@@ -20,7 +17,6 @@ jobs:
command: | command: |
git config --global user.email "bot@opencode.ai" git config --global user.email "bot@opencode.ai"
git config --global user.name "opencode" git config --global user.name "opencode"
bun turbo typecheck
bun turbo test bun turbo test
- name: windows - name: windows
host: depot-windows-2025-4 host: depot-windows-2025-4
+1 -1
View File
@@ -1,4 +1,4 @@
name: Issue Triage name: triage
on: on:
issues: issues:
+4 -4
View File
@@ -6,7 +6,7 @@ import * as core from "@actions/core"
import * as github from "@actions/github" import * as github from "@actions/github"
import type { Context as GitHubContext } from "@actions/github/lib/context" import type { Context as GitHubContext } from "@actions/github/lib/context"
import type { IssueCommentEvent, PullRequestReviewCommentEvent } from "@octokit/webhooks-types" import type { IssueCommentEvent, PullRequestReviewCommentEvent } from "@octokit/webhooks-types"
import { createOpencodeClient } from "@kilocode/sdk" // kilocode_change import { createOpencodeClient } from "@kilocode/sdk"
import { spawn } from "node:child_process" import { spawn } from "node:child_process"
type GitHubAuthor = { type GitHubAuthor = {
@@ -362,7 +362,7 @@ function useIssueId() {
} }
function useShareUrl() { function useShareUrl() {
return isMock() ? "https://dev.opencode.ai" : "https://opencode.ai" return isMock() ? "https://dev.kilo.ai" : "https://kilo.ai"
} }
async function getAccessToken() { async function getAccessToken() {
@@ -373,7 +373,7 @@ async function getAccessToken() {
let response let response
if (isMock()) { if (isMock()) {
response = await fetch("https://api.opencode.ai/exchange_github_app_token_with_pat", { response = await fetch("https://api.kilo.ai/exchange_github_app_token_with_pat", {
method: "POST", method: "POST",
headers: { headers: {
Authorization: `Bearer ${useEnvMock().mockToken}`, Authorization: `Bearer ${useEnvMock().mockToken}`,
@@ -382,7 +382,7 @@ async function getAccessToken() {
}) })
} else { } else {
const oidcToken = await core.getIDToken("opencode-github-action") const oidcToken = await core.getIDToken("opencode-github-action")
response = await fetch("https://api.opencode.ai/exchange_github_app_token", { response = await fetch("https://api.kilo.ai/exchange_github_app_token", {
method: "POST", method: "POST",
headers: { headers: {
Authorization: `Bearer ${oidcToken}`, Authorization: `Bearer ${oidcToken}`,
+2 -1
View File
@@ -16,5 +16,6 @@
"@octokit/graphql": "9.0.1", "@octokit/graphql": "9.0.1",
"@octokit/rest": "catalog:", "@octokit/rest": "catalog:",
"@kilocode/sdk": "workspace:*" "@kilocode/sdk": "workspace:*"
} },
"version": "1.0.13"
} }
+2 -1
View File
@@ -101,5 +101,6 @@
}, },
"patchedDependencies": { "patchedDependencies": {
"ghostty-web@0.3.0": "patches/ghostty-web@0.3.0.patch" "ghostty-web@0.3.0": "patches/ghostty-web@0.3.0.patch"
} },
"version": "1.0.13"
} }
+1 -1
View File
@@ -1,6 +1,6 @@
import { test, expect } from "./fixtures" import { test, expect } from "./fixtures"
test("file tree can expand folders and open a file", async ({ page, gotoSession }) => { test.skip("file tree can expand folders and open a file", async ({ page, gotoSession }) => {
await gotoSession() await gotoSession()
const toggle = page.getByRole("button", { name: "Toggle file tree" }) const toggle = page.getByRole("button", { name: "Toggle file tree" })
+1 -1
View File
@@ -1,4 +1,4 @@
import { createOpencodeClient } from "@kilocode/sdk/v2/client" // kilocode_change import { createOpencodeClient } from "@kilocode/sdk/v2/client"
import { base64Encode } from "@opencode-ai/util/encode" import { base64Encode } from "@opencode-ai/util/encode"
export const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" export const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost"
+1 -1
View File
@@ -36,7 +36,7 @@ function writeAndWait(term: Terminal, data: string): Promise<void> {
}) })
} }
describe("SerializeAddon", () => { describe.skip("SerializeAddon", () => {
describe("ANSI color preservation", () => { describe("ANSI color preservation", () => {
test("should preserve text attributes (bold, italic, underline)", async () => { test("should preserve text attributes (bold, italic, underline)", async () => {
const { term, addon } = createTerminal() const { term, addon } = createTerminal()
+1 -1
View File
@@ -43,7 +43,7 @@ function UiI18nBridge(props: ParentProps) {
declare global { declare global {
interface Window { interface Window {
__OPENCODE__?: { updaterEnabled?: boolean; serverPassword?: string } __OPENCODE__?: { updaterEnabled?: boolean; serverPassword?: string; deepLinks?: string[] }
} }
} }
@@ -1,4 +1,4 @@
import type { ProviderAuthAuthorization } from "@kilocode/sdk/v2/client" // kilocode_change import type { ProviderAuthAuthorization } from "@kilocode/sdk/v2/client"
import { Button } from "@opencode-ai/ui/button" import { Button } from "@opencode-ai/ui/button"
import { useDialog } from "@opencode-ai/ui/context/dialog" import { useDialog } from "@opencode-ai/ui/context/dialog"
import { Dialog } from "@opencode-ai/ui/dialog" import { Dialog } from "@opencode-ai/ui/dialog"
@@ -284,7 +284,7 @@ export function DialogCustomProvider(props: Props) {
<form onSubmit={save} class="px-2.5 pb-6 flex flex-col gap-6"> <form onSubmit={save} class="px-2.5 pb-6 flex flex-col gap-6">
<p class="text-14-regular text-text-base"> <p class="text-14-regular text-text-base">
Configure an OpenAI-compatible provider. See the{" "} Configure an OpenAI-compatible provider. See the{" "}
<Link href="https://opencode.ai/docs/providers/#custom-provider" tabIndex={-1}> <Link href="https://kilo.ai/docs/providers/#custom-provider" tabIndex={-1}>
provider config docs provider config docs
</Link> </Link>
. .
+1 -1
View File
@@ -7,7 +7,7 @@ import { useDialog } from "@opencode-ai/ui/context/dialog"
import { Dialog } from "@opencode-ai/ui/dialog" import { Dialog } from "@opencode-ai/ui/dialog"
import { List } from "@opencode-ai/ui/list" import { List } from "@opencode-ai/ui/list"
import { extractPromptFromParts } from "@/utils/prompt" import { extractPromptFromParts } from "@/utils/prompt"
import type { TextPart as SDKTextPart } from "@kilocode/sdk/v2/client" // kilocode_change import type { TextPart as SDKTextPart } from "@kilocode/sdk/v2/client"
import { base64Encode } from "@opencode-ai/util/encode" import { base64Encode } from "@opencode-ai/util/encode"
import { useLanguage } from "@/context/language" import { useLanguage } from "@/context/language"
@@ -8,7 +8,7 @@ import { IconButton } from "@opencode-ai/ui/icon-button"
import { TextField } from "@opencode-ai/ui/text-field" import { TextField } from "@opencode-ai/ui/text-field"
import { normalizeServerUrl, serverDisplayName, useServer } from "@/context/server" import { normalizeServerUrl, serverDisplayName, useServer } from "@/context/server"
import { usePlatform } from "@/context/platform" import { usePlatform } from "@/context/platform"
import { createOpencodeClient } from "@kilocode/sdk/v2/client" // kilocode_change import { createOpencodeClient } from "@kilocode/sdk/v2/client"
import { useNavigate } from "@solidjs/router" import { useNavigate } from "@solidjs/router"
import { useLanguage } from "@/context/language" import { useLanguage } from "@/context/language"
import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu" import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu"
+1 -1
View File
@@ -16,7 +16,7 @@ import {
type ParentProps, type ParentProps,
} from "solid-js" } from "solid-js"
import { Dynamic } from "solid-js/web" import { Dynamic } from "solid-js/web"
import type { FileNode } from "@kilocode/sdk/v2" // kilocode_change import type { FileNode } from "@kilocode/sdk/v2"
type Kind = "add" | "del" | "mix" type Kind = "add" | "del" | "mix"
+1 -1
View File
@@ -54,7 +54,7 @@ import { usePermission } from "@/context/permission"
import { useLanguage } from "@/context/language" import { useLanguage } from "@/context/language"
import { useGlobalSync } from "@/context/global-sync" import { useGlobalSync } from "@/context/global-sync"
import { usePlatform } from "@/context/platform" import { usePlatform } from "@/context/platform"
import { createOpencodeClient, type Message, type Part } from "@kilocode/sdk/v2/client" // kilocode_change import { createOpencodeClient, type Message, type Part } from "@kilocode/sdk/v2/client"
import { Binary } from "@opencode-ai/util/binary" import { Binary } from "@opencode-ai/util/binary"
import { showToast } from "@opencode-ai/ui/toast" import { showToast } from "@opencode-ai/ui/toast"
import { base64Encode } from "@opencode-ai/util/encode" import { base64Encode } from "@opencode-ai/util/encode"
@@ -3,7 +3,7 @@ import { Tooltip } from "@opencode-ai/ui/tooltip"
import { ProgressCircle } from "@opencode-ai/ui/progress-circle" import { ProgressCircle } from "@opencode-ai/ui/progress-circle"
import { Button } from "@opencode-ai/ui/button" import { Button } from "@opencode-ai/ui/button"
import { useParams } from "@solidjs/router" import { useParams } from "@solidjs/router"
import { AssistantMessage } from "@kilocode/sdk/v2/client" // kilocode_change import { AssistantMessage } from "@kilocode/sdk/v2/client"
import { findLast } from "@opencode-ai/util/array" import { findLast } from "@opencode-ai/util/array"
import { useLayout } from "@/context/layout" import { useLayout } from "@/context/layout"
@@ -11,7 +11,7 @@ import { Accordion } from "@opencode-ai/ui/accordion"
import { StickyAccordionHeader } from "@opencode-ai/ui/sticky-accordion-header" import { StickyAccordionHeader } from "@opencode-ai/ui/sticky-accordion-header"
import { Code } from "@opencode-ai/ui/code" import { Code } from "@opencode-ai/ui/code"
import { Markdown } from "@opencode-ai/ui/markdown" import { Markdown } from "@opencode-ai/ui/markdown"
import type { AssistantMessage, Message, Part, UserMessage } from "@kilocode/sdk/v2/client" // kilocode_change import type { AssistantMessage, Message, Part, UserMessage } from "@kilocode/sdk/v2/client"
import { useLanguage } from "@/context/language" import { useLanguage } from "@/context/language"
interface SessionContextTabProps { interface SessionContextTabProps {
@@ -130,7 +130,7 @@ export function SessionHeader() {
<Portal mount={mount()}> <Portal mount={mount()}>
<button <button
type="button" type="button"
class="hidden md:flex w-[320px] p-1 pl-1.5 items-center gap-2 justify-between rounded-md border border-border-weak-base bg-surface-raised-base transition-colors cursor-default hover:bg-surface-raised-base-hover focus-visible:bg-surface-raised-base-hover active:bg-surface-raised-base-active" class="hidden md:flex w-[320px] max-w-full min-w-0 p-1 pl-1.5 items-center gap-2 justify-between rounded-md border border-border-weak-base bg-surface-raised-base transition-colors cursor-default hover:bg-surface-raised-base-hover focus-visible:bg-surface-raised-base-hover active:bg-surface-raised-base-active"
onClick={() => command.trigger("file.open")} onClick={() => command.trigger("file.open")}
aria-label={language.t("session.header.searchFiles")} aria-label={language.t("session.header.searchFiles")}
> >
@@ -280,17 +280,14 @@ export function SessionHeader() {
</TooltipKeybind> </TooltipKeybind>
</div> </div>
<div class="hidden md:block shrink-0"> <div class="hidden md:block shrink-0">
<TooltipKeybind <TooltipKeybind title={language.t("command.review.toggle")} keybind={command.keybind("review.toggle")}>
title={language.t("command.fileTree.toggle")}
keybind={command.keybind("fileTree.toggle")}
>
<Button <Button
variant="ghost" variant="ghost"
class="group/file-tree-toggle size-6 p-0" class="group/file-tree-toggle size-6 p-0"
onClick={() => layout.fileTree.toggle()} onClick={() => layout.fileTree.toggle()}
aria-label={language.t("command.fileTree.toggle")} aria-label={language.t("command.review.toggle")}
aria-expanded={layout.fileTree.opened()} aria-expanded={layout.fileTree.opened()}
aria-controls="filetree-panel" aria-controls="review-panel"
> >
<div class="relative flex items-center justify-center size-4 [&>*]:absolute [&>*]:inset-0"> <div class="relative flex items-center justify-center size-4 [&>*]:absolute [&>*]:inset-0">
<Icon <Icon
@@ -185,7 +185,7 @@ export const SettingsGeneral: Component = () => {
description={ description={
<> <>
{language.t("settings.general.row.theme.description")}{" "} {language.t("settings.general.row.theme.description")}{" "}
<Link href="https://opencode.ai/docs/themes/">{language.t("common.learnMore")}</Link> <Link href="https://kilo.ai/docs/themes/">{language.t("common.learnMore")}</Link>
</> </>
} }
> >
@@ -13,7 +13,7 @@ import { useSDK } from "@/context/sdk"
import { normalizeServerUrl, serverDisplayName, useServer } from "@/context/server" import { normalizeServerUrl, serverDisplayName, useServer } from "@/context/server"
import { usePlatform } from "@/context/platform" import { usePlatform } from "@/context/platform"
import { useLanguage } from "@/context/language" import { useLanguage } from "@/context/language"
import { createOpencodeClient } from "@kilocode/sdk/v2/client" // kilocode_change import { createOpencodeClient } from "@kilocode/sdk/v2/client"
import { DialogSelectServer } from "./dialog-select-server" import { DialogSelectServer } from "./dialog-select-server"
import { showToast } from "@opencode-ai/ui/toast" import { showToast } from "@opencode-ai/ui/toast"
+23 -12
View File
@@ -132,12 +132,14 @@ export function Titlebar() {
} }
return ( return (
<header class="h-10 shrink-0 bg-background-base flex items-center relative" data-tauri-drag-region> <header
class="h-10 shrink-0 bg-background-base relative grid grid-cols-[auto_minmax(0,1fr)_auto] items-center"
data-tauri-drag-region
>
<div <div
classList={{ classList={{
"flex items-center w-full min-w-0": true, "flex items-center min-w-0": true,
"pl-2": !mac(), "pl-2": !mac(),
"pr-6": !windows(),
}} }}
onMouseDown={drag} onMouseDown={drag}
data-tauri-drag-region data-tauri-drag-region
@@ -218,20 +220,29 @@ export function Titlebar() {
</div> </div>
</div> </div>
<div id="opencode-titlebar-left" class="flex items-center gap-3 min-w-0 px-2" data-tauri-drag-region /> <div id="opencode-titlebar-left" class="flex items-center gap-3 min-w-0 px-2" data-tauri-drag-region />
<div class="flex-1 h-full" data-tauri-drag-region /> </div>
<div
id="opencode-titlebar-right" <div
class="flex items-center gap-3 shrink-0 flex-1 justify-end" class="min-w-0 flex items-center justify-center pointer-events-none lg:absolute lg:inset-0 lg:flex lg:items-center lg:justify-center"
data-tauri-drag-region data-tauri-drag-region
/> >
<div id="opencode-titlebar-center" class="pointer-events-auto w-full min-w-0 flex justify-center lg:w-fit" />
</div>
<div
classList={{
"flex items-center min-w-0 justify-end": true,
"pr-6": !windows(),
}}
onMouseDown={drag}
data-tauri-drag-region
>
<div id="opencode-titlebar-right" class="flex items-center gap-3 shrink-0 justify-end" data-tauri-drag-region />
<Show when={windows()}> <Show when={windows()}>
<div class="w-6 shrink-0" /> <div class="w-6 shrink-0" />
<div data-tauri-decorum-tb class="flex flex-row" /> <div data-tauri-decorum-tb class="flex flex-row" />
</Show> </Show>
</div> </div>
<div class="absolute inset-0 flex items-center justify-center pointer-events-none">
<div id="opencode-titlebar-center" class="pointer-events-auto" />
</div>
</header> </header>
) )
} }
+1 -1
View File
@@ -1,7 +1,7 @@
import { createEffect, createMemo, createRoot, onCleanup } from "solid-js" import { createEffect, createMemo, createRoot, onCleanup } from "solid-js"
import { createStore, produce } from "solid-js/store" import { createStore, produce } from "solid-js/store"
import { createSimpleContext } from "@opencode-ai/ui/context" import { createSimpleContext } from "@opencode-ai/ui/context"
import type { FileContent, FileNode } from "@kilocode/sdk/v2" // kilocode_change import type { FileContent, FileNode } from "@kilocode/sdk/v2"
import { showToast } from "@opencode-ai/ui/toast" import { showToast } from "@opencode-ai/ui/toast"
import { useParams } from "@solidjs/router" import { useParams } from "@solidjs/router"
import { getFilename } from "@opencode-ai/util/path" import { getFilename } from "@opencode-ai/util/path"
+1 -1
View File
@@ -1,4 +1,4 @@
import { createOpencodeClient, type Event } from "@kilocode/sdk/v2/client" // kilocode_change import { createOpencodeClient, type Event } from "@kilocode/sdk/v2/client"
import { createSimpleContext } from "@opencode-ai/ui/context" import { createSimpleContext } from "@opencode-ai/ui/context"
import { createGlobalEmitter } from "@solid-primitives/event-bus" import { createGlobalEmitter } from "@solid-primitives/event-bus"
import { batch, onCleanup } from "solid-js" import { batch, onCleanup } from "solid-js"
-2
View File
@@ -1,4 +1,3 @@
// kilocode_change start
import { import {
type Message, type Message,
type Agent, type Agent,
@@ -20,7 +19,6 @@ import {
type QuestionRequest, type QuestionRequest,
createOpencodeClient, createOpencodeClient,
} from "@kilocode/sdk/v2/client" } from "@kilocode/sdk/v2/client"
// kilocode_change end
import { createStore, produce, reconcile, type SetStoreFunction, type Store } from "solid-js/store" import { createStore, produce, reconcile, type SetStoreFunction, type Store } from "solid-js/store"
import { Binary } from "@opencode-ai/util/binary" import { Binary } from "@opencode-ai/util/binary"
import { retry } from "@opencode-ai/util/retry" import { retry } from "@opencode-ai/util/retry"
+1 -1
View File
@@ -7,7 +7,7 @@ import { useSettings } from "@/context/settings"
import { persisted } from "@/utils/persist" import { persisted } from "@/utils/persist"
import { DialogReleaseNotes, type Highlight } from "@/components/dialog-release-notes" import { DialogReleaseNotes, type Highlight } from "@/components/dialog-release-notes"
const CHANGELOG_URL = "https://opencode.ai/changelog.json" const CHANGELOG_URL = "https://kilo.ai/changelog.json"
type Store = { type Store = {
version?: string version?: string
@@ -5,7 +5,7 @@ import { makePersisted, type SyncStorage } from "@solid-primitives/storage"
import { createScrollPersistence } from "./layout-scroll" import { createScrollPersistence } from "./layout-scroll"
describe("createScrollPersistence", () => { describe("createScrollPersistence", () => {
test("debounces persisted scroll writes", async () => { test.skip("debounces persisted scroll writes", async () => {
const key = "layout-scroll.test" const key = "layout-scroll.test"
const data = new Map<string, string>() const data = new Map<string, string>()
const writes: string[] = [] const writes: string[] = []
+1 -1
View File
@@ -4,7 +4,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context"
import { useGlobalSync } from "./global-sync" import { useGlobalSync } from "./global-sync"
import { useGlobalSDK } from "./global-sdk" import { useGlobalSDK } from "./global-sdk"
import { useServer } from "./server" import { useServer } from "./server"
import { Project } from "@kilocode/sdk/v2" // kilocode_change import { Project } from "@kilocode/sdk/v2"
import { Persist, persisted, removePersisted } from "@/utils/persist" import { Persist, persisted, removePersisted } from "@/utils/persist"
import { same } from "@/utils/same" import { same } from "@/utils/same"
import { createScrollPersistence, type SessionScroll } from "./layout-scroll" import { createScrollPersistence, type SessionScroll } from "./layout-scroll"
+4 -1
View File
@@ -93,7 +93,10 @@ export const { use: useModels, provider: ModelsProvider } = createSimpleContext(
const state = visibility().get(key) const state = visibility().get(key)
if (state === "hide") return false if (state === "hide") return false
if (state === "show") return true if (state === "show") return true
return true if (latestSet().has(key)) return true
const m = find(model)
if (!m?.release_date || !DateTime.fromISO(m.release_date).isValid) return true
return false
} }
const setVisibility = (model: ModelKey, state: boolean) => { const setVisibility = (model: ModelKey, state: boolean) => {
+1 -1
View File
@@ -10,7 +10,7 @@ import { useSettings } from "@/context/settings"
import { Binary } from "@opencode-ai/util/binary" import { Binary } from "@opencode-ai/util/binary"
import { base64Encode } from "@opencode-ai/util/encode" import { base64Encode } from "@opencode-ai/util/encode"
import { decode64 } from "@/utils/base64" import { decode64 } from "@/utils/base64"
import { EventSessionError } from "@kilocode/sdk/v2" // kilocode_change import { EventSessionError } from "@kilocode/sdk/v2"
import { Persist, persisted } from "@/utils/persist" import { Persist, persisted } from "@/utils/persist"
import { playSound, soundSrc } from "@/utils/sound" import { playSound, soundSrc } from "@/utils/sound"
+1 -1
View File
@@ -1,7 +1,7 @@
import { createMemo, onCleanup } from "solid-js" import { createMemo, onCleanup } from "solid-js"
import { createStore, produce } from "solid-js/store" import { createStore, produce } from "solid-js/store"
import { createSimpleContext } from "@opencode-ai/ui/context" import { createSimpleContext } from "@opencode-ai/ui/context"
import type { PermissionRequest } from "@kilocode/sdk/v2/client" // kilocode_change import type { PermissionRequest } from "@kilocode/sdk/v2/client"
import { Persist, persisted } from "@/utils/persist" import { Persist, persisted } from "@/utils/persist"
import { useGlobalSDK } from "@/context/global-sdk" import { useGlobalSDK } from "@/context/global-sdk"
import { useGlobalSync } from "./global-sync" import { useGlobalSync } from "./global-sync"
+1 -1
View File
@@ -1,4 +1,4 @@
import { createOpencodeClient, type Event } from "@kilocode/sdk/v2/client" // kilocode_change import { createOpencodeClient, type Event } from "@kilocode/sdk/v2/client"
import { createSimpleContext } from "@opencode-ai/ui/context" import { createSimpleContext } from "@opencode-ai/ui/context"
import { createGlobalEmitter } from "@solid-primitives/event-bus" import { createGlobalEmitter } from "@solid-primitives/event-bus"
import { createEffect, createMemo, onCleanup } from "solid-js" import { createEffect, createMemo, onCleanup } from "solid-js"
+1 -1
View File
@@ -1,4 +1,4 @@
import { createOpencodeClient } from "@kilocode/sdk/v2/client" // kilocode_change import { createOpencodeClient } from "@kilocode/sdk/v2/client"
import { createSimpleContext } from "@opencode-ai/ui/context" import { createSimpleContext } from "@opencode-ai/ui/context"
import { batch, createEffect, createMemo, onCleanup } from "solid-js" import { batch, createEffect, createMemo, onCleanup } from "solid-js"
import { createStore } from "solid-js/store" import { createStore } from "solid-js/store"
+1 -1
View File
@@ -5,7 +5,7 @@ import { retry } from "@opencode-ai/util/retry"
import { createSimpleContext } from "@opencode-ai/ui/context" import { createSimpleContext } from "@opencode-ai/ui/context"
import { useGlobalSync } from "./global-sync" import { useGlobalSync } from "./global-sync"
import { useSDK } from "./sdk" import { useSDK } from "./sdk"
import type { Message, Part } from "@kilocode/sdk/v2/client" // kilocode_change import type { Message, Part } from "@kilocode/sdk/v2/client"
const keyFor = (directory: string, id: string) => `${directory}\n${id}` const keyFor = (directory: string, id: string) => `${directory}\n${id}`
+21 -23
View File
@@ -89,10 +89,8 @@ export const dict = {
"dialog.provider.search.placeholder": "البحث عن موفرين", "dialog.provider.search.placeholder": "البحث عن موفرين",
"dialog.provider.empty": "لم يتم العثور على موفرين", "dialog.provider.empty": "لم يتم العثور على موفرين",
"dialog.provider.group.popular": "شائع", "dialog.provider.group.popular": "شائع",
"dialog.provider.group.recommended": "موصى به", // kilocode_change
"dialog.provider.group.other": "آخر", "dialog.provider.group.other": "آخر",
"dialog.provider.tag.recommended": "موصى به", "dialog.provider.tag.recommended": "موصى به",
"dialog.provider.kilo.note": "الوصول إلى أكثر من 500 نموذج ذكاء اصطناعي",
"dialog.provider.anthropic.note": "اتصل باستخدام Claude Pro/Max أو مفتاح API", "dialog.provider.anthropic.note": "اتصل باستخدام Claude Pro/Max أو مفتاح API",
"dialog.provider.openai.note": "اتصل باستخدام ChatGPT Pro/Plus أو مفتاح API", "dialog.provider.openai.note": "اتصل باستخدام ChatGPT Pro/Plus أو مفتاح API",
"dialog.provider.copilot.note": "اتصل باستخدام Copilot أو مفتاح API", "dialog.provider.copilot.note": "اتصل باستخدام Copilot أو مفتاح API",
@@ -103,7 +101,7 @@ export const dict = {
"dialog.model.manage": "إدارة النماذج", "dialog.model.manage": "إدارة النماذج",
"dialog.model.manage.description": "تخصيص النماذج التي تظهر في محدد النماذج.", "dialog.model.manage.description": "تخصيص النماذج التي تظهر في محدد النماذج.",
"dialog.model.unpaid.freeModels.title": "نماذج مجانية مقدمة من Kilo CLI", "dialog.model.unpaid.freeModels.title": "نماذج مجانية مقدمة من Kilo",
"dialog.model.unpaid.addMore.title": "إضافة المزيد من النماذج من موفرين مشهورين", "dialog.model.unpaid.addMore.title": "إضافة المزيد من النماذج من موفرين مشهورين",
"dialog.provider.viewAll": "عرض المزيد من الموفرين", "dialog.provider.viewAll": "عرض المزيد من الموفرين",
@@ -116,21 +114,21 @@ export const dict = {
"provider.connect.status.waiting": "في انتظار التفويض...", "provider.connect.status.waiting": "في انتظار التفويض...",
"provider.connect.status.failed": "فشل التفويض: {{error}}", "provider.connect.status.failed": "فشل التفويض: {{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"أدخل مفتاح واجهة برمجة تطبيقات {{provider}} الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في Kilo CLI.", "أدخل مفتاح واجهة برمجة تطبيقات {{provider}} الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في Kilo.",
"provider.connect.apiKey.label": "مفتاح واجهة برمجة تطبيقات {{provider}}", "provider.connect.apiKey.label": "مفتاح واجهة برمجة تطبيقات {{provider}}",
"provider.connect.apiKey.placeholder": "مفتاح API", "provider.connect.apiKey.placeholder": "مفتاح API",
"provider.connect.apiKey.required": "مفتاح API مطلوب", "provider.connect.apiKey.required": "مفتاح API مطلوب",
"provider.connect.kiloGateway.line1": "provider.connect.opencodeZen.line1":
"يمنحك Kilo Gateway الوصول إلى مجموعة مختارة من النماذج الموثوقة والمحسنة لوكلاء البرمجة.", "يمنحك Kilo Zen الوصول إلى مجموعة مختارة من النماذج الموثوقة والمحسنة لوكلاء البرمجة.",
"provider.connect.kiloGateway.line2": "provider.connect.opencodeZen.line2":
"باستخدام مفتاح API واحد، ستحصل على إمكانية الوصول إلى نماذج مثل Claude و GPT و Gemini و GLM والمزيد.", "باستخدام مفتاح API واحد، ستحصل على إمكانية الوصول إلى نماذج مثل Claude و GPT و Gemini و GLM والمزيد.",
"provider.connect.kiloGateway.visit.prefix": "قم بزيارة ", "provider.connect.opencodeZen.visit.prefix": "قم بزيارة ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": " للحصول على مفتاح API الخاص بك.", "provider.connect.opencodeZen.visit.suffix": " للحصول على مفتاح API الخاص بك.",
"provider.connect.oauth.code.visit.prefix": "قم بزيارة ", "provider.connect.oauth.code.visit.prefix": "قم بزيارة ",
"provider.connect.oauth.code.visit.link": "هذا الرابط", "provider.connect.oauth.code.visit.link": "هذا الرابط",
"provider.connect.oauth.code.visit.suffix": "provider.connect.oauth.code.visit.suffix":
" للحصول على رمز التفويض الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في Kilo CLI.", " للحصول على رمز التفويض الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في Kilo.",
"provider.connect.oauth.code.label": "رمز تفويض {{method}}", "provider.connect.oauth.code.label": "رمز تفويض {{method}}",
"provider.connect.oauth.code.placeholder": "رمز التفويض", "provider.connect.oauth.code.placeholder": "رمز التفويض",
"provider.connect.oauth.code.required": "رمز التفويض مطلوب", "provider.connect.oauth.code.required": "رمز التفويض مطلوب",
@@ -138,7 +136,7 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": "قم بزيارة ", "provider.connect.oauth.auto.visit.prefix": "قم بزيارة ",
"provider.connect.oauth.auto.visit.link": "هذا الرابط", "provider.connect.oauth.auto.visit.link": "هذا الرابط",
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
" وأدخل الرمز أدناه لتوصيل حسابك واستخدام نماذج {{provider}} في Kilo CLI.", " وأدخل الرمز أدناه لتوصيل حسابك واستخدام نماذج {{provider}} في Kilo.",
"provider.connect.oauth.auto.confirmationCode": "رمز التأكيد", "provider.connect.oauth.auto.confirmationCode": "رمز التأكيد",
"provider.connect.toast.connected.title": "تم توصيل {{provider}}", "provider.connect.toast.connected.title": "تم توصيل {{provider}}",
"provider.connect.toast.connected.description": "نماذج {{provider}} متاحة الآن للاستخدام.", "provider.connect.toast.connected.description": "نماذج {{provider}} متاحة الآن للاستخدام.",
@@ -249,7 +247,7 @@ export const dict = {
"dialog.directory.empty": "لم يتم العثور على مجلدات", "dialog.directory.empty": "لم يتم العثور على مجلدات",
"dialog.server.title": "الخوادم", "dialog.server.title": "الخوادم",
"dialog.server.description": "تبديل خادم Kilo CLI الذي يتصل به هذا التطبيق.", "dialog.server.description": "تبديل خادم Kilo الذي يتصل به هذا التطبيق.",
"dialog.server.search.placeholder": "البحث في الخوادم", "dialog.server.search.placeholder": "البحث في الخوادم",
"dialog.server.empty": "لا توجد خوادم بعد", "dialog.server.empty": "لا توجد خوادم بعد",
"dialog.server.add.title": "إضافة خادم", "dialog.server.add.title": "إضافة خادم",
@@ -368,7 +366,7 @@ export const dict = {
"toast.session.listFailed.title": "فشل تحميل الجلسات لـ {{project}}", "toast.session.listFailed.title": "فشل تحميل الجلسات لـ {{project}}",
"toast.update.title": "تحديث متاح", "toast.update.title": "تحديث متاح",
"toast.update.description": "نسخة جديدة من Kilo CLI ({{version}}) متاحة الآن للتثبيت.", "toast.update.description": "نسخة جديدة من Kilo ({{version}}) متاحة الآن للتثبيت.",
"toast.update.action.installRestart": "تثبيت وإعادة تشغيل", "toast.update.action.installRestart": "تثبيت وإعادة تشغيل",
"toast.update.action.notYet": "ليس الآن", "toast.update.action.notYet": "ليس الآن",
@@ -379,7 +377,7 @@ export const dict = {
"error.page.action.checking": "جارٍ التحقق...", "error.page.action.checking": "جارٍ التحقق...",
"error.page.action.checkUpdates": "التحقق من وجود تحديثات", "error.page.action.checkUpdates": "التحقق من وجود تحديثات",
"error.page.action.updateTo": "تحديث إلى {{version}}", "error.page.action.updateTo": "تحديث إلى {{version}}",
"error.page.report.prefix": "يرجى الإبلاغ عن هذا الخطأ لفريق Kilo CLI", "error.page.report.prefix": "يرجى الإبلاغ عن هذا الخطأ لفريق Kilo",
"error.page.report.discord": "على Discord", "error.page.report.discord": "على Discord",
"error.page.version": "الإصدار: {{version}}", "error.page.version": "الإصدار: {{version}}",
@@ -397,7 +395,7 @@ export const dict = {
"error.chain.didYouMean": "هل كنت تعني: {{suggestions}}", "error.chain.didYouMean": "هل كنت تعني: {{suggestions}}",
"error.chain.modelNotFound": "النموذج غير موجود: {{provider}}/{{model}}", "error.chain.modelNotFound": "النموذج غير موجود: {{provider}}/{{model}}",
"error.chain.checkConfig": "تحقق من أسماء الموفر/النموذج في التكوين (opencode.json)", "error.chain.checkConfig": "تحقق من أسماء الموفر/النموذج في التكوين (opencode.json)",
"error.chain.mcpFailed": 'فشل خادم MCP "{{name}}". لاحظ أن Kilo CLI لا يدعم مصادقة MCP بعد.', "error.chain.mcpFailed": 'فشل خادم MCP "{{name}}". لاحظ أن Kilo لا يدعم مصادقة MCP بعد.',
"error.chain.providerAuthFailed": "فشلت مصادقة الموفر ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "فشلت مصادقة الموفر ({{provider}}): {{message}}",
"error.chain.providerInitFailed": 'فشل تهيئة الموفر "{{provider}}". تحقق من بيانات الاعتماد والتكوين.', "error.chain.providerInitFailed": 'فشل تهيئة الموفر "{{provider}}". تحقق من بيانات الاعتماد والتكوين.',
"error.chain.configJsonInvalid": "ملف التكوين في {{path}} ليس JSON(C) صالحًا", "error.chain.configJsonInvalid": "ملف التكوين في {{path}} ليس JSON(C) صالحًا",
@@ -502,12 +500,12 @@ export const dict = {
"sidebar.workspaces.enable": "تمكين مساحات العمل", "sidebar.workspaces.enable": "تمكين مساحات العمل",
"sidebar.workspaces.disable": "تعطيل مساحات العمل", "sidebar.workspaces.disable": "تعطيل مساحات العمل",
"sidebar.gettingStarted.title": "البدء", "sidebar.gettingStarted.title": "البدء",
"sidebar.gettingStarted.line1": "يتضمن Kilo CLI نماذج مجانية حتى تتمكن من البدء فورًا.", "sidebar.gettingStarted.line1": "يتضمن Kilo نماذج مجانية حتى تتمكن من البدء فورًا.",
"sidebar.gettingStarted.line2": "قم بتوصيل أي موفر لاستخدام النماذج، بما في ذلك Claude و GPT و Gemini وما إلى ذلك.", "sidebar.gettingStarted.line2": "قم بتوصيل أي موفر لاستخدام النماذج، بما في ذلك Claude و GPT و Gemini وما إلى ذلك.",
"sidebar.project.recentSessions": "الجلسات الحديثة", "sidebar.project.recentSessions": "الجلسات الحديثة",
"sidebar.project.viewAllSessions": "عرض جميع الجلسات", "sidebar.project.viewAllSessions": "عرض جميع الجلسات",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "سطح المكتب", "settings.section.desktop": "سطح المكتب",
"settings.section.server": "الخادم", "settings.section.server": "الخادم",
"settings.tab.general": "عام", "settings.tab.general": "عام",
@@ -519,11 +517,11 @@ export const dict = {
"settings.general.section.sounds": "المؤثرات الصوتية", "settings.general.section.sounds": "المؤثرات الصوتية",
"settings.general.row.language.title": "اللغة", "settings.general.row.language.title": "اللغة",
"settings.general.row.language.description": "تغيير لغة العرض لـ Kilo CLI", "settings.general.row.language.description": "تغيير لغة العرض لـ Kilo",
"settings.general.row.appearance.title": "المظهر", "settings.general.row.appearance.title": "المظهر",
"settings.general.row.appearance.description": "تخصيص كيفية ظهور Kilo CLI على جهازك", "settings.general.row.appearance.description": "تخصيص كيفية ظهور Kilo على جهازك",
"settings.general.row.theme.title": "السمة", "settings.general.row.theme.title": "السمة",
"settings.general.row.theme.description": "تخصيص سمة Kilo CLI.", "settings.general.row.theme.description": "تخصيص سمة Kilo.",
"settings.general.row.font.title": "الخط", "settings.general.row.font.title": "الخط",
"settings.general.row.font.description": "تخصيص الخط الأحادي المستخدم في كتل التعليمات البرمجية", "settings.general.row.font.description": "تخصيص الخط الأحادي المستخدم في كتل التعليمات البرمجية",
@@ -531,13 +529,13 @@ export const dict = {
"settings.general.row.releaseNotes.description": 'عرض نوافذ "ما الجديد" المنبثقة بعد التحديثات', "settings.general.row.releaseNotes.description": 'عرض نوافذ "ما الجديد" المنبثقة بعد التحديثات',
"settings.updates.row.startup.title": "التحقق من التحديثات عند بدء التشغيل", "settings.updates.row.startup.title": "التحقق من التحديثات عند بدء التشغيل",
"settings.updates.row.startup.description": "التحقق تلقائيًا من التحديثات عند تشغيل OpenCode", "settings.updates.row.startup.description": "التحقق تلقائيًا من التحديثات عند تشغيل Kilo",
"settings.updates.row.check.title": "التحقق من التحديثات", "settings.updates.row.check.title": "التحقق من التحديثات",
"settings.updates.row.check.description": "التحقق يدويًا من التحديثات وتثبيتها إذا كانت متاحة", "settings.updates.row.check.description": "التحقق يدويًا من التحديثات وتثبيتها إذا كانت متاحة",
"settings.updates.action.checkNow": "تحقق الآن", "settings.updates.action.checkNow": "تحقق الآن",
"settings.updates.action.checking": "جارٍ التحقق...", "settings.updates.action.checking": "جارٍ التحقق...",
"settings.updates.toast.latest.title": "أنت على آخر إصدار", "settings.updates.toast.latest.title": "أنت على آخر إصدار",
"settings.updates.toast.latest.description": "أنت تستخدم أحدث إصدار من OpenCode.", "settings.updates.toast.latest.description": "أنت تستخدم أحدث إصدار من Kilo.",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
"font.option.firaCode": "Fira Code", "font.option.firaCode": "Fira Code",
+21 -23
View File
@@ -89,10 +89,8 @@ export const dict = {
"dialog.provider.search.placeholder": "Buscar provedores", "dialog.provider.search.placeholder": "Buscar provedores",
"dialog.provider.empty": "Nenhum provedor encontrado", "dialog.provider.empty": "Nenhum provedor encontrado",
"dialog.provider.group.popular": "Popular", "dialog.provider.group.popular": "Popular",
"dialog.provider.group.recommended": "Recomendado", // kilocode_change
"dialog.provider.group.other": "Outro", "dialog.provider.group.other": "Outro",
"dialog.provider.tag.recommended": "Recomendado", "dialog.provider.tag.recommended": "Recomendado",
"dialog.provider.kilo.note": "Acesse mais de 500 modelos de IA",
"dialog.provider.anthropic.note": "Conectar com Claude Pro/Max ou chave de API", "dialog.provider.anthropic.note": "Conectar com Claude Pro/Max ou chave de API",
"dialog.provider.openai.note": "Conectar com ChatGPT Pro/Plus ou chave de API", "dialog.provider.openai.note": "Conectar com ChatGPT Pro/Plus ou chave de API",
"dialog.provider.copilot.note": "Conectar com Copilot ou chave de API", "dialog.provider.copilot.note": "Conectar com Copilot ou chave de API",
@@ -103,7 +101,7 @@ export const dict = {
"dialog.model.manage": "Gerenciar modelos", "dialog.model.manage": "Gerenciar modelos",
"dialog.model.manage.description": "Personalizar quais modelos aparecem no seletor de modelos.", "dialog.model.manage.description": "Personalizar quais modelos aparecem no seletor de modelos.",
"dialog.model.unpaid.freeModels.title": "Modelos gratuitos fornecidos pelo Kilo CLI", "dialog.model.unpaid.freeModels.title": "Modelos gratuitos fornecidos pelo Kilo",
"dialog.model.unpaid.addMore.title": "Adicionar mais modelos de provedores populares", "dialog.model.unpaid.addMore.title": "Adicionar mais modelos de provedores populares",
"dialog.provider.viewAll": "Ver mais provedores", "dialog.provider.viewAll": "Ver mais provedores",
@@ -116,21 +114,21 @@ export const dict = {
"provider.connect.status.waiting": "Aguardando autorização...", "provider.connect.status.waiting": "Aguardando autorização...",
"provider.connect.status.failed": "Autorização falhou: {{error}}", "provider.connect.status.failed": "Autorização falhou: {{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"Digite sua chave de API do {{provider}} para conectar sua conta e usar modelos do {{provider}} no Kilo CLI.", "Digite sua chave de API do {{provider}} para conectar sua conta e usar modelos do {{provider}} no Kilo.",
"provider.connect.apiKey.label": "Chave de API do {{provider}}", "provider.connect.apiKey.label": "Chave de API do {{provider}}",
"provider.connect.apiKey.placeholder": "Chave de API", "provider.connect.apiKey.placeholder": "Chave de API",
"provider.connect.apiKey.required": "A chave de API é obrigatória", "provider.connect.apiKey.required": "A chave de API é obrigatória",
"provider.connect.kiloGateway.line1": "provider.connect.opencodeZen.line1":
"Kilo Gateway oferece acesso a um conjunto selecionado de modelos confiáveis otimizados para agentes de código.", "Kilo Zen oferece acesso a um conjunto selecionado de modelos confiáveis otimizados para agentes de código.",
"provider.connect.kiloGateway.line2": "provider.connect.opencodeZen.line2":
"Com uma única chave de API você terá acesso a modelos como Claude, GPT, Gemini, GLM e mais.", "Com uma única chave de API você terá acesso a modelos como Claude, GPT, Gemini, GLM e mais.",
"provider.connect.kiloGateway.visit.prefix": "Visite ", "provider.connect.opencodeZen.visit.prefix": "Visite ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": " para obter sua chave de API.", "provider.connect.opencodeZen.visit.suffix": " para obter sua chave de API.",
"provider.connect.oauth.code.visit.prefix": "Visite ", "provider.connect.oauth.code.visit.prefix": "Visite ",
"provider.connect.oauth.code.visit.link": "este link", "provider.connect.oauth.code.visit.link": "este link",
"provider.connect.oauth.code.visit.suffix": "provider.connect.oauth.code.visit.suffix":
" para obter seu código de autorização e conectar sua conta para usar modelos do {{provider}} no Kilo CLI.", " para obter seu código de autorização e conectar sua conta para usar modelos do {{provider}} no Kilo.",
"provider.connect.oauth.code.label": "Código de autorização {{method}}", "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.placeholder": "Código de autorização",
"provider.connect.oauth.code.required": "O código de autorização é obrigatório", "provider.connect.oauth.code.required": "O código de autorização é obrigatório",
@@ -138,7 +136,7 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": "Visite ", "provider.connect.oauth.auto.visit.prefix": "Visite ",
"provider.connect.oauth.auto.visit.link": "este link", "provider.connect.oauth.auto.visit.link": "este link",
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
" e digite o código abaixo para conectar sua conta e usar modelos do {{provider}} no Kilo CLI.", " e digite o código abaixo para conectar sua conta e usar modelos do {{provider}} no Kilo.",
"provider.connect.oauth.auto.confirmationCode": "Código de confirmação", "provider.connect.oauth.auto.confirmationCode": "Código de confirmação",
"provider.connect.toast.connected.title": "{{provider}} conectado", "provider.connect.toast.connected.title": "{{provider}} conectado",
"provider.connect.toast.connected.description": "Modelos do {{provider}} agora estão disponíveis para uso.", "provider.connect.toast.connected.description": "Modelos do {{provider}} agora estão disponíveis para uso.",
@@ -248,7 +246,7 @@ export const dict = {
"dialog.directory.empty": "Nenhuma pasta encontrada", "dialog.directory.empty": "Nenhuma pasta encontrada",
"dialog.server.title": "Servidores", "dialog.server.title": "Servidores",
"dialog.server.description": "Trocar para qual servidor Kilo CLI este aplicativo se conecta.", "dialog.server.description": "Trocar para qual servidor Kilo este aplicativo se conecta.",
"dialog.server.search.placeholder": "Buscar servidores", "dialog.server.search.placeholder": "Buscar servidores",
"dialog.server.empty": "Nenhum servidor ainda", "dialog.server.empty": "Nenhum servidor ainda",
"dialog.server.add.title": "Adicionar um servidor", "dialog.server.add.title": "Adicionar um servidor",
@@ -367,7 +365,7 @@ export const dict = {
"toast.session.listFailed.title": "Falha ao carregar sessões para {{project}}", "toast.session.listFailed.title": "Falha ao carregar sessões para {{project}}",
"toast.update.title": "Atualização disponível", "toast.update.title": "Atualização disponível",
"toast.update.description": "Uma nova versão do Kilo CLI ({{version}}) está disponível para instalação.", "toast.update.description": "Uma nova versão do Kilo ({{version}}) está disponível para instalação.",
"toast.update.action.installRestart": "Instalar e reiniciar", "toast.update.action.installRestart": "Instalar e reiniciar",
"toast.update.action.notYet": "Agora não", "toast.update.action.notYet": "Agora não",
@@ -378,7 +376,7 @@ export const dict = {
"error.page.action.checking": "Verificando...", "error.page.action.checking": "Verificando...",
"error.page.action.checkUpdates": "Verificar atualizações", "error.page.action.checkUpdates": "Verificar atualizações",
"error.page.action.updateTo": "Atualizar para {{version}}", "error.page.action.updateTo": "Atualizar para {{version}}",
"error.page.report.prefix": "Por favor, reporte este erro para a equipe do Kilo CLI", "error.page.report.prefix": "Por favor, reporte este erro para a equipe do Kilo",
"error.page.report.discord": "no Discord", "error.page.report.discord": "no Discord",
"error.page.version": "Versão: {{version}}", "error.page.version": "Versão: {{version}}",
@@ -396,7 +394,7 @@ export const dict = {
"error.chain.didYouMean": "Você quis dizer: {{suggestions}}", "error.chain.didYouMean": "Você quis dizer: {{suggestions}}",
"error.chain.modelNotFound": "Modelo não encontrado: {{provider}}/{{model}}", "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.checkConfig": "Verifique os nomes de provedor/modelo na sua configuração (opencode.json)",
"error.chain.mcpFailed": 'Servidor MCP "{{name}}" falhou. Nota: Kilo CLI ainda não suporta autenticação MCP.', "error.chain.mcpFailed": 'Servidor MCP "{{name}}" falhou. Nota: Kilo ainda não suporta autenticação MCP.',
"error.chain.providerAuthFailed": "Autenticação do provedor falhou ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "Autenticação do provedor falhou ({{provider}}): {{message}}",
"error.chain.providerInitFailed": "error.chain.providerInitFailed":
'Falha ao inicializar provedor "{{provider}}". Verifique credenciais e configuração.', 'Falha ao inicializar provedor "{{provider}}". Verifique credenciais e configuração.',
@@ -506,12 +504,12 @@ export const dict = {
"sidebar.workspaces.enable": "Habilitar espaços de trabalho", "sidebar.workspaces.enable": "Habilitar espaços de trabalho",
"sidebar.workspaces.disable": "Desabilitar espaços de trabalho", "sidebar.workspaces.disable": "Desabilitar espaços de trabalho",
"sidebar.gettingStarted.title": "Começando", "sidebar.gettingStarted.title": "Começando",
"sidebar.gettingStarted.line1": "Kilo CLI inclui modelos gratuitos para você começar imediatamente.", "sidebar.gettingStarted.line1": "Kilo inclui modelos gratuitos para você começar imediatamente.",
"sidebar.gettingStarted.line2": "Conecte qualquer provedor para usar modelos, incluindo Claude, GPT, Gemini etc.", "sidebar.gettingStarted.line2": "Conecte qualquer provedor para usar modelos, incluindo Claude, GPT, Gemini etc.",
"sidebar.project.recentSessions": "Sessões recentes", "sidebar.project.recentSessions": "Sessões recentes",
"sidebar.project.viewAllSessions": "Ver todas as sessões", "sidebar.project.viewAllSessions": "Ver todas as sessões",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "Desktop", "settings.section.desktop": "Desktop",
"settings.section.server": "Servidor", "settings.section.server": "Servidor",
"settings.tab.general": "Geral", "settings.tab.general": "Geral",
@@ -523,11 +521,11 @@ export const dict = {
"settings.general.section.sounds": "Efeitos sonoros", "settings.general.section.sounds": "Efeitos sonoros",
"settings.general.row.language.title": "Idioma", "settings.general.row.language.title": "Idioma",
"settings.general.row.language.description": "Alterar o idioma de exibição do Kilo CLI", "settings.general.row.language.description": "Alterar o idioma de exibição do Kilo",
"settings.general.row.appearance.title": "Aparência", "settings.general.row.appearance.title": "Aparência",
"settings.general.row.appearance.description": "Personalize como o Kilo CLI aparece no seu dispositivo", "settings.general.row.appearance.description": "Personalize como o Kilo aparece no seu dispositivo",
"settings.general.row.theme.title": "Tema", "settings.general.row.theme.title": "Tema",
"settings.general.row.theme.description": "Personalize como o Kilo CLI é tematizado.", "settings.general.row.theme.description": "Personalize como o Kilo é tematizado.",
"settings.general.row.font.title": "Fonte", "settings.general.row.font.title": "Fonte",
"settings.general.row.font.description": "Personalize a fonte monoespaçada usada em blocos de código", "settings.general.row.font.description": "Personalize a fonte monoespaçada usada em blocos de código",
@@ -535,13 +533,13 @@ export const dict = {
"settings.general.row.releaseNotes.description": 'Mostrar pop-ups de "Novidades" após atualizações', "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.title": "Verificar atualizações ao iniciar",
"settings.updates.row.startup.description": "Verificar atualizações automaticamente quando o OpenCode iniciar", "settings.updates.row.startup.description": "Verificar atualizações automaticamente quando o Kilo iniciar",
"settings.updates.row.check.title": "Verificar atualizações", "settings.updates.row.check.title": "Verificar atualizações",
"settings.updates.row.check.description": "Verificar atualizações manualmente e instalar se houver", "settings.updates.row.check.description": "Verificar atualizações manualmente e instalar se houver",
"settings.updates.action.checkNow": "Verificar agora", "settings.updates.action.checkNow": "Verificar agora",
"settings.updates.action.checking": "Verificando...", "settings.updates.action.checking": "Verificando...",
"settings.updates.toast.latest.title": "Você está atualizado", "settings.updates.toast.latest.title": "Você está atualizado",
"settings.updates.toast.latest.description": "Você está usando a versão mais recente do OpenCode.", "settings.updates.toast.latest.description": "Você está usando a versão mais recente do Kilo.",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
"font.option.firaCode": "Fira Code", "font.option.firaCode": "Fira Code",
+21 -23
View File
@@ -89,10 +89,8 @@ export const dict = {
"dialog.provider.search.placeholder": "Søg udbydere", "dialog.provider.search.placeholder": "Søg udbydere",
"dialog.provider.empty": "Ingen udbydere fundet", "dialog.provider.empty": "Ingen udbydere fundet",
"dialog.provider.group.popular": "Populære", "dialog.provider.group.popular": "Populære",
"dialog.provider.group.recommended": "Anbefalet", // kilocode_change
"dialog.provider.group.other": "Andre", "dialog.provider.group.other": "Andre",
"dialog.provider.tag.recommended": "Anbefalet", "dialog.provider.tag.recommended": "Anbefalet",
"dialog.provider.kilo.note": "Adgang til 500+ AI-modeller",
"dialog.provider.anthropic.note": "Forbind med Claude Pro/Max eller API-nøgle", "dialog.provider.anthropic.note": "Forbind med Claude Pro/Max eller API-nøgle",
"dialog.provider.openai.note": "Forbind med ChatGPT Pro/Plus eller API-nøgle", "dialog.provider.openai.note": "Forbind med ChatGPT Pro/Plus eller API-nøgle",
"dialog.provider.copilot.note": "Forbind med Copilot eller API-nøgle", "dialog.provider.copilot.note": "Forbind med Copilot eller API-nøgle",
@@ -103,7 +101,7 @@ export const dict = {
"dialog.model.manage": "Administrer modeller", "dialog.model.manage": "Administrer modeller",
"dialog.model.manage.description": "Tilpas hvilke modeller der vises i modelvælgeren.", "dialog.model.manage.description": "Tilpas hvilke modeller der vises i modelvælgeren.",
"dialog.model.unpaid.freeModels.title": "Gratis modeller leveret af Kilo CLI", "dialog.model.unpaid.freeModels.title": "Gratis modeller leveret af Kilo",
"dialog.model.unpaid.addMore.title": "Tilføj flere modeller fra populære udbydere", "dialog.model.unpaid.addMore.title": "Tilføj flere modeller fra populære udbydere",
"dialog.provider.viewAll": "Vis flere udbydere", "dialog.provider.viewAll": "Vis flere udbydere",
@@ -116,21 +114,21 @@ export const dict = {
"provider.connect.status.waiting": "Venter på godkendelse...", "provider.connect.status.waiting": "Venter på godkendelse...",
"provider.connect.status.failed": "Godkendelse mislykkedes: {{error}}", "provider.connect.status.failed": "Godkendelse mislykkedes: {{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"Indtast din {{provider}} API-nøgle for at forbinde din konto og bruge {{provider}} modeller i Kilo CLI.", "Indtast din {{provider}} API-nøgle for at forbinde din konto og bruge {{provider}} modeller i Kilo.",
"provider.connect.apiKey.label": "{{provider}} API-nøgle", "provider.connect.apiKey.label": "{{provider}} API-nøgle",
"provider.connect.apiKey.placeholder": "API-nøgle", "provider.connect.apiKey.placeholder": "API-nøgle",
"provider.connect.apiKey.required": "API-nøgle er påkrævet", "provider.connect.apiKey.required": "API-nøgle er påkrævet",
"provider.connect.kiloGateway.line1": "provider.connect.opencodeZen.line1":
"Kilo Gateway giver dig adgang til et udvalg af pålidelige optimerede modeller til kodningsagenter.", "Kilo Zen giver dig adgang til et udvalg af pålidelige optimerede modeller til kodningsagenter.",
"provider.connect.kiloGateway.line2": "provider.connect.opencodeZen.line2":
"Med en enkelt API-nøgle får du adgang til modeller som Claude, GPT, Gemini, GLM og flere.", "Med en enkelt API-nøgle får du adgang til modeller som Claude, GPT, Gemini, GLM og flere.",
"provider.connect.kiloGateway.visit.prefix": "Besøg ", "provider.connect.opencodeZen.visit.prefix": "Besøg ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": " for at hente din API-nøgle.", "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.prefix": "Besøg ",
"provider.connect.oauth.code.visit.link": "dette link", "provider.connect.oauth.code.visit.link": "dette link",
"provider.connect.oauth.code.visit.suffix": "provider.connect.oauth.code.visit.suffix":
" for at hente din godkendelseskode for at forbinde din konto og bruge {{provider}} modeller i Kilo CLI.", " for at hente din godkendelseskode for at forbinde din konto og bruge {{provider}} modeller i Kilo.",
"provider.connect.oauth.code.label": "{{method}} godkendelseskode", "provider.connect.oauth.code.label": "{{method}} godkendelseskode",
"provider.connect.oauth.code.placeholder": "Godkendelseskode", "provider.connect.oauth.code.placeholder": "Godkendelseskode",
"provider.connect.oauth.code.required": "Godkendelseskode er påkrævet", "provider.connect.oauth.code.required": "Godkendelseskode er påkrævet",
@@ -138,7 +136,7 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": "Besøg ", "provider.connect.oauth.auto.visit.prefix": "Besøg ",
"provider.connect.oauth.auto.visit.link": "dette link", "provider.connect.oauth.auto.visit.link": "dette link",
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
" og indtast koden nedenfor for at forbinde din konto og bruge {{provider}} modeller i Kilo CLI.", " og indtast koden nedenfor for at forbinde din konto og bruge {{provider}} modeller i Kilo.",
"provider.connect.oauth.auto.confirmationCode": "Bekræftelseskode", "provider.connect.oauth.auto.confirmationCode": "Bekræftelseskode",
"provider.connect.toast.connected.title": "{{provider}} forbundet", "provider.connect.toast.connected.title": "{{provider}} forbundet",
"provider.connect.toast.connected.description": "{{provider}} modeller er nu tilgængelige.", "provider.connect.toast.connected.description": "{{provider}} modeller er nu tilgængelige.",
@@ -249,7 +247,7 @@ export const dict = {
"dialog.directory.empty": "Ingen mapper fundet", "dialog.directory.empty": "Ingen mapper fundet",
"dialog.server.title": "Servere", "dialog.server.title": "Servere",
"dialog.server.description": "Skift hvilken Kilo CLI-server denne app forbinder til.", "dialog.server.description": "Skift hvilken Kilo-server denne app forbinder til.",
"dialog.server.search.placeholder": "Søg servere", "dialog.server.search.placeholder": "Søg servere",
"dialog.server.empty": "Ingen servere endnu", "dialog.server.empty": "Ingen servere endnu",
"dialog.server.add.title": "Tilføj en server", "dialog.server.add.title": "Tilføj en server",
@@ -369,7 +367,7 @@ export const dict = {
"toast.session.listFailed.title": "Kunne ikke indlæse sessioner for {{project}}", "toast.session.listFailed.title": "Kunne ikke indlæse sessioner for {{project}}",
"toast.update.title": "Opdatering tilgængelig", "toast.update.title": "Opdatering tilgængelig",
"toast.update.description": "En ny version af Kilo CLI ({{version}}) er nu tilgængelig til installation.", "toast.update.description": "En ny version af Kilo ({{version}}) er nu tilgængelig til installation.",
"toast.update.action.installRestart": "Installer og genstart", "toast.update.action.installRestart": "Installer og genstart",
"toast.update.action.notYet": "Ikke endnu", "toast.update.action.notYet": "Ikke endnu",
@@ -380,7 +378,7 @@ export const dict = {
"error.page.action.checking": "Tjekker...", "error.page.action.checking": "Tjekker...",
"error.page.action.checkUpdates": "Tjek for opdateringer", "error.page.action.checkUpdates": "Tjek for opdateringer",
"error.page.action.updateTo": "Opdater til {{version}}", "error.page.action.updateTo": "Opdater til {{version}}",
"error.page.report.prefix": "Rapporter venligst denne fejl til Kilo CLI-teamet", "error.page.report.prefix": "Rapporter venligst denne fejl til Kilo-teamet",
"error.page.report.discord": "på Discord", "error.page.report.discord": "på Discord",
"error.page.version": "Version: {{version}}", "error.page.version": "Version: {{version}}",
@@ -398,7 +396,7 @@ export const dict = {
"error.chain.didYouMean": "Mente du: {{suggestions}}", "error.chain.didYouMean": "Mente du: {{suggestions}}",
"error.chain.modelNotFound": "Model ikke fundet: {{provider}}/{{model}}", "error.chain.modelNotFound": "Model ikke fundet: {{provider}}/{{model}}",
"error.chain.checkConfig": "Tjek dine konfigurations (opencode.json) udbyder/modelnavne", "error.chain.checkConfig": "Tjek dine konfigurations (opencode.json) udbyder/modelnavne",
"error.chain.mcpFailed": 'MCP-server "{{name}}" fejlede. Bemærk, Kilo CLI understøtter ikke MCP-godkendelse endnu.', "error.chain.mcpFailed": 'MCP-server "{{name}}" fejlede. Bemærk, Kilo understøtter ikke MCP-godkendelse endnu.',
"error.chain.providerAuthFailed": "Udbydergodkendelse mislykkedes ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "Udbydergodkendelse mislykkedes ({{provider}}): {{message}}",
"error.chain.providerInitFailed": "error.chain.providerInitFailed":
'Kunne ikke initialisere udbyder "{{provider}}". Tjek legitimationsoplysninger og konfiguration.', 'Kunne ikke initialisere udbyder "{{provider}}". Tjek legitimationsoplysninger og konfiguration.',
@@ -506,12 +504,12 @@ export const dict = {
"sidebar.workspaces.enable": "Aktiver arbejdsområder", "sidebar.workspaces.enable": "Aktiver arbejdsområder",
"sidebar.workspaces.disable": "Deaktiver arbejdsområder", "sidebar.workspaces.disable": "Deaktiver arbejdsområder",
"sidebar.gettingStarted.title": "Kom i gang", "sidebar.gettingStarted.title": "Kom i gang",
"sidebar.gettingStarted.line1": "Kilo CLI inkluderer gratis modeller så du kan starte med det samme.", "sidebar.gettingStarted.line1": "Kilo 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.gettingStarted.line2": "Forbind enhver udbyder for at bruge modeller, inkl. Claude, GPT, Gemini osv.",
"sidebar.project.recentSessions": "Seneste sessioner", "sidebar.project.recentSessions": "Seneste sessioner",
"sidebar.project.viewAllSessions": "Vis alle sessioner", "sidebar.project.viewAllSessions": "Vis alle sessioner",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "Desktop", "settings.section.desktop": "Desktop",
"settings.section.server": "Server", "settings.section.server": "Server",
"settings.tab.general": "Generelt", "settings.tab.general": "Generelt",
@@ -523,11 +521,11 @@ export const dict = {
"settings.general.section.sounds": "Lydeffekter", "settings.general.section.sounds": "Lydeffekter",
"settings.general.row.language.title": "Sprog", "settings.general.row.language.title": "Sprog",
"settings.general.row.language.description": "Ændr visningssproget for Kilo CLI", "settings.general.row.language.description": "Ændr visningssproget for Kilo",
"settings.general.row.appearance.title": "Udseende", "settings.general.row.appearance.title": "Udseende",
"settings.general.row.appearance.description": "Tilpas hvordan Kilo CLI ser ud på din enhed", "settings.general.row.appearance.description": "Tilpas hvordan Kilo ser ud på din enhed",
"settings.general.row.theme.title": "Tema", "settings.general.row.theme.title": "Tema",
"settings.general.row.theme.description": "Tilpas hvordan Kilo CLI er temabestemt.", "settings.general.row.theme.description": "Tilpas hvordan Kilo er temabestemt.",
"settings.general.row.font.title": "Skrifttype", "settings.general.row.font.title": "Skrifttype",
"settings.general.row.font.description": "Tilpas mono-skrifttypen brugt i kodeblokke", "settings.general.row.font.description": "Tilpas mono-skrifttypen brugt i kodeblokke",
@@ -535,13 +533,13 @@ export const dict = {
"settings.general.row.releaseNotes.description": 'Vis "Hvad er nyt"-popups efter opdateringer', "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.title": "Tjek for opdateringer ved opstart",
"settings.updates.row.startup.description": "Tjek automatisk for opdateringer, når OpenCode starter", "settings.updates.row.startup.description": "Tjek automatisk for opdateringer, når Kilo starter",
"settings.updates.row.check.title": "Tjek for opdateringer", "settings.updates.row.check.title": "Tjek for opdateringer",
"settings.updates.row.check.description": "Tjek manuelt for opdateringer og installer, hvis tilgængelig", "settings.updates.row.check.description": "Tjek manuelt for opdateringer og installer, hvis tilgængelig",
"settings.updates.action.checkNow": "Tjek nu", "settings.updates.action.checkNow": "Tjek nu",
"settings.updates.action.checking": "Tjekker...", "settings.updates.action.checking": "Tjekker...",
"settings.updates.toast.latest.title": "Du er opdateret", "settings.updates.toast.latest.title": "Du er opdateret",
"settings.updates.toast.latest.description": "Du kører den nyeste version af OpenCode.", "settings.updates.toast.latest.description": "Du kører den nyeste version af Kilo.",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
+21 -23
View File
@@ -93,10 +93,8 @@ export const dict = {
"dialog.provider.search.placeholder": "Anbieter durchsuchen", "dialog.provider.search.placeholder": "Anbieter durchsuchen",
"dialog.provider.empty": "Keine Anbieter gefunden", "dialog.provider.empty": "Keine Anbieter gefunden",
"dialog.provider.group.popular": "Beliebt", "dialog.provider.group.popular": "Beliebt",
"dialog.provider.group.recommended": "Empfohlen", // kilocode_change
"dialog.provider.group.other": "Andere", "dialog.provider.group.other": "Andere",
"dialog.provider.tag.recommended": "Empfohlen", "dialog.provider.tag.recommended": "Empfohlen",
"dialog.provider.kilo.note": "Zugriff auf über 500 KI-Modelle",
"dialog.provider.anthropic.note": "Mit Claude Pro/Max oder API-Schlüssel verbinden", "dialog.provider.anthropic.note": "Mit Claude Pro/Max oder API-Schlüssel verbinden",
"dialog.provider.openai.note": "Mit ChatGPT Pro/Plus oder API-Schlüssel verbinden", "dialog.provider.openai.note": "Mit ChatGPT Pro/Plus oder API-Schlüssel verbinden",
"dialog.provider.copilot.note": "Mit Copilot oder API-Schlüssel verbinden", "dialog.provider.copilot.note": "Mit Copilot oder API-Schlüssel verbinden",
@@ -107,7 +105,7 @@ export const dict = {
"dialog.model.manage": "Modelle verwalten", "dialog.model.manage": "Modelle verwalten",
"dialog.model.manage.description": "Anpassen, welche Modelle in der Modellauswahl erscheinen.", "dialog.model.manage.description": "Anpassen, welche Modelle in der Modellauswahl erscheinen.",
"dialog.model.unpaid.freeModels.title": "Kostenlose Modelle von Kilo CLI", "dialog.model.unpaid.freeModels.title": "Kostenlose Modelle von Kilo",
"dialog.model.unpaid.addMore.title": "Weitere Modelle von beliebten Anbietern hinzufügen", "dialog.model.unpaid.addMore.title": "Weitere Modelle von beliebten Anbietern hinzufügen",
"dialog.provider.viewAll": "Mehr Anbieter anzeigen", "dialog.provider.viewAll": "Mehr Anbieter anzeigen",
@@ -120,21 +118,21 @@ export const dict = {
"provider.connect.status.waiting": "Warten auf Autorisierung...", "provider.connect.status.waiting": "Warten auf Autorisierung...",
"provider.connect.status.failed": "Autorisierung fehlgeschlagen: {{error}}", "provider.connect.status.failed": "Autorisierung fehlgeschlagen: {{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"Geben Sie Ihren {{provider}} API-Schlüssel ein, um Ihr Konto zu verbinden und {{provider}} Modelle in Kilo CLI zu nutzen.", "Geben Sie Ihren {{provider}} API-Schlüssel ein, um Ihr Konto zu verbinden und {{provider}} Modelle in Kilo zu nutzen.",
"provider.connect.apiKey.label": "{{provider}} API-Schlüssel", "provider.connect.apiKey.label": "{{provider}} API-Schlüssel",
"provider.connect.apiKey.placeholder": "API-Schlüssel", "provider.connect.apiKey.placeholder": "API-Schlüssel",
"provider.connect.apiKey.required": "API-Schlüssel ist erforderlich", "provider.connect.apiKey.required": "API-Schlüssel ist erforderlich",
"provider.connect.kiloGateway.line1": "provider.connect.opencodeZen.line1":
"Kilo Gateway bietet Ihnen Zugriff auf eine kuratierte Auswahl zuverlässiger, optimierter Modelle für Coding-Agenten.", "Kilo Zen bietet Ihnen Zugriff auf eine kuratierte Auswahl zuverlässiger, optimierter Modelle für Coding-Agenten.",
"provider.connect.kiloGateway.line2": "provider.connect.opencodeZen.line2":
"Mit einem einzigen API-Schlüssel erhalten Sie Zugriff auf Modelle wie Claude, GPT, Gemini, GLM und mehr.", "Mit einem einzigen API-Schlüssel erhalten Sie Zugriff auf Modelle wie Claude, GPT, Gemini, GLM und mehr.",
"provider.connect.kiloGateway.visit.prefix": "Besuchen Sie ", "provider.connect.opencodeZen.visit.prefix": "Besuchen Sie ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": ", um Ihren API-Schlüssel zu erhalten.", "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.prefix": "Besuchen Sie ",
"provider.connect.oauth.code.visit.link": "diesen Link", "provider.connect.oauth.code.visit.link": "diesen Link",
"provider.connect.oauth.code.visit.suffix": "provider.connect.oauth.code.visit.suffix":
", um Ihren Autorisierungscode zu erhalten, Ihr Konto zu verbinden und {{provider}} Modelle in Kilo CLI zu nutzen.", ", um Ihren Autorisierungscode zu erhalten, Ihr Konto zu verbinden und {{provider}} Modelle in Kilo zu nutzen.",
"provider.connect.oauth.code.label": "{{method}} Autorisierungscode", "provider.connect.oauth.code.label": "{{method}} Autorisierungscode",
"provider.connect.oauth.code.placeholder": "Autorisierungscode", "provider.connect.oauth.code.placeholder": "Autorisierungscode",
"provider.connect.oauth.code.required": "Autorisierungscode ist erforderlich", "provider.connect.oauth.code.required": "Autorisierungscode ist erforderlich",
@@ -142,7 +140,7 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": "Besuchen Sie ", "provider.connect.oauth.auto.visit.prefix": "Besuchen Sie ",
"provider.connect.oauth.auto.visit.link": "diesen Link", "provider.connect.oauth.auto.visit.link": "diesen Link",
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
" und geben Sie den untenstehenden Code ein, um Ihr Konto zu verbinden und {{provider}} Modelle in Kilo CLI zu nutzen.", " und geben Sie den untenstehenden Code ein, um Ihr Konto zu verbinden und {{provider}} Modelle in Kilo zu nutzen.",
"provider.connect.oauth.auto.confirmationCode": "Bestätigungscode", "provider.connect.oauth.auto.confirmationCode": "Bestätigungscode",
"provider.connect.toast.connected.title": "{{provider}} verbunden", "provider.connect.toast.connected.title": "{{provider}} verbunden",
"provider.connect.toast.connected.description": "{{provider}} Modelle sind jetzt verfügbar.", "provider.connect.toast.connected.description": "{{provider}} Modelle sind jetzt verfügbar.",
@@ -254,7 +252,7 @@ export const dict = {
"dialog.directory.empty": "Keine Ordner gefunden", "dialog.directory.empty": "Keine Ordner gefunden",
"dialog.server.title": "Server", "dialog.server.title": "Server",
"dialog.server.description": "Wechseln Sie den Kilo CLI-Server, mit dem sich diese App verbindet.", "dialog.server.description": "Wechseln Sie den Kilo-Server, mit dem sich diese App verbindet.",
"dialog.server.search.placeholder": "Server durchsuchen", "dialog.server.search.placeholder": "Server durchsuchen",
"dialog.server.empty": "Noch keine Server", "dialog.server.empty": "Noch keine Server",
"dialog.server.add.title": "Server hinzufügen", "dialog.server.add.title": "Server hinzufügen",
@@ -375,7 +373,7 @@ export const dict = {
"toast.session.listFailed.title": "Sitzungen für {{project}} konnten nicht geladen werden", "toast.session.listFailed.title": "Sitzungen für {{project}} konnten nicht geladen werden",
"toast.update.title": "Update verfügbar", "toast.update.title": "Update verfügbar",
"toast.update.description": "Eine neue Version von Kilo CLI ({{version}}) ist zur Installation verfügbar.", "toast.update.description": "Eine neue Version von Kilo ({{version}}) ist zur Installation verfügbar.",
"toast.update.action.installRestart": "Installieren und neu starten", "toast.update.action.installRestart": "Installieren und neu starten",
"toast.update.action.notYet": "Noch nicht", "toast.update.action.notYet": "Noch nicht",
@@ -386,7 +384,7 @@ export const dict = {
"error.page.action.checking": "Prüfen...", "error.page.action.checking": "Prüfen...",
"error.page.action.checkUpdates": "Nach Updates suchen", "error.page.action.checkUpdates": "Nach Updates suchen",
"error.page.action.updateTo": "Auf {{version}} aktualisieren", "error.page.action.updateTo": "Auf {{version}} aktualisieren",
"error.page.report.prefix": "Bitte melden Sie diesen Fehler dem Kilo CLI-Team", "error.page.report.prefix": "Bitte melden Sie diesen Fehler dem Kilo-Team",
"error.page.report.discord": "auf Discord", "error.page.report.discord": "auf Discord",
"error.page.version": "Version: {{version}}", "error.page.version": "Version: {{version}}",
@@ -405,7 +403,7 @@ export const dict = {
"error.chain.modelNotFound": "Modell nicht gefunden: {{provider}}/{{model}}", "error.chain.modelNotFound": "Modell nicht gefunden: {{provider}}/{{model}}",
"error.chain.checkConfig": "Überprüfen Sie Ihre Konfiguration (opencode.json) auf Anbieter-/Modellnamen", "error.chain.checkConfig": "Überprüfen Sie Ihre Konfiguration (opencode.json) auf Anbieter-/Modellnamen",
"error.chain.mcpFailed": "error.chain.mcpFailed":
'MCP-Server "{{name}}" fehlgeschlagen. Hinweis: Kilo CLI unterstützt noch keine MCP-Authentifizierung.', 'MCP-Server "{{name}}" fehlgeschlagen. Hinweis: Kilo unterstützt noch keine MCP-Authentifizierung.',
"error.chain.providerAuthFailed": "Anbieter-Authentifizierung fehlgeschlagen ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "Anbieter-Authentifizierung fehlgeschlagen ({{provider}}): {{message}}",
"error.chain.providerInitFailed": "error.chain.providerInitFailed":
'Anbieter "{{provider}}" konnte nicht initialisiert werden. Überprüfen Sie Anmeldeinformationen und Konfiguration.', 'Anbieter "{{provider}}" konnte nicht initialisiert werden. Überprüfen Sie Anmeldeinformationen und Konfiguration.',
@@ -515,13 +513,13 @@ export const dict = {
"sidebar.workspaces.enable": "Arbeitsbereiche aktivieren", "sidebar.workspaces.enable": "Arbeitsbereiche aktivieren",
"sidebar.workspaces.disable": "Arbeitsbereiche deaktivieren", "sidebar.workspaces.disable": "Arbeitsbereiche deaktivieren",
"sidebar.gettingStarted.title": "Erste Schritte", "sidebar.gettingStarted.title": "Erste Schritte",
"sidebar.gettingStarted.line1": "Kilo CLI enthält kostenlose Modelle, damit Sie sofort loslegen können.", "sidebar.gettingStarted.line1": "Kilo enthält kostenlose Modelle, damit Sie sofort loslegen können.",
"sidebar.gettingStarted.line2": "sidebar.gettingStarted.line2":
"Verbinden Sie einen beliebigen Anbieter, um Modelle wie Claude, GPT, Gemini usw. zu nutzen.", "Verbinden Sie einen beliebigen Anbieter, um Modelle wie Claude, GPT, Gemini usw. zu nutzen.",
"sidebar.project.recentSessions": "Letzte Sitzungen", "sidebar.project.recentSessions": "Letzte Sitzungen",
"sidebar.project.viewAllSessions": "Alle Sitzungen anzeigen", "sidebar.project.viewAllSessions": "Alle Sitzungen anzeigen",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "Desktop", "settings.section.desktop": "Desktop",
"settings.section.server": "Server", "settings.section.server": "Server",
"settings.tab.general": "Allgemein", "settings.tab.general": "Allgemein",
@@ -533,11 +531,11 @@ export const dict = {
"settings.general.section.sounds": "Soundeffekte", "settings.general.section.sounds": "Soundeffekte",
"settings.general.row.language.title": "Sprache", "settings.general.row.language.title": "Sprache",
"settings.general.row.language.description": "Die Anzeigesprache für Kilo CLI ändern", "settings.general.row.language.description": "Die Anzeigesprache für Kilo ändern",
"settings.general.row.appearance.title": "Erscheinungsbild", "settings.general.row.appearance.title": "Erscheinungsbild",
"settings.general.row.appearance.description": "Anpassen, wie Kilo CLI auf Ihrem Gerät aussieht", "settings.general.row.appearance.description": "Anpassen, wie Kilo auf Ihrem Gerät aussieht",
"settings.general.row.theme.title": "Thema", "settings.general.row.theme.title": "Thema",
"settings.general.row.theme.description": "Das Thema von Kilo CLI anpassen.", "settings.general.row.theme.description": "Das Thema von Kilo anpassen.",
"settings.general.row.font.title": "Schriftart", "settings.general.row.font.title": "Schriftart",
"settings.general.row.font.description": "Die in Codeblöcken verwendete Monospace-Schriftart anpassen", "settings.general.row.font.description": "Die in Codeblöcken verwendete Monospace-Schriftart anpassen",
@@ -545,13 +543,13 @@ export const dict = {
"settings.general.row.releaseNotes.description": '"Neuigkeiten"-Pop-ups nach Updates anzeigen', "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.title": "Beim Start nach Updates suchen",
"settings.updates.row.startup.description": "Beim Start von OpenCode automatisch nach Updates suchen", "settings.updates.row.startup.description": "Beim Start von Kilo automatisch nach Updates suchen",
"settings.updates.row.check.title": "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.row.check.description": "Manuell nach Updates suchen und installieren, wenn verfügbar",
"settings.updates.action.checkNow": "Jetzt prüfen", "settings.updates.action.checkNow": "Jetzt prüfen",
"settings.updates.action.checking": "Wird geprüft...", "settings.updates.action.checking": "Wird geprüft...",
"settings.updates.toast.latest.title": "Du bist auf dem neuesten Stand", "settings.updates.toast.latest.title": "Du bist auf dem neuesten Stand",
"settings.updates.toast.latest.description": "Du verwendest die aktuelle Version von OpenCode.", "settings.updates.toast.latest.description": "Du verwendest die aktuelle Version von Kilo.",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
+22 -24
View File
@@ -89,11 +89,9 @@ export const dict = {
"dialog.provider.search.placeholder": "Search providers", "dialog.provider.search.placeholder": "Search providers",
"dialog.provider.empty": "No providers found", "dialog.provider.empty": "No providers found",
"dialog.provider.group.popular": "Popular", "dialog.provider.group.popular": "Popular",
"dialog.provider.group.recommended": "Recommended", // kilocode_change
"dialog.provider.group.other": "Other", "dialog.provider.group.other": "Other",
"dialog.provider.tag.recommended": "Recommended", "dialog.provider.tag.recommended": "Recommended",
"dialog.provider.kilo.note": "Access 500+ AI models", "dialog.provider.opencode.note": "Curated models including Claude, GPT, Gemini and more",
"dialog.provider.opencode.note": "Connect with OpenCode Zen or API key", // kilocode_change
"dialog.provider.anthropic.note": "Direct access to Claude models, including Pro and Max", "dialog.provider.anthropic.note": "Direct access to Claude models, including Pro and Max",
"dialog.provider.copilot.note": "Claude models for coding assistance", "dialog.provider.copilot.note": "Claude models for coding assistance",
"dialog.provider.openai.note": "GPT models for fast, capable general AI tasks", "dialog.provider.openai.note": "GPT models for fast, capable general AI tasks",
@@ -107,7 +105,7 @@ export const dict = {
"dialog.model.manage": "Manage models", "dialog.model.manage": "Manage models",
"dialog.model.manage.description": "Customize which models appear in the model selector.", "dialog.model.manage.description": "Customize which models appear in the model selector.",
"dialog.model.unpaid.freeModels.title": "Free models provided by Kilo CLI", "dialog.model.unpaid.freeModels.title": "Free models provided by Kilo",
"dialog.model.unpaid.addMore.title": "Add more models from popular providers", "dialog.model.unpaid.addMore.title": "Add more models from popular providers",
"dialog.provider.viewAll": "Show more providers", "dialog.provider.viewAll": "Show more providers",
@@ -120,21 +118,21 @@ export const dict = {
"provider.connect.status.waiting": "Waiting for authorization...", "provider.connect.status.waiting": "Waiting for authorization...",
"provider.connect.status.failed": "Authorization failed: {{error}}", "provider.connect.status.failed": "Authorization failed: {{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"Enter your {{provider}} API key to connect your account and use {{provider}} models in Kilo CLI.", "Enter your {{provider}} API key to connect your account and use {{provider}} models in Kilo.",
"provider.connect.apiKey.label": "{{provider}} API key", "provider.connect.apiKey.label": "{{provider}} API key",
"provider.connect.apiKey.placeholder": "API key", "provider.connect.apiKey.placeholder": "API key",
"provider.connect.apiKey.required": "API key is required", "provider.connect.apiKey.required": "API key is required",
"provider.connect.kiloGateway.line1": "provider.connect.opencodeZen.line1":
"Kilo Gateway gives you access to a curated set of reliable optimized models for coding agents.", "Kilo Zen gives you access to a curated set of reliable optimized models for coding agents.",
"provider.connect.kiloGateway.line2": "provider.connect.opencodeZen.line2":
"With a single API key you'll get access to models such as Claude, GPT, Gemini, GLM and more.", "With a single API key you'll get access to models such as Claude, GPT, Gemini, GLM and more.",
"provider.connect.kiloGateway.visit.prefix": "Visit ", "provider.connect.opencodeZen.visit.prefix": "Visit ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": " to collect your API key.", "provider.connect.opencodeZen.visit.suffix": " to collect your API key.",
"provider.connect.oauth.code.visit.prefix": "Visit ", "provider.connect.oauth.code.visit.prefix": "Visit ",
"provider.connect.oauth.code.visit.link": "this link", "provider.connect.oauth.code.visit.link": "this link",
"provider.connect.oauth.code.visit.suffix": "provider.connect.oauth.code.visit.suffix":
" to collect your authorization code to connect your account and use {{provider}} models in Kilo CLI.", " to collect your authorization code to connect your account and use {{provider}} models in Kilo.",
"provider.connect.oauth.code.label": "{{method}} authorization code", "provider.connect.oauth.code.label": "{{method}} authorization code",
"provider.connect.oauth.code.placeholder": "Authorization code", "provider.connect.oauth.code.placeholder": "Authorization code",
"provider.connect.oauth.code.required": "Authorization code is required", "provider.connect.oauth.code.required": "Authorization code is required",
@@ -142,7 +140,7 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": "Visit ", "provider.connect.oauth.auto.visit.prefix": "Visit ",
"provider.connect.oauth.auto.visit.link": "this link", "provider.connect.oauth.auto.visit.link": "this link",
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
" and enter the code below to connect your account and use {{provider}} models in Kilo CLI.", " and enter the code below to connect your account and use {{provider}} models in Kilo.",
"provider.connect.oauth.auto.confirmationCode": "Confirmation code", "provider.connect.oauth.auto.confirmationCode": "Confirmation code",
"provider.connect.toast.connected.title": "{{provider}} connected", "provider.connect.toast.connected.title": "{{provider}} connected",
"provider.connect.toast.connected.description": "{{provider}} models are now available to use.", "provider.connect.toast.connected.description": "{{provider}} models are now available to use.",
@@ -255,7 +253,7 @@ export const dict = {
"dialog.directory.empty": "No folders found", "dialog.directory.empty": "No folders found",
"dialog.server.title": "Servers", "dialog.server.title": "Servers",
"dialog.server.description": "Switch which Kilo CLI server this app connects to.", "dialog.server.description": "Switch which Kilo server this app connects to.",
"dialog.server.search.placeholder": "Search servers", "dialog.server.search.placeholder": "Search servers",
"dialog.server.empty": "No servers yet", "dialog.server.empty": "No servers yet",
"dialog.server.add.title": "Add a server", "dialog.server.add.title": "Add a server",
@@ -375,7 +373,7 @@ export const dict = {
"toast.session.listFailed.title": "Failed to load sessions for {{project}}", "toast.session.listFailed.title": "Failed to load sessions for {{project}}",
"toast.update.title": "Update available", "toast.update.title": "Update available",
"toast.update.description": "A new version of Kilo CLI ({{version}}) is now available to install.", "toast.update.description": "A new version of Kilo ({{version}}) is now available to install.",
"toast.update.action.installRestart": "Install and restart", "toast.update.action.installRestart": "Install and restart",
"toast.update.action.notYet": "Not yet", "toast.update.action.notYet": "Not yet",
@@ -386,7 +384,7 @@ export const dict = {
"error.page.action.checking": "Checking...", "error.page.action.checking": "Checking...",
"error.page.action.checkUpdates": "Check for updates", "error.page.action.checkUpdates": "Check for updates",
"error.page.action.updateTo": "Update to {{version}}", "error.page.action.updateTo": "Update to {{version}}",
"error.page.report.prefix": "Please report this error to the Kilo CLI team", "error.page.report.prefix": "Please report this error to the Kilo team",
"error.page.report.discord": "on Discord", "error.page.report.discord": "on Discord",
"error.page.version": "Version: {{version}}", "error.page.version": "Version: {{version}}",
@@ -404,7 +402,7 @@ export const dict = {
"error.chain.didYouMean": "Did you mean: {{suggestions}}", "error.chain.didYouMean": "Did you mean: {{suggestions}}",
"error.chain.modelNotFound": "Model not found: {{provider}}/{{model}}", "error.chain.modelNotFound": "Model not found: {{provider}}/{{model}}",
"error.chain.checkConfig": "Check your config (opencode.json) provider/model names", "error.chain.checkConfig": "Check your config (opencode.json) provider/model names",
"error.chain.mcpFailed": 'MCP server "{{name}}" failed. Note, Kilo CLI does not support MCP authentication yet.', "error.chain.mcpFailed": 'MCP server "{{name}}" failed. Note, Kilo does not support MCP authentication yet.',
"error.chain.providerAuthFailed": "Provider authentication failed ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "Provider authentication failed ({{provider}}): {{message}}",
"error.chain.providerInitFailed": "error.chain.providerInitFailed":
'Failed to initialize provider "{{provider}}". Check credentials and configuration.', 'Failed to initialize provider "{{provider}}". Check credentials and configuration.',
@@ -515,12 +513,12 @@ export const dict = {
"sidebar.workspaces.enable": "Enable workspaces", "sidebar.workspaces.enable": "Enable workspaces",
"sidebar.workspaces.disable": "Disable workspaces", "sidebar.workspaces.disable": "Disable workspaces",
"sidebar.gettingStarted.title": "Getting started", "sidebar.gettingStarted.title": "Getting started",
"sidebar.gettingStarted.line1": "Kilo CLI includes free models so you can start immediately.", "sidebar.gettingStarted.line1": "Kilo includes free models so you can start immediately.",
"sidebar.gettingStarted.line2": "Connect any provider to use models, inc. Claude, GPT, Gemini etc.", "sidebar.gettingStarted.line2": "Connect any provider to use models, inc. Claude, GPT, Gemini etc.",
"sidebar.project.recentSessions": "Recent sessions", "sidebar.project.recentSessions": "Recent sessions",
"sidebar.project.viewAllSessions": "View all sessions", "sidebar.project.viewAllSessions": "View all sessions",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "Desktop", "settings.section.desktop": "Desktop",
"settings.section.server": "Server", "settings.section.server": "Server",
@@ -533,11 +531,11 @@ export const dict = {
"settings.general.section.sounds": "Sound effects", "settings.general.section.sounds": "Sound effects",
"settings.general.row.language.title": "Language", "settings.general.row.language.title": "Language",
"settings.general.row.language.description": "Change the display language for Kilo CLI", "settings.general.row.language.description": "Change the display language for Kilo",
"settings.general.row.appearance.title": "Appearance", "settings.general.row.appearance.title": "Appearance",
"settings.general.row.appearance.description": "Customise how Kilo CLI looks on your device", "settings.general.row.appearance.description": "Customise how Kilo looks on your device",
"settings.general.row.theme.title": "Theme", "settings.general.row.theme.title": "Theme",
"settings.general.row.theme.description": "Customise how Kilo CLI is themed.", "settings.general.row.theme.description": "Customise how Kilo is themed.",
"settings.general.row.font.title": "Font", "settings.general.row.font.title": "Font",
"settings.general.row.font.description": "Customise the mono font used in code blocks", "settings.general.row.font.description": "Customise the mono font used in code blocks",
@@ -545,13 +543,13 @@ export const dict = {
"settings.general.row.releaseNotes.description": "Show What's New popups after updates", "settings.general.row.releaseNotes.description": "Show What's New popups after updates",
"settings.updates.row.startup.title": "Check for updates on startup", "settings.updates.row.startup.title": "Check for updates on startup",
"settings.updates.row.startup.description": "Automatically check for updates when OpenCode launches", "settings.updates.row.startup.description": "Automatically check for updates when Kilo launches",
"settings.updates.row.check.title": "Check for updates", "settings.updates.row.check.title": "Check for updates",
"settings.updates.row.check.description": "Manually check for updates and install if available", "settings.updates.row.check.description": "Manually check for updates and install if available",
"settings.updates.action.checkNow": "Check now", "settings.updates.action.checkNow": "Check now",
"settings.updates.action.checking": "Checking...", "settings.updates.action.checking": "Checking...",
"settings.updates.toast.latest.title": "You're up to date", "settings.updates.toast.latest.title": "You're up to date",
"settings.updates.toast.latest.description": "You're running the latest version of OpenCode.", "settings.updates.toast.latest.description": "You're running the latest version of Kilo.",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
"font.option.firaCode": "Fira Code", "font.option.firaCode": "Fira Code",
+21 -23
View File
@@ -89,10 +89,8 @@ export const dict = {
"dialog.provider.search.placeholder": "Buscar proveedores", "dialog.provider.search.placeholder": "Buscar proveedores",
"dialog.provider.empty": "No se encontraron proveedores", "dialog.provider.empty": "No se encontraron proveedores",
"dialog.provider.group.popular": "Popular", "dialog.provider.group.popular": "Popular",
"dialog.provider.group.recommended": "Recomendado", // kilocode_change
"dialog.provider.group.other": "Otro", "dialog.provider.group.other": "Otro",
"dialog.provider.tag.recommended": "Recomendado", "dialog.provider.tag.recommended": "Recomendado",
"dialog.provider.kilo.note": "Accede a más de 500 modelos de IA",
"dialog.provider.anthropic.note": "Conectar con Claude Pro/Max o clave API", "dialog.provider.anthropic.note": "Conectar con Claude Pro/Max o clave API",
"dialog.provider.openai.note": "Conectar con ChatGPT Pro/Plus o clave API", "dialog.provider.openai.note": "Conectar con ChatGPT Pro/Plus o clave API",
"dialog.provider.copilot.note": "Conectar con Copilot o clave API", "dialog.provider.copilot.note": "Conectar con Copilot o clave API",
@@ -103,7 +101,7 @@ export const dict = {
"dialog.model.manage": "Gestionar modelos", "dialog.model.manage": "Gestionar modelos",
"dialog.model.manage.description": "Personalizar qué modelos aparecen en el selector de modelos.", "dialog.model.manage.description": "Personalizar qué modelos aparecen en el selector de modelos.",
"dialog.model.unpaid.freeModels.title": "Modelos gratuitos proporcionados por Kilo CLI", "dialog.model.unpaid.freeModels.title": "Modelos gratuitos proporcionados por Kilo",
"dialog.model.unpaid.addMore.title": "Añadir más modelos de proveedores populares", "dialog.model.unpaid.addMore.title": "Añadir más modelos de proveedores populares",
"dialog.provider.viewAll": "Ver más proveedores", "dialog.provider.viewAll": "Ver más proveedores",
@@ -116,21 +114,21 @@ export const dict = {
"provider.connect.status.waiting": "Esperando autorización...", "provider.connect.status.waiting": "Esperando autorización...",
"provider.connect.status.failed": "Autorización fallida: {{error}}", "provider.connect.status.failed": "Autorización fallida: {{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"Introduce tu clave API de {{provider}} para conectar tu cuenta y usar modelos de {{provider}} en Kilo CLI.", "Introduce tu clave API de {{provider}} para conectar tu cuenta y usar modelos de {{provider}} en Kilo.",
"provider.connect.apiKey.label": "Clave API de {{provider}}", "provider.connect.apiKey.label": "Clave API de {{provider}}",
"provider.connect.apiKey.placeholder": "Clave API", "provider.connect.apiKey.placeholder": "Clave API",
"provider.connect.apiKey.required": "La clave API es obligatoria", "provider.connect.apiKey.required": "La clave API es obligatoria",
"provider.connect.kiloGateway.line1": "provider.connect.opencodeZen.line1":
"Kilo Gateway te da acceso a un conjunto curado de modelos fiables optimizados para agentes de programación.", "Kilo Zen te da acceso a un conjunto curado de modelos fiables optimizados para agentes de programación.",
"provider.connect.kiloGateway.line2": "provider.connect.opencodeZen.line2":
"Con una sola clave API obtendrás acceso a modelos como Claude, GPT, Gemini, GLM y más.", "Con una sola clave API obtendrás acceso a modelos como Claude, GPT, Gemini, GLM y más.",
"provider.connect.kiloGateway.visit.prefix": "Visita ", "provider.connect.opencodeZen.visit.prefix": "Visita ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": " para obtener tu clave API.", "provider.connect.opencodeZen.visit.suffix": " para obtener tu clave API.",
"provider.connect.oauth.code.visit.prefix": "Visita ", "provider.connect.oauth.code.visit.prefix": "Visita ",
"provider.connect.oauth.code.visit.link": "este enlace", "provider.connect.oauth.code.visit.link": "este enlace",
"provider.connect.oauth.code.visit.suffix": "provider.connect.oauth.code.visit.suffix":
" para obtener tu código de autorización para conectar tu cuenta y usar modelos de {{provider}} en Kilo CLI.", " para obtener tu código de autorización para conectar tu cuenta y usar modelos de {{provider}} en Kilo.",
"provider.connect.oauth.code.label": "Código de autorización {{method}}", "provider.connect.oauth.code.label": "Código de autorización {{method}}",
"provider.connect.oauth.code.placeholder": "Código de autorización", "provider.connect.oauth.code.placeholder": "Código de autorización",
"provider.connect.oauth.code.required": "El código de autorización es obligatorio", "provider.connect.oauth.code.required": "El código de autorización es obligatorio",
@@ -138,7 +136,7 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": "Visita ", "provider.connect.oauth.auto.visit.prefix": "Visita ",
"provider.connect.oauth.auto.visit.link": "este enlace", "provider.connect.oauth.auto.visit.link": "este enlace",
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
" e introduce el código a continuación para conectar tu cuenta y usar modelos de {{provider}} en Kilo CLI.", " e introduce el código a continuación para conectar tu cuenta y usar modelos de {{provider}} en Kilo.",
"provider.connect.oauth.auto.confirmationCode": "Código de confirmación", "provider.connect.oauth.auto.confirmationCode": "Código de confirmación",
"provider.connect.toast.connected.title": "{{provider}} conectado", "provider.connect.toast.connected.title": "{{provider}} conectado",
"provider.connect.toast.connected.description": "Los modelos de {{provider}} ahora están disponibles para usar.", "provider.connect.toast.connected.description": "Los modelos de {{provider}} ahora están disponibles para usar.",
@@ -249,7 +247,7 @@ export const dict = {
"dialog.directory.empty": "No se encontraron carpetas", "dialog.directory.empty": "No se encontraron carpetas",
"dialog.server.title": "Servidores", "dialog.server.title": "Servidores",
"dialog.server.description": "Cambiar a qué servidor de Kilo CLI se conecta esta app.", "dialog.server.description": "Cambiar a qué servidor de Kilo se conecta esta app.",
"dialog.server.search.placeholder": "Buscar servidores", "dialog.server.search.placeholder": "Buscar servidores",
"dialog.server.empty": "No hay servidores aún", "dialog.server.empty": "No hay servidores aún",
"dialog.server.add.title": "Añadir un servidor", "dialog.server.add.title": "Añadir un servidor",
@@ -370,7 +368,7 @@ export const dict = {
"toast.session.listFailed.title": "Fallo al cargar sesiones para {{project}}", "toast.session.listFailed.title": "Fallo al cargar sesiones para {{project}}",
"toast.update.title": "Actualización disponible", "toast.update.title": "Actualización disponible",
"toast.update.description": "Una nueva versión de Kilo CLI ({{version}}) está disponible para instalar.", "toast.update.description": "Una nueva versión de Kilo ({{version}}) está disponible para instalar.",
"toast.update.action.installRestart": "Instalar y reiniciar", "toast.update.action.installRestart": "Instalar y reiniciar",
"toast.update.action.notYet": "Todavía no", "toast.update.action.notYet": "Todavía no",
@@ -381,7 +379,7 @@ export const dict = {
"error.page.action.checking": "Comprobando...", "error.page.action.checking": "Comprobando...",
"error.page.action.checkUpdates": "Buscar actualizaciones", "error.page.action.checkUpdates": "Buscar actualizaciones",
"error.page.action.updateTo": "Actualizar a {{version}}", "error.page.action.updateTo": "Actualizar a {{version}}",
"error.page.report.prefix": "Por favor reporta este error al equipo de Kilo CLI", "error.page.report.prefix": "Por favor reporta este error al equipo de Kilo",
"error.page.report.discord": "en Discord", "error.page.report.discord": "en Discord",
"error.page.version": "Versión: {{version}}", "error.page.version": "Versión: {{version}}",
@@ -399,7 +397,7 @@ export const dict = {
"error.chain.didYouMean": "¿Quisiste decir: {{suggestions}}", "error.chain.didYouMean": "¿Quisiste decir: {{suggestions}}",
"error.chain.modelNotFound": "Modelo no encontrado: {{provider}}/{{model}}", "error.chain.modelNotFound": "Modelo no encontrado: {{provider}}/{{model}}",
"error.chain.checkConfig": "Comprueba los nombres de proveedor/modelo en tu configuración (opencode.json)", "error.chain.checkConfig": "Comprueba los nombres de proveedor/modelo en tu configuración (opencode.json)",
"error.chain.mcpFailed": 'El servidor MCP "{{name}}" falló. Nota, Kilo CLI no soporta autenticación MCP todavía.', "error.chain.mcpFailed": 'El servidor MCP "{{name}}" falló. Nota, Kilo no soporta autenticación MCP todavía.',
"error.chain.providerAuthFailed": "Autenticación de proveedor fallida ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "Autenticación de proveedor fallida ({{provider}}): {{message}}",
"error.chain.providerInitFailed": "error.chain.providerInitFailed":
'Fallo al inicializar proveedor "{{provider}}". Comprueba credenciales y configuración.', 'Fallo al inicializar proveedor "{{provider}}". Comprueba credenciales y configuración.',
@@ -509,12 +507,12 @@ export const dict = {
"sidebar.workspaces.enable": "Habilitar espacios de trabajo", "sidebar.workspaces.enable": "Habilitar espacios de trabajo",
"sidebar.workspaces.disable": "Deshabilitar espacios de trabajo", "sidebar.workspaces.disable": "Deshabilitar espacios de trabajo",
"sidebar.gettingStarted.title": "Empezando", "sidebar.gettingStarted.title": "Empezando",
"sidebar.gettingStarted.line1": "Kilo CLI incluye modelos gratuitos para que puedas empezar inmediatamente.", "sidebar.gettingStarted.line1": "Kilo incluye modelos gratuitos para que puedas empezar inmediatamente.",
"sidebar.gettingStarted.line2": "Conecta cualquier proveedor para usar modelos, inc. Claude, GPT, Gemini etc.", "sidebar.gettingStarted.line2": "Conecta cualquier proveedor para usar modelos, inc. Claude, GPT, Gemini etc.",
"sidebar.project.recentSessions": "Sesiones recientes", "sidebar.project.recentSessions": "Sesiones recientes",
"sidebar.project.viewAllSessions": "Ver todas las sesiones", "sidebar.project.viewAllSessions": "Ver todas las sesiones",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "Escritorio", "settings.section.desktop": "Escritorio",
"settings.section.server": "Servidor", "settings.section.server": "Servidor",
"settings.tab.general": "General", "settings.tab.general": "General",
@@ -526,11 +524,11 @@ export const dict = {
"settings.general.section.sounds": "Efectos de sonido", "settings.general.section.sounds": "Efectos de sonido",
"settings.general.row.language.title": "Idioma", "settings.general.row.language.title": "Idioma",
"settings.general.row.language.description": "Cambiar el idioma de visualización para Kilo CLI", "settings.general.row.language.description": "Cambiar el idioma de visualización para Kilo",
"settings.general.row.appearance.title": "Apariencia", "settings.general.row.appearance.title": "Apariencia",
"settings.general.row.appearance.description": "Personaliza cómo se ve Kilo CLI en tu dispositivo", "settings.general.row.appearance.description": "Personaliza cómo se ve Kilo en tu dispositivo",
"settings.general.row.theme.title": "Tema", "settings.general.row.theme.title": "Tema",
"settings.general.row.theme.description": "Personaliza el tema de Kilo CLI.", "settings.general.row.theme.description": "Personaliza el tema de Kilo.",
"settings.general.row.font.title": "Fuente", "settings.general.row.font.title": "Fuente",
"settings.general.row.font.description": "Personaliza la fuente mono usada en bloques de código", "settings.general.row.font.description": "Personaliza la fuente mono usada en bloques de código",
@@ -539,13 +537,13 @@ export const dict = {
'Mostrar ventanas emergentes de "Novedades" después de las actualizaciones', 'Mostrar ventanas emergentes de "Novedades" después de las actualizaciones',
"settings.updates.row.startup.title": "Buscar actualizaciones al iniciar", "settings.updates.row.startup.title": "Buscar actualizaciones al iniciar",
"settings.updates.row.startup.description": "Buscar actualizaciones automáticamente cuando se inicia OpenCode", "settings.updates.row.startup.description": "Buscar actualizaciones automáticamente cuando se inicia Kilo",
"settings.updates.row.check.title": "Buscar actualizaciones", "settings.updates.row.check.title": "Buscar actualizaciones",
"settings.updates.row.check.description": "Buscar actualizaciones manualmente e instalarlas si hay alguna", "settings.updates.row.check.description": "Buscar actualizaciones manualmente e instalarlas si hay alguna",
"settings.updates.action.checkNow": "Buscar ahora", "settings.updates.action.checkNow": "Buscar ahora",
"settings.updates.action.checking": "Buscando...", "settings.updates.action.checking": "Buscando...",
"settings.updates.toast.latest.title": "Estás al día", "settings.updates.toast.latest.title": "Estás al día",
"settings.updates.toast.latest.description": "Estás usando la última versión de OpenCode.", "settings.updates.toast.latest.description": "Estás usando la última versión de Kilo.",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
+21 -23
View File
@@ -89,10 +89,8 @@ export const dict = {
"dialog.provider.search.placeholder": "Rechercher des fournisseurs", "dialog.provider.search.placeholder": "Rechercher des fournisseurs",
"dialog.provider.empty": "Aucun fournisseur trouvé", "dialog.provider.empty": "Aucun fournisseur trouvé",
"dialog.provider.group.popular": "Populaire", "dialog.provider.group.popular": "Populaire",
"dialog.provider.group.recommended": "Recommandé", // kilocode_change
"dialog.provider.group.other": "Autre", "dialog.provider.group.other": "Autre",
"dialog.provider.tag.recommended": "Recommandé", "dialog.provider.tag.recommended": "Recommandé",
"dialog.provider.kilo.note": "Accédez à plus de 500 modèles d'IA",
"dialog.provider.anthropic.note": "Connectez-vous avec Claude Pro/Max ou une clé API", "dialog.provider.anthropic.note": "Connectez-vous avec Claude Pro/Max ou une clé API",
"dialog.provider.openai.note": "Connectez-vous avec ChatGPT Pro/Plus ou une clé API", "dialog.provider.openai.note": "Connectez-vous avec ChatGPT Pro/Plus ou une clé API",
"dialog.provider.copilot.note": "Connectez-vous avec Copilot ou une clé API", "dialog.provider.copilot.note": "Connectez-vous avec Copilot ou une clé API",
@@ -103,7 +101,7 @@ export const dict = {
"dialog.model.manage": "Gérer les modèles", "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.description": "Personnalisez les modèles qui apparaissent dans le sélecteur.",
"dialog.model.unpaid.freeModels.title": "Modèles gratuits fournis par Kilo CLI", "dialog.model.unpaid.freeModels.title": "Modèles gratuits fournis par Kilo",
"dialog.model.unpaid.addMore.title": "Ajouter plus de modèles de fournisseurs populaires", "dialog.model.unpaid.addMore.title": "Ajouter plus de modèles de fournisseurs populaires",
"dialog.provider.viewAll": "Voir plus de fournisseurs", "dialog.provider.viewAll": "Voir plus de fournisseurs",
@@ -116,21 +114,21 @@ export const dict = {
"provider.connect.status.waiting": "En attente d'autorisation...", "provider.connect.status.waiting": "En attente d'autorisation...",
"provider.connect.status.failed": "Échec de l'autorisation : {{error}}", "provider.connect.status.failed": "Échec de l'autorisation : {{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"Entrez votre clé API {{provider}} pour connecter votre compte et utiliser les modèles {{provider}} dans Kilo CLI.", "Entrez votre clé API {{provider}} pour connecter votre compte et utiliser les modèles {{provider}} dans Kilo.",
"provider.connect.apiKey.label": "Clé API {{provider}}", "provider.connect.apiKey.label": "Clé API {{provider}}",
"provider.connect.apiKey.placeholder": "Clé API", "provider.connect.apiKey.placeholder": "Clé API",
"provider.connect.apiKey.required": "La clé API est requise", "provider.connect.apiKey.required": "La clé API est requise",
"provider.connect.kiloGateway.line1": "provider.connect.opencodeZen.line1":
"Kilo Gateway vous donne accès à un ensemble sélectionné de modèles fiables et optimisés pour les agents de codage.", "Kilo Zen vous donne accès à un ensemble sélectionné de modèles fiables et optimisés pour les agents de codage.",
"provider.connect.kiloGateway.line2": "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.", "Avec une seule clé API, vous aurez accès à des modèles tels que Claude, GPT, Gemini, GLM et plus encore.",
"provider.connect.kiloGateway.visit.prefix": "Visitez ", "provider.connect.opencodeZen.visit.prefix": "Visitez ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": " pour récupérer votre clé API.", "provider.connect.opencodeZen.visit.suffix": " pour récupérer votre clé API.",
"provider.connect.oauth.code.visit.prefix": "Visitez ", "provider.connect.oauth.code.visit.prefix": "Visitez ",
"provider.connect.oauth.code.visit.link": "ce lien", "provider.connect.oauth.code.visit.link": "ce lien",
"provider.connect.oauth.code.visit.suffix": "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 Kilo CLI.", " pour récupérer votre code d'autorisation afin de connecter votre compte et utiliser les modèles {{provider}} dans Kilo.",
"provider.connect.oauth.code.label": "Code d'autorisation {{method}}", "provider.connect.oauth.code.label": "Code d'autorisation {{method}}",
"provider.connect.oauth.code.placeholder": "Code d'autorisation", "provider.connect.oauth.code.placeholder": "Code d'autorisation",
"provider.connect.oauth.code.required": "Le code d'autorisation est requis", "provider.connect.oauth.code.required": "Le code d'autorisation est requis",
@@ -138,7 +136,7 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": "Visitez ", "provider.connect.oauth.auto.visit.prefix": "Visitez ",
"provider.connect.oauth.auto.visit.link": "ce lien", "provider.connect.oauth.auto.visit.link": "ce lien",
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
" et entrez le code ci-dessous pour connecter votre compte et utiliser les modèles {{provider}} dans Kilo CLI.", " et entrez le code ci-dessous pour connecter votre compte et utiliser les modèles {{provider}} dans Kilo.",
"provider.connect.oauth.auto.confirmationCode": "Code de confirmation", "provider.connect.oauth.auto.confirmationCode": "Code de confirmation",
"provider.connect.toast.connected.title": "{{provider}} connecté", "provider.connect.toast.connected.title": "{{provider}} connecté",
"provider.connect.toast.connected.description": "Les modèles {{provider}} sont maintenant disponibles.", "provider.connect.toast.connected.description": "Les modèles {{provider}} sont maintenant disponibles.",
@@ -249,7 +247,7 @@ export const dict = {
"dialog.directory.empty": "Aucun dossier trouvé", "dialog.directory.empty": "Aucun dossier trouvé",
"dialog.server.title": "Serveurs", "dialog.server.title": "Serveurs",
"dialog.server.description": "Changez le serveur Kilo CLI auquel cette application se connecte.", "dialog.server.description": "Changez le serveur Kilo auquel cette application se connecte.",
"dialog.server.search.placeholder": "Rechercher des serveurs", "dialog.server.search.placeholder": "Rechercher des serveurs",
"dialog.server.empty": "Aucun serveur pour l'instant", "dialog.server.empty": "Aucun serveur pour l'instant",
"dialog.server.add.title": "Ajouter un serveur", "dialog.server.add.title": "Ajouter un serveur",
@@ -373,7 +371,7 @@ export const dict = {
"toast.update.title": "Mise à jour disponible", "toast.update.title": "Mise à jour disponible",
"toast.update.description": "toast.update.description":
"Une nouvelle version de Kilo CLI ({{version}}) est maintenant disponible pour installation.", "Une nouvelle version d'Kilo ({{version}}) est maintenant disponible pour installation.",
"toast.update.action.installRestart": "Installer et redémarrer", "toast.update.action.installRestart": "Installer et redémarrer",
"toast.update.action.notYet": "Pas encore", "toast.update.action.notYet": "Pas encore",
@@ -384,7 +382,7 @@ export const dict = {
"error.page.action.checking": "Vérification...", "error.page.action.checking": "Vérification...",
"error.page.action.checkUpdates": "Vérifier les mises à jour", "error.page.action.checkUpdates": "Vérifier les mises à jour",
"error.page.action.updateTo": "Mettre à jour vers {{version}}", "error.page.action.updateTo": "Mettre à jour vers {{version}}",
"error.page.report.prefix": "Veuillez signaler cette erreur à l'équipe Kilo CLI", "error.page.report.prefix": "Veuillez signaler cette erreur à l'équipe Kilo",
"error.page.report.discord": "sur Discord", "error.page.report.discord": "sur Discord",
"error.page.version": "Version : {{version}}", "error.page.version": "Version : {{version}}",
@@ -404,7 +402,7 @@ export const dict = {
"error.chain.modelNotFound": "Modèle introuvable : {{provider}}/{{model}}", "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.checkConfig": "Vérifiez votre configuration (opencode.json) pour les noms de fournisseur/modèle",
"error.chain.mcpFailed": "error.chain.mcpFailed":
'Le serveur MCP "{{name}}" a échoué. Notez que Kilo CLI ne supporte pas encore l\'authentification MCP.', "Le serveur MCP \"{{name}}\" a échoué. Notez qu'Kilo ne supporte pas encore l'authentification MCP.",
"error.chain.providerAuthFailed": "Échec de l'authentification du fournisseur ({{provider}}) : {{message}}", "error.chain.providerAuthFailed": "Échec de l'authentification du fournisseur ({{provider}}) : {{message}}",
"error.chain.providerInitFailed": "error.chain.providerInitFailed":
'Échec de l\'initialisation du fournisseur "{{provider}}". Vérifiez les identifiants et la configuration.', 'Échec de l\'initialisation du fournisseur "{{provider}}". Vérifiez les identifiants et la configuration.',
@@ -515,13 +513,13 @@ export const dict = {
"sidebar.workspaces.disable": "Désactiver les espaces de travail", "sidebar.workspaces.disable": "Désactiver les espaces de travail",
"sidebar.gettingStarted.title": "Commencer", "sidebar.gettingStarted.title": "Commencer",
"sidebar.gettingStarted.line1": "sidebar.gettingStarted.line1":
"Kilo CLI inclut des modèles gratuits pour que vous puissiez commencer immédiatement.", "Kilo inclut des modèles gratuits pour que vous puissiez commencer immédiatement.",
"sidebar.gettingStarted.line2": "sidebar.gettingStarted.line2":
"Connectez n'importe quel fournisseur pour utiliser des modèles, y compris Claude, GPT, Gemini etc.", "Connectez n'importe quel fournisseur pour utiliser des modèles, y compris Claude, GPT, Gemini etc.",
"sidebar.project.recentSessions": "Sessions récentes", "sidebar.project.recentSessions": "Sessions récentes",
"sidebar.project.viewAllSessions": "Voir toutes les sessions", "sidebar.project.viewAllSessions": "Voir toutes les sessions",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "Bureau", "settings.section.desktop": "Bureau",
"settings.section.server": "Serveur", "settings.section.server": "Serveur",
"settings.tab.general": "Général", "settings.tab.general": "Général",
@@ -533,11 +531,11 @@ export const dict = {
"settings.general.section.sounds": "Effets sonores", "settings.general.section.sounds": "Effets sonores",
"settings.general.row.language.title": "Langue", "settings.general.row.language.title": "Langue",
"settings.general.row.language.description": "Changer la langue d'affichage pour Kilo CLI", "settings.general.row.language.description": "Changer la langue d'affichage pour Kilo",
"settings.general.row.appearance.title": "Apparence", "settings.general.row.appearance.title": "Apparence",
"settings.general.row.appearance.description": "Personnaliser l'apparence de Kilo CLI sur votre appareil", "settings.general.row.appearance.description": "Personnaliser l'apparence d'Kilo sur votre appareil",
"settings.general.row.theme.title": "Thème", "settings.general.row.theme.title": "Thème",
"settings.general.row.theme.description": "Personnaliser le thème de Kilo CLI.", "settings.general.row.theme.description": "Personnaliser le thème d'Kilo.",
"settings.general.row.font.title": "Police", "settings.general.row.font.title": "Police",
"settings.general.row.font.description": "Personnaliser la police mono utilisée dans les blocs de code", "settings.general.row.font.description": "Personnaliser la police mono utilisée dans les blocs de code",
@@ -545,13 +543,13 @@ export const dict = {
"settings.general.row.releaseNotes.description": 'Afficher des pop-ups "Quoi de neuf" après les mises à jour', "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.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.startup.description": "Vérifier automatiquement les mises à jour au lancement d'Kilo",
"settings.updates.row.check.title": "Vérifier les mises à jour", "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.row.check.description": "Vérifier manuellement les mises à jour et installer si disponible",
"settings.updates.action.checkNow": "Vérifier maintenant", "settings.updates.action.checkNow": "Vérifier maintenant",
"settings.updates.action.checking": "Vérification...", "settings.updates.action.checking": "Vérification...",
"settings.updates.toast.latest.title": "Vous êtes à jour", "settings.updates.toast.latest.title": "Vous êtes à jour",
"settings.updates.toast.latest.description": "Vous utilisez la dernière version d'OpenCode.", "settings.updates.toast.latest.description": "Vous utilisez la dernière version d'Kilo.",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
+21 -23
View File
@@ -89,10 +89,8 @@ export const dict = {
"dialog.provider.search.placeholder": "プロバイダーを検索", "dialog.provider.search.placeholder": "プロバイダーを検索",
"dialog.provider.empty": "プロバイダーが見つかりません", "dialog.provider.empty": "プロバイダーが見つかりません",
"dialog.provider.group.popular": "人気", "dialog.provider.group.popular": "人気",
"dialog.provider.group.recommended": "推奨", // kilocode_change
"dialog.provider.group.other": "その他", "dialog.provider.group.other": "その他",
"dialog.provider.tag.recommended": "推奨", "dialog.provider.tag.recommended": "推奨",
"dialog.provider.kilo.note": "500以上のAIモデルにアクセス",
"dialog.provider.anthropic.note": "Claude Pro/MaxまたはAPIキーで接続", "dialog.provider.anthropic.note": "Claude Pro/MaxまたはAPIキーで接続",
"dialog.provider.openai.note": "ChatGPT Pro/PlusまたはAPIキーで接続", "dialog.provider.openai.note": "ChatGPT Pro/PlusまたはAPIキーで接続",
"dialog.provider.copilot.note": "CopilotまたはAPIキーで接続", "dialog.provider.copilot.note": "CopilotまたはAPIキーで接続",
@@ -103,7 +101,7 @@ export const dict = {
"dialog.model.manage": "モデルを管理", "dialog.model.manage": "モデルを管理",
"dialog.model.manage.description": "モデルセレクターに表示するモデルをカスタマイズします。", "dialog.model.manage.description": "モデルセレクターに表示するモデルをカスタマイズします。",
"dialog.model.unpaid.freeModels.title": "Kilo CLIが提供する無料モデル", "dialog.model.unpaid.freeModels.title": "Kiloが提供する無料モデル",
"dialog.model.unpaid.addMore.title": "人気のプロバイダーからモデルを追加", "dialog.model.unpaid.addMore.title": "人気のプロバイダーからモデルを追加",
"dialog.provider.viewAll": "さらにプロバイダーを表示", "dialog.provider.viewAll": "さらにプロバイダーを表示",
@@ -116,20 +114,20 @@ export const dict = {
"provider.connect.status.waiting": "認証を待機中...", "provider.connect.status.waiting": "認証を待機中...",
"provider.connect.status.failed": "認証に失敗しました: {{error}}", "provider.connect.status.failed": "認証に失敗しました: {{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"{{provider}}のAPIキーを入力してアカウントを接続し、Kilo CLIで{{provider}}モデルを使用します。", "{{provider}}のAPIキーを入力してアカウントを接続し、Kiloで{{provider}}モデルを使用します。",
"provider.connect.apiKey.label": "{{provider}} APIキー", "provider.connect.apiKey.label": "{{provider}} APIキー",
"provider.connect.apiKey.placeholder": "APIキー", "provider.connect.apiKey.placeholder": "APIキー",
"provider.connect.apiKey.required": "APIキーが必要です", "provider.connect.apiKey.required": "APIキーが必要です",
"provider.connect.kiloGateway.line1": "provider.connect.opencodeZen.line1":
"Kilo Gatewayは、コーディングエージェント向けに最適化された信頼性の高いモデルへのアクセスを提供します。", "Kilo Zenは、コーディングエージェント向けに最適化された信頼性の高いモデルへのアクセスを提供します。",
"provider.connect.kiloGateway.line2": "1つのAPIキーで、Claude、GPT、Gemini、GLMなどのモデルにアクセスできます。", "provider.connect.opencodeZen.line2": "1つのAPIキーで、Claude、GPT、Gemini、GLMなどのモデルにアクセスできます。",
"provider.connect.kiloGateway.visit.prefix": " ", "provider.connect.opencodeZen.visit.prefix": " ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": " にアクセスしてAPIキーを取得してください。", "provider.connect.opencodeZen.visit.suffix": " にアクセスしてAPIキーを取得してください。",
"provider.connect.oauth.code.visit.prefix": " ", "provider.connect.oauth.code.visit.prefix": " ",
"provider.connect.oauth.code.visit.link": "このリンク", "provider.connect.oauth.code.visit.link": "このリンク",
"provider.connect.oauth.code.visit.suffix": "provider.connect.oauth.code.visit.suffix":
" にアクセスして認証コードを取得し、アカウントを接続してKilo CLIで{{provider}}モデルを使用してください。", " にアクセスして認証コードを取得し、アカウントを接続してKiloで{{provider}}モデルを使用してください。",
"provider.connect.oauth.code.label": "{{method}} 認証コード", "provider.connect.oauth.code.label": "{{method}} 認証コード",
"provider.connect.oauth.code.placeholder": "認証コード", "provider.connect.oauth.code.placeholder": "認証コード",
"provider.connect.oauth.code.required": "認証コードが必要です", "provider.connect.oauth.code.required": "認証コードが必要です",
@@ -137,7 +135,7 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": " ", "provider.connect.oauth.auto.visit.prefix": " ",
"provider.connect.oauth.auto.visit.link": "このリンク", "provider.connect.oauth.auto.visit.link": "このリンク",
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
" にアクセスし、以下のコードを入力してアカウントを接続し、Kilo CLIで{{provider}}モデルを使用してください。", " にアクセスし、以下のコードを入力してアカウントを接続し、Kiloで{{provider}}モデルを使用してください。",
"provider.connect.oauth.auto.confirmationCode": "確認コード", "provider.connect.oauth.auto.confirmationCode": "確認コード",
"provider.connect.toast.connected.title": "{{provider}}が接続されました", "provider.connect.toast.connected.title": "{{provider}}が接続されました",
"provider.connect.toast.connected.description": "{{provider}}モデルが使用可能になりました。", "provider.connect.toast.connected.description": "{{provider}}モデルが使用可能になりました。",
@@ -248,7 +246,7 @@ export const dict = {
"dialog.directory.empty": "フォルダが見つかりません", "dialog.directory.empty": "フォルダが見つかりません",
"dialog.server.title": "サーバー", "dialog.server.title": "サーバー",
"dialog.server.description": "このアプリが接続するKilo CLIサーバーを切り替えます。", "dialog.server.description": "このアプリが接続するKiloサーバーを切り替えます。",
"dialog.server.search.placeholder": "サーバーを検索", "dialog.server.search.placeholder": "サーバーを検索",
"dialog.server.empty": "サーバーはまだありません", "dialog.server.empty": "サーバーはまだありません",
"dialog.server.add.title": "サーバーを追加", "dialog.server.add.title": "サーバーを追加",
@@ -368,7 +366,7 @@ export const dict = {
"toast.session.listFailed.title": "{{project}}のセッション読み込みに失敗しました", "toast.session.listFailed.title": "{{project}}のセッション読み込みに失敗しました",
"toast.update.title": "アップデートが利用可能です", "toast.update.title": "アップデートが利用可能です",
"toast.update.description": "Kilo CLIの新しいバージョン ({{version}}) がインストール可能です。", "toast.update.description": "Kiloの新しいバージョン ({{version}}) がインストール可能です。",
"toast.update.action.installRestart": "インストールして再起動", "toast.update.action.installRestart": "インストールして再起動",
"toast.update.action.notYet": "今はしない", "toast.update.action.notYet": "今はしない",
@@ -379,7 +377,7 @@ export const dict = {
"error.page.action.checking": "確認中...", "error.page.action.checking": "確認中...",
"error.page.action.checkUpdates": "アップデートを確認", "error.page.action.checkUpdates": "アップデートを確認",
"error.page.action.updateTo": "{{version}}にアップデート", "error.page.action.updateTo": "{{version}}にアップデート",
"error.page.report.prefix": "このエラーをKilo CLIチームに報告してください: ", "error.page.report.prefix": "このエラーをKiloチームに報告してください: ",
"error.page.report.discord": "Discord", "error.page.report.discord": "Discord",
"error.page.version": "バージョン: {{version}}", "error.page.version": "バージョン: {{version}}",
@@ -397,7 +395,7 @@ export const dict = {
"error.chain.didYouMean": "もしかして: {{suggestions}}", "error.chain.didYouMean": "もしかして: {{suggestions}}",
"error.chain.modelNotFound": "モデルが見つかりません: {{provider}}/{{model}}", "error.chain.modelNotFound": "モデルが見つかりません: {{provider}}/{{model}}",
"error.chain.checkConfig": "config (opencode.json) のプロバイダー/モデル名を確認してください", "error.chain.checkConfig": "config (opencode.json) のプロバイダー/モデル名を確認してください",
"error.chain.mcpFailed": 'MCPサーバー "{{name}}" が失敗しました。注意: Kilo CLIはまだMCP認証をサポートしていません。', "error.chain.mcpFailed": 'MCPサーバー "{{name}}" が失敗しました。注意: KiloはまだMCP認証をサポートしていません。',
"error.chain.providerAuthFailed": "プロバイダー認証に失敗しました ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "プロバイダー認証に失敗しました ({{provider}}): {{message}}",
"error.chain.providerInitFailed": "error.chain.providerInitFailed":
'プロバイダー "{{provider}}" の初期化に失敗しました。認証情報と設定を確認してください。', 'プロバイダー "{{provider}}" の初期化に失敗しました。認証情報と設定を確認してください。',
@@ -506,12 +504,12 @@ export const dict = {
"sidebar.workspaces.enable": "ワークスペースを有効化", "sidebar.workspaces.enable": "ワークスペースを有効化",
"sidebar.workspaces.disable": "ワークスペースを無効化", "sidebar.workspaces.disable": "ワークスペースを無効化",
"sidebar.gettingStarted.title": "はじめに", "sidebar.gettingStarted.title": "はじめに",
"sidebar.gettingStarted.line1": "Kilo CLIには無料モデルが含まれているため、すぐに開始できます。", "sidebar.gettingStarted.line1": "Kiloには無料モデルが含まれているため、すぐに開始できます。",
"sidebar.gettingStarted.line2": "プロバイダーを接続して、Claude、GPT、Geminiなどのモデルを使用できます。", "sidebar.gettingStarted.line2": "プロバイダーを接続して、Claude、GPT、Geminiなどのモデルを使用できます。",
"sidebar.project.recentSessions": "最近のセッション", "sidebar.project.recentSessions": "最近のセッション",
"sidebar.project.viewAllSessions": "すべてのセッションを表示", "sidebar.project.viewAllSessions": "すべてのセッションを表示",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "デスクトップ", "settings.section.desktop": "デスクトップ",
"settings.section.server": "サーバー", "settings.section.server": "サーバー",
"settings.tab.general": "一般", "settings.tab.general": "一般",
@@ -523,11 +521,11 @@ export const dict = {
"settings.general.section.sounds": "効果音", "settings.general.section.sounds": "効果音",
"settings.general.row.language.title": "言語", "settings.general.row.language.title": "言語",
"settings.general.row.language.description": "Kilo CLIの表示言語を変更します", "settings.general.row.language.description": "Kiloの表示言語を変更します",
"settings.general.row.appearance.title": "外観", "settings.general.row.appearance.title": "外観",
"settings.general.row.appearance.description": "デバイスでのKilo CLIの表示をカスタマイズします", "settings.general.row.appearance.description": "デバイスでのKiloの表示をカスタマイズします",
"settings.general.row.theme.title": "テーマ", "settings.general.row.theme.title": "テーマ",
"settings.general.row.theme.description": "Kilo CLIのテーマをカスタマイズします。", "settings.general.row.theme.description": "Kiloのテーマをカスタマイズします。",
"settings.general.row.font.title": "フォント", "settings.general.row.font.title": "フォント",
"settings.general.row.font.description": "コードブロックで使用する等幅フォントをカスタマイズします", "settings.general.row.font.description": "コードブロックで使用する等幅フォントをカスタマイズします",
@@ -535,13 +533,13 @@ export const dict = {
"settings.general.row.releaseNotes.description": "アップデート後に「新機能」ポップアップを表示", "settings.general.row.releaseNotes.description": "アップデート後に「新機能」ポップアップを表示",
"settings.updates.row.startup.title": "起動時にアップデートを確認", "settings.updates.row.startup.title": "起動時にアップデートを確認",
"settings.updates.row.startup.description": "OpenCode の起動時に自動でアップデートを確認します", "settings.updates.row.startup.description": "Kilo の起動時に自動でアップデートを確認します",
"settings.updates.row.check.title": "アップデートを確認", "settings.updates.row.check.title": "アップデートを確認",
"settings.updates.row.check.description": "手動でアップデートを確認し、利用可能ならインストールします", "settings.updates.row.check.description": "手動でアップデートを確認し、利用可能ならインストールします",
"settings.updates.action.checkNow": "今すぐ確認", "settings.updates.action.checkNow": "今すぐ確認",
"settings.updates.action.checking": "確認中...", "settings.updates.action.checking": "確認中...",
"settings.updates.toast.latest.title": "最新です", "settings.updates.toast.latest.title": "最新です",
"settings.updates.toast.latest.description": "OpenCode は最新バージョンです。", "settings.updates.toast.latest.description": "Kilo は最新バージョンです。",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
+21 -23
View File
@@ -93,10 +93,8 @@ export const dict = {
"dialog.provider.search.placeholder": "공급자 검색", "dialog.provider.search.placeholder": "공급자 검색",
"dialog.provider.empty": "공급자 없음", "dialog.provider.empty": "공급자 없음",
"dialog.provider.group.popular": "인기", "dialog.provider.group.popular": "인기",
"dialog.provider.group.recommended": "추천", // kilocode_change
"dialog.provider.group.other": "기타", "dialog.provider.group.other": "기타",
"dialog.provider.tag.recommended": "추천", "dialog.provider.tag.recommended": "추천",
"dialog.provider.kilo.note": "500개 이상의 AI 모델에 액세스",
"dialog.provider.anthropic.note": "Claude Pro/Max 또는 API 키로 연결", "dialog.provider.anthropic.note": "Claude Pro/Max 또는 API 키로 연결",
"dialog.provider.openai.note": "ChatGPT Pro/Plus 또는 API 키로 연결", "dialog.provider.openai.note": "ChatGPT Pro/Plus 또는 API 키로 연결",
"dialog.provider.copilot.note": "Copilot 또는 API 키로 연결", "dialog.provider.copilot.note": "Copilot 또는 API 키로 연결",
@@ -107,7 +105,7 @@ export const dict = {
"dialog.model.manage": "모델 관리", "dialog.model.manage": "모델 관리",
"dialog.model.manage.description": "모델 선택기에 표시할 모델 사용자 지정", "dialog.model.manage.description": "모델 선택기에 표시할 모델 사용자 지정",
"dialog.model.unpaid.freeModels.title": "Kilo CLI에서 제공하는 무료 모델", "dialog.model.unpaid.freeModels.title": "Kilo에서 제공하는 무료 모델",
"dialog.model.unpaid.addMore.title": "인기 공급자의 모델 추가", "dialog.model.unpaid.addMore.title": "인기 공급자의 모델 추가",
"dialog.provider.viewAll": "더 많은 공급자 보기", "dialog.provider.viewAll": "더 많은 공급자 보기",
@@ -120,20 +118,20 @@ export const dict = {
"provider.connect.status.waiting": "인증 대기 중...", "provider.connect.status.waiting": "인증 대기 중...",
"provider.connect.status.failed": "인증 실패: {{error}}", "provider.connect.status.failed": "인증 실패: {{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"{{provider}} API 키를 입력하여 계정을 연결하고 Kilo CLI에서 {{provider}} 모델을 사용하세요.", "{{provider}} API 키를 입력하여 계정을 연결하고 Kilo에서 {{provider}} 모델을 사용하세요.",
"provider.connect.apiKey.label": "{{provider}} API 키", "provider.connect.apiKey.label": "{{provider}} API 키",
"provider.connect.apiKey.placeholder": "API 키", "provider.connect.apiKey.placeholder": "API 키",
"provider.connect.apiKey.required": "API 키가 필요합니다", "provider.connect.apiKey.required": "API 키가 필요합니다",
"provider.connect.kiloGateway.line1": "provider.connect.opencodeZen.line1":
"Kilo Gateway은 코딩 에이전트를 위해 최적화된 신뢰할 수 있는 엄선된 모델에 대한 액세스를 제공합니다.", "Kilo Zen은 코딩 에이전트를 위해 최적화된 신뢰할 수 있는 엄선된 모델에 대한 액세스를 제공합니다.",
"provider.connect.kiloGateway.line2": "단일 API 키로 Claude, GPT, Gemini, GLM 등 다양한 모델에 액세스할 수 있습니다.", "provider.connect.opencodeZen.line2": "단일 API 키로 Claude, GPT, Gemini, GLM 등 다양한 모델에 액세스할 수 있습니다.",
"provider.connect.kiloGateway.visit.prefix": "", "provider.connect.opencodeZen.visit.prefix": "",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": "를 방문하여 API 키를 받으세요.", "provider.connect.opencodeZen.visit.suffix": "를 방문하여 API 키를 받으세요.",
"provider.connect.oauth.code.visit.prefix": "", "provider.connect.oauth.code.visit.prefix": "",
"provider.connect.oauth.code.visit.link": "이 링크", "provider.connect.oauth.code.visit.link": "이 링크",
"provider.connect.oauth.code.visit.suffix": "provider.connect.oauth.code.visit.suffix":
"를 방문하여 인증 코드를 받아 계정을 연결하고 Kilo CLI에서 {{provider}} 모델을 사용하세요.", "를 방문하여 인증 코드를 받아 계정을 연결하고 Kilo에서 {{provider}} 모델을 사용하세요.",
"provider.connect.oauth.code.label": "{{method}} 인증 코드", "provider.connect.oauth.code.label": "{{method}} 인증 코드",
"provider.connect.oauth.code.placeholder": "인증 코드", "provider.connect.oauth.code.placeholder": "인증 코드",
"provider.connect.oauth.code.required": "인증 코드가 필요합니다", "provider.connect.oauth.code.required": "인증 코드가 필요합니다",
@@ -141,7 +139,7 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": "", "provider.connect.oauth.auto.visit.prefix": "",
"provider.connect.oauth.auto.visit.link": "이 링크", "provider.connect.oauth.auto.visit.link": "이 링크",
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
"를 방문하고 아래 코드를 입력하여 계정을 연결하고 Kilo CLI에서 {{provider}} 모델을 사용하세요.", "를 방문하고 아래 코드를 입력하여 계정을 연결하고 Kilo에서 {{provider}} 모델을 사용하세요.",
"provider.connect.oauth.auto.confirmationCode": "확인 코드", "provider.connect.oauth.auto.confirmationCode": "확인 코드",
"provider.connect.toast.connected.title": "{{provider}} 연결됨", "provider.connect.toast.connected.title": "{{provider}} 연결됨",
"provider.connect.toast.connected.description": "이제 {{provider}} 모델을 사용할 수 있습니다.", "provider.connect.toast.connected.description": "이제 {{provider}} 모델을 사용할 수 있습니다.",
@@ -252,7 +250,7 @@ export const dict = {
"dialog.directory.empty": "폴더 없음", "dialog.directory.empty": "폴더 없음",
"dialog.server.title": "서버", "dialog.server.title": "서버",
"dialog.server.description": "이 앱이 연결할 Kilo CLI 서버를 전환합니다.", "dialog.server.description": "이 앱이 연결할 Kilo 서버를 전환합니다.",
"dialog.server.search.placeholder": "서버 검색", "dialog.server.search.placeholder": "서버 검색",
"dialog.server.empty": "서버 없음", "dialog.server.empty": "서버 없음",
"dialog.server.add.title": "서버 추가", "dialog.server.add.title": "서버 추가",
@@ -371,7 +369,7 @@ export const dict = {
"toast.session.listFailed.title": "{{project}}에 대한 세션을 로드하지 못했습니다", "toast.session.listFailed.title": "{{project}}에 대한 세션을 로드하지 못했습니다",
"toast.update.title": "업데이트 가능", "toast.update.title": "업데이트 가능",
"toast.update.description": "Kilo CLI의 새 버전({{version}})을 설치할 수 있습니다.", "toast.update.description": "Kilo의 새 버전({{version}})을 설치할 수 있습니다.",
"toast.update.action.installRestart": "설치 및 다시 시작", "toast.update.action.installRestart": "설치 및 다시 시작",
"toast.update.action.notYet": "나중에", "toast.update.action.notYet": "나중에",
@@ -382,7 +380,7 @@ export const dict = {
"error.page.action.checking": "확인 중...", "error.page.action.checking": "확인 중...",
"error.page.action.checkUpdates": "업데이트 확인", "error.page.action.checkUpdates": "업데이트 확인",
"error.page.action.updateTo": "{{version}} 버전으로 업데이트", "error.page.action.updateTo": "{{version}} 버전으로 업데이트",
"error.page.report.prefix": "이 오류를 Kilo CLI 팀에 제보해 주세요: ", "error.page.report.prefix": "이 오류를 Kilo 팀에 제보해 주세요: ",
"error.page.report.discord": "Discord", "error.page.report.discord": "Discord",
"error.page.version": "버전: {{version}}", "error.page.version": "버전: {{version}}",
@@ -400,7 +398,7 @@ export const dict = {
"error.chain.didYouMean": "혹시 {{suggestions}}을(를) 의미하셨나요?", "error.chain.didYouMean": "혹시 {{suggestions}}을(를) 의미하셨나요?",
"error.chain.modelNotFound": "모델을 찾을 수 없음: {{provider}}/{{model}}", "error.chain.modelNotFound": "모델을 찾을 수 없음: {{provider}}/{{model}}",
"error.chain.checkConfig": "구성(opencode.json)의 공급자/모델 이름을 확인하세요", "error.chain.checkConfig": "구성(opencode.json)의 공급자/모델 이름을 확인하세요",
"error.chain.mcpFailed": 'MCP 서버 "{{name}}" 실패. 참고: Kilo CLI는 아직 MCP 인증을 지원하지 않습니다.', "error.chain.mcpFailed": 'MCP 서버 "{{name}}" 실패. 참고: Kilo는 아직 MCP 인증을 지원하지 않습니다.',
"error.chain.providerAuthFailed": "공급자 인증 실패 ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "공급자 인증 실패 ({{provider}}): {{message}}",
"error.chain.providerInitFailed": '공급자 "{{provider}}" 초기화 실패. 자격 증명과 구성을 확인하세요.', "error.chain.providerInitFailed": '공급자 "{{provider}}" 초기화 실패. 자격 증명과 구성을 확인하세요.',
"error.chain.configJsonInvalid": "{{path}}의 구성 파일이 유효한 JSON(C)가 아닙니다", "error.chain.configJsonInvalid": "{{path}}의 구성 파일이 유효한 JSON(C)가 아닙니다",
@@ -507,12 +505,12 @@ export const dict = {
"sidebar.workspaces.enable": "작업 공간 활성화", "sidebar.workspaces.enable": "작업 공간 활성화",
"sidebar.workspaces.disable": "작업 공간 비활성화", "sidebar.workspaces.disable": "작업 공간 비활성화",
"sidebar.gettingStarted.title": "시작하기", "sidebar.gettingStarted.title": "시작하기",
"sidebar.gettingStarted.line1": "Kilo CLI에는 무료 모델이 포함되어 있어 즉시 시작할 수 있습니다.", "sidebar.gettingStarted.line1": "Kilo에는 무료 모델이 포함되어 있어 즉시 시작할 수 있습니다.",
"sidebar.gettingStarted.line2": "Claude, GPT, Gemini 등을 포함한 모델을 사용하려면 공급자를 연결하세요.", "sidebar.gettingStarted.line2": "Claude, GPT, Gemini 등을 포함한 모델을 사용하려면 공급자를 연결하세요.",
"sidebar.project.recentSessions": "최근 세션", "sidebar.project.recentSessions": "최근 세션",
"sidebar.project.viewAllSessions": "모든 세션 보기", "sidebar.project.viewAllSessions": "모든 세션 보기",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "데스크톱", "settings.section.desktop": "데스크톱",
"settings.section.server": "서버", "settings.section.server": "서버",
"settings.tab.general": "일반", "settings.tab.general": "일반",
@@ -524,11 +522,11 @@ export const dict = {
"settings.general.section.sounds": "효과음", "settings.general.section.sounds": "효과음",
"settings.general.row.language.title": "언어", "settings.general.row.language.title": "언어",
"settings.general.row.language.description": "Kilo CLI 표시 언어 변경", "settings.general.row.language.description": "Kilo 표시 언어 변경",
"settings.general.row.appearance.title": "모양", "settings.general.row.appearance.title": "모양",
"settings.general.row.appearance.description": "기기에서 Kilo CLI가 보이는 방식 사용자 지정", "settings.general.row.appearance.description": "기기에서 Kilo가 보이는 방식 사용자 지정",
"settings.general.row.theme.title": "테마", "settings.general.row.theme.title": "테마",
"settings.general.row.theme.description": "Kilo CLI 테마 사용자 지정", "settings.general.row.theme.description": "Kilo 테마 사용자 지정",
"settings.general.row.font.title": "글꼴", "settings.general.row.font.title": "글꼴",
"settings.general.row.font.description": "코드 블록에 사용되는 고정폭 글꼴 사용자 지정", "settings.general.row.font.description": "코드 블록에 사용되는 고정폭 글꼴 사용자 지정",
@@ -536,13 +534,13 @@ export const dict = {
"settings.general.row.releaseNotes.description": "업데이트 후 '새 소식' 팝업 표시", "settings.general.row.releaseNotes.description": "업데이트 후 '새 소식' 팝업 표시",
"settings.updates.row.startup.title": "시작 시 업데이트 확인", "settings.updates.row.startup.title": "시작 시 업데이트 확인",
"settings.updates.row.startup.description": "OpenCode를 실행할 때 업데이트를 자동으로 확인합니다", "settings.updates.row.startup.description": "Kilo를 실행할 때 업데이트를 자동으로 확인합니다",
"settings.updates.row.check.title": "업데이트 확인", "settings.updates.row.check.title": "업데이트 확인",
"settings.updates.row.check.description": "업데이트를 수동으로 확인하고, 사용 가능하면 설치합니다", "settings.updates.row.check.description": "업데이트를 수동으로 확인하고, 사용 가능하면 설치합니다",
"settings.updates.action.checkNow": "지금 확인", "settings.updates.action.checkNow": "지금 확인",
"settings.updates.action.checking": "확인 중...", "settings.updates.action.checking": "확인 중...",
"settings.updates.toast.latest.title": "최신 상태입니다", "settings.updates.toast.latest.title": "최신 상태입니다",
"settings.updates.toast.latest.description": "현재 최신 버전의 OpenCode를 사용 중입니다.", "settings.updates.toast.latest.description": "현재 최신 버전의 Kilo를 사용 중입니다.",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
+21 -23
View File
@@ -92,10 +92,8 @@ export const dict = {
"dialog.provider.search.placeholder": "Søk etter leverandører", "dialog.provider.search.placeholder": "Søk etter leverandører",
"dialog.provider.empty": "Ingen leverandører funnet", "dialog.provider.empty": "Ingen leverandører funnet",
"dialog.provider.group.popular": "Populære", "dialog.provider.group.popular": "Populære",
"dialog.provider.group.recommended": "Anbefalt", // kilocode_change
"dialog.provider.group.other": "Andre", "dialog.provider.group.other": "Andre",
"dialog.provider.tag.recommended": "Anbefalt", "dialog.provider.tag.recommended": "Anbefalt",
"dialog.provider.kilo.note": "Tilgang til 500+ AI-modeller",
"dialog.provider.anthropic.note": "Koble til med Claude Pro/Max eller API-nøkkel", "dialog.provider.anthropic.note": "Koble til med Claude Pro/Max eller API-nøkkel",
"dialog.provider.openai.note": "Koble til med ChatGPT Pro/Plus eller API-nøkkel", "dialog.provider.openai.note": "Koble til med ChatGPT Pro/Plus eller API-nøkkel",
"dialog.provider.copilot.note": "Koble til med Copilot eller API-nøkkel", "dialog.provider.copilot.note": "Koble til med Copilot eller API-nøkkel",
@@ -106,7 +104,7 @@ export const dict = {
"dialog.model.manage": "Administrer modeller", "dialog.model.manage": "Administrer modeller",
"dialog.model.manage.description": "Tilpass hvilke modeller som vises i modellvelgeren.", "dialog.model.manage.description": "Tilpass hvilke modeller som vises i modellvelgeren.",
"dialog.model.unpaid.freeModels.title": "Gratis modeller levert av Kilo CLI", "dialog.model.unpaid.freeModels.title": "Gratis modeller levert av Kilo",
"dialog.model.unpaid.addMore.title": "Legg til flere modeller fra populære leverandører", "dialog.model.unpaid.addMore.title": "Legg til flere modeller fra populære leverandører",
"dialog.provider.viewAll": "Vis flere leverandører", "dialog.provider.viewAll": "Vis flere leverandører",
@@ -119,21 +117,21 @@ export const dict = {
"provider.connect.status.waiting": "Venter på autorisering...", "provider.connect.status.waiting": "Venter på autorisering...",
"provider.connect.status.failed": "Autorisering mislyktes: {{error}}", "provider.connect.status.failed": "Autorisering mislyktes: {{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"Skriv inn din {{provider}} API-nøkkel for å koble til kontoen din og bruke {{provider}}-modeller i Kilo CLI.", "Skriv inn din {{provider}} API-nøkkel for å koble til kontoen din og bruke {{provider}}-modeller i Kilo.",
"provider.connect.apiKey.label": "{{provider}} API-nøkkel", "provider.connect.apiKey.label": "{{provider}} API-nøkkel",
"provider.connect.apiKey.placeholder": "API-nøkkel", "provider.connect.apiKey.placeholder": "API-nøkkel",
"provider.connect.apiKey.required": "API-nøkkel er påkrevd", "provider.connect.apiKey.required": "API-nøkkel er påkrevd",
"provider.connect.kiloGateway.line1": "provider.connect.opencodeZen.line1":
"Kilo Gateway gir deg tilgang til et utvalg av pålitelige optimaliserte modeller for kodeagenter.", "Kilo Zen gir deg tilgang til et utvalg av pålitelige optimaliserte modeller for kodeagenter.",
"provider.connect.kiloGateway.line2": "provider.connect.opencodeZen.line2":
"Med én enkelt API-nøkkel får du tilgang til modeller som Claude, GPT, Gemini, GLM og flere.", "Med én enkelt API-nøkkel får du tilgang til modeller som Claude, GPT, Gemini, GLM og flere.",
"provider.connect.kiloGateway.visit.prefix": "Besøk ", "provider.connect.opencodeZen.visit.prefix": "Besøk ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": " for å hente API-nøkkelen din.", "provider.connect.opencodeZen.visit.suffix": " for å hente API-nøkkelen din.",
"provider.connect.oauth.code.visit.prefix": "Besøk ", "provider.connect.oauth.code.visit.prefix": "Besøk ",
"provider.connect.oauth.code.visit.link": "denne lenken", "provider.connect.oauth.code.visit.link": "denne lenken",
"provider.connect.oauth.code.visit.suffix": "provider.connect.oauth.code.visit.suffix":
" for å hente autorisasjonskoden din for å koble til kontoen din og bruke {{provider}}-modeller i Kilo CLI.", " for å hente autorisasjonskoden din for å koble til kontoen din og bruke {{provider}}-modeller i Kilo.",
"provider.connect.oauth.code.label": "{{method}} autorisasjonskode", "provider.connect.oauth.code.label": "{{method}} autorisasjonskode",
"provider.connect.oauth.code.placeholder": "Autorisasjonskode", "provider.connect.oauth.code.placeholder": "Autorisasjonskode",
"provider.connect.oauth.code.required": "Autorisasjonskode er påkrevd", "provider.connect.oauth.code.required": "Autorisasjonskode er påkrevd",
@@ -141,7 +139,7 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": "Besøk ", "provider.connect.oauth.auto.visit.prefix": "Besøk ",
"provider.connect.oauth.auto.visit.link": "denne lenken", "provider.connect.oauth.auto.visit.link": "denne lenken",
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
" og skriv inn koden nedenfor for å koble til kontoen din og bruke {{provider}}-modeller i Kilo CLI.", " og skriv inn koden nedenfor for å koble til kontoen din og bruke {{provider}}-modeller i Kilo.",
"provider.connect.oauth.auto.confirmationCode": "Bekreftelseskode", "provider.connect.oauth.auto.confirmationCode": "Bekreftelseskode",
"provider.connect.toast.connected.title": "{{provider}} tilkoblet", "provider.connect.toast.connected.title": "{{provider}} tilkoblet",
"provider.connect.toast.connected.description": "{{provider}}-modeller er nå tilgjengelige.", "provider.connect.toast.connected.description": "{{provider}}-modeller er nå tilgjengelige.",
@@ -252,7 +250,7 @@ export const dict = {
"dialog.directory.empty": "Ingen mapper funnet", "dialog.directory.empty": "Ingen mapper funnet",
"dialog.server.title": "Servere", "dialog.server.title": "Servere",
"dialog.server.description": "Bytt hvilken Kilo CLI-server denne appen kobler til.", "dialog.server.description": "Bytt hvilken Kilo-server denne appen kobler til.",
"dialog.server.search.placeholder": "Søk etter servere", "dialog.server.search.placeholder": "Søk etter servere",
"dialog.server.empty": "Ingen servere ennå", "dialog.server.empty": "Ingen servere ennå",
"dialog.server.add.title": "Legg til en server", "dialog.server.add.title": "Legg til en server",
@@ -371,7 +369,7 @@ export const dict = {
"toast.session.listFailed.title": "Kunne ikke laste sesjoner for {{project}}", "toast.session.listFailed.title": "Kunne ikke laste sesjoner for {{project}}",
"toast.update.title": "Oppdatering tilgjengelig", "toast.update.title": "Oppdatering tilgjengelig",
"toast.update.description": "En ny versjon av Kilo CLI ({{version}}) er nå tilgjengelig for installasjon.", "toast.update.description": "En ny versjon av Kilo ({{version}}) er nå tilgjengelig for installasjon.",
"toast.update.action.installRestart": "Installer og start på nytt", "toast.update.action.installRestart": "Installer og start på nytt",
"toast.update.action.notYet": "Ikke nå", "toast.update.action.notYet": "Ikke nå",
@@ -382,7 +380,7 @@ export const dict = {
"error.page.action.checking": "Sjekker...", "error.page.action.checking": "Sjekker...",
"error.page.action.checkUpdates": "Se etter oppdateringer", "error.page.action.checkUpdates": "Se etter oppdateringer",
"error.page.action.updateTo": "Oppdater til {{version}}", "error.page.action.updateTo": "Oppdater til {{version}}",
"error.page.report.prefix": "Vennligst rapporter denne feilen til Kilo CLI-teamet", "error.page.report.prefix": "Vennligst rapporter denne feilen til Kilo-teamet",
"error.page.report.discord": "på Discord", "error.page.report.discord": "på Discord",
"error.page.version": "Versjon: {{version}}", "error.page.version": "Versjon: {{version}}",
@@ -400,7 +398,7 @@ export const dict = {
"error.chain.didYouMean": "Mente du: {{suggestions}}", "error.chain.didYouMean": "Mente du: {{suggestions}}",
"error.chain.modelNotFound": "Modell ikke funnet: {{provider}}/{{model}}", "error.chain.modelNotFound": "Modell ikke funnet: {{provider}}/{{model}}",
"error.chain.checkConfig": "Sjekk leverandør-/modellnavnene i konfigurasjonen din (opencode.json)", "error.chain.checkConfig": "Sjekk leverandør-/modellnavnene i konfigurasjonen din (opencode.json)",
"error.chain.mcpFailed": 'MCP-server "{{name}}" mislyktes. Merk at Kilo CLI ikke støtter MCP-autentisering ennå.', "error.chain.mcpFailed": 'MCP-server "{{name}}" mislyktes. Merk at Kilo ikke støtter MCP-autentisering ennå.',
"error.chain.providerAuthFailed": "Leverandørautentisering mislyktes ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "Leverandørautentisering mislyktes ({{provider}}): {{message}}",
"error.chain.providerInitFailed": "error.chain.providerInitFailed":
'Kunne ikke initialisere leverandør "{{provider}}". Sjekk legitimasjon og konfigurasjon.', 'Kunne ikke initialisere leverandør "{{provider}}". Sjekk legitimasjon og konfigurasjon.',
@@ -509,12 +507,12 @@ export const dict = {
"sidebar.workspaces.enable": "Aktiver arbeidsområder", "sidebar.workspaces.enable": "Aktiver arbeidsområder",
"sidebar.workspaces.disable": "Deaktiver arbeidsområder", "sidebar.workspaces.disable": "Deaktiver arbeidsområder",
"sidebar.gettingStarted.title": "Kom i gang", "sidebar.gettingStarted.title": "Kom i gang",
"sidebar.gettingStarted.line1": "Kilo CLI inkluderer gratis modeller så du kan starte umiddelbart.", "sidebar.gettingStarted.line1": "Kilo 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.gettingStarted.line2": "Koble til en leverandør for å bruke modeller, inkl. Claude, GPT, Gemini osv.",
"sidebar.project.recentSessions": "Nylige sesjoner", "sidebar.project.recentSessions": "Nylige sesjoner",
"sidebar.project.viewAllSessions": "Vis alle sesjoner", "sidebar.project.viewAllSessions": "Vis alle sesjoner",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "Skrivebord", "settings.section.desktop": "Skrivebord",
"settings.section.server": "Server", "settings.section.server": "Server",
"settings.tab.general": "Generelt", "settings.tab.general": "Generelt",
@@ -526,11 +524,11 @@ export const dict = {
"settings.general.section.sounds": "Lydeffekter", "settings.general.section.sounds": "Lydeffekter",
"settings.general.row.language.title": "Språk", "settings.general.row.language.title": "Språk",
"settings.general.row.language.description": "Endre visningsspråket for Kilo CLI", "settings.general.row.language.description": "Endre visningsspråket for Kilo",
"settings.general.row.appearance.title": "Utseende", "settings.general.row.appearance.title": "Utseende",
"settings.general.row.appearance.description": "Tilpass hvordan Kilo CLI ser ut på enheten din", "settings.general.row.appearance.description": "Tilpass hvordan Kilo ser ut på enheten din",
"settings.general.row.theme.title": "Tema", "settings.general.row.theme.title": "Tema",
"settings.general.row.theme.description": "Tilpass hvordan Kilo CLI er tematisert.", "settings.general.row.theme.description": "Tilpass hvordan Kilo er tematisert.",
"settings.general.row.font.title": "Skrift", "settings.general.row.font.title": "Skrift",
"settings.general.row.font.description": "Tilpass mono-skriften som brukes i kodeblokker", "settings.general.row.font.description": "Tilpass mono-skriften som brukes i kodeblokker",
@@ -538,13 +536,13 @@ export const dict = {
"settings.general.row.releaseNotes.description": 'Vis "Hva er nytt"-vinduer etter oppdateringer', "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.title": "Se etter oppdateringer ved oppstart",
"settings.updates.row.startup.description": "Se automatisk etter oppdateringer når OpenCode starter", "settings.updates.row.startup.description": "Se automatisk etter oppdateringer når Kilo starter",
"settings.updates.row.check.title": "Se etter oppdateringer", "settings.updates.row.check.title": "Se etter oppdateringer",
"settings.updates.row.check.description": "Se etter oppdateringer manuelt og installer hvis tilgjengelig", "settings.updates.row.check.description": "Se etter oppdateringer manuelt og installer hvis tilgjengelig",
"settings.updates.action.checkNow": "Sjekk nå", "settings.updates.action.checkNow": "Sjekk nå",
"settings.updates.action.checking": "Sjekker...", "settings.updates.action.checking": "Sjekker...",
"settings.updates.toast.latest.title": "Du er oppdatert", "settings.updates.toast.latest.title": "Du er oppdatert",
"settings.updates.toast.latest.description": "Du bruker den nyeste versjonen av OpenCode.", "settings.updates.toast.latest.description": "Du bruker den nyeste versjonen av Kilo.",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
+21 -23
View File
@@ -89,10 +89,8 @@ export const dict = {
"dialog.provider.search.placeholder": "Szukaj dostawców", "dialog.provider.search.placeholder": "Szukaj dostawców",
"dialog.provider.empty": "Nie znaleziono dostawców", "dialog.provider.empty": "Nie znaleziono dostawców",
"dialog.provider.group.popular": "Popularne", "dialog.provider.group.popular": "Popularne",
"dialog.provider.group.recommended": "Zalecane", // kilocode_change
"dialog.provider.group.other": "Inne", "dialog.provider.group.other": "Inne",
"dialog.provider.tag.recommended": "Zalecane", "dialog.provider.tag.recommended": "Zalecane",
"dialog.provider.kilo.note": "Dostęp do ponad 500 modeli AI",
"dialog.provider.anthropic.note": "Połącz z Claude Pro/Max lub kluczem API", "dialog.provider.anthropic.note": "Połącz z Claude Pro/Max lub kluczem API",
"dialog.provider.openai.note": "Połącz z ChatGPT Pro/Plus lub kluczem API", "dialog.provider.openai.note": "Połącz z ChatGPT Pro/Plus lub kluczem API",
"dialog.provider.copilot.note": "Połącz z Copilot lub kluczem API", "dialog.provider.copilot.note": "Połącz z Copilot lub kluczem API",
@@ -103,7 +101,7 @@ export const dict = {
"dialog.model.manage": "Zarządzaj modelami", "dialog.model.manage": "Zarządzaj modelami",
"dialog.model.manage.description": "Dostosuj, które modele pojawiają się w wyborze modelu.", "dialog.model.manage.description": "Dostosuj, które modele pojawiają się w wyborze modelu.",
"dialog.model.unpaid.freeModels.title": "Darmowe modele dostarczane przez Kilo CLI", "dialog.model.unpaid.freeModels.title": "Darmowe modele dostarczane przez Kilo",
"dialog.model.unpaid.addMore.title": "Dodaj więcej modeli od popularnych dostawców", "dialog.model.unpaid.addMore.title": "Dodaj więcej modeli od popularnych dostawców",
"dialog.provider.viewAll": "Zobacz więcej dostawców", "dialog.provider.viewAll": "Zobacz więcej dostawców",
@@ -116,21 +114,21 @@ export const dict = {
"provider.connect.status.waiting": "Oczekiwanie na autoryzację...", "provider.connect.status.waiting": "Oczekiwanie na autoryzację...",
"provider.connect.status.failed": "Autoryzacja nie powiodła się: {{error}}", "provider.connect.status.failed": "Autoryzacja nie powiodła się: {{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"Wprowadź swój klucz API {{provider}}, aby połączyć konto i używać modeli {{provider}} w Kilo CLI.", "Wprowadź swój klucz API {{provider}}, aby połączyć konto i używać modeli {{provider}} w Kilo.",
"provider.connect.apiKey.label": "Klucz API {{provider}}", "provider.connect.apiKey.label": "Klucz API {{provider}}",
"provider.connect.apiKey.placeholder": "Klucz API", "provider.connect.apiKey.placeholder": "Klucz API",
"provider.connect.apiKey.required": "Klucz API jest wymagany", "provider.connect.apiKey.required": "Klucz API jest wymagany",
"provider.connect.kiloGateway.line1": "provider.connect.opencodeZen.line1":
"Kilo Gateway daje dostęp do wybranego zestawu niezawodnych, zoptymalizowanych modeli dla agentów kodujących.", "Kilo Zen daje dostęp do wybranego zestawu niezawodnych, zoptymalizowanych modeli dla agentów kodujących.",
"provider.connect.kiloGateway.line2": "provider.connect.opencodeZen.line2":
"Z jednym kluczem API uzyskasz dostęp do modeli takich jak Claude, GPT, Gemini, GLM i więcej.", "Z jednym kluczem API uzyskasz dostęp do modeli takich jak Claude, GPT, Gemini, GLM i więcej.",
"provider.connect.kiloGateway.visit.prefix": "Odwiedź ", "provider.connect.opencodeZen.visit.prefix": "Odwiedź ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": ", aby odebrać swój klucz API.", "provider.connect.opencodeZen.visit.suffix": ", aby odebrać swój klucz API.",
"provider.connect.oauth.code.visit.prefix": "Odwiedź ", "provider.connect.oauth.code.visit.prefix": "Odwiedź ",
"provider.connect.oauth.code.visit.link": "ten link", "provider.connect.oauth.code.visit.link": "ten link",
"provider.connect.oauth.code.visit.suffix": "provider.connect.oauth.code.visit.suffix":
", aby odebrać kod autoryzacyjny, połączyć konto i używać modeli {{provider}} w Kilo CLI.", ", aby odebrać kod autoryzacyjny, połączyć konto i używać modeli {{provider}} w Kilo.",
"provider.connect.oauth.code.label": "Kod autoryzacyjny {{method}}", "provider.connect.oauth.code.label": "Kod autoryzacyjny {{method}}",
"provider.connect.oauth.code.placeholder": "Kod autoryzacyjny", "provider.connect.oauth.code.placeholder": "Kod autoryzacyjny",
"provider.connect.oauth.code.required": "Kod autoryzacyjny jest wymagany", "provider.connect.oauth.code.required": "Kod autoryzacyjny jest wymagany",
@@ -138,7 +136,7 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": "Odwiedź ", "provider.connect.oauth.auto.visit.prefix": "Odwiedź ",
"provider.connect.oauth.auto.visit.link": "ten link", "provider.connect.oauth.auto.visit.link": "ten link",
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
" i wprowadź poniższy kod, aby połączyć konto i używać modeli {{provider}} w Kilo CLI.", " i wprowadź poniższy kod, aby połączyć konto i używać modeli {{provider}} w Kilo.",
"provider.connect.oauth.auto.confirmationCode": "Kod potwierdzający", "provider.connect.oauth.auto.confirmationCode": "Kod potwierdzający",
"provider.connect.toast.connected.title": "Połączono {{provider}}", "provider.connect.toast.connected.title": "Połączono {{provider}}",
"provider.connect.toast.connected.description": "Modele {{provider}} są teraz dostępne do użycia.", "provider.connect.toast.connected.description": "Modele {{provider}} są teraz dostępne do użycia.",
@@ -249,7 +247,7 @@ export const dict = {
"dialog.directory.empty": "Nie znaleziono folderów", "dialog.directory.empty": "Nie znaleziono folderów",
"dialog.server.title": "Serwery", "dialog.server.title": "Serwery",
"dialog.server.description": "Przełącz serwer Kilo CLI, z którym łączy się ta aplikacja.", "dialog.server.description": "Przełącz serwer Kilo, z którym łączy się ta aplikacja.",
"dialog.server.search.placeholder": "Szukaj serwerów", "dialog.server.search.placeholder": "Szukaj serwerów",
"dialog.server.empty": "Brak serwerów", "dialog.server.empty": "Brak serwerów",
"dialog.server.add.title": "Dodaj serwer", "dialog.server.add.title": "Dodaj serwer",
@@ -369,7 +367,7 @@ export const dict = {
"toast.session.listFailed.title": "Nie udało się załadować sesji dla {{project}}", "toast.session.listFailed.title": "Nie udało się załadować sesji dla {{project}}",
"toast.update.title": "Dostępna aktualizacja", "toast.update.title": "Dostępna aktualizacja",
"toast.update.description": "Nowa wersja Kilo CLI ({{version}}) jest teraz dostępna do instalacji.", "toast.update.description": "Nowa wersja Kilo ({{version}}) jest teraz dostępna do instalacji.",
"toast.update.action.installRestart": "Zainstaluj i zrestartuj", "toast.update.action.installRestart": "Zainstaluj i zrestartuj",
"toast.update.action.notYet": "Jeszcze nie", "toast.update.action.notYet": "Jeszcze nie",
@@ -380,7 +378,7 @@ export const dict = {
"error.page.action.checking": "Sprawdzanie...", "error.page.action.checking": "Sprawdzanie...",
"error.page.action.checkUpdates": "Sprawdź aktualizacje", "error.page.action.checkUpdates": "Sprawdź aktualizacje",
"error.page.action.updateTo": "Zaktualizuj do {{version}}", "error.page.action.updateTo": "Zaktualizuj do {{version}}",
"error.page.report.prefix": "Proszę zgłosić ten błąd do zespołu Kilo CLI", "error.page.report.prefix": "Proszę zgłosić ten błąd do zespołu Kilo",
"error.page.report.discord": "na Discordzie", "error.page.report.discord": "na Discordzie",
"error.page.version": "Wersja: {{version}}", "error.page.version": "Wersja: {{version}}",
@@ -399,7 +397,7 @@ export const dict = {
"error.chain.modelNotFound": "Model nie znaleziony: {{provider}}/{{model}}", "error.chain.modelNotFound": "Model nie znaleziony: {{provider}}/{{model}}",
"error.chain.checkConfig": "Sprawdź swoją konfigurację (opencode.json) nazwy dostawców/modeli", "error.chain.checkConfig": "Sprawdź swoją konfigurację (opencode.json) nazwy dostawców/modeli",
"error.chain.mcpFailed": "error.chain.mcpFailed":
'Serwer MCP "{{name}}" nie powiódł się. Uwaga, Kilo CLI nie obsługuje jeszcze uwierzytelniania MCP.', 'Serwer MCP "{{name}}" nie powiódł się. Uwaga, Kilo nie obsługuje jeszcze uwierzytelniania MCP.',
"error.chain.providerAuthFailed": "Uwierzytelnianie dostawcy nie powiodło się ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "Uwierzytelnianie dostawcy nie powiodło się ({{provider}}): {{message}}",
"error.chain.providerInitFailed": "error.chain.providerInitFailed":
'Nie udało się zainicjować dostawcy "{{provider}}". Sprawdź poświadczenia i konfigurację.', 'Nie udało się zainicjować dostawcy "{{provider}}". Sprawdź poświadczenia i konfigurację.',
@@ -508,12 +506,12 @@ export const dict = {
"sidebar.workspaces.enable": "Włącz przestrzenie robocze", "sidebar.workspaces.enable": "Włącz przestrzenie robocze",
"sidebar.workspaces.disable": "Wyłącz przestrzenie robocze", "sidebar.workspaces.disable": "Wyłącz przestrzenie robocze",
"sidebar.gettingStarted.title": "Pierwsze kroki", "sidebar.gettingStarted.title": "Pierwsze kroki",
"sidebar.gettingStarted.line1": "Kilo CLI zawiera darmowe modele, więc możesz zacząć od razu.", "sidebar.gettingStarted.line1": "Kilo 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.gettingStarted.line2": "Połącz dowolnego dostawcę, aby używać modeli, w tym Claude, GPT, Gemini itp.",
"sidebar.project.recentSessions": "Ostatnie sesje", "sidebar.project.recentSessions": "Ostatnie sesje",
"sidebar.project.viewAllSessions": "Zobacz wszystkie sesje", "sidebar.project.viewAllSessions": "Zobacz wszystkie sesje",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "Pulpit", "settings.section.desktop": "Pulpit",
"settings.section.server": "Serwer", "settings.section.server": "Serwer",
"settings.tab.general": "Ogólne", "settings.tab.general": "Ogólne",
@@ -525,11 +523,11 @@ export const dict = {
"settings.general.section.sounds": "Efekty dźwiękowe", "settings.general.section.sounds": "Efekty dźwiękowe",
"settings.general.row.language.title": "Język", "settings.general.row.language.title": "Język",
"settings.general.row.language.description": "Zmień język wyświetlania dla Kilo CLI", "settings.general.row.language.description": "Zmień język wyświetlania dla Kilo",
"settings.general.row.appearance.title": "Wygląd", "settings.general.row.appearance.title": "Wygląd",
"settings.general.row.appearance.description": "Dostosuj wygląd Kilo CLI na swoim urządzeniu", "settings.general.row.appearance.description": "Dostosuj wygląd Kilo na swoim urządzeniu",
"settings.general.row.theme.title": "Motyw", "settings.general.row.theme.title": "Motyw",
"settings.general.row.theme.description": "Dostosuj motyw Kilo CLI.", "settings.general.row.theme.description": "Dostosuj motyw Kilo.",
"settings.general.row.font.title": "Czcionka", "settings.general.row.font.title": "Czcionka",
"settings.general.row.font.description": "Dostosuj czcionkę mono używaną w blokach kodu", "settings.general.row.font.description": "Dostosuj czcionkę mono używaną w blokach kodu",
@@ -537,13 +535,13 @@ export const dict = {
"settings.general.row.releaseNotes.description": 'Pokazuj wyskakujące okna "Co nowego" po aktualizacjach', "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.title": "Sprawdzaj aktualizacje przy uruchomieniu",
"settings.updates.row.startup.description": "Automatycznie sprawdzaj aktualizacje podczas uruchamiania OpenCode", "settings.updates.row.startup.description": "Automatycznie sprawdzaj aktualizacje podczas uruchamiania Kilo",
"settings.updates.row.check.title": "Sprawdź aktualizacje", "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.row.check.description": "Ręcznie sprawdź aktualizacje i zainstaluj, jeśli są dostępne",
"settings.updates.action.checkNow": "Sprawdź teraz", "settings.updates.action.checkNow": "Sprawdź teraz",
"settings.updates.action.checking": "Sprawdzanie...", "settings.updates.action.checking": "Sprawdzanie...",
"settings.updates.toast.latest.title": "Masz najnowszą wersję", "settings.updates.toast.latest.title": "Masz najnowszą wersję",
"settings.updates.toast.latest.description": "Korzystasz z najnowszej wersji OpenCode.", "settings.updates.toast.latest.description": "Korzystasz z najnowszej wersji Kilo.",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
"font.option.firaCode": "Fira Code", "font.option.firaCode": "Fira Code",
+21 -23
View File
@@ -89,10 +89,8 @@ export const dict = {
"dialog.provider.search.placeholder": "Поиск провайдеров", "dialog.provider.search.placeholder": "Поиск провайдеров",
"dialog.provider.empty": "Провайдеры не найдены", "dialog.provider.empty": "Провайдеры не найдены",
"dialog.provider.group.popular": "Популярные", "dialog.provider.group.popular": "Популярные",
"dialog.provider.group.recommended": "Рекомендуемые", // kilocode_change
"dialog.provider.group.other": "Другие", "dialog.provider.group.other": "Другие",
"dialog.provider.tag.recommended": "Рекомендуемые", "dialog.provider.tag.recommended": "Рекомендуемые",
"dialog.provider.kilo.note": "Доступ к более чем 500 моделям ИИ",
"dialog.provider.anthropic.note": "Подключитесь с помощью Claude Pro/Max или API ключа", "dialog.provider.anthropic.note": "Подключитесь с помощью Claude Pro/Max или API ключа",
"dialog.provider.openai.note": "Подключитесь с помощью ChatGPT Pro/Plus или API ключа", "dialog.provider.openai.note": "Подключитесь с помощью ChatGPT Pro/Plus или API ключа",
"dialog.provider.copilot.note": "Подключитесь с помощью Copilot или API ключа", "dialog.provider.copilot.note": "Подключитесь с помощью Copilot или API ключа",
@@ -103,7 +101,7 @@ export const dict = {
"dialog.model.manage": "Управление моделями", "dialog.model.manage": "Управление моделями",
"dialog.model.manage.description": "Настройте какие модели появляются в выборе модели", "dialog.model.manage.description": "Настройте какие модели появляются в выборе модели",
"dialog.model.unpaid.freeModels.title": "Бесплатные модели от Kilo CLI", "dialog.model.unpaid.freeModels.title": "Бесплатные модели от Kilo",
"dialog.model.unpaid.addMore.title": "Добавьте больше моделей от популярных провайдеров", "dialog.model.unpaid.addMore.title": "Добавьте больше моделей от популярных провайдеров",
"dialog.provider.viewAll": "Показать больше провайдеров", "dialog.provider.viewAll": "Показать больше провайдеров",
@@ -116,21 +114,21 @@ export const dict = {
"provider.connect.status.waiting": "Ожидание авторизации...", "provider.connect.status.waiting": "Ожидание авторизации...",
"provider.connect.status.failed": "Ошибка авторизации: {{error}}", "provider.connect.status.failed": "Ошибка авторизации: {{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"Введите ваш API ключ {{provider}} для подключения аккаунта и использования моделей {{provider}} в Kilo CLI.", "Введите ваш API ключ {{provider}} для подключения аккаунта и использования моделей {{provider}} в Kilo.",
"provider.connect.apiKey.label": "{{provider}} API ключ", "provider.connect.apiKey.label": "{{provider}} API ключ",
"provider.connect.apiKey.placeholder": "API ключ", "provider.connect.apiKey.placeholder": "API ключ",
"provider.connect.apiKey.required": "API ключ обязателен", "provider.connect.apiKey.required": "API ключ обязателен",
"provider.connect.kiloGateway.line1": "provider.connect.opencodeZen.line1":
"Kilo Gateway даёт вам доступ к отобранным надёжным оптимизированным моделям для агентов программирования.", "Kilo Zen даёт вам доступ к отобранным надёжным оптимизированным моделям для агентов программирования.",
"provider.connect.kiloGateway.line2": "provider.connect.opencodeZen.line2":
"С одним API ключом вы получите доступ к таким моделям как Claude, GPT, Gemini, GLM и другим.", "С одним API ключом вы получите доступ к таким моделям как Claude, GPT, Gemini, GLM и другим.",
"provider.connect.kiloGateway.visit.prefix": "Посетите ", "provider.connect.opencodeZen.visit.prefix": "Посетите ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": " чтобы получить ваш API ключ.", "provider.connect.opencodeZen.visit.suffix": " чтобы получить ваш API ключ.",
"provider.connect.oauth.code.visit.prefix": "Посетите ", "provider.connect.oauth.code.visit.prefix": "Посетите ",
"provider.connect.oauth.code.visit.link": "эту ссылку", "provider.connect.oauth.code.visit.link": "эту ссылку",
"provider.connect.oauth.code.visit.suffix": "provider.connect.oauth.code.visit.suffix":
" чтобы получить код авторизации для подключения аккаунта и использования моделей {{provider}} в Kilo CLI.", " чтобы получить код авторизации для подключения аккаунта и использования моделей {{provider}} в Kilo.",
"provider.connect.oauth.code.label": "{{method}} код авторизации", "provider.connect.oauth.code.label": "{{method}} код авторизации",
"provider.connect.oauth.code.placeholder": "Код авторизации", "provider.connect.oauth.code.placeholder": "Код авторизации",
"provider.connect.oauth.code.required": "Код авторизации обязателен", "provider.connect.oauth.code.required": "Код авторизации обязателен",
@@ -138,7 +136,7 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": "Посетите ", "provider.connect.oauth.auto.visit.prefix": "Посетите ",
"provider.connect.oauth.auto.visit.link": "эту ссылку", "provider.connect.oauth.auto.visit.link": "эту ссылку",
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
" и введите код ниже для подключения аккаунта и использования моделей {{provider}} в Kilo CLI.", " и введите код ниже для подключения аккаунта и использования моделей {{provider}} в Kilo.",
"provider.connect.oauth.auto.confirmationCode": "Код подтверждения", "provider.connect.oauth.auto.confirmationCode": "Код подтверждения",
"provider.connect.toast.connected.title": "{{provider}} подключён", "provider.connect.toast.connected.title": "{{provider}} подключён",
"provider.connect.toast.connected.description": "Модели {{provider}} теперь доступны.", "provider.connect.toast.connected.description": "Модели {{provider}} теперь доступны.",
@@ -249,7 +247,7 @@ export const dict = {
"dialog.directory.empty": "Папки не найдены", "dialog.directory.empty": "Папки не найдены",
"dialog.server.title": "Серверы", "dialog.server.title": "Серверы",
"dialog.server.description": "Переключите сервер Kilo CLI к которому подключается приложение.", "dialog.server.description": "Переключите сервер Kilo к которому подключается приложение.",
"dialog.server.search.placeholder": "Поиск серверов", "dialog.server.search.placeholder": "Поиск серверов",
"dialog.server.empty": "Серверов пока нет", "dialog.server.empty": "Серверов пока нет",
"dialog.server.add.title": "Добавить сервер", "dialog.server.add.title": "Добавить сервер",
@@ -370,7 +368,7 @@ export const dict = {
"toast.session.listFailed.title": "Не удалось загрузить сессии для {{project}}", "toast.session.listFailed.title": "Не удалось загрузить сессии для {{project}}",
"toast.update.title": "Доступно обновление", "toast.update.title": "Доступно обновление",
"toast.update.description": "Новая версия Kilo CLI ({{version}}) доступна для установки.", "toast.update.description": "Новая версия Kilo ({{version}}) доступна для установки.",
"toast.update.action.installRestart": "Установить и перезапустить", "toast.update.action.installRestart": "Установить и перезапустить",
"toast.update.action.notYet": "Пока нет", "toast.update.action.notYet": "Пока нет",
@@ -381,7 +379,7 @@ export const dict = {
"error.page.action.checking": "Проверка...", "error.page.action.checking": "Проверка...",
"error.page.action.checkUpdates": "Проверить обновления", "error.page.action.checkUpdates": "Проверить обновления",
"error.page.action.updateTo": "Обновить до {{version}}", "error.page.action.updateTo": "Обновить до {{version}}",
"error.page.report.prefix": "Пожалуйста, сообщите об этой ошибке команде Kilo CLI", "error.page.report.prefix": "Пожалуйста, сообщите об этой ошибке команде Kilo",
"error.page.report.discord": "в Discord", "error.page.report.discord": "в Discord",
"error.page.version": "Версия: {{version}}", "error.page.version": "Версия: {{version}}",
@@ -400,7 +398,7 @@ export const dict = {
"error.chain.modelNotFound": "Модель не найдена: {{provider}}/{{model}}", "error.chain.modelNotFound": "Модель не найдена: {{provider}}/{{model}}",
"error.chain.checkConfig": "Проверьте названия провайдера/модели в конфиге (opencode.json)", "error.chain.checkConfig": "Проверьте названия провайдера/модели в конфиге (opencode.json)",
"error.chain.mcpFailed": "error.chain.mcpFailed":
'MCP сервер "{{name}}" завершился с ошибкой. Обратите внимание, что Kilo CLI пока не поддерживает MCP авторизацию.', 'MCP сервер "{{name}}" завершился с ошибкой. Обратите внимание, что Kilo пока не поддерживает MCP авторизацию.',
"error.chain.providerAuthFailed": "Ошибка аутентификации провайдера ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "Ошибка аутентификации провайдера ({{provider}}): {{message}}",
"error.chain.providerInitFailed": "error.chain.providerInitFailed":
'Не удалось инициализировать провайдера "{{provider}}". Проверьте учётные данные и конфигурацию.', 'Не удалось инициализировать провайдера "{{provider}}". Проверьте учётные данные и конфигурацию.',
@@ -510,13 +508,13 @@ export const dict = {
"sidebar.workspaces.enable": "Включить рабочие пространства", "sidebar.workspaces.enable": "Включить рабочие пространства",
"sidebar.workspaces.disable": "Отключить рабочие пространства", "sidebar.workspaces.disable": "Отключить рабочие пространства",
"sidebar.gettingStarted.title": "Начало работы", "sidebar.gettingStarted.title": "Начало работы",
"sidebar.gettingStarted.line1": "Kilo CLI включает бесплатные модели, чтобы вы могли начать сразу.", "sidebar.gettingStarted.line1": "Kilo включает бесплатные модели, чтобы вы могли начать сразу.",
"sidebar.gettingStarted.line2": "sidebar.gettingStarted.line2":
"Подключите любого провайдера для использования моделей, включая Claude, GPT, Gemini и др.", "Подключите любого провайдера для использования моделей, включая Claude, GPT, Gemini и др.",
"sidebar.project.recentSessions": "Недавние сессии", "sidebar.project.recentSessions": "Недавние сессии",
"sidebar.project.viewAllSessions": "Посмотреть все сессии", "sidebar.project.viewAllSessions": "Посмотреть все сессии",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "Приложение", "settings.section.desktop": "Приложение",
"settings.section.server": "Сервер", "settings.section.server": "Сервер",
"settings.tab.general": "Основные", "settings.tab.general": "Основные",
@@ -528,11 +526,11 @@ export const dict = {
"settings.general.section.sounds": "Звуковые эффекты", "settings.general.section.sounds": "Звуковые эффекты",
"settings.general.row.language.title": "Язык", "settings.general.row.language.title": "Язык",
"settings.general.row.language.description": "Изменить язык отображения Kilo CLI", "settings.general.row.language.description": "Изменить язык отображения Kilo",
"settings.general.row.appearance.title": "Внешний вид", "settings.general.row.appearance.title": "Внешний вид",
"settings.general.row.appearance.description": "Настройте как Kilo CLI выглядит на вашем устройстве", "settings.general.row.appearance.description": "Настройте как Kilo выглядит на вашем устройстве",
"settings.general.row.theme.title": "Тема", "settings.general.row.theme.title": "Тема",
"settings.general.row.theme.description": "Настройте оформление Kilo CLI.", "settings.general.row.theme.description": "Настройте оформление Kilo.",
"settings.general.row.font.title": "Шрифт", "settings.general.row.font.title": "Шрифт",
"settings.general.row.font.description": "Настройте моноширинный шрифт для блоков кода", "settings.general.row.font.description": "Настройте моноширинный шрифт для блоков кода",
@@ -540,13 +538,13 @@ export const dict = {
"settings.general.row.releaseNotes.description": 'Показывать всплывающие окна "Что нового" после обновлений', "settings.general.row.releaseNotes.description": 'Показывать всплывающие окна "Что нового" после обновлений',
"settings.updates.row.startup.title": "Проверять обновления при запуске", "settings.updates.row.startup.title": "Проверять обновления при запуске",
"settings.updates.row.startup.description": "Автоматически проверять обновления при запуске OpenCode", "settings.updates.row.startup.description": "Автоматически проверять обновления при запуске Kilo",
"settings.updates.row.check.title": "Проверить обновления", "settings.updates.row.check.title": "Проверить обновления",
"settings.updates.row.check.description": "Проверить обновления вручную и установить, если доступны", "settings.updates.row.check.description": "Проверить обновления вручную и установить, если доступны",
"settings.updates.action.checkNow": "Проверить сейчас", "settings.updates.action.checkNow": "Проверить сейчас",
"settings.updates.action.checking": "Проверка...", "settings.updates.action.checking": "Проверка...",
"settings.updates.toast.latest.title": "У вас последняя версия", "settings.updates.toast.latest.title": "У вас последняя версия",
"settings.updates.toast.latest.description": "Вы используете последнюю версию OpenCode.", "settings.updates.toast.latest.description": "Вы используете последнюю версию Kilo.",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
"font.option.firaCode": "Fira Code", "font.option.firaCode": "Fira Code",
+20 -27
View File
@@ -89,11 +89,9 @@ export const dict = {
"dialog.provider.search.placeholder": "ค้นหาผู้ให้บริการ", "dialog.provider.search.placeholder": "ค้นหาผู้ให้บริการ",
"dialog.provider.empty": "ไม่พบผู้ให้บริการ", "dialog.provider.empty": "ไม่พบผู้ให้บริการ",
"dialog.provider.group.popular": "ยอดนิยม", "dialog.provider.group.popular": "ยอดนิยม",
"dialog.provider.group.recommended": "แนะนำ", // kilocode_change
"dialog.provider.group.other": "อื่น ๆ", "dialog.provider.group.other": "อื่น ๆ",
"dialog.provider.tag.recommended": "แนะนำ", "dialog.provider.tag.recommended": "แนะนำ",
"dialog.provider.kilo.note": "เข้าถึงโมเดล AI มากกว่า 500 รายการ", // kilocode_change "dialog.provider.opencode.note": "โมเดลที่คัดสรร รวมถึง Claude, GPT, Gemini และอื่น ๆ",
"dialog.provider.opencode.note": "เชื่อมต่อกับ Kilo Gateway หรือคีย์ API", // kilocode_change
"dialog.provider.anthropic.note": "เข้าถึงโมเดล Claude โดยตรง รวมถึง Pro และ Max", "dialog.provider.anthropic.note": "เข้าถึงโมเดล Claude โดยตรง รวมถึง Pro และ Max",
"dialog.provider.copilot.note": "โมเดล Claude สำหรับการช่วยเหลือในการเขียนโค้ด", "dialog.provider.copilot.note": "โมเดล Claude สำหรับการช่วยเหลือในการเขียนโค้ด",
"dialog.provider.openai.note": "โมเดล GPT สำหรับงาน AI ทั่วไปที่รวดเร็วและมีความสามารถ", "dialog.provider.openai.note": "โมเดล GPT สำหรับงาน AI ทั่วไปที่รวดเร็วและมีความสามารถ",
@@ -107,7 +105,7 @@ export const dict = {
"dialog.model.manage": "จัดการโมเดล", "dialog.model.manage": "จัดการโมเดล",
"dialog.model.manage.description": "ปรับแต่งโมเดลที่จะปรากฏในตัวเลือกโมเดล", "dialog.model.manage.description": "ปรับแต่งโมเดลที่จะปรากฏในตัวเลือกโมเดล",
"dialog.model.unpaid.freeModels.title": "โมเดลฟรีที่จัดหาให้โดย Kilo CLI", // kilocode_change "dialog.model.unpaid.freeModels.title": "โมเดลฟรีที่จัดหาให้โดย Kilo",
"dialog.model.unpaid.addMore.title": "เพิ่มโมเดลเพิ่มเติมจากผู้ให้บริการยอดนิยม", "dialog.model.unpaid.addMore.title": "เพิ่มโมเดลเพิ่มเติมจากผู้ให้บริการยอดนิยม",
"dialog.provider.viewAll": "แสดงผู้ให้บริการเพิ่มเติม", "dialog.provider.viewAll": "แสดงผู้ให้บริการเพิ่มเติม",
@@ -119,35 +117,30 @@ export const dict = {
"provider.connect.status.inProgress": "กำลังอนุญาต...", "provider.connect.status.inProgress": "กำลังอนุญาต...",
"provider.connect.status.waiting": "รอการอนุญาต...", "provider.connect.status.waiting": "รอการอนุญาต...",
"provider.connect.status.failed": "การอนุญาตล้มเหลว: {{error}}", "provider.connect.status.failed": "การอนุญาตล้มเหลว: {{error}}",
// kilocode_change
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"ป้อนคีย์ API ของ {{provider}} เพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน Kilo CLI", "ป้อนคีย์ API ของ {{provider}} เพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน Kilo",
"provider.connect.apiKey.label": "คีย์ API ของ {{provider}}", "provider.connect.apiKey.label": "คีย์ API ของ {{provider}}",
"provider.connect.apiKey.placeholder": "คีย์ API", "provider.connect.apiKey.placeholder": "คีย์ API",
"provider.connect.apiKey.required": "ต้องใช้คีย์ API", "provider.connect.apiKey.required": "ต้องใช้คีย์ API",
// kilocode_change start - renamed from opencodeZen keys "provider.connect.opencodeZen.line1":
"provider.connect.kiloGateway.line1": "Kilo Zen ให้คุณเข้าถึงชุดโมเดลที่เชื่อถือได้และปรับแต่งแล้วสำหรับเอเจนต์การเขียนโค้ด",
"Kilo Gateway ให้คุณเข้าถึงชุดโมเดลที่เชื่อถือได้และปรับแต่งแล้วสำหรับเอเจนต์การเขียนโค้ด", "provider.connect.opencodeZen.line2":
"provider.connect.kiloGateway.line2":
"ด้วยคีย์ API เดียวคุณจะได้รับการเข้าถึงโมเดล เช่น Claude, GPT, Gemini, GLM และอื่น ๆ", "ด้วยคีย์ API เดียวคุณจะได้รับการเข้าถึงโมเดล เช่น Claude, GPT, Gemini, GLM และอื่น ๆ",
"provider.connect.kiloGateway.visit.prefix": "เยี่ยมชม ", "provider.connect.opencodeZen.visit.prefix": "เยี่ยมชม ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": " เพื่อรวบรวมคีย์ API ของคุณ", "provider.connect.opencodeZen.visit.suffix": " เพื่อรวบรวมคีย์ API ของคุณ",
// kilocode_change end
"provider.connect.oauth.code.visit.prefix": "เยี่ยมชม ", "provider.connect.oauth.code.visit.prefix": "เยี่ยมชม ",
"provider.connect.oauth.code.visit.link": "ลิงก์นี้", "provider.connect.oauth.code.visit.link": "ลิงก์นี้",
// kilocode_change
"provider.connect.oauth.code.visit.suffix": "provider.connect.oauth.code.visit.suffix":
" เพื่อรวบรวมรหัสการอนุญาตของคุณเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน Kilo CLI", " เพื่อรวบรวมรหัสการอนุญาตของคุณเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน Kilo",
"provider.connect.oauth.code.label": "รหัสการอนุญาต {{method}}", "provider.connect.oauth.code.label": "รหัสการอนุญาต {{method}}",
"provider.connect.oauth.code.placeholder": "รหัสการอนุญาต", "provider.connect.oauth.code.placeholder": "รหัสการอนุญาต",
"provider.connect.oauth.code.required": "ต้องใช้รหัสการอนุญาต", "provider.connect.oauth.code.required": "ต้องใช้รหัสการอนุญาต",
"provider.connect.oauth.code.invalid": "รหัสการอนุญาตไม่ถูกต้อง", "provider.connect.oauth.code.invalid": "รหัสการอนุญาตไม่ถูกต้อง",
"provider.connect.oauth.auto.visit.prefix": "เยี่ยมชม ", "provider.connect.oauth.auto.visit.prefix": "เยี่ยมชม ",
"provider.connect.oauth.auto.visit.link": "ลิงก์นี้", "provider.connect.oauth.auto.visit.link": "ลิงก์นี้",
// kilocode_change
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
" และป้อนรหัสด้านล่างเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน Kilo CLI", " และป้อนรหัสด้านล่างเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน Kilo",
"provider.connect.oauth.auto.confirmationCode": "รหัสยืนยัน", "provider.connect.oauth.auto.confirmationCode": "รหัสยืนยัน",
"provider.connect.toast.connected.title": "{{provider}} ที่เชื่อมต่อแล้ว", "provider.connect.toast.connected.title": "{{provider}} ที่เชื่อมต่อแล้ว",
"provider.connect.toast.connected.description": "โมเดล {{provider}} พร้อมใช้งานแล้ว", "provider.connect.toast.connected.description": "โมเดล {{provider}} พร้อมใช้งานแล้ว",
@@ -259,7 +252,7 @@ export const dict = {
"dialog.directory.empty": "ไม่พบโฟลเดอร์", "dialog.directory.empty": "ไม่พบโฟลเดอร์",
"dialog.server.title": "เซิร์ฟเวอร์", "dialog.server.title": "เซิร์ฟเวอร์",
"dialog.server.description": "สลับเซิร์ฟเวอร์ Kilo CLI ที่แอปนี้เชื่อมต่อด้วย", // kilocode_change "dialog.server.description": "สลับเซิร์ฟเวอร์ Kilo ที่แอปนี้เชื่อมต่อด้วย",
"dialog.server.search.placeholder": "ค้นหาเซิร์ฟเวอร์", "dialog.server.search.placeholder": "ค้นหาเซิร์ฟเวอร์",
"dialog.server.empty": "ยังไม่มีเซิร์ฟเวอร์", "dialog.server.empty": "ยังไม่มีเซิร์ฟเวอร์",
"dialog.server.add.title": "เพิ่มเซิร์ฟเวอร์", "dialog.server.add.title": "เพิ่มเซิร์ฟเวอร์",
@@ -379,7 +372,7 @@ export const dict = {
"toast.session.listFailed.title": "ไม่สามารถโหลดเซสชันสำหรับ {{project}}", "toast.session.listFailed.title": "ไม่สามารถโหลดเซสชันสำหรับ {{project}}",
"toast.update.title": "มีการอัปเดต", "toast.update.title": "มีการอัปเดต",
"toast.update.description": "เวอร์ชันใหม่ของ Kilo CLI ({{version}}) พร้อมใช้งานสำหรับติดตั้ง", // kilocode_change "toast.update.description": "เวอร์ชันใหม่ของ Kilo ({{version}}) พร้อมใช้งานสำหรับติดตั้ง",
"toast.update.action.installRestart": "ติดตั้งและรีสตาร์ท", "toast.update.action.installRestart": "ติดตั้งและรีสตาร์ท",
"toast.update.action.notYet": "ยังไม่", "toast.update.action.notYet": "ยังไม่",
@@ -390,7 +383,7 @@ export const dict = {
"error.page.action.checking": "กำลังตรวจสอบ...", "error.page.action.checking": "กำลังตรวจสอบ...",
"error.page.action.checkUpdates": "ตรวจสอบการอัปเดต", "error.page.action.checkUpdates": "ตรวจสอบการอัปเดต",
"error.page.action.updateTo": "อัปเดตเป็น {{version}}", "error.page.action.updateTo": "อัปเดตเป็น {{version}}",
"error.page.report.prefix": "โปรดรายงานข้อผิดพลาดนี้ให้ทีม Kilo CLI", // kilocode_change "error.page.report.prefix": "โปรดรายงานข้อผิดพลาดนี้ให้ทีม Kilo",
"error.page.report.discord": "บน Discord", "error.page.report.discord": "บน Discord",
"error.page.version": "เวอร์ชัน: {{version}}", "error.page.version": "เวอร์ชัน: {{version}}",
@@ -407,7 +400,7 @@ export const dict = {
"error.chain.didYouMean": "คุณหมายถึง: {{suggestions}}", "error.chain.didYouMean": "คุณหมายถึง: {{suggestions}}",
"error.chain.modelNotFound": "ไม่พบโมเดล: {{provider}}/{{model}}", "error.chain.modelNotFound": "ไม่พบโมเดล: {{provider}}/{{model}}",
"error.chain.checkConfig": "ตรวจสอบการกำหนดค่าของคุณ (opencode.json) ชื่อผู้ให้บริการ/โมเดล", "error.chain.checkConfig": "ตรวจสอบการกำหนดค่าของคุณ (opencode.json) ชื่อผู้ให้บริการ/โมเดล",
"error.chain.mcpFailed": 'เซิร์ฟเวอร์ MCP "{{name}}" ล้มเหลว โปรดทราบว่า Kilo CLI ยังไม่รองรับการตรวจสอบสิทธิ์ MCP', // kilocode_change "error.chain.mcpFailed": 'เซิร์ฟเวอร์ MCP "{{name}}" ล้มเหลว โปรดทราบว่า Kilo ยังไม่รองรับการตรวจสอบสิทธิ์ MCP',
"error.chain.providerAuthFailed": "การตรวจสอบสิทธิ์ผู้ให้บริการล้มเหลว ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "การตรวจสอบสิทธิ์ผู้ให้บริการล้มเหลว ({{provider}}): {{message}}",
"error.chain.providerInitFailed": 'ไม่สามารถเริ่มต้นผู้ให้บริการ "{{provider}}" ตรวจสอบข้อมูลรับรองและการกำหนดค่า', "error.chain.providerInitFailed": 'ไม่สามารถเริ่มต้นผู้ให้บริการ "{{provider}}" ตรวจสอบข้อมูลรับรองและการกำหนดค่า',
"error.chain.configJsonInvalid": "ไฟล์กำหนดค่าที่ {{path}} ไม่ใช่ JSON(C) ที่ถูกต้อง", "error.chain.configJsonInvalid": "ไฟล์กำหนดค่าที่ {{path}} ไม่ใช่ JSON(C) ที่ถูกต้อง",
@@ -514,12 +507,12 @@ export const dict = {
"sidebar.workspaces.enable": "เปิดใช้งานพื้นที่ทำงาน", "sidebar.workspaces.enable": "เปิดใช้งานพื้นที่ทำงาน",
"sidebar.workspaces.disable": "ปิดใช้งานพื้นที่ทำงาน", "sidebar.workspaces.disable": "ปิดใช้งานพื้นที่ทำงาน",
"sidebar.gettingStarted.title": "เริ่มต้นใช้งาน", "sidebar.gettingStarted.title": "เริ่มต้นใช้งาน",
"sidebar.gettingStarted.line1": "Kilo CLI รวมถึงโมเดลฟรีเพื่อให้คุณเริ่มต้นได้ทันที", // kilocode_change "sidebar.gettingStarted.line1": "Kilo รวมถึงโมเดลฟรีเพื่อให้คุณเริ่มต้นได้ทันที",
"sidebar.gettingStarted.line2": "เชื่อมต่อผู้ให้บริการใด ๆ เพื่อใช้โมเดล รวมถึง Claude, GPT, Gemini ฯลฯ", "sidebar.gettingStarted.line2": "เชื่อมต่อผู้ให้บริการใด ๆ เพื่อใช้โมเดล รวมถึง Claude, GPT, Gemini ฯลฯ",
"sidebar.project.recentSessions": "เซสชันล่าสุด", "sidebar.project.recentSessions": "เซสชันล่าสุด",
"sidebar.project.viewAllSessions": "ดูเซสชันทั้งหมด", "sidebar.project.viewAllSessions": "ดูเซสชันทั้งหมด",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "เดสก์ท็อป", "settings.section.desktop": "เดสก์ท็อป",
"settings.section.server": "เซิร์ฟเวอร์", "settings.section.server": "เซิร์ฟเวอร์",
@@ -532,11 +525,11 @@ export const dict = {
"settings.general.section.sounds": "เสียงเอฟเฟกต์", "settings.general.section.sounds": "เสียงเอฟเฟกต์",
"settings.general.row.language.title": "ภาษา", "settings.general.row.language.title": "ภาษา",
"settings.general.row.language.description": "เปลี่ยนภาษาที่แสดงสำหรับ Kilo CLI", // kilocode_change "settings.general.row.language.description": "เปลี่ยนภาษาที่แสดงสำหรับ Kilo",
"settings.general.row.appearance.title": "รูปลักษณ์", "settings.general.row.appearance.title": "รูปลักษณ์",
"settings.general.row.appearance.description": "ปรับแต่งวิธีการที่ Kilo CLI มีลักษณะบนอุปกรณ์ของคุณ", // kilocode_change "settings.general.row.appearance.description": "ปรับแต่งวิธีการที่ Kilo มีลักษณะบนอุปกรณ์ของคุณ",
"settings.general.row.theme.title": "ธีม", "settings.general.row.theme.title": "ธีม",
"settings.general.row.theme.description": "ปรับแต่งวิธีการที่ Kilo CLI มีธีม", // kilocode_change "settings.general.row.theme.description": "ปรับแต่งวิธีการที่ Kilo มีธีม",
"settings.general.row.font.title": "ฟอนต์", "settings.general.row.font.title": "ฟอนต์",
"settings.general.row.font.description": "ปรับแต่งฟอนต์โมโนที่ใช้ในบล็อกโค้ด", "settings.general.row.font.description": "ปรับแต่งฟอนต์โมโนที่ใช้ในบล็อกโค้ด",
+22 -24
View File
@@ -93,14 +93,12 @@ export const dict = {
"dialog.provider.search.placeholder": "搜索提供商", "dialog.provider.search.placeholder": "搜索提供商",
"dialog.provider.empty": "未找到提供商", "dialog.provider.empty": "未找到提供商",
"dialog.provider.group.popular": "热门", "dialog.provider.group.popular": "热门",
"dialog.provider.group.recommended": "推荐", // kilocode_change
"dialog.provider.group.other": "其他", "dialog.provider.group.other": "其他",
"dialog.provider.tag.recommended": "推荐", "dialog.provider.tag.recommended": "推荐",
"dialog.provider.kilo.note": "访问 500+ AI 模型",
"dialog.provider.anthropic.note": "使用 Claude Pro/Max 或 API 密钥连接", "dialog.provider.anthropic.note": "使用 Claude Pro/Max 或 API 密钥连接",
"dialog.provider.openai.note": "使用 ChatGPT Pro/Plus 或 API 密钥连接", "dialog.provider.openai.note": "使用 ChatGPT Pro/Plus 或 API 密钥连接",
"dialog.provider.copilot.note": "使用 Copilot 或 API 密钥连接", "dialog.provider.copilot.note": "使用 Copilot 或 API 密钥连接",
"dialog.provider.opencode.note": "使用 OpenCode Zen 或 API 密钥连接", "dialog.provider.opencode.note": "使用 Kilo Zen 或 API 密钥连接",
"dialog.provider.google.note": "使用 Google 账号或 API 密钥连接", "dialog.provider.google.note": "使用 Google 账号或 API 密钥连接",
"dialog.provider.openrouter.note": "使用 OpenRouter 账号或 API 密钥连接", "dialog.provider.openrouter.note": "使用 OpenRouter 账号或 API 密钥连接",
"dialog.provider.vercel.note": "使用 Vercel 账号或 API 密钥连接", "dialog.provider.vercel.note": "使用 Vercel 账号或 API 密钥连接",
@@ -111,7 +109,7 @@ export const dict = {
"dialog.model.manage": "管理模型", "dialog.model.manage": "管理模型",
"dialog.model.manage.description": "自定义模型选择器中显示的模型。", "dialog.model.manage.description": "自定义模型选择器中显示的模型。",
"dialog.model.unpaid.freeModels.title": "Kilo CLI 提供的免费模型", "dialog.model.unpaid.freeModels.title": "Kilo 提供的免费模型",
"dialog.model.unpaid.addMore.title": "从热门提供商添加更多模型", "dialog.model.unpaid.addMore.title": "从热门提供商添加更多模型",
"dialog.provider.viewAll": "查看更多提供商", "dialog.provider.viewAll": "查看更多提供商",
@@ -124,25 +122,25 @@ export const dict = {
"provider.connect.status.waiting": "等待授权...", "provider.connect.status.waiting": "等待授权...",
"provider.connect.status.failed": "授权失败:{{error}}", "provider.connect.status.failed": "授权失败:{{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"输入你的 {{provider}} API 密钥以连接帐户,并在 Kilo CLI 中使用 {{provider}} 模型。", "输入你的 {{provider}} API 密钥以连接帐户,并在 Kilo 中使用 {{provider}} 模型。",
"provider.connect.apiKey.label": "{{provider}} API 密钥", "provider.connect.apiKey.label": "{{provider}} API 密钥",
"provider.connect.apiKey.placeholder": "API 密钥", "provider.connect.apiKey.placeholder": "API 密钥",
"provider.connect.apiKey.required": "API 密钥为必填项", "provider.connect.apiKey.required": "API 密钥为必填项",
"provider.connect.kiloGateway.line1": "Kilo Gateway 为你提供一组精选的可靠优化模型,用于代码智能体。", "provider.connect.opencodeZen.line1": "Kilo Zen 为你提供一组精选的可靠优化模型,用于代码智能体。",
"provider.connect.kiloGateway.line2": "只需一个 API 密钥,你就能使用 Claude、GPT、Gemini、GLM 等模型。", "provider.connect.opencodeZen.line2": "只需一个 API 密钥,你就能使用 Claude、GPT、Gemini、GLM 等模型。",
"provider.connect.kiloGateway.visit.prefix": "访问 ", "provider.connect.opencodeZen.visit.prefix": "访问 ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": " 获取你的 API 密钥。", "provider.connect.opencodeZen.visit.suffix": " 获取你的 API 密钥。",
"provider.connect.oauth.code.visit.prefix": "访问 ", "provider.connect.oauth.code.visit.prefix": "访问 ",
"provider.connect.oauth.code.visit.link": "此链接", "provider.connect.oauth.code.visit.link": "此链接",
"provider.connect.oauth.code.visit.suffix": " 获取授权码,以连接你的帐户并在 Kilo CLI 中使用 {{provider}} 模型。", "provider.connect.oauth.code.visit.suffix": " 获取授权码,以连接你的帐户并在 Kilo 中使用 {{provider}} 模型。",
"provider.connect.oauth.code.label": "{{method}} 授权码", "provider.connect.oauth.code.label": "{{method}} 授权码",
"provider.connect.oauth.code.placeholder": "授权码", "provider.connect.oauth.code.placeholder": "授权码",
"provider.connect.oauth.code.required": "授权码为必填项", "provider.connect.oauth.code.required": "授权码为必填项",
"provider.connect.oauth.code.invalid": "授权码无效", "provider.connect.oauth.code.invalid": "授权码无效",
"provider.connect.oauth.auto.visit.prefix": "访问 ", "provider.connect.oauth.auto.visit.prefix": "访问 ",
"provider.connect.oauth.auto.visit.link": "此链接", "provider.connect.oauth.auto.visit.link": "此链接",
"provider.connect.oauth.auto.visit.suffix": " 并输入以下代码,以连接你的帐户并在 Kilo CLI 中使用 {{provider}} 模型。", "provider.connect.oauth.auto.visit.suffix": " 并输入以下代码,以连接你的帐户并在 Kilo 中使用 {{provider}} 模型。",
"provider.connect.oauth.auto.confirmationCode": "确认码", "provider.connect.oauth.auto.confirmationCode": "确认码",
"provider.connect.toast.connected.title": "{{provider}} 已连接", "provider.connect.toast.connected.title": "{{provider}} 已连接",
"provider.connect.toast.connected.description": "现在可以使用 {{provider}} 模型了。", "provider.connect.toast.connected.description": "现在可以使用 {{provider}} 模型了。",
@@ -253,7 +251,7 @@ export const dict = {
"dialog.directory.empty": "未找到文件夹", "dialog.directory.empty": "未找到文件夹",
"dialog.server.title": "服务器", "dialog.server.title": "服务器",
"dialog.server.description": "切换此应用连接的 Kilo CLI 服务器。", "dialog.server.description": "切换此应用连接的 Kilo 服务器。",
"dialog.server.search.placeholder": "搜索服务器", "dialog.server.search.placeholder": "搜索服务器",
"dialog.server.empty": "暂无服务器", "dialog.server.empty": "暂无服务器",
"dialog.server.add.title": "添加服务器", "dialog.server.add.title": "添加服务器",
@@ -371,7 +369,7 @@ export const dict = {
"toast.session.listFailed.title": "无法加载 {{project}} 的会话", "toast.session.listFailed.title": "无法加载 {{project}} 的会话",
"toast.update.title": "有可用更新", "toast.update.title": "有可用更新",
"toast.update.description": "Kilo CLI 有新版本 ({{version}}) 可安装。", "toast.update.description": "Kilo 有新版本 ({{version}}) 可安装。",
"toast.update.action.installRestart": "安装并重启", "toast.update.action.installRestart": "安装并重启",
"toast.update.action.notYet": "稍后", "toast.update.action.notYet": "稍后",
@@ -382,7 +380,7 @@ export const dict = {
"error.page.action.checking": "检查中...", "error.page.action.checking": "检查中...",
"error.page.action.checkUpdates": "检查更新", "error.page.action.checkUpdates": "检查更新",
"error.page.action.updateTo": "更新到 {{version}}", "error.page.action.updateTo": "更新到 {{version}}",
"error.page.report.prefix": "请将此错误报告给 Kilo CLI 团队", "error.page.report.prefix": "请将此错误报告给 Kilo 团队",
"error.page.report.discord": "在 Discord 上", "error.page.report.discord": "在 Discord 上",
"error.page.version": "版本:{{version}}", "error.page.version": "版本:{{version}}",
@@ -399,8 +397,8 @@ export const dict = {
"error.chain.didYouMean": "你是不是想输入:{{suggestions}}", "error.chain.didYouMean": "你是不是想输入:{{suggestions}}",
"error.chain.modelNotFound": "未找到模型:{{provider}}/{{model}}", "error.chain.modelNotFound": "未找到模型:{{provider}}/{{model}}",
"error.chain.checkConfig": "请检查你的配置 (opencode.json) 中的 provider/model 名称", "error.chain.checkConfig": "请检查你的配置 (opencode.json) 中的 provider/model 名称",
"error.chain.mcpFailed": 'MCP 服务器 "{{name}}" 启动失败。注意: Kilo CLI 暂不支持 MCP 认证。', "error.chain.mcpFailed": 'MCP 服务器 "{{name}}" 启动失败。注意: Kilo 暂不支持 MCP 认证。',
"error.chain.providerAuthFailed": "提供商认证失败 ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "提供商认证失败{{provider}}):{{message}}",
"error.chain.providerInitFailed": '无法初始化提供商 "{{provider}}"。请检查凭据和配置。', "error.chain.providerInitFailed": '无法初始化提供商 "{{provider}}"。请检查凭据和配置。',
"error.chain.configJsonInvalid": "配置文件 {{path}} 不是有效的 JSON(C)", "error.chain.configJsonInvalid": "配置文件 {{path}} 不是有效的 JSON(C)",
"error.chain.configJsonInvalidWithMessage": "配置文件 {{path}} 不是有效的 JSON(C){{message}}", "error.chain.configJsonInvalidWithMessage": "配置文件 {{path}} 不是有效的 JSON(C){{message}}",
@@ -504,12 +502,12 @@ export const dict = {
"sidebar.workspaces.enable": "启用工作区", "sidebar.workspaces.enable": "启用工作区",
"sidebar.workspaces.disable": "禁用工作区", "sidebar.workspaces.disable": "禁用工作区",
"sidebar.gettingStarted.title": "入门", "sidebar.gettingStarted.title": "入门",
"sidebar.gettingStarted.line1": "Kilo CLI 提供免费模型,你可以立即开始使用。", "sidebar.gettingStarted.line1": "Kilo 提供免费模型,你可以立即开始使用。",
"sidebar.gettingStarted.line2": "连接任意提供商即可使用更多模型,如 Claude、GPT、Gemini 等。", "sidebar.gettingStarted.line2": "连接任意提供商即可使用更多模型,如 Claude、GPT、Gemini 等。",
"sidebar.project.recentSessions": "最近会话", "sidebar.project.recentSessions": "最近会话",
"sidebar.project.viewAllSessions": "查看全部会话", "sidebar.project.viewAllSessions": "查看全部会话",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "桌面", "settings.section.desktop": "桌面",
"settings.section.server": "服务器", "settings.section.server": "服务器",
"settings.tab.general": "通用", "settings.tab.general": "通用",
@@ -521,24 +519,24 @@ export const dict = {
"settings.general.section.sounds": "音效", "settings.general.section.sounds": "音效",
"settings.general.row.language.title": "语言", "settings.general.row.language.title": "语言",
"settings.general.row.language.description": "更改 Kilo CLI 的显示语言", "settings.general.row.language.description": "更改 Kilo 的显示语言",
"settings.general.row.appearance.title": "外观", "settings.general.row.appearance.title": "外观",
"settings.general.row.appearance.description": "自定义 Kilo CLI 在你的设备上的外观", "settings.general.row.appearance.description": "自定义 Kilo 在你的设备上的外观",
"settings.general.row.theme.title": "主题", "settings.general.row.theme.title": "主题",
"settings.general.row.theme.description": "自定义 Kilo CLI 的主题。", "settings.general.row.theme.description": "自定义 Kilo 的主题。",
"settings.general.row.font.title": "字体", "settings.general.row.font.title": "字体",
"settings.general.row.font.description": "自定义代码块使用的等宽字体", "settings.general.row.font.description": "自定义代码块使用的等宽字体",
"settings.general.row.releaseNotes.title": "发行说明", "settings.general.row.releaseNotes.title": "发行说明",
"settings.general.row.releaseNotes.description": "更新后显示“新功能”弹窗", "settings.general.row.releaseNotes.description": "更新后显示“新功能”弹窗",
"settings.updates.row.startup.title": "启动时检查更新", "settings.updates.row.startup.title": "启动时检查更新",
"settings.updates.row.startup.description": "在 OpenCode 启动时自动检查更新", "settings.updates.row.startup.description": "在 Kilo 启动时自动检查更新",
"settings.updates.row.check.title": "检查更新", "settings.updates.row.check.title": "检查更新",
"settings.updates.row.check.description": "手动检查更新并在有更新时安装", "settings.updates.row.check.description": "手动检查更新并在有更新时安装",
"settings.updates.action.checkNow": "立即检查", "settings.updates.action.checkNow": "立即检查",
"settings.updates.action.checking": "正在检查...", "settings.updates.action.checking": "正在检查...",
"settings.updates.toast.latest.title": "已是最新版本", "settings.updates.toast.latest.title": "已是最新版本",
"settings.updates.toast.latest.description": "你正在使用最新版本的 OpenCode。", "settings.updates.toast.latest.description": "你正在使用最新版本的 Kilo。",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
+20 -22
View File
@@ -93,10 +93,8 @@ export const dict = {
"dialog.provider.search.placeholder": "搜尋提供者", "dialog.provider.search.placeholder": "搜尋提供者",
"dialog.provider.empty": "找不到提供者", "dialog.provider.empty": "找不到提供者",
"dialog.provider.group.popular": "熱門", "dialog.provider.group.popular": "熱門",
"dialog.provider.group.recommended": "推薦", // kilocode_change
"dialog.provider.group.other": "其他", "dialog.provider.group.other": "其他",
"dialog.provider.tag.recommended": "推薦", "dialog.provider.tag.recommended": "推薦",
"dialog.provider.kilo.note": "存取 500+ AI 模型",
"dialog.provider.anthropic.note": "使用 Claude Pro/Max 或 API 金鑰連線", "dialog.provider.anthropic.note": "使用 Claude Pro/Max 或 API 金鑰連線",
"dialog.provider.openai.note": "使用 ChatGPT Pro/Plus 或 API 金鑰連線", "dialog.provider.openai.note": "使用 ChatGPT Pro/Plus 或 API 金鑰連線",
"dialog.provider.copilot.note": "使用 Copilot 或 API 金鑰連線", "dialog.provider.copilot.note": "使用 Copilot 或 API 金鑰連線",
@@ -107,7 +105,7 @@ export const dict = {
"dialog.model.manage": "管理模型", "dialog.model.manage": "管理模型",
"dialog.model.manage.description": "自訂模型選擇器中顯示的模型。", "dialog.model.manage.description": "自訂模型選擇器中顯示的模型。",
"dialog.model.unpaid.freeModels.title": "Kilo CLI 提供的免費模型", "dialog.model.unpaid.freeModels.title": "Kilo 提供的免費模型",
"dialog.model.unpaid.addMore.title": "從熱門提供者新增更多模型", "dialog.model.unpaid.addMore.title": "從熱門提供者新增更多模型",
"dialog.provider.viewAll": "查看更多提供者", "dialog.provider.viewAll": "查看更多提供者",
@@ -120,18 +118,18 @@ export const dict = {
"provider.connect.status.waiting": "等待授權...", "provider.connect.status.waiting": "等待授權...",
"provider.connect.status.failed": "授權失敗: {{error}}", "provider.connect.status.failed": "授權失敗: {{error}}",
"provider.connect.apiKey.description": "provider.connect.apiKey.description":
"輸入你的 {{provider}} API 金鑰以連線帳戶,並在 Kilo CLI 中使用 {{provider}} 模型。", "輸入你的 {{provider}} API 金鑰以連線帳戶,並在 Kilo 中使用 {{provider}} 模型。",
"provider.connect.apiKey.label": "{{provider}} API 金鑰", "provider.connect.apiKey.label": "{{provider}} API 金鑰",
"provider.connect.apiKey.placeholder": "API 金鑰", "provider.connect.apiKey.placeholder": "API 金鑰",
"provider.connect.apiKey.required": "API 金鑰為必填", "provider.connect.apiKey.required": "API 金鑰為必填",
"provider.connect.kiloGateway.line1": "Kilo Gateway 為你提供一組精選的可靠最佳化模型,用於程式碼代理程式。", "provider.connect.opencodeZen.line1": "Kilo Zen 為你提供一組精選的可靠最佳化模型,用於程式碼代理程式。",
"provider.connect.kiloGateway.line2": "只需一個 API 金鑰,你就能使用 Claude、GPT、Gemini、GLM 等模型。", "provider.connect.opencodeZen.line2": "只需一個 API 金鑰,你就能使用 Claude、GPT、Gemini、GLM 等模型。",
"provider.connect.kiloGateway.visit.prefix": "造訪 ", "provider.connect.opencodeZen.visit.prefix": "造訪 ",
"provider.connect.kiloGateway.visit.link": "kilo.ai", "provider.connect.opencodeZen.visit.link": "kilo.ai/zen",
"provider.connect.kiloGateway.visit.suffix": " 取得你的 API 金鑰。", "provider.connect.opencodeZen.visit.suffix": " 取得你的 API 金鑰。",
"provider.connect.oauth.code.visit.prefix": "造訪 ", "provider.connect.oauth.code.visit.prefix": "造訪 ",
"provider.connect.oauth.code.visit.link": "此連結", "provider.connect.oauth.code.visit.link": "此連結",
"provider.connect.oauth.code.visit.suffix": " 取得授權碼,以連線你的帳戶並在 Kilo CLI 中使用 {{provider}} 模型。", "provider.connect.oauth.code.visit.suffix": " 取得授權碼,以連線你的帳戶並在 Kilo 中使用 {{provider}} 模型。",
"provider.connect.oauth.code.label": "{{method}} 授權碼", "provider.connect.oauth.code.label": "{{method}} 授權碼",
"provider.connect.oauth.code.placeholder": "授權碼", "provider.connect.oauth.code.placeholder": "授權碼",
"provider.connect.oauth.code.required": "授權碼為必填", "provider.connect.oauth.code.required": "授權碼為必填",
@@ -139,7 +137,7 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": "造訪 ", "provider.connect.oauth.auto.visit.prefix": "造訪 ",
"provider.connect.oauth.auto.visit.link": "此連結", "provider.connect.oauth.auto.visit.link": "此連結",
"provider.connect.oauth.auto.visit.suffix": "provider.connect.oauth.auto.visit.suffix":
" 並輸入以下程式碼,以連線你的帳戶並在 Kilo CLI 中使用 {{provider}} 模型。", " 並輸入以下程式碼,以連線你的帳戶並在 Kilo 中使用 {{provider}} 模型。",
"provider.connect.oauth.auto.confirmationCode": "確認碼", "provider.connect.oauth.auto.confirmationCode": "確認碼",
"provider.connect.toast.connected.title": "{{provider}} 已連線", "provider.connect.toast.connected.title": "{{provider}} 已連線",
"provider.connect.toast.connected.description": "現在可以使用 {{provider}} 模型了。", "provider.connect.toast.connected.description": "現在可以使用 {{provider}} 模型了。",
@@ -250,7 +248,7 @@ export const dict = {
"dialog.directory.empty": "找不到資料夾", "dialog.directory.empty": "找不到資料夾",
"dialog.server.title": "伺服器", "dialog.server.title": "伺服器",
"dialog.server.description": "切換此應用程式連線的 Kilo CLI 伺服器。", "dialog.server.description": "切換此應用程式連線的 Kilo 伺服器。",
"dialog.server.search.placeholder": "搜尋伺服器", "dialog.server.search.placeholder": "搜尋伺服器",
"dialog.server.empty": "暫無伺服器", "dialog.server.empty": "暫無伺服器",
"dialog.server.add.title": "新增伺服器", "dialog.server.add.title": "新增伺服器",
@@ -368,7 +366,7 @@ export const dict = {
"toast.session.listFailed.title": "無法載入 {{project}} 的工作階段", "toast.session.listFailed.title": "無法載入 {{project}} 的工作階段",
"toast.update.title": "有可用更新", "toast.update.title": "有可用更新",
"toast.update.description": "Kilo CLI 有新版本 ({{version}}) 可安裝。", "toast.update.description": "Kilo 有新版本 ({{version}}) 可安裝。",
"toast.update.action.installRestart": "安裝並重新啟動", "toast.update.action.installRestart": "安裝並重新啟動",
"toast.update.action.notYet": "稍後", "toast.update.action.notYet": "稍後",
@@ -379,7 +377,7 @@ export const dict = {
"error.page.action.checking": "檢查中...", "error.page.action.checking": "檢查中...",
"error.page.action.checkUpdates": "檢查更新", "error.page.action.checkUpdates": "檢查更新",
"error.page.action.updateTo": "更新到 {{version}}", "error.page.action.updateTo": "更新到 {{version}}",
"error.page.report.prefix": "請將此錯誤回報給 Kilo CLI 團隊", "error.page.report.prefix": "請將此錯誤回報給 Kilo 團隊",
"error.page.report.discord": "在 Discord 上", "error.page.report.discord": "在 Discord 上",
"error.page.version": "版本: {{version}}", "error.page.version": "版本: {{version}}",
@@ -396,7 +394,7 @@ export const dict = {
"error.chain.didYouMean": "你是不是想輸入: {{suggestions}}", "error.chain.didYouMean": "你是不是想輸入: {{suggestions}}",
"error.chain.modelNotFound": "找不到模型: {{provider}}/{{model}}", "error.chain.modelNotFound": "找不到模型: {{provider}}/{{model}}",
"error.chain.checkConfig": "請檢查你的設定 (opencode.json) 中的 provider/model 名稱", "error.chain.checkConfig": "請檢查你的設定 (opencode.json) 中的 provider/model 名稱",
"error.chain.mcpFailed": 'MCP 伺服器 "{{name}}" 啟動失敗。注意: Kilo CLI 暫不支援 MCP 認證。', "error.chain.mcpFailed": 'MCP 伺服器 "{{name}}" 啟動失敗。注意: Kilo 暫不支援 MCP 認證。',
"error.chain.providerAuthFailed": "提供者認證失敗 ({{provider}}): {{message}}", "error.chain.providerAuthFailed": "提供者認證失敗 ({{provider}}): {{message}}",
"error.chain.providerInitFailed": '無法初始化提供者 "{{provider}}"。請檢查憑證和設定。', "error.chain.providerInitFailed": '無法初始化提供者 "{{provider}}"。請檢查憑證和設定。',
"error.chain.configJsonInvalid": "設定檔 {{path}} 不是有效的 JSON(C)", "error.chain.configJsonInvalid": "設定檔 {{path}} 不是有效的 JSON(C)",
@@ -501,12 +499,12 @@ export const dict = {
"sidebar.workspaces.enable": "啟用工作區", "sidebar.workspaces.enable": "啟用工作區",
"sidebar.workspaces.disable": "停用工作區", "sidebar.workspaces.disable": "停用工作區",
"sidebar.gettingStarted.title": "開始使用", "sidebar.gettingStarted.title": "開始使用",
"sidebar.gettingStarted.line1": "Kilo CLI 提供免費模型,你可以立即開始使用。", "sidebar.gettingStarted.line1": "Kilo 提供免費模型,你可以立即開始使用。",
"sidebar.gettingStarted.line2": "連線任意提供者即可使用更多模型,如 Claude、GPT、Gemini 等。", "sidebar.gettingStarted.line2": "連線任意提供者即可使用更多模型,如 Claude、GPT、Gemini 等。",
"sidebar.project.recentSessions": "最近工作階段", "sidebar.project.recentSessions": "最近工作階段",
"sidebar.project.viewAllSessions": "查看全部工作階段", "sidebar.project.viewAllSessions": "查看全部工作階段",
"app.name.desktop": "OpenCode Desktop", "app.name.desktop": "Kilo Desktop",
"settings.section.desktop": "桌面", "settings.section.desktop": "桌面",
"settings.section.server": "伺服器", "settings.section.server": "伺服器",
"settings.tab.general": "一般", "settings.tab.general": "一般",
@@ -518,11 +516,11 @@ export const dict = {
"settings.general.section.sounds": "音效", "settings.general.section.sounds": "音效",
"settings.general.row.language.title": "語言", "settings.general.row.language.title": "語言",
"settings.general.row.language.description": "變更 Kilo CLI 的顯示語言", "settings.general.row.language.description": "變更 Kilo 的顯示語言",
"settings.general.row.appearance.title": "外觀", "settings.general.row.appearance.title": "外觀",
"settings.general.row.appearance.description": "自訂 Kilo CLI 在你的裝置上的外觀", "settings.general.row.appearance.description": "自訂 Kilo 在你的裝置上的外觀",
"settings.general.row.theme.title": "主題", "settings.general.row.theme.title": "主題",
"settings.general.row.theme.description": "自訂 Kilo CLI 的主題。", "settings.general.row.theme.description": "自訂 Kilo 的主題。",
"settings.general.row.font.title": "字型", "settings.general.row.font.title": "字型",
"settings.general.row.font.description": "自訂程式碼區塊使用的等寬字型", "settings.general.row.font.description": "自訂程式碼區塊使用的等寬字型",
@@ -530,13 +528,13 @@ export const dict = {
"settings.general.row.releaseNotes.description": "更新後顯示「新功能」彈出視窗", "settings.general.row.releaseNotes.description": "更新後顯示「新功能」彈出視窗",
"settings.updates.row.startup.title": "啟動時檢查更新", "settings.updates.row.startup.title": "啟動時檢查更新",
"settings.updates.row.startup.description": "在 OpenCode 啟動時自動檢查更新", "settings.updates.row.startup.description": "在 Kilo 啟動時自動檢查更新",
"settings.updates.row.check.title": "檢查更新", "settings.updates.row.check.title": "檢查更新",
"settings.updates.row.check.description": "手動檢查更新並在有更新時安裝", "settings.updates.row.check.description": "手動檢查更新並在有更新時安裝",
"settings.updates.action.checkNow": "立即檢查", "settings.updates.action.checkNow": "立即檢查",
"settings.updates.action.checking": "檢查中...", "settings.updates.action.checking": "檢查中...",
"settings.updates.toast.latest.title": "已是最新版本", "settings.updates.toast.latest.title": "已是最新版本",
"settings.updates.toast.latest.description": "你正在使用最新版本的 OpenCode。", "settings.updates.toast.latest.description": "你正在使用最新版本的 Kilo。",
"font.option.ibmPlexMono": "IBM Plex Mono", "font.option.ibmPlexMono": "IBM Plex Mono",
"font.option.cascadiaCode": "Cascadia Code", "font.option.cascadiaCode": "Cascadia Code",
+1 -1
View File
@@ -6,7 +6,7 @@ import { LocalProvider } from "@/context/local"
import { DataProvider } from "@opencode-ai/ui/context" import { DataProvider } from "@opencode-ai/ui/context"
import { iife } from "@opencode-ai/util/iife" import { iife } from "@opencode-ai/util/iife"
import type { QuestionAnswer } from "@kilocode/sdk/v2" // kilocode_change import type { QuestionAnswer } from "@kilocode/sdk/v2"
import { decode64 } from "@/utils/base64" import { decode64 } from "@/utils/base64"
import { showToast } from "@opencode-ai/ui/toast" import { showToast } from "@opencode-ai/ui/toast"
import { useLanguage } from "@/context/language" import { useLanguage } from "@/context/language"
+1 -1
View File
@@ -272,7 +272,7 @@ export const ErrorPage: Component<ErrorPageProps> = (props) => {
<button <button
type="button" type="button"
class="flex items-center text-text-interactive-base gap-1" class="flex items-center text-text-interactive-base gap-1"
onClick={() => platform.openLink("https://opencode.ai/desktop-feedback")} onClick={() => platform.openLink("https://kilo.ai/desktop-feedback")}
> >
<div>{language.t("error.page.report.discord")}</div> <div>{language.t("error.page.report.discord")}</div>
<Icon name="discord" class="text-text-interactive-base" /> <Icon name="discord" class="text-text-interactive-base" />
+43 -3
View File
@@ -36,7 +36,7 @@ import { DiffChanges } from "@opencode-ai/ui/diff-changes"
import { Spinner } from "@opencode-ai/ui/spinner" import { Spinner } from "@opencode-ai/ui/spinner"
import { Dialog } from "@opencode-ai/ui/dialog" import { Dialog } from "@opencode-ai/ui/dialog"
import { getFilename } from "@opencode-ai/util/path" import { getFilename } from "@opencode-ai/util/path"
import { Session, type Message, type TextPart } from "@kilocode/sdk/v2/client" // kilocode_change import { Session, type Message, type TextPart } from "@kilocode/sdk/v2/client"
import { usePlatform } from "@/context/platform" import { usePlatform } from "@/context/platform"
import { useSettings } from "@/context/settings" import { useSettings } from "@/context/settings"
import { createStore, produce, reconcile } from "solid-js/store" import { createStore, produce, reconcile } from "solid-js/store"
@@ -1136,6 +1136,46 @@ export default function Layout(props: ParentProps) {
if (navigate) navigateToProject(directory) if (navigate) navigateToProject(directory)
} }
const deepLinkEvent = "opencode:deep-link"
const parseDeepLink = (input: string) => {
if (!input.startsWith("opencode://")) return
const url = new URL(input)
if (url.hostname !== "open-project") return
const directory = url.searchParams.get("directory")
if (!directory) return
return directory
}
const handleDeepLinks = (urls: string[]) => {
if (!server.isLocal()) return
for (const input of urls) {
const directory = parseDeepLink(input)
if (!directory) continue
openProject(directory)
}
}
const drainDeepLinks = () => {
const pending = window.__OPENCODE__?.deepLinks ?? []
if (pending.length === 0) return
if (window.__OPENCODE__) window.__OPENCODE__.deepLinks = []
handleDeepLinks(pending)
}
onMount(() => {
const handler = (event: Event) => {
const detail = (event as CustomEvent<{ urls: string[] }>).detail
const urls = detail?.urls ?? []
if (urls.length === 0) return
handleDeepLinks(urls)
}
drainDeepLinks()
window.addEventListener(deepLinkEvent, handler as EventListener)
onCleanup(() => window.removeEventListener(deepLinkEvent, handler as EventListener))
})
const displayName = (project: LocalProject) => project.name || getFilename(project.worktree) const displayName = (project: LocalProject) => project.name || getFilename(project.worktree)
async function renameProject(project: LocalProject, next: string) { async function renameProject(project: LocalProject, next: string) {
@@ -1613,7 +1653,7 @@ export default function Layout(props: ParentProps) {
<div class="size-full rounded overflow-clip"> <div class="size-full rounded overflow-clip">
<Avatar <Avatar
fallback={name()} fallback={name()}
src={props.project.id === opencode ? "https://opencode.ai/favicon.svg" : props.project.icon?.override} src={props.project.id === opencode ? "https://kilo.ai/favicon.svg" : props.project.icon?.override}
{...getAvatarColors(props.project.icon?.color)} {...getAvatarColors(props.project.icon?.color)}
class="size-full rounded" class="size-full rounded"
classList={{ "badge-mask": notifications().length > 0 && props.notify }} classList={{ "badge-mask": notifications().length > 0 && props.notify }}
@@ -2754,7 +2794,7 @@ export default function Layout(props: ParentProps) {
icon="help" icon="help"
variant="ghost" variant="ghost"
size="large" size="large"
onClick={() => platform.openLink("https://opencode.ai/desktop-feedback")} onClick={() => platform.openLink("https://kilo.ai/desktop-feedback")}
aria-label={language.t("sidebar.help")} aria-label={language.t("sidebar.help")}
/> />
</Tooltip> </Tooltip>
+4 -4
View File
@@ -50,8 +50,8 @@ import { DialogFork } from "@/components/dialog-fork"
import { useCommand } from "@/context/command" import { useCommand } from "@/context/command"
import { useLanguage } from "@/context/language" import { useLanguage } from "@/context/language"
import { useNavigate, useParams } from "@solidjs/router" import { useNavigate, useParams } from "@solidjs/router"
import { UserMessage } from "@kilocode/sdk/v2" // kilocode_change import { UserMessage } from "@kilocode/sdk/v2"
import type { FileDiff } from "@kilocode/sdk/v2/client" // kilocode_change import type { FileDiff } from "@kilocode/sdk/v2/client"
import { useSDK } from "@/context/sdk" import { useSDK } from "@/context/sdk"
import { usePrompt } from "@/context/prompt" import { usePrompt } from "@/context/prompt"
import { useComments, type LineComment } from "@/context/comments" import { useComments, type LineComment } from "@/context/comments"
@@ -730,8 +730,8 @@ export default function Page() {
onSelect: () => view().terminal.toggle(), onSelect: () => view().terminal.toggle(),
}, },
{ {
id: "fileTree.toggle", id: "review.toggle",
title: language.t("command.fileTree.toggle"), title: language.t("command.review.toggle"),
description: "", description: "",
category: language.t("command.category.view"), category: language.t("command.category.view"),
keybind: "mod+shift+r", keybind: "mod+shift+r",
+1 -1
View File
@@ -1,4 +1,4 @@
import type { AgentPart as MessageAgentPart, FilePart, Part, TextPart } from "@kilocode/sdk/v2" // kilocode_change import type { AgentPart as MessageAgentPart, FilePart, Part, TextPart } from "@kilocode/sdk/v2"
import type { AgentPart, FileAttachmentPart, ImageAttachmentPart, Prompt } from "@/context/prompt" import type { AgentPart, FileAttachmentPart, ImageAttachmentPart, Prompt } from "@/context/prompt"
type Inline = type Inline =
+2 -1
View File
@@ -18,5 +18,6 @@
"@tsconfig/node22": "22.0.2", "@tsconfig/node22": "22.0.2",
"@types/node": "catalog:", "@types/node": "catalog:",
"cloudflare": "5.2.0" "cloudflare": "5.2.0"
} },
"version": "1.0.13"
} }
+1
View File
@@ -18,6 +18,7 @@
"@solid-primitives/i18n": "2.2.1", "@solid-primitives/i18n": "2.2.1",
"@solid-primitives/storage": "catalog:", "@solid-primitives/storage": "catalog:",
"@tauri-apps/api": "^2", "@tauri-apps/api": "^2",
"@tauri-apps/plugin-deep-link": "~2",
"@tauri-apps/plugin-dialog": "~2", "@tauri-apps/plugin-dialog": "~2",
"@tauri-apps/plugin-opener": "^2", "@tauri-apps/plugin-opener": "^2",
"@tauri-apps/plugin-os": "~2", "@tauri-apps/plugin-os": "~2",
+102 -4
View File
@@ -609,6 +609,26 @@ dependencies = [
"crossbeam-utils", "crossbeam-utils",
] ]
[[package]]
name = "const-random"
version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359"
dependencies = [
"const-random-macro",
]
[[package]]
name = "const-random-macro"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
dependencies = [
"getrandom 0.2.16",
"once_cell",
"tiny-keccak",
]
[[package]] [[package]]
name = "convert_case" name = "convert_case"
version = "0.4.0" version = "0.4.0"
@@ -980,6 +1000,15 @@ dependencies = [
"rand 0.8.5", "rand 0.8.5",
] ]
[[package]]
name = "dlv-list"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f"
dependencies = [
"const-random",
]
[[package]] [[package]]
name = "document-features" name = "document-features"
version = "0.2.12" version = "0.2.12"
@@ -1777,6 +1806,12 @@ version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
[[package]] [[package]]
name = "hashbrown" name = "hashbrown"
version = "0.15.5" version = "0.15.5"
@@ -1930,7 +1965,7 @@ dependencies = [
"tokio", "tokio",
"tower-service", "tower-service",
"tracing", "tracing",
"windows-registry", "windows-registry 0.6.1",
] ]
[[package]] [[package]]
@@ -2345,7 +2380,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4f8240c33bb08c5d8b8cdea87b683b05e61037aa76ff26bef40672cc6ecbb80" checksum = "a4f8240c33bb08c5d8b8cdea87b683b05e61037aa76ff26bef40672cc6ecbb80"
dependencies = [ dependencies = [
"freedesktop_entry_parser", "freedesktop_entry_parser",
"rust-ini", "rust-ini 0.17.0",
] ]
[[package]] [[package]]
@@ -3038,6 +3073,7 @@ dependencies = [
"tauri-build", "tauri-build",
"tauri-plugin-clipboard-manager", "tauri-plugin-clipboard-manager",
"tauri-plugin-decorum", "tauri-plugin-decorum",
"tauri-plugin-deep-link",
"tauri-plugin-dialog", "tauri-plugin-dialog",
"tauri-plugin-http", "tauri-plugin-http",
"tauri-plugin-notification", "tauri-plugin-notification",
@@ -3067,10 +3103,20 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c672c7ad9ec066e428c00eb917124a06f08db19e2584de982cc34b1f4c12485" checksum = "1c672c7ad9ec066e428c00eb917124a06f08db19e2584de982cc34b1f4c12485"
dependencies = [ dependencies = [
"dlv-list", "dlv-list 0.2.3",
"hashbrown 0.9.1", "hashbrown 0.9.1",
] ]
[[package]]
name = "ordered-multimap"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79"
dependencies = [
"dlv-list 0.5.2",
"hashbrown 0.14.5",
]
[[package]] [[package]]
name = "ordered-stream" name = "ordered-stream"
version = "0.2.0" version = "0.2.0"
@@ -3947,7 +3993,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "63471c4aa97a1cf8332a5f97709a79a4234698de6a1f5087faf66f2dae810e22" checksum = "63471c4aa97a1cf8332a5f97709a79a4234698de6a1f5087faf66f2dae810e22"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"ordered-multimap", "ordered-multimap 0.3.1",
]
[[package]]
name = "rust-ini"
version = "0.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "796e8d2b6696392a43bea58116b667fb4c29727dc5abd27d6acf338bb4f688c7"
dependencies = [
"cfg-if",
"ordered-multimap 0.7.3",
] ]
[[package]] [[package]]
@@ -4817,6 +4873,27 @@ dependencies = [
"tauri-plugin", "tauri-plugin",
] ]
[[package]]
name = "tauri-plugin-deep-link"
version = "2.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "444b091f24f2f6bdb4a305b54d3961f629c11861c685aceeea9a1972f89e43d5"
dependencies = [
"dunce",
"plist",
"rust-ini 0.21.3",
"serde",
"serde_json",
"tauri",
"tauri-plugin",
"tauri-utils",
"thiserror 2.0.17",
"tracing",
"url",
"windows-registry 0.5.3",
"windows-result 0.3.4",
]
[[package]] [[package]]
name = "tauri-plugin-dialog" name = "tauri-plugin-dialog"
version = "2.4.2" version = "2.4.2"
@@ -4980,6 +5057,7 @@ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
"tauri", "tauri",
"tauri-plugin-deep-link",
"thiserror 2.0.17", "thiserror 2.0.17",
"tracing", "tracing",
"windows-sys 0.60.2", "windows-sys 0.60.2",
@@ -5271,6 +5349,15 @@ dependencies = [
"time-core", "time-core",
] ]
[[package]]
name = "tiny-keccak"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
dependencies = [
"crunchy",
]
[[package]] [[package]]
name = "tinystr" name = "tinystr"
version = "0.8.2" version = "0.8.2"
@@ -6208,6 +6295,17 @@ dependencies = [
"windows-link 0.1.3", "windows-link 0.1.3",
] ]
[[package]]
name = "windows-registry"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e"
dependencies = [
"windows-link 0.1.3",
"windows-result 0.3.4",
"windows-strings 0.4.2",
]
[[package]] [[package]]
name = "windows-registry" name = "windows-registry"
version = "0.6.1" version = "0.6.1"
+2 -1
View File
@@ -20,6 +20,7 @@ tauri-build = { version = "2", features = [] }
[dependencies] [dependencies]
tauri = { version = "2", features = ["macos-private-api", "devtools"] } tauri = { version = "2", features = ["macos-private-api", "devtools"] }
tauri-plugin-opener = "2" tauri-plugin-opener = "2"
tauri-plugin-deep-link = "2.4.6"
tauri-plugin-shell = "2" tauri-plugin-shell = "2"
tauri-plugin-dialog = "2" tauri-plugin-dialog = "2"
tauri-plugin-updater = "2" tauri-plugin-updater = "2"
@@ -29,7 +30,7 @@ tauri-plugin-window-state = "2"
tauri-plugin-clipboard-manager = "2" tauri-plugin-clipboard-manager = "2"
tauri-plugin-http = "2" tauri-plugin-http = "2"
tauri-plugin-notification = "2" tauri-plugin-notification = "2"
tauri-plugin-single-instance = "2" tauri-plugin-single-instance = { version = "2", features = ["deep-link"] }
serde = { version = "1", features = ["derive"] } serde = { version = "1", features = ["derive"] }
serde_json = "1" serde_json = "1"
@@ -6,6 +6,7 @@
"permissions": [ "permissions": [
"core:default", "core:default",
"opener:default", "opener:default",
"deep-link:default",
"core:window:allow-start-dragging", "core:window:allow-start-dragging",
"core:window:allow-set-theme", "core:window:allow-set-theme",
"core:webview:allow-set-webview-zoom", "core:webview:allow-set-webview-zoom",
+4 -4
View File
@@ -1,8 +1,8 @@
use tauri::{AppHandle, Manager, path::BaseDirectory}; use tauri::{AppHandle, Manager, path::BaseDirectory};
use tauri_plugin_shell::{ShellExt, process::Command}; use tauri_plugin_shell::{ShellExt, process::Command};
const CLI_INSTALL_DIR: &str = ".kilo/bin"; // kilocode_change const CLI_INSTALL_DIR: &str = ".kilo/bin";
const CLI_BINARY_NAME: &str = "kilo"; // kilocode_change const CLI_BINARY_NAME: &str = "opencode";
#[derive(serde::Deserialize)] #[derive(serde::Deserialize)]
pub struct ServerConfig { pub struct ServerConfig {
@@ -39,7 +39,7 @@ pub fn get_sidecar_path(app: &tauri::AppHandle) -> std::path::PathBuf {
.expect("Failed to get current binary") .expect("Failed to get current binary")
.parent() .parent()
.expect("Failed to get parent dir") .expect("Failed to get parent dir")
.join("kilo-cli") // kilocode_change .join("kilo-cli")
} }
fn is_cli_installed() -> bool { fn is_cli_installed() -> bool {
@@ -61,7 +61,7 @@ pub fn install_cli(app: tauri::AppHandle) -> Result<String, String> {
return Err("Sidecar binary not found".to_string()); return Err("Sidecar binary not found".to_string());
} }
let temp_script = std::env::temp_dir().join("kilo-install.sh"); // kilocode_change let temp_script = std::env::temp_dir().join("opencode-install.sh");
std::fs::write(&temp_script, INSTALL_SCRIPT) std::fs::write(&temp_script, INSTALL_SCRIPT)
.map_err(|e| format!("Failed to write install script: {}", e))?; .map_err(|e| format!("Failed to write install script: {}", e))?;
+8 -2
View File
@@ -16,6 +16,8 @@ use std::{
time::{Duration, Instant}, time::{Duration, Instant},
}; };
use tauri::{AppHandle, LogicalSize, Manager, RunEvent, State, WebviewWindowBuilder}; use tauri::{AppHandle, LogicalSize, Manager, RunEvent, State, WebviewWindowBuilder};
#[cfg(any(target_os = "linux", all(debug_assertions, windows)))]
use tauri_plugin_deep_link::DeepLinkExt;
#[cfg(windows)] #[cfg(windows)]
use tauri_plugin_decorum::WebviewWindowExt; use tauri_plugin_decorum::WebviewWindowExt;
use tauri_plugin_dialog::{DialogExt, MessageDialogButtons, MessageDialogResult}; use tauri_plugin_dialog::{DialogExt, MessageDialogButtons, MessageDialogResult};
@@ -25,7 +27,7 @@ use tokio::sync::oneshot;
use crate::window_customizer::PinchZoomDisablePlugin; use crate::window_customizer::PinchZoomDisablePlugin;
const SETTINGS_STORE: &str = "kilo.settings.dat"; // kilocode_change const SETTINGS_STORE: &str = "kilo.settings.dat";
const DEFAULT_SERVER_URL_KEY: &str = "defaultServerUrl"; const DEFAULT_SERVER_URL_KEY: &str = "defaultServerUrl";
#[derive(Clone, serde::Serialize)] #[derive(Clone, serde::Serialize)]
@@ -252,7 +254,7 @@ pub fn run() {
#[cfg(all(target_os = "macos", not(debug_assertions)))] #[cfg(all(target_os = "macos", not(debug_assertions)))]
let _ = std::process::Command::new("killall") let _ = std::process::Command::new("killall")
.arg("kilo-cli") // kilocode_change .arg("kilo-cli")
.output(); .output();
let mut builder = tauri::Builder::default() let mut builder = tauri::Builder::default()
@@ -263,6 +265,7 @@ pub fn run() {
let _ = window.unminimize(); let _ = window.unminimize();
} }
})) }))
.plugin(tauri_plugin_deep_link::init())
.plugin(tauri_plugin_os::init()) .plugin(tauri_plugin_os::init())
.plugin( .plugin(
tauri_plugin_window_state::Builder::new() tauri_plugin_window_state::Builder::new()
@@ -291,6 +294,9 @@ pub fn run() {
markdown::parse_markdown_command markdown::parse_markdown_command
]) ])
.setup(move |app| { .setup(move |app| {
#[cfg(any(target_os = "linux", all(debug_assertions, windows)))]
app.deep_link().register_all().ok();
let app = app.handle().clone(); let app = app.handle().clone();
// Initialize log state // Initialize log state
+1 -1
View File
@@ -86,5 +86,5 @@ fn main() {
} }
} }
kilo_lib::run() // kilocode_change kilo_lib::run()
} }
+8 -1
View File
@@ -1,6 +1,6 @@
{ {
"$schema": "https://schema.tauri.app/config/2", "$schema": "https://schema.tauri.app/config/2",
"productName": "Kilo Dev", "productName": "Kilo",
"identifier": "ai.kilo.desktop.dev", "identifier": "ai.kilo.desktop.dev",
"mainBinaryName": "Kilo", "mainBinaryName": "Kilo",
"version": "../package.json", "version": "../package.json",
@@ -52,5 +52,12 @@
"sidebarImage": "assets/nsis-sidebar.bmp" "sidebarImage": "assets/nsis-sidebar.bmp"
} }
} }
},
"plugins": {
"deep-link": {
"desktop": {
"schemes": ["opencode"]
}
}
} }
} }
+4 -4
View File
@@ -11,11 +11,11 @@ export const dict = {
"desktop.updater.checkFailed.title": "فشل التحقق من التحديثات", "desktop.updater.checkFailed.title": "فشل التحقق من التحديثات",
"desktop.updater.checkFailed.message": "فشل التحقق من وجود تحديثات", "desktop.updater.checkFailed.message": "فشل التحقق من وجود تحديثات",
"desktop.updater.none.title": "لا توجد تحديثات متاحة", "desktop.updater.none.title": "لا توجد تحديثات متاحة",
"desktop.updater.none.message": "أنت تستخدم بالفعل أحدث إصدار من OpenCode", "desktop.updater.none.message": "أنت تستخدم بالفعل أحدث إصدار من Kilo",
"desktop.updater.downloadFailed.title": "فشل التحديث", "desktop.updater.downloadFailed.title": "فشل التحديث",
"desktop.updater.downloadFailed.message": "فشل تنزيل التحديث", "desktop.updater.downloadFailed.message": "فشل تنزيل التحديث",
"desktop.updater.downloaded.title": "تم تنزيل التحديث", "desktop.updater.downloaded.title": "تم تنزيل التحديث",
"desktop.updater.downloaded.prompt": "تم تنزيل إصدار {{version}} من OpenCode، هل ترغب في تثبيته وإعادة تشغيله؟", "desktop.updater.downloaded.prompt": "تم تنزيل إصدار {{version}} من Kilo، هل ترغب في تثبيته وإعادة تشغيله؟",
"desktop.updater.installFailed.title": "فشل التحديث", "desktop.updater.installFailed.title": "فشل التحديث",
"desktop.updater.installFailed.message": "فشل تثبيت التحديث", "desktop.updater.installFailed.message": "فشل تثبيت التحديث",
@@ -24,7 +24,7 @@ export const dict = {
"desktop.cli.failed.title": "فشل التثبيت", "desktop.cli.failed.title": "فشل التثبيت",
"desktop.cli.failed.message": "فشل تثبيت CLI: {{error}}", "desktop.cli.failed.message": "فشل تثبيت CLI: {{error}}",
"desktop.error.serverStartFailed.title": "فشل تشغيل OpenCode", "desktop.error.serverStartFailed.title": "فشل تشغيل Kilo",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"تعذر بدء تشغيل خادم OpenCode المحلي. أعد تشغيل التطبيق، أو تحقق من إعدادات الشبكة (VPN/proxy) وحاول مرة أخرى.", "تعذر بدء تشغيل خادم Kilo المحلي. أعد تشغيل التطبيق، أو تحقق من إعدادات الشبكة (VPN/proxy) وحاول مرة أخرى.",
} }
+4 -4
View File
@@ -11,12 +11,12 @@ export const dict = {
"desktop.updater.checkFailed.title": "Falha ao verificar atualizações", "desktop.updater.checkFailed.title": "Falha ao verificar atualizações",
"desktop.updater.checkFailed.message": "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.title": "Nenhuma atualização disponível",
"desktop.updater.none.message": "Você já está usando a versão mais recente do OpenCode", "desktop.updater.none.message": "Você já está usando a versão mais recente do Kilo",
"desktop.updater.downloadFailed.title": "Falha na atualização", "desktop.updater.downloadFailed.title": "Falha na atualização",
"desktop.updater.downloadFailed.message": "Falha ao baixar a atualização", "desktop.updater.downloadFailed.message": "Falha ao baixar a atualização",
"desktop.updater.downloaded.title": "Atualização baixada", "desktop.updater.downloaded.title": "Atualização baixada",
"desktop.updater.downloaded.prompt": "desktop.updater.downloaded.prompt":
"A versão {{version}} do OpenCode foi baixada. Você gostaria de instalá-la e reiniciar?", "A versão {{version}} do Kilo foi baixada. Você gostaria de instalá-la e reiniciar?",
"desktop.updater.installFailed.title": "Falha na atualização", "desktop.updater.installFailed.title": "Falha na atualização",
"desktop.updater.installFailed.message": "Falha ao instalar a atualização", "desktop.updater.installFailed.message": "Falha ao instalar a atualização",
@@ -25,7 +25,7 @@ export const dict = {
"desktop.cli.failed.title": "Falha na instalação", "desktop.cli.failed.title": "Falha na instalação",
"desktop.cli.failed.message": "Falha ao instalar a CLI: {{error}}", "desktop.cli.failed.message": "Falha ao instalar a CLI: {{error}}",
"desktop.error.serverStartFailed.title": "Falha ao iniciar o OpenCode", "desktop.error.serverStartFailed.title": "Falha ao iniciar o Kilo",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"Não foi possível iniciar o servidor local do OpenCode. Reinicie o aplicativo ou verifique suas configurações de rede (VPN/proxy) e tente novamente.", "Não foi possível iniciar o servidor local do Kilo. Reinicie o aplicativo ou verifique suas configurações de rede (VPN/proxy) e tente novamente.",
} }
+4 -4
View File
@@ -11,12 +11,12 @@ export const dict = {
"desktop.updater.checkFailed.title": "Opdateringstjek mislykkedes", "desktop.updater.checkFailed.title": "Opdateringstjek mislykkedes",
"desktop.updater.checkFailed.message": "Kunne ikke tjekke for opdateringer", "desktop.updater.checkFailed.message": "Kunne ikke tjekke for opdateringer",
"desktop.updater.none.title": "Ingen opdatering tilgængelig", "desktop.updater.none.title": "Ingen opdatering tilgængelig",
"desktop.updater.none.message": "Du bruger allerede den nyeste version af OpenCode", "desktop.updater.none.message": "Du bruger allerede den nyeste version af Kilo",
"desktop.updater.downloadFailed.title": "Opdatering mislykkedes", "desktop.updater.downloadFailed.title": "Opdatering mislykkedes",
"desktop.updater.downloadFailed.message": "Kunne ikke downloade opdateringen", "desktop.updater.downloadFailed.message": "Kunne ikke downloade opdateringen",
"desktop.updater.downloaded.title": "Opdatering downloadet", "desktop.updater.downloaded.title": "Opdatering downloadet",
"desktop.updater.downloaded.prompt": "desktop.updater.downloaded.prompt":
"Version {{version}} af OpenCode er blevet downloadet. Vil du installere den og genstarte?", "Version {{version}} af Kilo er blevet downloadet. Vil du installere den og genstarte?",
"desktop.updater.installFailed.title": "Opdatering mislykkedes", "desktop.updater.installFailed.title": "Opdatering mislykkedes",
"desktop.updater.installFailed.message": "Kunne ikke installere opdateringen", "desktop.updater.installFailed.message": "Kunne ikke installere opdateringen",
@@ -26,7 +26,7 @@ export const dict = {
"desktop.cli.failed.title": "Installation mislykkedes", "desktop.cli.failed.title": "Installation mislykkedes",
"desktop.cli.failed.message": "Kunne ikke installere CLI: {{error}}", "desktop.cli.failed.message": "Kunne ikke installere CLI: {{error}}",
"desktop.error.serverStartFailed.title": "OpenCode kunne ikke starte", "desktop.error.serverStartFailed.title": "Kilo kunne ikke starte",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"Den lokale OpenCode-server kunne ikke startes. Genstart appen, eller tjek dine netværksindstillinger (VPN/proxy) og prøv igen.", "Den lokale Kilo-server kunne ikke startes. Genstart appen, eller tjek dine netværksindstillinger (VPN/proxy) og prøv igen.",
} }
+4 -4
View File
@@ -11,12 +11,12 @@ export const dict = {
"desktop.updater.checkFailed.title": "Updateprüfung fehlgeschlagen", "desktop.updater.checkFailed.title": "Updateprüfung fehlgeschlagen",
"desktop.updater.checkFailed.message": "Updates konnten nicht geprüft werden", "desktop.updater.checkFailed.message": "Updates konnten nicht geprüft werden",
"desktop.updater.none.title": "Kein Update verfügbar", "desktop.updater.none.title": "Kein Update verfügbar",
"desktop.updater.none.message": "Sie verwenden bereits die neueste Version von OpenCode", "desktop.updater.none.message": "Sie verwenden bereits die neueste Version von Kilo",
"desktop.updater.downloadFailed.title": "Update fehlgeschlagen", "desktop.updater.downloadFailed.title": "Update fehlgeschlagen",
"desktop.updater.downloadFailed.message": "Update konnte nicht heruntergeladen werden", "desktop.updater.downloadFailed.message": "Update konnte nicht heruntergeladen werden",
"desktop.updater.downloaded.title": "Update heruntergeladen", "desktop.updater.downloaded.title": "Update heruntergeladen",
"desktop.updater.downloaded.prompt": "desktop.updater.downloaded.prompt":
"Version {{version}} von OpenCode wurde heruntergeladen. Möchten Sie sie installieren und neu starten?", "Version {{version}} von Kilo wurde heruntergeladen. Möchten Sie sie installieren und neu starten?",
"desktop.updater.installFailed.title": "Update fehlgeschlagen", "desktop.updater.installFailed.title": "Update fehlgeschlagen",
"desktop.updater.installFailed.message": "Update konnte nicht installiert werden", "desktop.updater.installFailed.message": "Update konnte nicht installiert werden",
@@ -26,7 +26,7 @@ export const dict = {
"desktop.cli.failed.title": "Installation fehlgeschlagen", "desktop.cli.failed.title": "Installation fehlgeschlagen",
"desktop.cli.failed.message": "CLI konnte nicht installiert werden: {{error}}", "desktop.cli.failed.message": "CLI konnte nicht installiert werden: {{error}}",
"desktop.error.serverStartFailed.title": "OpenCode konnte nicht gestartet werden", "desktop.error.serverStartFailed.title": "Kilo konnte nicht gestartet werden",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"Der lokale OpenCode-Server konnte nicht gestartet werden. Starten Sie die App neu oder überprüfen Sie Ihre Netzwerkeinstellungen (VPN/Proxy) und versuchen Sie es erneut.", "Der lokale Kilo-Server konnte nicht gestartet werden. Starten Sie die App neu oder überprüfen Sie Ihre Netzwerkeinstellungen (VPN/Proxy) und versuchen Sie es erneut.",
} }
+4 -4
View File
@@ -11,12 +11,12 @@ export const dict = {
"desktop.updater.checkFailed.title": "Update Check Failed", "desktop.updater.checkFailed.title": "Update Check Failed",
"desktop.updater.checkFailed.message": "Failed to check for updates", "desktop.updater.checkFailed.message": "Failed to check for updates",
"desktop.updater.none.title": "No Update Available", "desktop.updater.none.title": "No Update Available",
"desktop.updater.none.message": "You are already using the latest version of OpenCode", "desktop.updater.none.message": "You are already using the latest version of Kilo",
"desktop.updater.downloadFailed.title": "Update Failed", "desktop.updater.downloadFailed.title": "Update Failed",
"desktop.updater.downloadFailed.message": "Failed to download update", "desktop.updater.downloadFailed.message": "Failed to download update",
"desktop.updater.downloaded.title": "Update Downloaded", "desktop.updater.downloaded.title": "Update Downloaded",
"desktop.updater.downloaded.prompt": "desktop.updater.downloaded.prompt":
"Version {{version}} of OpenCode has been downloaded, would you like to install it and relaunch?", "Version {{version}} of Kilo has been downloaded, would you like to install it and relaunch?",
"desktop.updater.installFailed.title": "Update Failed", "desktop.updater.installFailed.title": "Update Failed",
"desktop.updater.installFailed.message": "Failed to install update", "desktop.updater.installFailed.message": "Failed to install update",
@@ -25,7 +25,7 @@ export const dict = {
"desktop.cli.failed.title": "Installation Failed", "desktop.cli.failed.title": "Installation Failed",
"desktop.cli.failed.message": "Failed to install CLI: {{error}}", "desktop.cli.failed.message": "Failed to install CLI: {{error}}",
"desktop.error.serverStartFailed.title": "OpenCode failed to start", "desktop.error.serverStartFailed.title": "Kilo failed to start",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"The local OpenCode server could not be started. Restart the app, or check your network settings (VPN/proxy) and try again.", "The local Kilo server could not be started. Restart the app, or check your network settings (VPN/proxy) and try again.",
} }
+4 -4
View File
@@ -11,12 +11,12 @@ export const dict = {
"desktop.updater.checkFailed.title": "Comprobación de actualizaciones fallida", "desktop.updater.checkFailed.title": "Comprobación de actualizaciones fallida",
"desktop.updater.checkFailed.message": "No se pudieron buscar actualizaciones", "desktop.updater.checkFailed.message": "No se pudieron buscar actualizaciones",
"desktop.updater.none.title": "No hay actualizaciones disponibles", "desktop.updater.none.title": "No hay actualizaciones disponibles",
"desktop.updater.none.message": "Ya estás usando la versión más reciente de OpenCode", "desktop.updater.none.message": "Ya estás usando la versión más reciente de Kilo",
"desktop.updater.downloadFailed.title": "Actualización fallida", "desktop.updater.downloadFailed.title": "Actualización fallida",
"desktop.updater.downloadFailed.message": "No se pudo descargar la actualización", "desktop.updater.downloadFailed.message": "No se pudo descargar la actualización",
"desktop.updater.downloaded.title": "Actualización descargada", "desktop.updater.downloaded.title": "Actualización descargada",
"desktop.updater.downloaded.prompt": "desktop.updater.downloaded.prompt":
"Se ha descargado la versión {{version}} de OpenCode. ¿Quieres instalarla y reiniciar?", "Se ha descargado la versión {{version}} de Kilo. ¿Quieres instalarla y reiniciar?",
"desktop.updater.installFailed.title": "Actualización fallida", "desktop.updater.installFailed.title": "Actualización fallida",
"desktop.updater.installFailed.message": "No se pudo instalar la actualización", "desktop.updater.installFailed.message": "No se pudo instalar la actualización",
@@ -25,7 +25,7 @@ export const dict = {
"desktop.cli.failed.title": "Instalación fallida", "desktop.cli.failed.title": "Instalación fallida",
"desktop.cli.failed.message": "No se pudo instalar la CLI: {{error}}", "desktop.cli.failed.message": "No se pudo instalar la CLI: {{error}}",
"desktop.error.serverStartFailed.title": "OpenCode no pudo iniciarse", "desktop.error.serverStartFailed.title": "Kilo no pudo iniciarse",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"No se pudo iniciar el servidor local de OpenCode. Reinicia la aplicación o revisa tu configuración de red (VPN/proxy) y vuelve a intentarlo.", "No se pudo iniciar el servidor local de Kilo. Reinicia la aplicación o revisa tu configuración de red (VPN/proxy) y vuelve a intentarlo.",
} }
+4 -4
View File
@@ -11,12 +11,12 @@ export const dict = {
"desktop.updater.checkFailed.title": "Échec de la vérification des mises à jour", "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.checkFailed.message": "Impossible de vérifier les mises à jour",
"desktop.updater.none.title": "Aucune mise à jour disponible", "desktop.updater.none.title": "Aucune mise à jour disponible",
"desktop.updater.none.message": "Vous utilisez déjà la dernière version d'OpenCode", "desktop.updater.none.message": "Vous utilisez déjà la dernière version d'Kilo",
"desktop.updater.downloadFailed.title": "Échec de la mise à jour", "desktop.updater.downloadFailed.title": "Échec de la mise à jour",
"desktop.updater.downloadFailed.message": "Impossible de télécharger 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.title": "Mise à jour téléchargée",
"desktop.updater.downloaded.prompt": "desktop.updater.downloaded.prompt":
"La version {{version}} d'OpenCode a été téléchargée. Voulez-vous l'installer et redémarrer ?", "La version {{version}} d'Kilo 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.title": "Échec de la mise à jour",
"desktop.updater.installFailed.message": "Impossible d'installer la mise à jour", "desktop.updater.installFailed.message": "Impossible d'installer la mise à jour",
@@ -26,7 +26,7 @@ export const dict = {
"desktop.cli.failed.title": "Échec de l'installation", "desktop.cli.failed.title": "Échec de l'installation",
"desktop.cli.failed.message": "Impossible d'installer la CLI : {{error}}", "desktop.cli.failed.message": "Impossible d'installer la CLI : {{error}}",
"desktop.error.serverStartFailed.title": "Échec du démarrage d'OpenCode", "desktop.error.serverStartFailed.title": "Échec du démarrage d'Kilo",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"Impossible de démarrer le serveur OpenCode local. Redémarrez l'application ou vérifiez vos paramètres réseau (VPN/proxy) et réessayez.", "Impossible de démarrer le serveur Kilo local. Redémarrez l'application ou vérifiez vos paramètres réseau (VPN/proxy) et réessayez.",
} }
+4 -4
View File
@@ -11,12 +11,12 @@ export const dict = {
"desktop.updater.checkFailed.title": "アップデートの確認に失敗しました", "desktop.updater.checkFailed.title": "アップデートの確認に失敗しました",
"desktop.updater.checkFailed.message": "アップデートを確認できませんでした", "desktop.updater.checkFailed.message": "アップデートを確認できませんでした",
"desktop.updater.none.title": "利用可能なアップデートはありません", "desktop.updater.none.title": "利用可能なアップデートはありません",
"desktop.updater.none.message": "すでに最新バージョンの OpenCode を使用しています", "desktop.updater.none.message": "すでに最新バージョンの Kilo を使用しています",
"desktop.updater.downloadFailed.title": "アップデートに失敗しました", "desktop.updater.downloadFailed.title": "アップデートに失敗しました",
"desktop.updater.downloadFailed.message": "アップデートをダウンロードできませんでした", "desktop.updater.downloadFailed.message": "アップデートをダウンロードできませんでした",
"desktop.updater.downloaded.title": "アップデートをダウンロードしました", "desktop.updater.downloaded.title": "アップデートをダウンロードしました",
"desktop.updater.downloaded.prompt": "desktop.updater.downloaded.prompt":
"OpenCode のバージョン {{version}} がダウンロードされました。インストールして再起動しますか?", "Kilo のバージョン {{version}} がダウンロードされました。インストールして再起動しますか?",
"desktop.updater.installFailed.title": "アップデートに失敗しました", "desktop.updater.installFailed.title": "アップデートに失敗しました",
"desktop.updater.installFailed.message": "アップデートをインストールできませんでした", "desktop.updater.installFailed.message": "アップデートをインストールできませんでした",
@@ -26,7 +26,7 @@ export const dict = {
"desktop.cli.failed.title": "インストールに失敗しました", "desktop.cli.failed.title": "インストールに失敗しました",
"desktop.cli.failed.message": "CLI のインストールに失敗しました: {{error}}", "desktop.cli.failed.message": "CLI のインストールに失敗しました: {{error}}",
"desktop.error.serverStartFailed.title": "OpenCode の起動に失敗しました", "desktop.error.serverStartFailed.title": "Kilo の起動に失敗しました",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"ローカルの OpenCode サーバーを起動できませんでした。アプリを再起動するか、ネットワーク設定 (VPN/proxy) を確認して再試行してください。", "ローカルの Kilo サーバーを起動できませんでした。アプリを再起動するか、ネットワーク設定 (VPN/proxy) を確認して再試行してください。",
} }
+4 -4
View File
@@ -11,11 +11,11 @@ export const dict = {
"desktop.updater.checkFailed.title": "업데이트 확인 실패", "desktop.updater.checkFailed.title": "업데이트 확인 실패",
"desktop.updater.checkFailed.message": "업데이트를 확인하지 못했습니다", "desktop.updater.checkFailed.message": "업데이트를 확인하지 못했습니다",
"desktop.updater.none.title": "사용 가능한 업데이트 없음", "desktop.updater.none.title": "사용 가능한 업데이트 없음",
"desktop.updater.none.message": "이미 최신 버전의 OpenCode를 사용하고 있습니다", "desktop.updater.none.message": "이미 최신 버전의 Kilo를 사용하고 있습니다",
"desktop.updater.downloadFailed.title": "업데이트 실패", "desktop.updater.downloadFailed.title": "업데이트 실패",
"desktop.updater.downloadFailed.message": "업데이트를 다운로드하지 못했습니다", "desktop.updater.downloadFailed.message": "업데이트를 다운로드하지 못했습니다",
"desktop.updater.downloaded.title": "업데이트 다운로드 완료", "desktop.updater.downloaded.title": "업데이트 다운로드 완료",
"desktop.updater.downloaded.prompt": "OpenCode {{version}} 버전을 다운로드했습니다. 설치하고 다시 실행할까요?", "desktop.updater.downloaded.prompt": "Kilo {{version}} 버전을 다운로드했습니다. 설치하고 다시 실행할까요?",
"desktop.updater.installFailed.title": "업데이트 실패", "desktop.updater.installFailed.title": "업데이트 실패",
"desktop.updater.installFailed.message": "업데이트를 설치하지 못했습니다", "desktop.updater.installFailed.message": "업데이트를 설치하지 못했습니다",
@@ -25,7 +25,7 @@ export const dict = {
"desktop.cli.failed.title": "설치 실패", "desktop.cli.failed.title": "설치 실패",
"desktop.cli.failed.message": "CLI 설치 실패: {{error}}", "desktop.cli.failed.message": "CLI 설치 실패: {{error}}",
"desktop.error.serverStartFailed.title": "OpenCode 시작 실패", "desktop.error.serverStartFailed.title": "Kilo 시작 실패",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"로컬 OpenCode 서버를 시작할 수 없습니다. 앱을 다시 시작하거나 네트워크 설정(VPN/proxy)을 확인한 후 다시 시도하세요.", "로컬 Kilo 서버를 시작할 수 없습니다. 앱을 다시 시작하거나 네트워크 설정(VPN/proxy)을 확인한 후 다시 시도하세요.",
} }
+4 -4
View File
@@ -11,12 +11,12 @@ export const dict = {
"desktop.updater.checkFailed.title": "Oppdateringssjekk mislyktes", "desktop.updater.checkFailed.title": "Oppdateringssjekk mislyktes",
"desktop.updater.checkFailed.message": "Kunne ikke se etter oppdateringer", "desktop.updater.checkFailed.message": "Kunne ikke se etter oppdateringer",
"desktop.updater.none.title": "Ingen oppdatering tilgjengelig", "desktop.updater.none.title": "Ingen oppdatering tilgjengelig",
"desktop.updater.none.message": "Du bruker allerede den nyeste versjonen av OpenCode", "desktop.updater.none.message": "Du bruker allerede den nyeste versjonen av Kilo",
"desktop.updater.downloadFailed.title": "Oppdatering mislyktes", "desktop.updater.downloadFailed.title": "Oppdatering mislyktes",
"desktop.updater.downloadFailed.message": "Kunne ikke laste ned oppdateringen", "desktop.updater.downloadFailed.message": "Kunne ikke laste ned oppdateringen",
"desktop.updater.downloaded.title": "Oppdatering lastet ned", "desktop.updater.downloaded.title": "Oppdatering lastet ned",
"desktop.updater.downloaded.prompt": "desktop.updater.downloaded.prompt":
"Versjon {{version}} av OpenCode er lastet ned. Vil du installere den og starte på nytt?", "Versjon {{version}} av Kilo er lastet ned. Vil du installere den og starte på nytt?",
"desktop.updater.installFailed.title": "Oppdatering mislyktes", "desktop.updater.installFailed.title": "Oppdatering mislyktes",
"desktop.updater.installFailed.message": "Kunne ikke installere oppdateringen", "desktop.updater.installFailed.message": "Kunne ikke installere oppdateringen",
@@ -26,7 +26,7 @@ export const dict = {
"desktop.cli.failed.title": "Installasjon mislyktes", "desktop.cli.failed.title": "Installasjon mislyktes",
"desktop.cli.failed.message": "Kunne ikke installere CLI: {{error}}", "desktop.cli.failed.message": "Kunne ikke installere CLI: {{error}}",
"desktop.error.serverStartFailed.title": "OpenCode kunne ikke starte", "desktop.error.serverStartFailed.title": "Kilo kunne ikke starte",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"Den lokale OpenCode-serveren kunne ikke startes. Start appen på nytt, eller sjekk nettverksinnstillingene dine (VPN/proxy) og prøv igjen.", "Den lokale Kilo-serveren kunne ikke startes. Start appen på nytt, eller sjekk nettverksinnstillingene dine (VPN/proxy) og prøv igjen.",
} }
+4 -4
View File
@@ -11,12 +11,12 @@ export const dict = {
"desktop.updater.checkFailed.title": "Nie udało się sprawdzić aktualizacji", "desktop.updater.checkFailed.title": "Nie udało się sprawdzić aktualizacji",
"desktop.updater.checkFailed.message": "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.title": "Brak dostępnych aktualizacji",
"desktop.updater.none.message": "Korzystasz już z najnowszej wersji OpenCode", "desktop.updater.none.message": "Korzystasz już z najnowszej wersji Kilo",
"desktop.updater.downloadFailed.title": "Aktualizacja nie powiodła się", "desktop.updater.downloadFailed.title": "Aktualizacja nie powiodła się",
"desktop.updater.downloadFailed.message": "Nie udało się pobrać aktualizacji", "desktop.updater.downloadFailed.message": "Nie udało się pobrać aktualizacji",
"desktop.updater.downloaded.title": "Aktualizacja pobrana", "desktop.updater.downloaded.title": "Aktualizacja pobrana",
"desktop.updater.downloaded.prompt": "desktop.updater.downloaded.prompt":
"Pobrano wersję {{version}} OpenCode. Czy chcesz ją zainstalować i uruchomić ponownie?", "Pobrano wersję {{version}} Kilo. Czy chcesz ją zainstalować i uruchomić ponownie?",
"desktop.updater.installFailed.title": "Aktualizacja nie powiodła się", "desktop.updater.installFailed.title": "Aktualizacja nie powiodła się",
"desktop.updater.installFailed.message": "Nie udało się zainstalować aktualizacji", "desktop.updater.installFailed.message": "Nie udało się zainstalować aktualizacji",
@@ -26,7 +26,7 @@ export const dict = {
"desktop.cli.failed.title": "Instalacja nie powiodła się", "desktop.cli.failed.title": "Instalacja nie powiodła się",
"desktop.cli.failed.message": "Nie udało się zainstalować CLI: {{error}}", "desktop.cli.failed.message": "Nie udało się zainstalować CLI: {{error}}",
"desktop.error.serverStartFailed.title": "Nie udało się uruchomić OpenCode", "desktop.error.serverStartFailed.title": "Nie udało się uruchomić Kilo",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"Nie udało się uruchomić lokalnego serwera OpenCode. Uruchom ponownie aplikację lub sprawdź ustawienia sieciowe (VPN/proxy) i spróbuj ponownie.", "Nie udało się uruchomić lokalnego serwera Kilo. Uruchom ponownie aplikację lub sprawdź ustawienia sieciowe (VPN/proxy) i spróbuj ponownie.",
} }
+4 -4
View File
@@ -11,11 +11,11 @@ export const dict = {
"desktop.updater.checkFailed.title": "Не удалось проверить обновления", "desktop.updater.checkFailed.title": "Не удалось проверить обновления",
"desktop.updater.checkFailed.message": "Не удалось проверить обновления", "desktop.updater.checkFailed.message": "Не удалось проверить обновления",
"desktop.updater.none.title": "Обновлений нет", "desktop.updater.none.title": "Обновлений нет",
"desktop.updater.none.message": "Вы уже используете последнюю версию OpenCode", "desktop.updater.none.message": "Вы уже используете последнюю версию Kilo",
"desktop.updater.downloadFailed.title": "Обновление не удалось", "desktop.updater.downloadFailed.title": "Обновление не удалось",
"desktop.updater.downloadFailed.message": "Не удалось скачать обновление", "desktop.updater.downloadFailed.message": "Не удалось скачать обновление",
"desktop.updater.downloaded.title": "Обновление загружено", "desktop.updater.downloaded.title": "Обновление загружено",
"desktop.updater.downloaded.prompt": "Версия OpenCode {{version}} загружена. Хотите установить и перезапустить?", "desktop.updater.downloaded.prompt": "Версия Kilo {{version}} загружена. Хотите установить и перезапустить?",
"desktop.updater.installFailed.title": "Обновление не удалось", "desktop.updater.installFailed.title": "Обновление не удалось",
"desktop.updater.installFailed.message": "Не удалось установить обновление", "desktop.updater.installFailed.message": "Не удалось установить обновление",
@@ -25,7 +25,7 @@ export const dict = {
"desktop.cli.failed.title": "Ошибка установки", "desktop.cli.failed.title": "Ошибка установки",
"desktop.cli.failed.message": "Не удалось установить CLI: {{error}}", "desktop.cli.failed.message": "Не удалось установить CLI: {{error}}",
"desktop.error.serverStartFailed.title": "Не удалось запустить OpenCode", "desktop.error.serverStartFailed.title": "Не удалось запустить Kilo",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"Не удалось запустить локальный сервер OpenCode. Перезапустите приложение или проверьте настройки сети (VPN/proxy) и попробуйте снова.", "Не удалось запустить локальный сервер Kilo. Перезапустите приложение или проверьте настройки сети (VPN/proxy) и попробуйте снова.",
} }
+4 -4
View File
@@ -11,11 +11,11 @@ export const dict = {
"desktop.updater.checkFailed.title": "检查更新失败", "desktop.updater.checkFailed.title": "检查更新失败",
"desktop.updater.checkFailed.message": "无法检查更新", "desktop.updater.checkFailed.message": "无法检查更新",
"desktop.updater.none.title": "没有可用更新", "desktop.updater.none.title": "没有可用更新",
"desktop.updater.none.message": "你已经在使用最新版本的 OpenCode", "desktop.updater.none.message": "你已经在使用最新版本的 Kilo",
"desktop.updater.downloadFailed.title": "更新失败", "desktop.updater.downloadFailed.title": "更新失败",
"desktop.updater.downloadFailed.message": "无法下载更新", "desktop.updater.downloadFailed.message": "无法下载更新",
"desktop.updater.downloaded.title": "更新已下载", "desktop.updater.downloaded.title": "更新已下载",
"desktop.updater.downloaded.prompt": "已下载 OpenCode {{version}} 版本,是否安装并重启?", "desktop.updater.downloaded.prompt": "已下载 Kilo {{version}} 版本,是否安装并重启?",
"desktop.updater.installFailed.title": "更新失败", "desktop.updater.installFailed.title": "更新失败",
"desktop.updater.installFailed.message": "无法安装更新", "desktop.updater.installFailed.message": "无法安装更新",
@@ -24,7 +24,7 @@ export const dict = {
"desktop.cli.failed.title": "安装失败", "desktop.cli.failed.title": "安装失败",
"desktop.cli.failed.message": "无法安装 CLI: {{error}}", "desktop.cli.failed.message": "无法安装 CLI: {{error}}",
"desktop.error.serverStartFailed.title": "OpenCode 启动失败", "desktop.error.serverStartFailed.title": "Kilo 启动失败",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"无法启动本地 OpenCode 服务器。请重启应用,或检查网络设置 (VPN/proxy) 后重试。", "无法启动本地 Kilo 服务器。请重启应用,或检查网络设置 (VPN/proxy) 后重试。",
} }
+4 -4
View File
@@ -11,11 +11,11 @@ export const dict = {
"desktop.updater.checkFailed.title": "檢查更新失敗", "desktop.updater.checkFailed.title": "檢查更新失敗",
"desktop.updater.checkFailed.message": "無法檢查更新", "desktop.updater.checkFailed.message": "無法檢查更新",
"desktop.updater.none.title": "沒有可用更新", "desktop.updater.none.title": "沒有可用更新",
"desktop.updater.none.message": "你已在使用最新版的 OpenCode", "desktop.updater.none.message": "你已在使用最新版的 Kilo",
"desktop.updater.downloadFailed.title": "更新失敗", "desktop.updater.downloadFailed.title": "更新失敗",
"desktop.updater.downloadFailed.message": "無法下載更新", "desktop.updater.downloadFailed.message": "無法下載更新",
"desktop.updater.downloaded.title": "更新已下載", "desktop.updater.downloaded.title": "更新已下載",
"desktop.updater.downloaded.prompt": "已下載 OpenCode {{version}} 版本,是否安裝並重新啟動?", "desktop.updater.downloaded.prompt": "已下載 Kilo {{version}} 版本,是否安裝並重新啟動?",
"desktop.updater.installFailed.title": "更新失敗", "desktop.updater.installFailed.title": "更新失敗",
"desktop.updater.installFailed.message": "無法安裝更新", "desktop.updater.installFailed.message": "無法安裝更新",
@@ -24,7 +24,7 @@ export const dict = {
"desktop.cli.failed.title": "安裝失敗", "desktop.cli.failed.title": "安裝失敗",
"desktop.cli.failed.message": "無法安裝 CLI: {{error}}", "desktop.cli.failed.message": "無法安裝 CLI: {{error}}",
"desktop.error.serverStartFailed.title": "OpenCode 啟動失敗", "desktop.error.serverStartFailed.title": "Kilo 啟動失敗",
"desktop.error.serverStartFailed.description": "desktop.error.serverStartFailed.description":
"無法啟動本地 OpenCode 伺服器。請重新啟動應用程式,或檢查網路設定 (VPN/proxy) 後再試一次。", "無法啟動本地 Kilo 伺服器。請重新啟動應用程式,或檢查網路設定 (VPN/proxy) 後再試一次。",
} }
+18
View File
@@ -3,6 +3,7 @@ import "./webview-zoom"
import { render } from "solid-js/web" import { render } from "solid-js/web"
import { AppBaseProviders, AppInterface, PlatformProvider, Platform } from "@opencode-ai/app" import { AppBaseProviders, AppInterface, PlatformProvider, Platform } from "@opencode-ai/app"
import { open, save } from "@tauri-apps/plugin-dialog" import { open, save } from "@tauri-apps/plugin-dialog"
import { getCurrent, onOpenUrl } from "@tauri-apps/plugin-deep-link"
import { open as shellOpen } from "@tauri-apps/plugin-shell" import { open as shellOpen } from "@tauri-apps/plugin-shell"
import { type as ostype } from "@tauri-apps/plugin-os" import { type as ostype } from "@tauri-apps/plugin-os"
import { check, Update } from "@tauri-apps/plugin-updater" import { check, Update } from "@tauri-apps/plugin-updater"
@@ -42,6 +43,22 @@ window.getComputedStyle = ((elt: Element, pseudoElt?: string | null) => {
let update: Update | null = null let update: Update | null = null
const deepLinkEvent = "opencode:deep-link"
const emitDeepLinks = (urls: string[]) => {
if (urls.length === 0) return
window.__OPENCODE__ ??= {}
const pending = window.__OPENCODE__.deepLinks ?? []
window.__OPENCODE__.deepLinks = [...pending, ...urls]
window.dispatchEvent(new CustomEvent(deepLinkEvent, { detail: { urls } }))
}
const listenForDeepLinks = async () => {
const startUrls = await getCurrent().catch(() => null)
if (startUrls?.length) emitDeepLinks(startUrls)
await onOpenUrl((urls) => emitDeepLinks(urls)).catch(() => undefined)
}
const createPlatform = (password: Accessor<string | null>): Platform => ({ const createPlatform = (password: Accessor<string | null>): Platform => ({
platform: "desktop", platform: "desktop",
os: (() => { os: (() => {
@@ -332,6 +349,7 @@ const createPlatform = (password: Accessor<string | null>): Platform => ({
}) })
createMenu() createMenu()
void listenForDeepLinks()
render(() => { render(() => {
const [serverPassword, setServerPassword] = createSignal<string | null>(null) const [serverPassword, setServerPassword] = createSignal<string | null>(null)
+1 -1
View File
@@ -15,7 +15,7 @@ export async function createMenu() {
const menu = await Menu.new({ const menu = await Menu.new({
items: [ items: [
await Submenu.new({ await Submenu.new({
text: "OpenCode", text: "Kilo",
items: [ items: [
await PredefinedMenuItem.new({ await PredefinedMenuItem.new({
item: { About: null }, item: { About: null },
+1 -1
View File
@@ -1,4 +1,4 @@
import { FileDiff, Message, Model, Part, Session } from "@kilocode/sdk/v2" // kilocode_change import { FileDiff, Message, Model, Part, Session } from "@kilocode/sdk/v2"
import { fn } from "@opencode-ai/util/fn" import { fn } from "@opencode-ai/util/fn"
import { iife } from "@opencode-ai/util/iife" import { iife } from "@opencode-ai/util/iife"
import { Identifier } from "@opencode-ai/util/identifier" import { Identifier } from "@opencode-ai/util/identifier"
@@ -1,4 +1,4 @@
import { FileDiff, Message, Model, Part, Session, SessionStatus, UserMessage } from "@kilocode/sdk/v2" // kilocode_change import { FileDiff, Message, Model, Part, Session, SessionStatus, UserMessage } from "@kilocode/sdk/v2"
import { SessionTurn } from "@opencode-ai/ui/session-turn" import { SessionTurn } from "@opencode-ai/ui/session-turn"
import { SessionReview } from "@opencode-ai/ui/session-review" import { SessionReview } from "@opencode-ai/ui/session-review"
import { DataProvider } from "@opencode-ai/ui/context" import { DataProvider } from "@opencode-ai/ui/context"
+9 -9
View File
@@ -1,36 +1,36 @@
id = "opencode" id = "kilo"
name = "OpenCode" name = "Kilo"
description = "The open source coding agent." description = "The open source coding agent."
version = "1.0.13" version = "1.1.43"
schema_version = 1 schema_version = 1
authors = ["Anomaly"] authors = ["Anomaly"]
repository = "https://github.com/Kilo-Org/kilo" repository = "https://github.com/Kilo-Org/kilo"
[agent_servers.opencode] [agent_servers.opencode]
name = "OpenCode" name = "Kilo"
icon = "./icons/opencode.svg" icon = "./icons/opencode.svg"
[agent_servers.opencode.targets.darwin-aarch64] [agent_servers.opencode.targets.darwin-aarch64]
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.13/opencode-darwin-arm64.zip" archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.1.43/opencode-darwin-arm64.zip"
cmd = "./opencode" cmd = "./opencode"
args = ["acp"] args = ["acp"]
[agent_servers.opencode.targets.darwin-x86_64] [agent_servers.opencode.targets.darwin-x86_64]
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.13/opencode-darwin-x64.zip" archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.1.43/opencode-darwin-x64.zip"
cmd = "./opencode" cmd = "./opencode"
args = ["acp"] args = ["acp"]
[agent_servers.opencode.targets.linux-aarch64] [agent_servers.opencode.targets.linux-aarch64]
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.13/opencode-linux-arm64.tar.gz" archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.1.43/opencode-linux-arm64.tar.gz"
cmd = "./opencode" cmd = "./opencode"
args = ["acp"] args = ["acp"]
[agent_servers.opencode.targets.linux-x86_64] [agent_servers.opencode.targets.linux-x86_64]
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.13/opencode-linux-x64.tar.gz" archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.1.43/opencode-linux-x64.tar.gz"
cmd = "./opencode" cmd = "./opencode"
args = ["acp"] args = ["acp"]
[agent_servers.opencode.targets.windows-x86_64] [agent_servers.opencode.targets.windows-x86_64]
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.13/opencode-windows-x64.zip" archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.1.43/opencode-windows-x64.zip"
cmd = "./opencode.exe" cmd = "./opencode.exe"
args = ["acp"] args = ["acp"]
+7 -7
View File
@@ -18,7 +18,7 @@
"deploy": "echo 'Deploying application...' && bun run build && echo 'Deployment completed successfully'" "deploy": "echo 'Deploying application...' && bun run build && echo 'Deployment completed successfully'"
}, },
"bin": { "bin": {
"kilo": "./bin/kilo" "opencode": "./bin/opencode"
}, },
"exports": { "exports": {
"./*": "./src/*.ts" "./*": "./src/*.ts"
@@ -49,7 +49,7 @@
"dependencies": { "dependencies": {
"@actions/core": "1.11.1", "@actions/core": "1.11.1",
"@actions/github": "6.0.1", "@actions/github": "6.0.1",
"@agentclientprotocol/sdk": "0.12.0", "@agentclientprotocol/sdk": "0.13.0",
"@ai-sdk/amazon-bedrock": "3.0.73", "@ai-sdk/amazon-bedrock": "3.0.73",
"@ai-sdk/anthropic": "2.0.57", "@ai-sdk/anthropic": "2.0.57",
"@ai-sdk/azure": "2.0.91", "@ai-sdk/azure": "2.0.91",
@@ -73,15 +73,13 @@
"@gitlab/gitlab-ai-provider": "3.3.1", "@gitlab/gitlab-ai-provider": "3.3.1",
"@hono/standard-validator": "0.1.5", "@hono/standard-validator": "0.1.5",
"@hono/zod-validator": "catalog:", "@hono/zod-validator": "catalog:",
"@kilocode/kilo-gateway": "workspace:*",
"@kilocode/kilo-telemetry": "workspace:*",
"@kilocode/plugin": "workspace:*",
"@kilocode/sdk": "workspace:*",
"@modelcontextprotocol/sdk": "1.25.2", "@modelcontextprotocol/sdk": "1.25.2",
"@octokit/graphql": "9.0.2", "@octokit/graphql": "9.0.2",
"@octokit/rest": "catalog:", "@octokit/rest": "catalog:",
"@openauthjs/openauth": "catalog:", "@openauthjs/openauth": "catalog:",
"@kilocode/plugin": "workspace:*",
"@opencode-ai/script": "workspace:*", "@opencode-ai/script": "workspace:*",
"@kilocode/sdk": "workspace:*",
"@opencode-ai/util": "workspace:*", "@opencode-ai/util": "workspace:*",
"@openrouter/ai-sdk-provider": "1.5.2", "@openrouter/ai-sdk-provider": "1.5.2",
"@opentui/core": "0.1.75", "@opentui/core": "0.1.75",
@@ -120,6 +118,8 @@
"xdg-basedir": "5.1.0", "xdg-basedir": "5.1.0",
"yargs": "18.0.0", "yargs": "18.0.0",
"zod": "catalog:", "zod": "catalog:",
"zod-to-json-schema": "3.24.5" "zod-to-json-schema": "3.24.5",
"@kilocode/kilo-gateway": "workspace:*",
"@kilocode/kilo-telemetry": "workspace:*"
} }
} }
+11
View File
@@ -183,4 +183,15 @@ for (const item of targets) {
binaries[name] = Script.version binaries[name] = Script.version
} }
if (Script.release) {
for (const key of Object.keys(binaries)) {
if (key.includes("linux")) {
await $`tar -czf ../../${key}.tar.gz *`.cwd(`dist/${key}/bin`)
} else {
await $`zip -r ../../${key}.zip *`.cwd(`dist/${key}/bin`)
}
}
await $`gh release upload v${Script.version} ./dist/*.zip ./dist/*.tar.gz --clobber`
}
export { binaries } export { binaries }
+196 -37
View File
@@ -7,12 +7,13 @@ import { fileURLToPath } from "url"
const dir = fileURLToPath(new URL("..", import.meta.url)) const dir = fileURLToPath(new URL("..", import.meta.url))
process.chdir(dir) process.chdir(dir)
const { binaries } = await import("./build.ts") const binaries: Record<string, string> = {}
{ for (const filepath of new Bun.Glob("*/package.json").scanSync({ cwd: "./dist" })) {
const name = `${pkg.name}-${process.platform}-${process.arch}` const pkg = await Bun.file(`./dist/${filepath}`).json()
console.log(`smoke test: running dist/${name}/bin/kilo --version`) binaries[pkg.name] = pkg.version
await $`./dist/${name}/bin/kilo --version`
} }
console.log("binaries", binaries)
const version = Object.values(binaries)[0]
await $`mkdir -p ./dist/${pkg.name}` await $`mkdir -p ./dist/${pkg.name}`
await $`cp -r ./bin ./dist/${pkg.name}/bin` await $`cp -r ./bin ./dist/${pkg.name}/bin`
@@ -21,60 +22,218 @@ await $`cp ./script/postinstall.mjs ./dist/${pkg.name}/postinstall.mjs`
await Bun.file(`./dist/${pkg.name}/package.json`).write( await Bun.file(`./dist/${pkg.name}/package.json`).write(
JSON.stringify( JSON.stringify(
{ {
name: pkg.name, name: pkg.name + "-ai",
bin: { bin: {
kilo: `./bin/kilo`, [pkg.name]: `./bin/${pkg.name}`,
kilocode: `./bin/kilo`,
}, },
scripts: { scripts: {
postinstall: "bun ./postinstall.mjs || node ./postinstall.mjs", postinstall: "bun ./postinstall.mjs || node ./postinstall.mjs",
}, },
version: Script.version, version: version,
optionalDependencies: binaries, optionalDependencies: binaries,
repository: {
type: "git",
url: "https://github.com/Kilo-Org/kilo",
},
}, },
null, null,
2, 2,
), ),
) )
const tags = [Script.channel]
const tasks = Object.entries(binaries).map(async ([name]) => { const tasks = Object.entries(binaries).map(async ([name]) => {
if (process.platform !== "win32") { if (process.platform !== "win32") {
await $`chmod -R 755 .`.cwd(`./dist/${name}`) await $`chmod -R 755 .`.cwd(`./dist/${name}`)
} }
await $`bun pm pack`.cwd(`./dist/${name}`) await $`bun pm pack`.cwd(`./dist/${name}`)
for (const tag of tags) { await $`npm publish *.tgz --access public --tag ${Script.channel}`.cwd(`./dist/${name}`)
await $`npm publish *.tgz --access public --tag ${tag} --provenance`.cwd(`./dist/${name}`)
}
}) })
await Promise.all(tasks) await Promise.all(tasks)
for (const tag of tags) { await $`cd ./dist/${pkg.name} && bun pm pack && npm publish *.tgz --access public --tag ${Script.channel}`
await $`cd ./dist/${pkg.name} && bun pm pack && npm publish *.tgz --access public --tag ${tag} --provenance`
}
const image = "ghcr.io/Kilo-Org/kilo"
const platforms = "linux/amd64,linux/arm64"
const tags = [`${image}:${version}`, `${image}:${Script.channel}`]
const tagFlags = tags.flatMap((t) => ["-t", t])
await $`docker buildx build --platform ${platforms} ${tagFlags} --push .`
// registries
if (!Script.preview) { if (!Script.preview) {
// Create archives for GitHub release // Calculate SHA values
// kilocode_change start - use absolute paths to avoid issues with scoped package names containing '/' const arm64Sha = await $`sha256sum ./dist/opencode-linux-arm64.tar.gz | cut -d' ' -f1`.text().then((x) => x.trim())
const archiveDir = `${dir}/dist/archives` const x64Sha = await $`sha256sum ./dist/opencode-linux-x64.tar.gz | cut -d' ' -f1`.text().then((x) => x.trim())
await $`mkdir -p ${archiveDir}` const macX64Sha = await $`sha256sum ./dist/opencode-darwin-x64.zip | cut -d' ' -f1`.text().then((x) => x.trim())
for (const key of Object.keys(binaries)) { const macArm64Sha = await $`sha256sum ./dist/opencode-darwin-arm64.zip | cut -d' ' -f1`.text().then((x) => x.trim())
const archiveName = key.replace("/", "-") // @kilocode/cli-linux-arm64 → @kilocode-cli-linux-arm64
if (key.includes("linux")) { const [pkgver, _subver = ""] = Script.version.split(/(-.*)/, 2)
await $`tar -czf ${archiveDir}/${archiveName}.tar.gz *`.cwd(`dist/${key}/bin`)
} else { // arch
await $`zip -r ${archiveDir}/${archiveName}.zip *`.cwd(`dist/${key}/bin`) const binaryPkgbuild = [
"# Maintainer: dax",
"# Maintainer: adam",
"",
"pkgname='opencode-bin'",
`pkgver=${pkgver}`,
`_subver=${_subver}`,
"options=('!debug' '!strip')",
"pkgrel=1",
"pkgdesc='The AI coding agent built for the terminal.'",
"url='https://github.com/Kilo-Org/kilo'",
"arch=('aarch64' 'x86_64')",
"license=('MIT')",
"provides=('opencode')",
"conflicts=('opencode')",
"depends=('ripgrep')",
"",
`source_aarch64=("\${pkgname}_\${pkgver}_aarch64.tar.gz::https://github.com/Kilo-Org/kilo/releases/download/v\${pkgver}\${_subver}/opencode-linux-arm64.tar.gz")`,
`sha256sums_aarch64=('${arm64Sha}')`,
`source_x86_64=("\${pkgname}_\${pkgver}_x86_64.tar.gz::https://github.com/Kilo-Org/kilo/releases/download/v\${pkgver}\${_subver}/opencode-linux-x64.tar.gz")`,
`sha256sums_x86_64=('${x64Sha}')`,
"",
"package() {",
' install -Dm755 ./opencode "${pkgdir}/usr/bin/opencode"',
"}",
"",
].join("\n")
// Source-based PKGBUILD for opencode
const sourcePkgbuild = [
"# Maintainer: dax",
"# Maintainer: adam",
"",
"pkgname='opencode'",
`pkgver=${pkgver}`,
`_subver=${_subver}`,
"options=('!debug' '!strip')",
"pkgrel=1",
"pkgdesc='The AI coding agent built for the terminal.'",
"url='https://github.com/Kilo-Org/kilo'",
"arch=('aarch64' 'x86_64')",
"license=('MIT')",
"provides=('opencode')",
"conflicts=('opencode-bin')",
"depends=('ripgrep')",
"makedepends=('git' 'bun' 'go')",
"",
`source=("opencode-\${pkgver}.tar.gz::https://github.com/Kilo-Org/kilo/archive/v\${pkgver}\${_subver}.tar.gz")`,
`sha256sums=('SKIP')`,
"",
"build() {",
` cd "opencode-\${pkgver}"`,
` bun install`,
" cd ./packages/opencode",
` OPENCODE_CHANNEL=latest OPENCODE_VERSION=${pkgver} bun run ./script/build.ts --single`,
"}",
"",
"package() {",
` cd "opencode-\${pkgver}/packages/opencode"`,
' mkdir -p "${pkgdir}/usr/bin"',
' target_arch="x64"',
' case "$CARCH" in',
' x86_64) target_arch="x64" ;;',
' aarch64) target_arch="arm64" ;;',
' *) printf "unsupported architecture: %s\\n" "$CARCH" >&2 ; return 1 ;;',
" esac",
' libc=""',
" if command -v ldd >/dev/null 2>&1; then",
" if ldd --version 2>&1 | grep -qi musl; then",
' libc="-musl"',
" fi",
" fi",
' if [ -z "$libc" ] && ls /lib/ld-musl-* >/dev/null 2>&1; then',
' libc="-musl"',
" fi",
' base=""',
' if [ "$target_arch" = "x64" ]; then',
" if ! grep -qi avx2 /proc/cpuinfo 2>/dev/null; then",
' base="-baseline"',
" fi",
" fi",
' bin="dist/opencode-linux-${target_arch}${base}${libc}/bin/opencode"',
' if [ ! -f "$bin" ]; then',
' printf "unable to find binary for %s%s%s\\n" "$target_arch" "$base" "$libc" >&2',
" return 1",
" fi",
' install -Dm755 "$bin" "${pkgdir}/usr/bin/opencode"',
"}",
"",
].join("\n")
for (const [pkg, pkgbuild] of [
["opencode-bin", binaryPkgbuild],
["opencode", sourcePkgbuild],
]) {
for (let i = 0; i < 30; i++) {
try {
await $`rm -rf ./dist/aur-${pkg}`
await $`git clone ssh://aur@aur.archlinux.org/${pkg}.git ./dist/aur-${pkg}`
await $`cd ./dist/aur-${pkg} && git checkout master`
await Bun.file(`./dist/aur-${pkg}/PKGBUILD`).write(pkgbuild)
await $`cd ./dist/aur-${pkg} && makepkg --printsrcinfo > .SRCINFO`
await $`cd ./dist/aur-${pkg} && git add PKGBUILD .SRCINFO`
await $`cd ./dist/aur-${pkg} && git commit -m "Update to v${Script.version}"`
await $`cd ./dist/aur-${pkg} && git push`
break
} catch (e) {
continue
}
} }
} }
// kilocode_change end
const image = "ghcr.io/kilo-org/kilo" // kilocode_change // Homebrew formula
const platforms = "linux/amd64,linux/arm64" const homebrewFormula = [
const tags = [`${image}:${Script.version}`, `${image}:latest`] "# typed: false",
const tagFlags = tags.flatMap((t) => ["-t", t]) "# frozen_string_literal: true",
await $`docker buildx build --platform ${platforms} ${tagFlags} --push .` "",
"# This file was generated by GoReleaser. DO NOT EDIT.",
"class Opencode < Formula",
` desc "The AI coding agent built for the terminal."`,
` homepage "https://github.com/Kilo-Org/kilo"`,
` version "${Script.version.split("-")[0]}"`,
"",
` depends_on "ripgrep"`,
"",
" on_macos do",
" if Hardware::CPU.intel?",
` url "https://github.com/Kilo-Org/kilo/releases/download/v${Script.version}/opencode-darwin-x64.zip"`,
` sha256 "${macX64Sha}"`,
"",
" def install",
' bin.install "opencode"',
" end",
" end",
" if Hardware::CPU.arm?",
` url "https://github.com/Kilo-Org/kilo/releases/download/v${Script.version}/opencode-darwin-arm64.zip"`,
` sha256 "${macArm64Sha}"`,
"",
" def install",
' bin.install "opencode"',
" end",
" end",
" end",
"",
" on_linux do",
" if Hardware::CPU.intel? and Hardware::CPU.is_64_bit?",
` url "https://github.com/Kilo-Org/kilo/releases/download/v${Script.version}/opencode-linux-x64.tar.gz"`,
` sha256 "${x64Sha}"`,
" def install",
' bin.install "opencode"',
" end",
" end",
" if Hardware::CPU.arm? and Hardware::CPU.is_64_bit?",
` url "https://github.com/Kilo-Org/kilo/releases/download/v${Script.version}/opencode-linux-arm64.tar.gz"`,
` sha256 "${arm64Sha}"`,
" def install",
' bin.install "opencode"',
" end",
" end",
" end",
"end",
"",
"",
].join("\n")
await $`rm -rf ./dist/homebrew-tap`
await $`git clone https://${process.env["GITHUB_TOKEN"]}@github.com/sst/homebrew-tap.git ./dist/homebrew-tap`
await Bun.file("./dist/homebrew-tap/opencode.rb").write(homebrewFormula)
await $`cd ./dist/homebrew-tap && git add opencode.rb`
await $`cd ./dist/homebrew-tap && git commit -m "Update to v${Script.version}"`
await $`cd ./dist/homebrew-tap && git push`
} }
+186 -56
View File
@@ -26,6 +26,7 @@ import {
type ToolCallContent, type ToolCallContent,
type ToolKind, type ToolKind,
} from "@agentclientprotocol/sdk" } from "@agentclientprotocol/sdk"
import { Log } from "../util/log" import { Log } from "../util/log"
import { ACPSessionManager } from "./session" import { ACPSessionManager } from "./session"
import type { ACPConfig } from "./types" import type { ACPConfig } from "./types"
@@ -41,6 +42,11 @@ import { fetchDefaultModel } from "@kilocode/kilo-gateway" // kilocode_change
import type { Event, OpencodeClient, SessionMessageResponse } from "@kilocode/sdk/v2" import type { Event, OpencodeClient, SessionMessageResponse } from "@kilocode/sdk/v2"
import { applyPatch } from "diff" import { applyPatch } from "diff"
type ModeOption = { id: string; name: string; description?: string }
type ModelOption = { modelId: string; name: string }
const DEFAULT_VARIANT_VALUE = "default"
export namespace ACP { export namespace ACP {
const log = Log.create({ service: "acp-agent" }) const log = Log.create({ service: "acp-agent" })
@@ -477,7 +483,7 @@ export namespace ACP {
sessionId, sessionId,
models: load.models, models: load.models,
modes: load.modes, modes: load.modes,
_meta: {}, _meta: load._meta,
} }
} catch (e) { } catch (e) {
const error = MessageV2.fromError(e, { const error = MessageV2.fromError(e, {
@@ -530,7 +536,7 @@ export namespace ACP {
providerID: lastUser.model.providerID, providerID: lastUser.model.providerID,
modelID: lastUser.model.modelID, modelID: lastUser.model.modelID,
}) })
if (result.modes.availableModes.some((m) => m.id === lastUser.agent)) { if (result.modes?.availableModes.some((m) => m.id === lastUser.agent)) {
result.modes.currentModeId = lastUser.agent result.modes.currentModeId = lastUser.agent
this.sessionManager.setMode(sessionId, lastUser.agent) this.sessionManager.setMode(sessionId, lastUser.agent)
} }
@@ -957,27 +963,7 @@ export namespace ACP {
} }
} }
private async loadSessionMode(params: LoadSessionRequest) { private async loadAvailableModes(directory: string): Promise<ModeOption[]> {
const directory = params.cwd
const model = await defaultModel(this.config, directory)
const sessionId = params.sessionId
const providers = await this.sdk.config.providers({ directory }).then((x) => x.data!.providers)
const entries = providers.sort((a, b) => {
const nameA = a.name.toLowerCase()
const nameB = b.name.toLowerCase()
if (nameA < nameB) return -1
if (nameA > nameB) return 1
return 0
})
const availableModels = entries.flatMap((provider) => {
const models = Provider.sort(Object.values(provider.models))
return models.map((model) => ({
modelId: `${provider.id}/${model.id}`,
name: `${provider.name}/${model.name}`,
}))
})
const agents = await this.config.sdk.app const agents = await this.config.sdk.app
.agents( .agents(
{ {
@@ -987,6 +973,56 @@ export namespace ACP {
) )
.then((resp) => resp.data!) .then((resp) => resp.data!)
return agents
.filter((agent) => agent.mode !== "subagent" && !agent.hidden)
.map((agent) => ({
id: agent.name,
name: agent.name,
description: agent.description,
}))
}
private async resolveModeState(
directory: string,
sessionId: string,
): Promise<{ availableModes: ModeOption[]; currentModeId?: string }> {
const availableModes = await this.loadAvailableModes(directory)
const currentModeId =
this.sessionManager.get(sessionId).modeId ||
(await (async () => {
if (!availableModes.length) return undefined
const defaultAgentName = await AgentModule.defaultAgent()
const resolvedModeId =
availableModes.find((mode) => mode.name === defaultAgentName)?.id ?? availableModes[0].id
this.sessionManager.setMode(sessionId, resolvedModeId)
return resolvedModeId
})())
return { availableModes, currentModeId }
}
private async loadSessionMode(params: LoadSessionRequest) {
const directory = params.cwd
const model = await defaultModel(this.config, directory)
const sessionId = params.sessionId
const providers = await this.sdk.config.providers({ directory }).then((x) => x.data!.providers)
const entries = sortProvidersByName(providers)
const availableVariants = modelVariantsFromProviders(entries, model)
const currentVariant = this.sessionManager.getVariant(sessionId)
if (currentVariant && !availableVariants.includes(currentVariant)) {
this.sessionManager.setVariant(sessionId, undefined)
}
const availableModels = buildAvailableModels(entries, { includeVariants: true })
const modeState = await this.resolveModeState(directory, sessionId)
const currentModeId = modeState.currentModeId
const modes = currentModeId
? {
availableModes: modeState.availableModes,
currentModeId,
}
: undefined
const commands = await this.config.sdk.command const commands = await this.config.sdk.command
.list( .list(
{ {
@@ -1007,20 +1043,6 @@ export namespace ACP {
description: "compact the session", description: "compact the session",
}) })
const availableModes = agents
.filter((agent) => agent.mode !== "subagent" && !agent.hidden)
.map((agent) => ({
id: agent.name,
name: agent.name,
description: agent.description,
}))
const defaultAgentName = await AgentModule.defaultAgent()
const currentModeId = availableModes.find((m) => m.name === defaultAgentName)?.id ?? availableModes[0].id
// Persist the default mode so prompt() uses it immediately
this.sessionManager.setMode(sessionId, currentModeId)
const mcpServers: Record<string, Config.Mcp> = {} const mcpServers: Record<string, Config.Mcp> = {}
for (const server of params.mcpServers) { for (const server of params.mcpServers) {
if ("type" in server) { if ("type" in server) {
@@ -1074,40 +1096,46 @@ export namespace ACP {
return { return {
sessionId, sessionId,
models: { models: {
currentModelId: `${model.providerID}/${model.modelID}`, currentModelId: formatModelIdWithVariant(model, currentVariant, availableVariants, true),
availableModels, availableModels,
}, },
modes: { modes,
availableModes, _meta: buildVariantMeta({
currentModeId, model,
}, variant: this.sessionManager.getVariant(sessionId),
_meta: {}, availableVariants,
}),
} }
} }
async unstable_setSessionModel(params: SetSessionModelRequest) { async unstable_setSessionModel(params: SetSessionModelRequest) {
const session = this.sessionManager.get(params.sessionId) const session = this.sessionManager.get(params.sessionId)
const providers = await this.sdk.config
.providers({ directory: session.cwd }, { throwOnError: true })
.then((x) => x.data!.providers)
const model = Provider.parseModel(params.modelId) const selection = parseModelSelection(params.modelId, providers)
this.sessionManager.setModel(session.id, selection.model)
this.sessionManager.setVariant(session.id, selection.variant)
this.sessionManager.setModel(session.id, { const entries = sortProvidersByName(providers)
providerID: model.providerID, const availableVariants = modelVariantsFromProviders(entries, selection.model)
modelID: model.modelID,
})
return { return {
_meta: {}, _meta: buildVariantMeta({
model: selection.model,
variant: selection.variant,
availableVariants,
}),
} }
} }
async setSessionMode(params: SetSessionModeRequest): Promise<SetSessionModeResponse | void> { async setSessionMode(params: SetSessionModeRequest): Promise<SetSessionModeResponse | void> {
this.sessionManager.get(params.sessionId) const session = this.sessionManager.get(params.sessionId)
await this.config.sdk.app const availableModes = await this.loadAvailableModes(session.cwd)
.agents({}, { throwOnError: true }) if (!availableModes.some((mode) => mode.id === params.modeId)) {
.then((x) => x.data) throw new Error(`Agent not found: ${params.modeId}`)
.then((agent) => { }
if (!agent) throw new Error(`Agent not found: ${params.modeId}`)
})
this.sessionManager.setMode(params.sessionId, params.modeId) this.sessionManager.setMode(params.sessionId, params.modeId)
} }
@@ -1224,6 +1252,7 @@ export namespace ACP {
providerID: model.providerID, providerID: model.providerID,
modelID: model.modelID, modelID: model.modelID,
}, },
variant: this.sessionManager.getVariant(sessionID),
parts, parts,
agent, agent,
directory, directory,
@@ -1438,4 +1467,105 @@ export namespace ACP {
} }
return result return result
} }
function sortProvidersByName<T extends { name: string }>(providers: T[]): T[] {
return [...providers].sort((a, b) => {
const nameA = a.name.toLowerCase()
const nameB = b.name.toLowerCase()
if (nameA < nameB) return -1
if (nameA > nameB) return 1
return 0
})
}
function modelVariantsFromProviders(
providers: Array<{ id: string; models: Record<string, { variants?: Record<string, any> }> }>,
model: { providerID: string; modelID: string },
): string[] {
const provider = providers.find((entry) => entry.id === model.providerID)
if (!provider) return []
const modelInfo = provider.models[model.modelID]
if (!modelInfo?.variants) return []
return Object.keys(modelInfo.variants)
}
function buildAvailableModels(
providers: Array<{ id: string; name: string; models: Record<string, any> }>,
options: { includeVariants?: boolean } = {},
): ModelOption[] {
const includeVariants = options.includeVariants ?? false
return providers.flatMap((provider) => {
const models = Provider.sort(Object.values(provider.models) as any)
return models.flatMap((model) => {
const base: ModelOption = {
modelId: `${provider.id}/${model.id}`,
name: `${provider.name}/${model.name}`,
}
if (!includeVariants || !model.variants) return [base]
const variants = Object.keys(model.variants).filter((variant) => variant !== DEFAULT_VARIANT_VALUE)
const variantOptions = variants.map((variant) => ({
modelId: `${provider.id}/${model.id}/${variant}`,
name: `${provider.name}/${model.name} (${variant})`,
}))
return [base, ...variantOptions]
})
})
}
function formatModelIdWithVariant(
model: { providerID: string; modelID: string },
variant: string | undefined,
availableVariants: string[],
includeVariant: boolean,
) {
const base = `${model.providerID}/${model.modelID}`
if (!includeVariant || !variant || !availableVariants.includes(variant)) return base
return `${base}/${variant}`
}
function buildVariantMeta(input: {
model: { providerID: string; modelID: string }
variant?: string
availableVariants: string[]
}) {
return {
opencode: {
modelId: `${input.model.providerID}/${input.model.modelID}`,
variant: input.variant ?? null,
availableVariants: input.availableVariants,
},
}
}
function parseModelSelection(
modelId: string,
providers: Array<{ id: string; models: Record<string, { variants?: Record<string, any> }> }>,
): { model: { providerID: string; modelID: string }; variant?: string } {
const parsed = Provider.parseModel(modelId)
const provider = providers.find((p) => p.id === parsed.providerID)
if (!provider) {
return { model: parsed, variant: undefined }
}
// Check if modelID exists directly
if (provider.models[parsed.modelID]) {
return { model: parsed, variant: undefined }
}
// Try to extract variant from end of modelID (e.g., "claude-sonnet-4/high" -> model: "claude-sonnet-4", variant: "high")
const segments = parsed.modelID.split("/")
if (segments.length > 1) {
const candidateVariant = segments[segments.length - 1]
const baseModelId = segments.slice(0, -1).join("/")
const baseModelInfo = provider.models[baseModelId]
if (baseModelInfo?.variants && candidateVariant in baseModelInfo.variants) {
return {
model: { providerID: parsed.providerID, modelID: baseModelId },
variant: candidateVariant,
}
}
}
return { model: parsed, variant: undefined }
}
} }
+13 -1
View File
@@ -1,7 +1,7 @@
import { RequestError, type McpServer } from "@agentclientprotocol/sdk" import { RequestError, type McpServer } from "@agentclientprotocol/sdk"
import type { ACPSessionState } from "./types" import type { ACPSessionState } from "./types"
import { Log } from "@/util/log" import { Log } from "@/util/log"
import type { OpencodeClient } from "@kilocode/sdk/v2" // kilocode_change import type { OpencodeClient } from "@kilocode/sdk/v2"
const log = Log.create({ service: "acp-session-manager" }) const log = Log.create({ service: "acp-session-manager" })
@@ -96,6 +96,18 @@ export class ACPSessionManager {
return session return session
} }
getVariant(sessionId: string) {
const session = this.get(sessionId)
return session.variant
}
setVariant(sessionId: string, variant?: string) {
const session = this.get(sessionId)
session.variant = variant
this.sessions.set(sessionId, session)
return session
}
setMode(sessionId: string, modeId: string) { setMode(sessionId: string, modeId: string) {
const session = this.get(sessionId) const session = this.get(sessionId)
session.modeId = modeId session.modeId = modeId
+2 -1
View File
@@ -1,5 +1,5 @@
import type { McpServer } from "@agentclientprotocol/sdk" import type { McpServer } from "@agentclientprotocol/sdk"
import type { OpencodeClient } from "@kilocode/sdk/v2" // kilocode_change import type { OpencodeClient } from "@kilocode/sdk/v2"
export interface ACPSessionState { export interface ACPSessionState {
id: string id: string
@@ -10,6 +10,7 @@ export interface ACPSessionState {
providerID: string providerID: string
modelID: string modelID: string
} }
variant?: string
modeId?: string modeId?: string
} }

Some files were not shown because too many files have changed in this diff Show More